【发布时间】:2019-11-18 23:30:58
【问题描述】:
我曾尝试在ARKit 场景中的产品深度区域设置黑色阴影,但没有成功。我试过这段代码:
node.geometry?.materials.first?.ambientOcclusion.contents = 0.5
我已附上所需的结果图像和当前结果图像。
当前结果
预期结果
【问题讨论】:
标签: swift scenekit augmented-reality arkit realitykit
我曾尝试在ARKit 场景中的产品深度区域设置黑色阴影,但没有成功。我试过这段代码:
node.geometry?.materials.first?.ambientOcclusion.contents = 0.5
我已附上所需的结果图像和当前结果图像。
当前结果
预期结果
【问题讨论】:
标签: swift scenekit augmented-reality arkit realitykit
对 3D 模型使用 self-shadowing 和 Ambient Occlusion 的最可靠和最简单的方法是为此创建一个假的 UV-mapped texture(而不是实时渲染折叠中的自阴影)。因此,在 3D 模型上使用假 AO 纹理对 CPU/GPU 的负担是最小的,而且您的电池也非常感谢您。
要创建 UV 映射的漫反射和环境光遮蔽纹理,您需要一个 UV Texture Editor,您可以在任何流行的 3D 创作应用程序(如 Maya 或 3dsMax)中找到它。在渲染 UV 映射的 AO 纹理(作为具有预乘 alpha RGBxA 的四通道 PNG 文件)后,您可以使用以下代码简单地分配它:
node.geometry?.materials.first?.ambientOcclusion.contents = UIImage(named: "AO.png")
查看存储在 2 个不同 png 文件中的这 2 个 uv 映射纹理:
这是一个 link 的 5 分钟视频,介绍如何在 Maya 中对纹理进行 uv 映射。
或者,作为更简单的解决方案,您可以使用半透明黑色画笔在类似 Photoshop 的应用中绘制
UV-mapped Diffuse texture。
然后通过diffuse槽分配阴影绘制纹理:
node.geometry?.materials.first?.diffuse.contents = UIImage(named: "diffuseWithShadows.png")
或者你可以使用Fake Shadows technique。
【讨论】: