Как загрузить / проанализировать файл SceneKit .scn в моем приложении Metal?
Я хочу создать 3D-сцену с SceneKit
модельер, а затем прочитать его в мой Metal
приложение. Я вижу, что есть SceneKit
а также ModelIO
API, чтобы сделать это, но мне неясно, как кусочки сочетаются друг с другом.
Итак, мне нужен путь от .scn
файл -> MDL Mesh
-> геометрия + текстура. Мне неясно, как бы я синхронизировал Metal
шейдеры с материалами, созданными в SceneKit
модельер.
1 ответ
Здесь есть две основные части, о которых вы спрашиваете: получение данных SceneKit в ModelIO и отображение данных ModelIO с помощью Metal.
Чтобы добавить сцены SceneKit в ModelIO, сначала используйте API SceneKit (
SCNScene
или жеSCNSceneSource
загрузить.scn
файл, затем используйте ModelIO API, чтобы получить объекты, которые вы хотите в виде сетки. Вы можете создатьMDLAsset
со всей сцены, используяassetWithSCNScene:bufferAllocator:
а затем пройдитесь по иерархии объектов актива в ModelIO, чтобы найти нужную сетку, или пройдитесь по иерархии узлов в SceneKit, чтобы найтиSCNNode
или жеSCNGeometry
вы хотите, а затем получить сетку для ModelIO с помощьюobjectWithSCNNode:bufferAllocator:
или жеmeshWithSCNGeometry:bufferAllocator:
,Что касается использования сеток ModelIO в приложении Metal, у Apple есть пример проекта кода, который показывает, как использовать ModelIO для загрузки сетки OBJ, использовать MetalKit для передачи данных сетки в буферы Metal GPU и подключать информацию о материале, которую вы получаете из ModelIO. для шейдера переменных для использования в вашем собственном рендерере.
Вы должны быть в состоянии соединить их вместе: где пример кода загружает OBJ, чтобы получить MDLAsset
или же MDLMesh
используйте методы из (1), чтобы получить актив или сетку из файла SceneKit.
Модель материала SceneKit, конечно, намного сложнее, чем простой шейдер Phong, используемый в примере кода. Но пример кода показывает, как перебирать MDLMaterial
Свойства и установите соответствующие аргументы в шейдере Metal - если вы создаете более сложный шейдер, просто выполните те же шаги, чтобы отобразить свойства материала в соответствии с входными данными вашего шейдера.