がmorphersためWWDC 2013 What's new in SceneKitターゲットジオメトリによる.DAEファイルに含まれていることができます。すべてのモーフィング情報やアニメーションは、DAEファイルから読み込むことができるか、プログラムですべてのものを作成することができますColladaの.daeファイルのモーフコントローラからSceneKitにSCNMorpherターゲットをロードするにはどうすればよいですか?
」
私は、モーフィングコントローラを含むcolladaの.daeファイルを持っています。このファイルは、BlenderのColladaエクスポータによって作成され、Include Shape Keysが選択されています。メインジオメトリの後にリストされているシェイプキーは<library_geometries>
です。次のようになります。Rest
がシェイプキーの名前です
<geometry id="Octopus-mesh_morph_Rest" name="Rest">
<mesh>
<source id="Octopus-mesh_morph_Rest-positions">
。シェイプキー/モーフターゲットのジオメトリがこのヘッダーの後に続きます。すべてのジオメトリを定義した後
、<library_controllers>
があります:
<library_controllers>
<controller id="Octopus-morph" name="Octopus-morph">
<morph source="#Octopus-mesh" method="NORMALIZED">
<source id="Octopus-targets">
<IDREF_array id="Octopus-targets-array" count="1">Octopus-mesh_morph_Rest</IDREF_array>
<technique_common>
<accessor source="#Octopus-targets-array" count="1" stride="1">
<param name="IDREF" type="IDREF"/>
</accessor>
</technique_common>
</source>
<source id="Octopus-weights">
<float_array id="Octopus-weights-array" count="1">0</float_array>
<technique_common>
<accessor source="#Octopus-weights-array" count="1" stride="1">
<param name="MORPH_WEIGHT" type="float"/>
</accessor>
</technique_common>
</source>
<targets>
<input semantic="MORPH_TARGET" source="#Octopus-targets"/>
<input semantic="MORPH_WEIGHT" source="#Octopus-weights"/>
</targets>
</morph>
</controller>
</library_controllers>
私はSceneKit内からこれらのモーフコントローラにアクセスするにはどうすればよいですか? Xcodeシーンエディタでは、モーフィングコントローラが認識されていることを示す表示はありません。たとえば、押すと再生は行われず、アニメーションフォルダは空になります。また、ベースジオメトリ以外の追加のジオメトリはありません。
ノードをロードするとき、ノードにはmorpher
プロパティが関連付けられておらず、アニメーションキーもありません。私は "Rest"という名前のエントリをツリーで検索しようとしましたが、何もありません。
let collada = SCNScene(named: "octopus.dae", inDirectory: "art.scnassets", options: nil)
let octopus = collada?.rootNode.childNodeWithName("Octopus", recursively: true)
octopus?.position = SCNVector3(0,-2,0)
print(octopus?.morpher?.animationKeys) //nil
print(octopus?.animationKeys) //Optional([])
Collada .daeファイルのモーフコントローラからSCNMorpherターゲットをロードできた人はいますか?それはBlenderの.dae輸出業者の問題かもしれませんか?客観的なCの答えだけでなく、迅速な歓迎。ありがとう。
EDIT
私もそれが違いを作るかどうかを確認するために、.DAEをロードするためにNSBundle
を使用して、両方の内側とart.scnassets
フォルダの外.DAEを配置しようとしたが、まだサイコロない:
let collada = NSBundle.mainBundle().URLForResource("octopus", withExtension: "dae")!
let sceneSource = SCNSceneSource(URL: collada, options: [
SCNSceneSourceAnimationImportPolicyKey : SCNSceneSourceAnimationImportPolicyDoNotPlay
])
let octopusDae = sceneSource?.entryWithIdentifier("Octopus", withClass: SCNNode.self)
//let deform = sceneSource?.entryWithIdentifier("Rest", withClass: SCNGeometry.self)
print(sceneSource?.entriesPassingTest(){(entry, id, stop) in return id.containsString("Rest") })
print(octopusDae!.morpher)
print(octopusDae!.animationKeys)
EDIT 2
私は、各形状キーを別々の.objファイルとして保存することによって、.objファイルでこれを処理することができました。しかし、私は本当にこれを、Blenderの.daeファイルで動作させたいのです。それは、繰り返しの開発を行い、たくさんのシェイプ・キーを持つモデルを使って作業することです(さらに、SceneKitの.objファイルを扱う際にいくつかの変わった欠点があります例えば、すべてのテクスチャ座標が垂直方向に反転しているように見えます)。私が必要とするすべてのジオメトリは.daeファイルにあります。私はそれを見るためにSceneKitを得ることができません。
ヘイジョン、素晴らしい作品。それは本当に私の問題を解決しました。モデルのファイルサイズが劇的に増えた(5MBから100MB)ことを認識しました。私のモデルには、表情のためのシェイプ・キーがたくさんあります。インスタンスコントローラの追加は実際にファイルサイズに大きな影響を与えますか? –
Jon、アーマチュアとシェイプキーのブレンドは、ツールを使用するときに実際には機能しないか正しく翻訳されませんか?私はシェイプキーを使って修正したdaeを手に入れようとしなかった。 – user2153553