Как загрузить / проанализировать файл SceneKit .scn в моем приложении Metal?

Я хочу создать 3D-сцену с SceneKit модельер, а затем прочитать его в мой Metal приложение. Я вижу, что есть SceneKit а также ModelIO API, чтобы сделать это, но мне неясно, как кусочки сочетаются друг с другом.

Итак, мне нужен путь от .scn файл -> MDL Mesh -> геометрия + текстура. Мне неясно, как бы я синхронизировал Metal шейдеры с материалами, созданными в SceneKit модельер.

1 ответ

Решение

Здесь есть две основные части, о которых вы спрашиваете: получение данных SceneKit в ModelIO и отображение данных ModelIO с помощью Metal.

  1. Чтобы добавить сцены SceneKit в ModelIO, сначала используйте API SceneKit (SCNScene или же SCNSceneSource загрузить .scn файл, затем используйте ModelIO API, чтобы получить объекты, которые вы хотите в виде сетки. Вы можете создать MDLAsset со всей сцены, используя assetWithSCNScene:bufferAllocator: а затем пройдитесь по иерархии объектов актива в ModelIO, чтобы найти нужную сетку, или пройдитесь по иерархии узлов в SceneKit, чтобы найти SCNNode или же SCNGeometry вы хотите, а затем получить сетку для ModelIO с помощью objectWithSCNNode:bufferAllocator: или же meshWithSCNGeometry:bufferAllocator:,

  2. Что касается использования сеток ModelIO в приложении Metal, у Apple есть пример проекта кода, который показывает, как использовать ModelIO для загрузки сетки OBJ, использовать MetalKit для передачи данных сетки в буферы Metal GPU и подключать информацию о материале, которую вы получаете из ModelIO. для шейдера переменных для использования в вашем собственном рендерере.

Вы должны быть в состоянии соединить их вместе: где пример кода загружает OBJ, чтобы получить MDLAsset или же MDLMesh используйте методы из (1), чтобы получить актив или сетку из файла SceneKit.

Модель материала SceneKit, конечно, намного сложнее, чем простой шейдер Phong, используемый в примере кода. Но пример кода показывает, как перебирать MDLMaterial Свойства и установите соответствующие аргументы в шейдере Metal - если вы создаете более сложный шейдер, просто выполните те же шаги, чтобы отобразить свойства материала в соответствии с входными данными вашего шейдера.

Другие вопросы по тегам