《鸣潮》基于虚幻引擎4的多平台效果和性能优化实践

前言

今年的UOD分享录播在陆续放出,考虑到学习以及归档的必要,开一个简单的小专栏来记录下自己的学习吧。

[UFSH2023]《鸣潮》基于虚幻引擎4的多平台效果和性能优化实践 | 王宏波 库洛游戏_哔哩哔哩_bilibili

首先是鸣潮今年的分享吧,主讲人是王宏波老师,之前我也看过他在Unreal Circle里面对于PureTS的优化分享,讲的也非常的好。

为什么使用Defer Shading

  • 性能考虑 (应该是从Shader变体,光照计算等角度分析之后的结论)
  • 方便做一些后处理效果 (例如GTAO, SSR)
  • 统一多平台,毕竟桌面端肯定是延迟管线

AA做法

首先王宏波老师说了下根据去年UOD的统计数据,NPR游戏对屏幕空间的边缘像素占比会到4%-5%,而传统PBR游戏一般会在1%~2%,所以AA这方面会成为卡渲质量的一个重要技术点。

下图是他们所分享的自研TAA流程。

Untitled

这里是额外加了一个Velocity的Pass并且从TAA变到的TAAU,即多了一个UpSample的过程,这里同时还说了一个我比较感兴趣的点,作者讲到TAA Pass的放置顺序问题,放在Bloom以及Tonemapping之后可能会导致边缘噪声放大。

Ghost的处理方式

Ghost的处理方式如下,是一个中规中矩,首先为性能考虑的一个方案。

Untitled

而角色的Ghost处理方式则较为特殊,其实应该说带动画的都需要一些特殊的处理方式,因为本身他们在屏幕空间的运动并不是完全因为相机移动而造成的。

Untitled

解决方式的话是单独的为角色开一个VelocityBuffer,然后进行对应的TAA计算,但是这么做又有一个问题,因为勾边的Pass没有对应的反应到Velocity的角色Mask中,所以会导致VelocityBuffer中角色上会有些黑线,但出于性能考虑,最后还是没有做勾边的VelocityBuffer的渲染。

Untitled

总结下来就是

Untitled

动静像素的混合方式

动静像素混合,物体运动越快,当前帧的的权重就会升高。

Untitled

Untitled

UpSample部分

Untitled

3. One Pass Defer

管线整体简介如下,也是比较经典的基于OnChip Memory的优化实现,鸣潮也是PBR和NPR结合的实现,角色和植被NPR,其它部分是PBR。

Untitled

延迟管线的Gbuffer分布

Untitled

这里有个坑是用了Depth Fetch之后,Mali的FPK(Early-Z)会失效。导致渲染压力显著上升。

Untitled

然后又由于Mali的PLS只有128bit,所以最后的管线变成了一条混合管线,Toon Shading走单独的一条前向渲染,这样Gbuffer就可以不存卡渲相关的信息了。

Untitled

然后最关键的一个优化,也就是卡渲的这条ForwardPass到底要插入到哪个位置比较好,一种考量是打断One Pass Defer,在Transparency后面走这条前向卡渲。

Untitled

然后显然这样等同于前面的优化工作全部白干,所以最后的方案是大改渲染(原文中说到几乎等同于重写),把这条卡通管线整合到One Pass Defer里面了,可惜宏波老师说因为时间原因,就不细细分享了。

Untitled

UE4.26以及4.27的RHI小Bug,当触发discard命令没有对GBuffer进行处理,导致Gbuffer还是在被写入。

Untitled

下图是修改后的代码

Untitled

最后是One Pass Defer和Multi Pass的性能对比,读的带宽下降了非常多,写的带宽也略有下降,分析说是移动设备对于RT的压缩很好,所以写入的时候没有那么明显的优势。

Untitled

树的多端适配

上来先分享了下总体的适配方案指南

Untitled

Untitled

Untitled

然后Billboard不是会跟着相机动嘛,所以渲染Shadow的时候要注意下,在写入ShadowMask的时候记得让它固定面向光源hh,不然你就会看到树木的阴影会跟着你相机移动和来回抽搐了。

Untitled

这里宏波老师说到很多人觉得Imposter和Billboard是一个东西,但是实际上Billboard和Imposter没什么关系,Imposter是用一圈相机围绕对应物体,然后离线记录对应的一些材质信息(类似于Mini Gbuffer),然后在运行时进行重建,而Billboard就是单纯调整面片使其始终对着角色相机。

Untitled

Untitled

Imposter树也是支持Streaming的。

Untitled

性能分析,4个DrawCall就可以画出一大堆Imposter树木,以及一些其他的优化。

Untitled

Untitled

总结

个人觉得是干货蛮蛮的一场分享,并且这个视频应该也是UOD今年播放量最多的一个视频。我看的时候有4.7w播放量。

Untitled

下一期应该是写下字节S1工作室或者是实习老东家完美的诛仙2的分享(如果我没有🕊的话)