(转\整)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发生问题
材质 |
材质节点: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 |
地形 |

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的优化的更多相关文章
- (转\整)UE4游戏优化 多人大地型游戏的优化(一)游戏线程的优化
施主分享随缘,评论随心,@author:白袍小道 小道暗语: 1.因为小道这里博客目录没自己整,暂时就用随笔目录结构,所以二级目录那啥就忽略了.标题格式大致都是(原or转) 二级目录 (标题) 2.因 ...
- (转\整)UE4游戏优化 多人大地型游戏的优化(四)内存的优化
施主分享随缘,评论随心,@author:白袍小道,当苦无妨 小道暗语: 1.因为小道这里博客目录没自己整,暂时就用随笔目录结构,所以二级目录那啥就忽略了.标题格式大致都是(原or转) 二级目录 (标题 ...
- (转\整)UE4游戏优化 多人大地型游戏的优化(二)渲染线程的优化
施主分享随缘,评论随心,@author:白袍小道 小道暗语: 1.因为小道这里博客目录没自己整,暂时就用随笔目录结构,所以二级目录那啥就忽略了.标题格式大致都是(原or转) 二级目录 (标题) 2.因 ...
- WP老杨解迷:如何营造让人花钱的游戏
游戏是最好做也是最不好做的项目,游戏的好坏现在都是直接从数据来说话,Windows Phone的游戏应用同样不可能逃出这个行业准则,要说在市场里做的好,那就直接拿数据来说,几乎没人会去在乎游戏到底传达 ...
- 《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇06:移动版优化指南》--本系列完结
6.移动版优化指南 概述: 移动设备不同于目前的高端设备(Wii.Xbox 360和PS3),市场上的手机硬件是很有限的,并且所有的移动设备都是不一样的.像Adroid手机,由于品牌和出厂年限的不同, ...
- day23 02 组合(继续人狗大战游戏)
day23 02 组合(继续人狗大战游戏) 面向对象的三大特性:继承 多态 封装 先讲解一下组合 组合:一个对象的属性值是另一个类的对象:对象.属性.属性(一般有两个点) 继续扩展day22 01里面 ...
- Unity5.1 新的网络引擎UNET(七) UNET 单人游戏转换为多人
单人游戏转换为多人 孙广东 2015.7.12 本文档描写叙述将单人游戏转换为使用新的网络系统的多人游戏的步骤.这里描写叙述的过程是简化,对于一个真正的游戏事实上须要更高级别版本号的实际 ...
- 如何构建一个多人(.io) Web 游戏,第 2 部分
原文:How to Build a Multiplayer (.io) Web Game, Part 2 探索 .io 游戏背后的后端服务器. 上篇:如何构建一个多人(.io) Web 游戏,第 1 ...
- Golang+Protobuf+PixieJS 开发 Web 多人在线射击游戏(原创翻译)
简介 Superstellar 是一款开源的多人 Web 太空游戏,非常适合入门 Golang 游戏服务器开发. 规则很简单:摧毁移动的物体,不要被其他玩家和小行星杀死.你拥有两种资源 - 生命值(h ...
随机推荐
- 问题 C: B C++时间类的运算符重载
题目描述 C++时间类的运算符重载 定义一个时间类Time,其数据成员为表示时间的小时(hour).分(minute),秒(second). 重载运算符“+”,使之能用于时间对象的加法运算:重载运算符 ...
- 【洛谷P1314】[NOIP2011]聪明的质监员
聪明的质监员 题目链接:https://www.luogu.org/problemnew/show/P1314 Y(W)随W的值增大而减小 二分W的值,找到最小的W使得Y(W)>S: 比较Y(W ...
- react(一):组件的生命周期
最近兄弟团队让我去帮忙优化两个页面,前端用的react全家桶,后端用的python,上一次写react代码都过去一年了,顺着以前的的学习思路,再捋顺一下react的要点 组件的生命周期就是Reac的工 ...
- docker-compose 构建mongodb并导入基础数据示例
使用docker-compose构建mongodb服务并导入基础数据示例. 1.文件目录结构 ——mongo/ |——docker-compose.yml |——mongo-Dockerfile |— ...
- java后台poi根据模板导出excel
public class ExcelUtils { private static final String INSPECTIONRECORD_SURFACE_TEMPLET_PATH = " ...
- Linux-日期时间相关命令
获取当前时间 date [root@VM_0_3_centos ~]# date Mon Mar 18 19:13:33 CST 2019 [root@VM_0_3_centos ~]# date相关 ...
- OpenLDAP部署目录服务
文档信息 目 的:搭建一套完整的OpenLDAP系统,实现账号的统一管理. 1:OpenLDAP服务端的搭建 ...
- scrapy--matplotlib
昨天晚上看了一些关于保存文件的相关资料,早早的睡了,白天根据网上查找的资料,自己再捡起来.弄了一上午就爬取出来了,开心!!!好吧,让我们开始 老规矩,先上图.大家也赶快行动起来 分类文件: 文件内co ...
- 无法打开物理文件 XXX.mdf“,操作系统错误 5:”5(拒绝访问。)"的解决办法
http://blog.csdn.net/blackfield/article/details/6550499 用T-SQL命令附加数据库时,出现如下异常信息: 无法打开物理文件 XXX.mdf&qu ...
- Java源码解析——Java IO包
一.基础知识: 1. Java IO一般包含两个部分:1)java.io包中阻塞型IO:2)java.nio包中的非阻塞型IO,通常称为New IO.这里只考虑到java.io包中堵塞型IO: 2. ...