Представление 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
модель