Представление SceneKit отображается как фонг вместо физических материалов

У меня есть несколько объектов в моей сцене, у каждого из которых была "модель освещения" их материала, основанная на физической основе.

Когда я запускаю приложение, вид, который я получаю, больше не похож на редактор сцен - он больше похож на материалы Phong.

Есть ли корневой узел, который мне нужно изменить, чтобы он физически отображался с самого начала? Я новичок в target-c, поэтому я не уверен, нужно ли мне устанавливать физическую модель освещения корневого узла, и если да, то как мне получить доступ к корневому узлу (и, более того, может ли корневой узел даже есть атрибут модели освещения, так как он сам не может быть отображен).

Мои модели были созданы в ZBrush, повторно топологизированы и отображены в УФ в UIViewController, и были преобразованы в файлы.dae в Blender. Возможно ли, что одна из этих программ установит шейдер материала как фонг? Разве редактор SceneKit не перезапишет это и не установит физически?

Насколько я могу судить, все версии Xcode, iOS и SceneKit достаточно недавние, чтобы поддерживать PBR.

Спасибо за любую помощь:)

1 ответ

Довольно легко применить физически корректный шейдер к вашей модели в SceneKit (или изменить ее текстуру или цвет). Если ваша модель состоит из нескольких частей, найдите нужную часть на иерархическом уровне, используя следующий подход:

      SCNScene *scene = [SCNScene sceneNamed: @"art.scnassets/biplane.usdz"];

SCNNode *modelNode = [scene.rootNode childNodeWithName: @"biplane"      
                                           recursively: YES];

SCNNode *body = modelNode.childNodes[0].childNodes[0]
                         .childNodes[0].childNodes[0];

body.geometry.materials[0].lightingModelName = SCNLightingModelPhysicallyBased;
body.geometry.materials[0].diffuse.contents = [UIColor redColor];
body.geometry.materials[0].metalness.contents = @1.0;
body.geometry.materials[0].roughness.contents = @0.0; 

Результат biplane.usdzмодель

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