85 lines
4.8 KiB
Markdown
85 lines
4.8 KiB
Markdown
|
## 前言
|
|||
|
突然想起几个月前在Quixel发布的一篇技术文章,里面归纳了几个场景物体融合方式(主要是与地形融合),甚是不错。隧简单翻译并分享给大家。
|
|||
|
|
|||
|
原文地址:https://quixel.com/blog/2020/1/22/blending-megascans-assets-in-ue4?utm_campaign=Tutorials&utm_source=youtube&utm_medium=social&utm_content=Goddess%20Temple%20in%20UE4:%20Lighting%20%26%20Blending
|
|||
|
|
|||
|
这里使用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
|
|||
|

|
|||
|
该文作者认为这个可能是最佳方案。因为**距离场模型融合**是直接修改地形顶点,属于真实的过度效果。所以不会出现任何抖动问题。
|
|||
|
|
|||
|
大致效果如下:
|
|||
|
https://www.bilibili.com/video/BV1ef4y1X7QZ/
|
|||
|
{% raw %}
|
|||
|
<iframe src="//player.bilibili.com/player.html?aid=287028163&bvid=BV1ef4y1X7QZ&cid=234182542&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
|
|||
|
{% endraw %}
|
|||
|
|
|||
|
|
|||
|
使用之前需要执行以下步骤:
|
|||
|
1. 在Settings-Project Settings中搜索distance fields,确保Generate Mesh Distance Fields选项处于勾选状态。
|
|||
|
2. 在想要融合到地面的物体的属性中,取消勾选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
|
|||
|
|
|||
|
具体操作请参考:https://www.bilibili.com/video/BV1Zv41117xB/
|
|||
|
|
|||
|
{% raw %}
|
|||
|
<iframe src="//player.bilibili.com/player.html?aid=244561268&bvid=BV1Zv41117xB&cid=233968254&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
|
|||
|
{% endraw %}
|