2

我正在尝试将usdz文件加载到其中一种材料具有玻璃透明度的 ARKkit 中。当我将模型放入QLPreviewController玻璃时,玻璃会正确渲染。问题是我想SCNScene用 ARKit 渲染玻璃,而不是QLPreview,当我将玻璃加载到 SCNScene 时,玻璃材料是黑色的。当我在 Xcode 中预览它时,它也是黑色的。

不确定QLPreview在做什么,或者我的场景中的照明是否有问题。我已经删除了所有自定义灯,只是autoenablesDefaultLighting设置为true. 然后我将每种材质的光照模型设置为PhysicallyBased. 但仍然只是黑色。

有人知道我需要做什么才能以相同的方式渲染QLPreview吗?我是否需要解压 usdz 以获得透明纹理并手动设置?

谢谢!

4

1 回答 1

2

在 SceneKit 中创建玻璃的最佳方法是使用 Phong 着色模型(不是 PBR)。目前 SceneKit 框架中没有 PBR glass,所以你需要使用一个假的。要制作 afake glass您需要创建SCNMaterial具有以下属性的 a:

let material = SCNMaterial()

material.lightingModel = .phong
material.diffuse.contents = UIColor(white: 0.2, alpha: 1)
material.diffuse.intensity = 0.9
material.specular.contents = UIColor(white: 1, alpha: 1)
material.specular.intensity = 1.0
material.reflective.contents = UIImage(named: "fileName.png")
material.reflective.intensity = 2.0

material.transparencyMode = .dualLayer
material.fresnelExponent = 2.2
material.isDoubleSided = true
material.blendMode = .alpha
material.shininess = 100
material.transparency.native = 0.7
material.cullMode = .back

.fresnelExponent属性根据其相对于观察者的角度确定表面中的反射强度。当从浅角度观察材料时,较高的菲涅尔指数会增加反射的可见性。它不是 IOR(菲涅耳折射率)。

由于光线追踪技术,PBR 玻璃或 PBR 水物体在渲染时非常昂贵。

在此处输入图像描述

如果您需要对象的部分透明度 - 只需使用transparentslot inMaterial Inspector为透明/不透明区域加载黑白蒙版。

于 2018-10-17T20:50:43.157 回答