场景工具包视图呈现为Phong而不是物理材质

4
我场景中有多个物体,它们的材质“光照模型”都设置为基于物理的。但是当我运行应用程序时,所看到的视图却与场景编辑器完全不同,更像是Phong材质。
是否需要更改根节点才能一开始就以基于物理的方式渲染呢?由于我刚接触objective-c,所以不确定是否需要将根节点的光照模型设置为基于物理,并且如果需要,如何访问根节点(而且,根节点本身不可渲染,它是否可以具有光照模型属性)。
我的模型是在ZBrush中创建的,然后在UIViewController中进行了拓扑重构和UV映射,并在Blender中转换为.dae文件。是否可能其中一个程序将材质着色器设置为Phong?SceneKit编辑器会覆盖这一点并将其设置为基于物理吗?
据我所知,所有版本的Xcode、iOS和SceneKit都足够新,支持PBR。
感谢任何帮助 :)

你正在使用哪个设备? - jlsiewert
1
请确保您正在使用Metal渲染器(OpenGL渲染器不支持基于物理的着色)。在旧设备、模拟器或在创建SCNView时强制使用OpenGL时,Metal将被禁用(请参见Interface Builder中的检查器或代码中的选项字典)。 - mnuages
谢谢!我以为模拟器是在 Xcode 11 左右使用 Metal 构建的。 - Canucklesandwich
1个回答

1
在SceneKit中,为模型应用基于物理的着色器(或更改其纹理或颜色)非常容易。如果您的模型由多个部分组成,请使用以下方法在层次结构中找到所需的部分:

enter image description here

enter image description here

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 模型

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接