SceneKitデータをModelIOに、そしてModelIOデータをMetalでレンダリングするという2つの主要な部分があります。メッシュとして希望するオブジェクトを取得するためにModelIO APIを使用し、その後、.scn
ファイルをロードするためにModelIO、第1の使用SceneKitのAPI(SCNScene
またはSCNSceneSource
にSceneKitシーンを取得するには
。あなたは、シーン全体からMDLAsset
を作成することができますあなたが欲しいSCNNode
またはSCNGeometry
を検索し、objectWithSCNNode:bufferAllocator:
またはmeshWithSCNGeometry:bufferAllocator:
を使用してModelIOにメッシュを得るためにあなたがしたいメッシュを見つけるために、ModelIOにおける資産のオブジェクト階層を歩く、またはSceneKitにおけるノード階層を歩くそしてassetWithSCNScene:bufferAllocator:
を使用して。
ModelIOを使用してOBJメッシュをロードする方法、MetalKitを使用してメッシュデータをMetal GPUバッファに取得する方法、ModelIOから取得したマテリアル情報をシェーダにフックアップする方法を示すsample code projectがメタルアプリでModelIOメッシュを使用しています独自のレンダラーで使用する変数
あなたが一緒にこれらの2を置くことができるはずです:サンプルコードはMDLAsset
またはMDLMesh
を取得するためにOBJをロードする場合は、資産を取得したり、SceneKitの外に噛み合うように(1)でメソッドを使用します代わりにファイル。
もちろん、SceneKitマテリアルモデルは、サンプルコードで使用されている単純なPhongシェーダよりはるかに複雑です。しかし、サンプルコードでは、MDLMaterial
のプロパティを繰り返し処理し、対応する引数をMetalシェーダに設定する方法を示しています。複雑なシェーダを作成する場合、同じ手順に従って、シェーダの入力が何であるかにマテリアルプロパティをマッピングしてください。
ああ!一言で言えば、私は、「私の箱」、「クールマテリアル」、そしてトラバーサル中にジオメトリ/マテリアルを取得するために、SceneKitまたはModelIOトラバーサルメソッドを使用して、モデラーにジオメトリとマテリアル名を付けます。キーは物事にラベルを付けることです。私はそれを得ましたか? – dugla
ラベルが付いているかどうかにかかわらず、素材を繰り返し処理できますが、ラベルは確実に追跡するのに役立ちます。 – rickster
待って、何?ラベルなしでシーン内のアイテムを特定するにはどうすればいいですか? 2つのテクスチャ付き球は、4つのラベル(別個の材料説明を前提とする)を意味するものではないか? – dugla