2016-11-03 2 views
0

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

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

ответ

3

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

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

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

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

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

+0

Ах, ха! Итак - в двух словах - я даю геометрию и имена материалов в моделире: «мой ящик», «классный материал», а затем извлекают геометрию/материал во время обхода - с помощью методов обхода SceneKit или ModelIO. Ключ должен обозначать вещи. У меня есть это право? – dugla

+0

Вы можете перебирать материалы независимо от их маркировки, но метки, безусловно, могут помочь вам отслеживать. – rickster

+0

Подождите, что? Как определить элемент в сцене без метки. Две текстурированные сферы подразумевают четыре (4) метки (при условии отличных описаний материалов) нет? – dugla

Смежные вопросы