2016-11-03 14 views
0

SceneKitモデラーを使用して3Dシーンを作成し、それをMetalアプリに読み込みます。私はこれを行うためにSceneKitModelIO APIがあることを知っていますが、私はどのように一緒にフィットするか不明です。SceneKitの.scnファイルをMetalアプリケーションにロード/解析するにはどうすればいいですか?

私が必要とするのは、.scnファイル - >MDL Mesh - > geometry + textureのパスです。 MetalシェーダーとSceneKitモデラーで作成したマテリアルをどのように同期させるかは不明です。

答えて

3

SceneKitデータをModelIOに、そしてModelIOデータをMetalでレンダリングするという2つの主要な部分があります。メッシュとして希望するオブジェクトを取得するためにModelIO APIを使用し、その後、.scnファイルをロードするためにModelIO、第1の使用SceneKitのAPI(SCNSceneまたはSCNSceneSourceにSceneKitシーンを取得するには

  1. 。あなたは、シーン全体からMDLAssetを作成することができますあなたが欲しいSCNNodeまたはSCNGeometryを検索し、objectWithSCNNode:bufferAllocator:またはmeshWithSCNGeometry:bufferAllocator:を使用してModelIOにメッシュを得るためにあなたがしたいメッシュを見つけるために、ModelIOにおける資産のオブジェクト階層を歩く、またはSceneKitにおけるノード階層を歩くそしてassetWithSCNScene:bufferAllocator:を使用して。

  2. ModelIOを使用してOBJメッシュをロードする方法、MetalKitを使用してメッシュデータをMetal GPUバッファに取得する方法、ModelIOから取得したマテリアル情報をシェーダにフックアップする方法を示すsample code projectがメタルアプリでModelIOメッシュを使用しています独自のレンダラーで使用する変数

あなたが一緒にこれらの2を置くことができるはずです:サンプルコードはMDLAssetまたはMDLMeshを取得するためにOBJをロードする場合は、資産を取得したり、SceneKitの外に噛み合うように(1)でメソッドを使用します代わりにファイル。

もちろん、SceneKitマテリアルモデルは、サンプルコードで使用されている単純なPhongシェーダよりはるかに複雑です。しかし、サンプルコードでは、MDLMaterialのプロパティを繰り返し処理し、対応する引数をMetalシェーダに設定する方法を示しています。複雑なシェーダを作成する場合、同じ手順に従って、シェーダの入力が何であるかにマテリアルプロパティをマッピングしてください。

+0

ああ!一言で言えば、私は、「私の箱」、「クールマテリアル」、そしてトラバーサル中にジオメトリ/マテリアルを取得するために、SceneKitまたはModelIOトラバーサルメソッドを使用して、モデラーにジオメトリとマテリアル名を付けます。キーは物事にラベルを付けることです。私はそれを得ましたか? – dugla

+0

ラベルが付いているかどうかにかかわらず、素材を繰り返し処理できますが、ラベルは確実に追跡するのに役立ちます。 – rickster

+0

待って、何?ラベルなしでシーン内のアイテムを特定するにはどうすればいいですか? 2つのテクスチャ付き球は、4つのラベル(別個の材料説明を前提とする)を意味するものではないか? – dugla

関連する問題