如何将SceneKit .scn文件加载/解析到我的Metal应用程序中?

时间:2016-11-03 18:31:56

标签: scenekit metal modelio metalkit

我想使用SceneKit建模器创建一个3D场景,然后将其读入我的Metal应用。我看到有SceneKitModelIO API来执行此操作,但我不清楚这些部分是如何组合在一起的。

所以,我需要的是来自.scn文件的路径 - > MDL Mesh - >几何+纹理。我不清楚如何将Metal着色器与SceneKit建模器中创建的材质同步。

1 个答案:

答案 0 :(得分:4)

您在这里要问的有两个主要部分:将SceneKit数据导入ModelIO,并使用Metal渲染ModelIO数据。

  1. 要将SceneKit场景导入ModelIO,首先使用SceneKit API(SCNSceneSCNSceneSource加载.scn文件,然后使用ModelIO API获取所需的对象您可以使用assetWithSCNScene:bufferAllocator:从整个场景创建MDLAsset,然后遍历ModelIO中的资源对象层次结构以查找所需的网格,或者遍历SceneKit中的节点层次结构找到您想要的SCNNodeSCNGeometry,然后使用objectWithSCNNode:bufferAllocator:meshWithSCNGeometry:bufferAllocator:将网格连接到ModelIO。

  2. 至于在Metal应用程序中使用ModelIO网格,Apple有一个sample code project,它显示了如何使用ModelIO加载OBJ网格,使用MetalKit将网格数据导入Metal GPU缓冲区,以及钩子您从ModelIO获取的材质信息到着色变量,以便在您自己的渲染器中使用。

  3. 您应该能够将这两者放在一起:示例代码加载OBJ以获取MDLAssetMDLMesh,使用(1)中的方法获取资产或网格改为使用SceneKit文件。

    SceneKit材质模型当然比示例代码中使用的简单Phong着色器复杂得多。但示例代码确实显示了如何遍历MDLMaterial的属性并在Metal着色器中设置相应的参数 - 如果您创建更复杂的着色器,只需按照相同的步骤将材质属性映射到无论你的着色器输入是什么。