SceneKit视图渲染为Phong而不是基于物理的材质

人气:341 发布:2022-10-16 标签: ios objective-c render scenekit pbr

问题描述

我的场景中有几个对象,所有这些对象都将其材质的"照明模型"设置为基于物理。

当我运行这个应用程序时,我得到的视图看起来一点也不像场景编辑器-相反,它看起来更像Phong材质。

是否需要更改根节点,以便从一开始就以物理方式进行渲染?我不熟悉Objective-c,所以我不确定是否需要将根节点的光照模型设置为基于物理的,如果需要,我将如何访问根节点(而且,根节点是否甚至可以具有光照模型属性,因为它本身是不可呈现的)。

我的模型是在ZBrush、重新拓扑和UIView控制器中映射的UV中创建的,并在Blender中转换为.dae文件。有没有可能是这些程序之一将材质着色器设置为Phong?SceneKit编辑器不会覆盖它并将其设置为基于物理的吗?

据我所知,Xcode、iOS和SceneKit的所有版本都足够新,可以支持PBR。

感谢您的帮助:)

推荐答案

将基于物理的着色器应用于场景工具包中的模型非常容易(或更改其纹理或颜色)。如果您的模型由几个部分组成,请使用以下方法在层次结构级别中找到您需要的部分:

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

755