【问题标题】:How to turn shadowing on in folds of 3D model?如何在 3D 模型的折叠中打开阴影?
【发布时间】:2019-11-18 23:30:58
【问题描述】:

我曾尝试在ARKit 场景中的产品深度区域设置黑色阴影,但没有成功。我试过这段代码:

node.geometry?.materials.first?.ambientOcclusion.contents = 0.5

我已附上所需的结果图像和当前结果图像。

当前结果

预期结果

【问题讨论】:

标签: swift scenekit augmented-reality arkit realitykit


【解决方案1】:

第一种方法

对 3D 模型使用 self-shadowingAmbient 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

【讨论】:

  • 我们在展开 UV 时会进行额外的缩放。因此,从 maya 或 max 烘焙的遮挡贴图将不支持我们在 3d 模型上创建和应用纹理的过程。因此,如果您能提出任何其他生成环境光遮蔽贴图的替代方案,将会很有帮助。
猜你喜欢
  • 2016-10-27
  • 2021-09-09
  • 2019-09-02
  • 1970-01-01
  • 1970-01-01
  • 2012-06-13
  • 2014-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多