您在这里询问的主要有两个部分:将 SceneKit 数据放入 ModelIO,以及使用 Metal 渲染 ModelIO 数据。
要将 SceneKit 场景导入 ModelIO,首先使用 SceneKit API (SCNScene或SCNSceneSource加载.scn文件,然后使用 ModelIO API 获取您想要的对象作为网格。您可以使用MDLAsset从整个场景创建一个assetWithSCNScene:bufferAllocator:,然后在 ModelIO 中遍历资产的对象层次结构找到您想要的网格,或遍历 SceneKit 中的节点层次结构以找到您想要的SCNNodeorSCNGeometry然后使用objectWithSCNNode:bufferAllocator:or将网格传送到 ModelIO meshWithSCNGeometry:bufferAllocator:。
至于在 Metal 应用中使用 ModelIO 网格,Apple 有一个示例代码项目,展示了如何使用 ModelIO 加载 OBJ 网格,使用 MetalKit 将网格数据获取到 Metal GPU 缓冲区中,以及连接从 ModelIO 获得的材质信息到着色器变量以在您自己的渲染器中使用。
您应该能够将这两者放在一起:示例代码加载 OBJ 以获取MDLAssetor MDLMesh,而使用 (1) 中的方法从 SceneKit 文件中获取资产或网格。
SceneKit 材质模型当然比示例代码中使用的简单 Phong 着色器复杂得多。但是示例代码确实展示了如何遍历 aMDLMaterial的属性并在 Metal 着色器中设置相应的参数——如果您创建一个更复杂的着色器,只需按照相同的步骤将材质属性映射到您的着色器的任何输入。