(转整)UE4游戏优化 多人大地型游戏的优化GPU的优化
Posted baipao-xd
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(转整)UE4游戏优化 多人大地型游戏的优化GPU的优化相关的知识,希望对你有一定的参考价值。
施主分享随缘,评论随心,@author:白袍小道
小道暗语:
1、因为小道这里博客目录没自己整,暂时就用随笔目录结构,所以二级目录那啥就忽略了。标题格式大致都是(原or转) 二级目录 (标题)
2、因为所看和以前记录太过杂乱,所以只能手动一点点搬移(回忆,整理)。欢迎讨论,知识和能力总是被问出来了不是(嘿嘿,这样才能成长), 若有不对别喷就好哈哈。
引言:
文章四方面包括了从游戏线程、渲染线程、GPU、内存等的优化,提升游戏技术底子。
原作者:王祢,Epic Games 资深开发者技术支持,管理虚幻引擎技术支持的程序员团队,拥有近15年虚幻引擎使用经验。
正文:
优化肯定是有个前提和需求背景的,本文的前提:在移动设备上做大地型的多人游戏。
需求背景:
1、开放地图:视野宽,视距远,地图大
2、场景:风格变化多
3、同屏人不少
4、交互也不少
(看到这里对吧,UE +上述 就直接说堡垒之夜就好了呗)
(由于篇幅较长,小道就直接拆开了,各位看官)
GPU
1 |
分辨率和颜色格式 |
渲染分辨率,我们可以逐设备的通过MobileContentScaleFactor设置BackBuffer的分辨率。我们也可以通过r.ScreenPercentage把单独的3D的分辨率改小。改分辨率是显而易见提升GPU的手段,因为大部分时候我们都是pixel shader bound。
当然,带宽也是很大的因素,引擎还可以灵活的设置SceneColor的格式,默认HDR下我们使用FP16的RGBA,在有些项目里我们可以用r.Mobile.SceneColorFormat来调整成R11G11B10或者RGBE的方式减少带宽的占用。
当然要注意,移动端有些特性一来DepthBuffer,而支持DepthStencil fetch扩展的设备并不算太多,所以引擎默认会把Depth存到SceneColor的A通道,所以采用R11G11B10这样的格式,可能就会使得某些依赖读回深度的feature发生问题
2 |
材质 |
材质节点:Quality Switch
选项:fully rough,non metal
材质,也就是shader复杂度,我们可以设置Quality Switch使用不同复杂度的材质针对设备做优化。也可以直接使用fully rough,non metal之类的材质优化选项。当然滥用的话会使得最终生成的shader permutation的分裂(不要都勾了啊)数量很多,需要注意一下。
3 |
Shadow |
Shadow主要分为两种。Modulate shadow我们已经不太适用,不过因为是单对象一个shadow volume,所以可以设置的shadow map利用率和精度比较高一些,在某些角色展示场景中可能比较有用。
CSM是全场景的动态shadow,非全动态光照时,移动端默认只对动态对象投射。可以通过Device Profile控制,例如可以在低端设备上没有shadow,中等的设备上可以不做PCF filtering,好的设备上才开filtering做多次采样。
4 |
地形 |
5 |
Base Pass pixel shader |
Base Pass pixel shader 效果上我们做了一些改进,sky light和refleciton的计算都做了修正,Specular换成了GGX,以前GGX在半精度的情况下,NoH接近1时会有比较大误差,我们做了一些改进。
另外,在MobileBasePassPixelShader中的各个模块,项目组也可以根据需要去除不需要的,例如IBL或者lightmap或者shadowmap的部分。
后处理,可以根据不同的设备做不同功能的开关。
Mask,在移动硬件上比较费的原因是因为如果写depth时,某个像素发生clip/discard,硬件的earlyz就会失效,导致overdraw。
一个方案是开启prepass画mask,basepass做z equel;还有一个是引擎的LOD transition,在发生LOD时,不是直接换模型,会把两个LOD模型都画一下,通过一个dither的mask慢慢的渐变过去,这个时候可以采用类似于mask的行为,我们可以把LOD的结果dither的结果画到Stencil,在BasePass时做stenciltest减少不必要的discard。
以上是关于(转整)UE4游戏优化 多人大地型游戏的优化GPU的优化的主要内容,如果未能解决你的问题,请参考以下文章