本文是Unreal Engine (UE)的日历 | Advent Calendar 2023 – Qiita 系列 4的第23天文章。介绍一些面向初学者的小型材质小技巧。
※2023/12/26 – 为 Decal 部分追加补充信息
已经24号了吧?
因为没睡,所以还是23号……
本文的主要对象
- 正在接触 Unreal Engine 材质编辑器的人
- 正在寻找现有材质表现的追加要素的人
- 对 Stylized 表现感兴趣的人
概要
UE5 中引入的 Lumen 需要使用Mesh Distance Fields。在 UE4 时代默认是禁用的这个功能,现在也基本上会被启用并使用的情况变多了。因此这是一份尝试利用“Mesh Distance Fields”信息,在材质上能做些什么的备忘录。
做这种事情的时候最开心了呢~
什么是 Mesh Distance Field?
将 3D 网格周围的空间划分为小网格(盒子),并在每个网格内记录到网格表面的距离数值。这个信息会用于阴影生成、光扩散计算等。
关于 Mesh Distance Field 的基础信息,前人已经整理得很充分了。想进一步了解的话,请查看那些文章。
UE5 Mesh Distance Field まとめ本
Unreal Engine のメッシュ ディスタンス フィールド
Unreal Engine 5.3 ドキュメント
顺带一提,使用 Distance Field 的软体等活用方式从 UE4 时代就已经存在了。
Distance Field Soft Bodies – Development / Rendering
Epic Developer Community Forums
【UE4】DistanceToNearestSurfaceを使ってバランスボール作ってみた
トンコツ開発ブログ
Mesh Distance Field 的注意点
Mesh Distance Field 虽然看起来很方便,但有一个规格限制:Skeletal Mesh 不能生成 Mesh Distance Field。这次的方法仅对背景中的静态网格有效。

如果在后处理里使用,就必须用 StencilMask 等方式把 Skeletal Mesh 的区域剔除,否则可能会导致画面异常。期待有一天 Skeletal Mesh 也能生成 Mesh Distance Fields。
这次要介绍的节点

这次将聚焦于 “DistanceFieldApproxAO” 节点、“DistanceToNearestSurface” 节点、“DistanceFieldGradient” 节点这 3 个。
Distance Field Approx AO

这是一个能轻松使用基于 Distance Field 的 AO(Ambient Occlusion)的代表性节点。


后处理材质和表面材质都可以使用,但表现上会有一点差异,请注意。
这个节点没有文档吗?有人知道吗?是比较新的节点吗?信息太少了……。


我觉得这可以有很多用途。

总之,Distance Field Approx AO 本身用途还是挺多的,也很方便,不过这次就只做简单介绍。
Distance Field Gradient

据说它会在标准化后输出对象在距离场中移动的 X、Y、Z 方向。详细请看文档页面。
Unreal Engine の Utility マテリアル表現式 | Unreal Engine 5.3 ドキュメント
DistanceFieldGradient



这个节点同样可以用于后处理材质和表面材质。
这法线信息看起来有点柔软。如果直接使用会怎样呢?


得到了柔和的法线。
想着如果拿来涂抹会不会能做点什么,于是做出了这个。
Fake Soft Edge Paint #UE5 pic.twitter.com/0VW4hoMc1S
— 3D人-3dnchu- CG情報ブログ (@ymt3d) December 18, 2023
意外地反响很大,不过其实也没做什么了不起的东西。

实用性不明……
想着能不能在 Decal 里活用,于是尝试了这个

柔和的法线把锐利的边缘融化掉了。


湿润感提升了呢。其实这样的话,如果旋转 Decal,法线会变得不正常。
所以作为对策



感觉这还能在别的地方派上很多用场!先写到这里。
Distance To Nearest Surface

让材质能够在关卡任意位置对 Global Distance Field 进行采样。据说是这样。详细请看文档页面。
Unreal Engine の Utility マテリアル表現式 | Unreal Engine 5.3 ドキュメントDistanceToNearestSurface



这个也可以用于后处理材质和表面材质。
稍微调整一下。




这样就能更稳定地使用了。
如果要改造后使用,这个比 “DistanceFieldApproxAO” 似乎更有便利性。
制作可用于 Stylized 表现的 Distance Field Shadow
前言有点长了,这才是这次的主题。接下来要改造前面那个 Distance Field AO。







接下来就可以把这个作为素材,用在各种地方了对吧。




因为即使在投射出来的阴影中也能追加明暗,所以或许可以添加各种细节。
StylizedPP 也会在近期更新!
StylizedPP 更新中
计划在 Advent Calendar 时公开 #UE5 pic.twitter.com/GADHOhi1jS— 3D人-3dnchu- CG情報ブログ (@ymt3d) December 11, 2023
总之,就是这样,Mesh Distance Field 看起来能有很多用途!以上,结束!
最后收尾得很随便呢
睡了……