2017-06-03 11 views
0

私は現在、迅速にSCNGeometryまたはMDLMeshを使用してobjモデルをスムージングしようとしています。すばやく3のオブジェクト/モデルを滑らかにする方法はありますか?

SCNGeometryで細分化とスムージングを行うための "subdivisionLevel"プロパティがあることを示す公式文書が見つかりました。ただし、期待どおりに動作していません。レベルについては

= 1-2、何もレベルについて明らかに

を変更していない= 3-5は、まだ何も明らかに変化しませんが、このアプリは以下の

を遅れているがあり、私の実験とコードのスクリーンショットです私は滑らかにしようとすることができるものは何ですか?

subdivisionLevel = 0: http://imgur.com/7BM9wp6

subdivisionLevel = 5: http://imgur.com/mipaYMP

(あなたが見ることができるように、鋭いエッジ腰や腕がまだある)

コード:

//load obj 
let path = Bundle.main.path(forResource: "model_longshirt", ofType: "obj")! 
let fileUrl = URL(fileURLWithPath: path) 
let asset = MDLAsset(url: fileUrl) 
guard let object = asset.object(at: 0) as? MDLMesh else { 
    fatalError("ERROR_FAILED_TO_GET_MESH_FROM_ASSET") 
} 

//load material 
let scatteringFunction = MDLScatteringFunction() 
let material = MDLMaterial(name: "baseMaterial2", scatteringFunction: scatteringFunction) 
let texPath = Bundle.main.path(forResource: "model_LongSleeve_texture_3", ofType: "jpg")! 
let texUrl = URL(fileURLWithPath: texPath) 
let materialProperty = MDLMaterialProperty(name: "baseTexture2", semantic: MDLMaterialSemantic.baseColor, url: texUrl) 
material.setProperty(materialProperty) 

//attach to node 
let scnGeometry = SCNGeometry(mdlMesh: object) 
scnGeometry.subdivisionLevel = 5 
objNode = SCNNode(geometry: scnGeometry) 
objNode.geometry?.firstMaterial = scnMaterial 

助けやヒントがあれば感謝します。ありがとう。

+0

私も同じ問題に直面しています。解決策は見つかりましたか? –

+0

残念ながら、私は最終的により滑らかな別のモデルをロードしました。 – adayoegi

+0

私が感じたことは、この問題を引き起こしている頂点ベースではなく、シーンキットが通常の計算に直面していることです。 –

答えて

1

インポートされたメッシュにエッジを共有していない面がある場合、スクリーンショットのようにシャープな折り目が得られます。

A B  C A BC D 
+----+-----+ +----+----+ 
| |  | | | | 
+----+-----+ +----+----+ 
D E  F E FG H 

2つのクワッドが自分の内部エッジを有しているので、左のメッシュは、2つのクワッドがエッジを共有しているので、右のではないだろう滑らかであろう。

関連する問題