项目从UE4升级UE5之后,植物资产的处理

Epic的老师们你们好,

我们的项目要从UE4升级到UE5,

项目中有海量的植物资产是直接从UE4转到UE5的,对于这些植物资产的处理,我们内部分别尝试了开Nanite和不开Nanite的方案,但分别都碰到一些问题。

先说开启Nanite的方案,碰到大的问题主要是2个:

1.性能表现对比开启之前是要降低的,参考官方文档对于Nanite使用的指导,估计原因跟我们植物的制作方式和项目场景的特点有关:所有的植物是用常规的穿插Mask面片来制作,场景内有大片大片的植物。

[Image Removed]

​ 2.Nanite植物在远离世界位置中心,抗锯齿选择TSR(TAA也会有)时,WPO会让植物产生严重的伪影。目前已知的原因是世界空间位置的精度问题:

[Content removed]

[Content removed]

​再说不开Nanite的的方案:

1. 无法跟Lumen进行良好的配合,美术效果提升不大

2. 植物资产依然使用LOD+ImpostorMesh的优化方式,美术效果不如开启Nanite

3. 在结合VSM使用的情况下,会报如下的警告:Warning: [VSM] Non-Nanite Marking Job Queue overflow. Performance may be affected. This occurs when many non-nanite meshes cover a large area of the shadow map.

因为项目有海量的植物资产需要处理,短时间内按照Nanite的规范全部将这些资产重新制作是不现实的。

综合上面的情况,想请教Epic的老师们,对于我们这种从UE4升级到UE5的项目,植物资产的处理上有什么建议?

还有上述提到的我们的几点困惑,也希望能得到解答。

您好,

植被目前确实是Nanite的痛点, 尤其是mask插片类型的资产.

首先mask材质的Nanite光栅化效率比较低, 且大量半透区域会增加overdraw; 但转成高精度的opaque模型不一定适合所有植被, 且植被模型叶片有大量开放边, 不易于形成cluster, 远距离的模型简化可能比不上传统LOD, 加上WPO会对每个cluster的bounds做一定扩展, 剔除效率会受到影响. 所以目前植被的nanite开启需要看具体的资产进行测试, 而且不从资产层面做优化我认为是不太现实的.

开启Nanite的问题:

1. 看截图中的树, 条件允许的话还是建议转一版本高精度opaque模型试试. 另外材质层面,要尽量简化WPO的计算, 考虑用vertex animation贴图采样取代多层级的pivot painter计算. 场景设置上, 看效果优化WPO的开启距离, 如果仍保留mask材质的话, 可以用Nanite Pixel Programmable Distance把远处的mask/wpo一起关闭.

2. 伪影具体是什么原因产生的最好还是能发一个资产过来一起测试看看, 也有可能是顶点速度计算的问题.

不开启Nanite的问题:

1. 如果都是HISM的形式渲染植被, 不开启Nanite则不对lumen scene产生贡献, 确实会损失美术效果.

2. 非Nanite模型LOD细节度就主要靠美术控制啦.

3. VSM, Nanite, Lumen我们一般都建议结合起来用, 效率最高. 非Nanite的大量植被阴影建议远处开启distance field shadow进行优化.

我们最近的几个版本会针对Nanite植被做重点优化, 未来植被的渲染形式应该会有一些变化: 远处植被会用体素化的形式渲染, 效率和植被的轮廓保持都会有提升; 也会利用植被枝簇间的自相似性用assembly的形式更高效的组织模型. 但目前具体生产可用的日期我没法确定.

方便的话, 可以发一个简单场景过来, 我们再详细看下前面的几个问题.

感谢回复!

我上传了一个资产和一个简单的场景,场景中“标签2”的位置,复现模糊的问题。

我这边测试这个鬼影确实是精度问题, 除了像你前面链接中提到的调整UE_LWC_RENDER_TILE_SIZE之外, 还可以尝试在材质里优化一下涉及到LWC位置的计算精度:

针对你的资产, 我感觉问题主要出在Pivot Painter中大量的rotation计算用的是Absolute World Position, 我换做Camera Relative World Position就不再有鬼影问题了.

调整后的材质我放在了附件, 几处修改标红了(主要在PivotPainter2FoliageAnimation和ms_PivotPainter2_DecodePosition). 因为植被风动材质比较复杂, 可能有我没考虑全面的地方, 有问题我们再沟通.

另外, 有一篇文档关于LWC在材质中使用的最佳实践, 强烈建议参考: Efficient materials for large worlds

非常感谢!

PivotPainter中,用Camera Relative World Position计算Rotation之后,植物的wpo不再有鬼影问题了。

另外,因为我们项目的植物资产太多,从资产层面去优化开Nanite后的性能问题工作量太大,所以暂时不打算为植物资产启用Nanite。

但在使用非Nanite植物时,出现的警告:Warning: [VSM] Non-Nanite Marking Job Queue overflow. Performance may be affected. This occurs when many non-nanite meshes cover a large area of the shadow map. 怎么才能解决呢?谢谢!

这个警告就是提示Non-Nanite物体的投影占据了大量的VSM page, 性能不佳.

VSM虚拟阴影最好和Nanite结合来用, 他依赖Nanite的高效的剔除和绘制效率. 当场景里Non-Nanite物体比例过高的话, 考虑换其他阴影方案(比如CSM), 比较看有没有收益, 或者如前面所讲, 远距离开启distance field shadow, 看看会不会有改善.

补充一点~

Non-Nanite物体比例比较高且继续使用VSM时, 也可以考虑关闭Non-Nanite物体对半透, volumetric物体的投影: r.Shadow.Virtual.NonNanite.IncludeInCoarsePages, 也会对性能有较大帮助.

好的收到,感谢!