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

本教程将介绍SceneKit视图渲染为Phong而不是基于物理的材质的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

SceneKit视图渲染为Phong而不是基于物理的材质 教程 第1张

问题描述

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

当我运行这个应用程序时,我得到的视图看起来一点也不像场景编辑器-相反,它看起来更像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模型

好了关于SceneKit视图渲染为Phong而不是基于物理的材质的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。