前言
突然想起几个月前在Quixel发布的一篇技术文章,里面归纳了几个场景物体融合方式(主要是与地形融合),甚是不错。隧简单翻译并分享给大家。
这里使用MegaScans中的”Damp Soil”、”Cut Grass 2×2 M”与”Grass Clumps”资产。
World aligned texturing
直接译为世界坐标映射贴图。通过模型顶点的世界坐标将贴图映射到模型上。大致原理如下:
官方的AutomotiveMaterialPack与TwinmotionMaterialsPack材质包使用这个方法。这个方法广泛用在CAD、建筑等方面。这里介绍的主要是与地形融合的思路.
大致用法如下:
上图展示了通过控制x、y值来控制贴图平铺效果。
映射到球体模型的效果如下:
一个完整的PBR材质大概是这个样子的:
材质实现:https://blueprintue.com/blueprint/101g7t_k/
这个方法的缺点在于平面与模型的接缝处过度十分突兀。但它的性能十分的好,配合其他方法使用能得到很好的效果。
Pixel depth offset
为了解决过度突兀的问题,我们可以通过像素深度偏移(Pixel depth offset)配合DitherTemporalAA节点来解决这个问题。
大致用法如下:
效果如下:
仔细观察过度处,可以看得出过度非常自然了。同时因为这个方法主要用到了TAA的抖动算法,通过视觉暂留现象来实现半透明过度,所以性能十分的好。缺点是材质Alpha较低时,交界面容易产生错误的混合效果。当Alpha较高时容易产生TAA特有的鬼影现象。
材质实现:https://blueprintue.com/blueprint/bwa_kbpc/
Distance field mesh blending
该文作者认为这个可能是最佳方案。因为距离场模型融合是直接修改地形顶点,属于真实的过度效果。所以不会出现任何抖动问题。
大致效果如下:
使用之前需要执行以下步骤:
- 在Settings-Project Settings中搜索distance fields,确保Generate Mesh Distance Fields选项处于勾选状态。
- 在想要融合到地面的物体的属性中,取消勾选Affect Distance Field Lighting选项。
接下来就创建材质了:
右边的粉色框中节点将会连入Normal槽,你可以用一个参数变量来控制混合强度。因为当前材质没有混合地形与模型物体的纹理,只是平滑了交接面附近的法线。所以为了得到更好的效果,我们使用WorldAlignedTexture工作流程,并给它们与地形接近的纹理,这会达到一个更好的融合效果。
由于我们禁用了Affects Distance Field Lighting,这使得该融合物体无法使用距离场AO以及距离场阴影。这个方法性能消耗较大(用了曲面细分以及置换),虽然会有很好的效果,但如果你对性能优化以及场景的把控不足,还是不建议使用。
材质实现:https://blueprintue.com/blueprint/bqo9vg8i/
Runtime virtual texturing
实时虚拟贴图(RVT),这个文档上都有就不翻译了。
材质实现:https://blueprintue.com/blueprint/md12pcb5/
另一个视频中的优化技巧
这里我再追加另一个Quiexl视频中的性能技巧:
- 使用Ue4的MergeActor将多个Mesh进行合并。视频2:00
- 使用MegaScans的Ue4插件,将多个材质合并到一起。视频2:50
具体操作请参考: