施主分享随缘,评论随心,@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的优化的更多相关文章

  1. (转\整)UE4游戏优化 多人大地型游戏的优化(一)游戏线程的优化

    施主分享随缘,评论随心,@author:白袍小道 小道暗语: 1.因为小道这里博客目录没自己整,暂时就用随笔目录结构,所以二级目录那啥就忽略了.标题格式大致都是(原or转) 二级目录 (标题) 2.因 ...

  2. (转\整)UE4游戏优化 多人大地型游戏的优化(四)内存的优化

    施主分享随缘,评论随心,@author:白袍小道,当苦无妨 小道暗语: 1.因为小道这里博客目录没自己整,暂时就用随笔目录结构,所以二级目录那啥就忽略了.标题格式大致都是(原or转) 二级目录 (标题 ...

  3. (转\整)UE4游戏优化 多人大地型游戏的优化(二)渲染线程的优化

    施主分享随缘,评论随心,@author:白袍小道 小道暗语: 1.因为小道这里博客目录没自己整,暂时就用随笔目录结构,所以二级目录那啥就忽略了.标题格式大致都是(原or转) 二级目录 (标题) 2.因 ...

  4. WP老杨解迷:如何营造让人花钱的游戏

    游戏是最好做也是最不好做的项目,游戏的好坏现在都是直接从数据来说话,Windows Phone的游戏应用同样不可能逃出这个行业准则,要说在市场里做的好,那就直接拿数据来说,几乎没人会去在乎游戏到底传达 ...

  5. 《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇06:移动版优化指南》--本系列完结

    6.移动版优化指南 概述: 移动设备不同于目前的高端设备(Wii.Xbox 360和PS3),市场上的手机硬件是很有限的,并且所有的移动设备都是不一样的.像Adroid手机,由于品牌和出厂年限的不同, ...

  6. day23 02 组合(继续人狗大战游戏)

    day23 02 组合(继续人狗大战游戏) 面向对象的三大特性:继承 多态 封装 先讲解一下组合 组合:一个对象的属性值是另一个类的对象:对象.属性.属性(一般有两个点) 继续扩展day22 01里面 ...

  7. Unity5.1 新的网络引擎UNET(七) UNET 单人游戏转换为多人

     单人游戏转换为多人   孙广东   2015.7.12 本文档描写叙述将单人游戏转换为使用新的网络系统的多人游戏的步骤.这里描写叙述的过程是简化,对于一个真正的游戏事实上须要更高级别版本号的实际 ...

  8. 如何构建一个多人(.io) Web 游戏,第 2 部分

    原文:How to Build a Multiplayer (.io) Web Game, Part 2 探索 .io 游戏背后的后端服务器. 上篇:如何构建一个多人(.io) Web 游戏,第 1 ...

  9. Golang+Protobuf+PixieJS 开发 Web 多人在线射击游戏(原创翻译)

    简介 Superstellar 是一款开源的多人 Web 太空游戏,非常适合入门 Golang 游戏服务器开发. 规则很简单:摧毁移动的物体,不要被其他玩家和小行星杀死.你拥有两种资源 - 生命值(h ...

随机推荐

  1. 【HHHOJ】ZJOI2019模拟赛(十四)03.12 解题报告

    点此进入比赛 得分: \(50+5+24=79\) 排名: \(Rank\ 2\) \(Rating\):\(+79\) \(T1\):[HHHOJ197]古明地(点此看题面) 基本上全部时间都用来想 ...

  2. ORA-00392: log 4 of thread 2 is being cleared, operation not allowed

     alter database open resetlogs或者 alter database open resetlogs upgrade报错:ORA-00392 在rman restore 还原数 ...

  3. python3 安装turtle tkitnter 报错

    导入tkinter模块后,运行出现No module named _tkinter, please install the python-tk package ubuntu运行tkinter错误   ...

  4. 正定矩阵(Positive-definite Matrix)

    原文链接 正定矩阵是自共轭矩阵的一种.正定矩阵类似复数中的正实数.定义:对于对称矩阵M,当且仅当存在任意向量x,都有 若上式大于等于零,则称M为半正定矩阵.正定矩阵记为M>0.也被称为正定二次型 ...

  5. SpringBoot发布WAR启动报错:Error assembling WAR: webxml attribute is required

    Spring Boot发布war包流程: 1.修改web model的pom.xml <packaging>war</packaging> SpringBoot默认发布的都是j ...

  6. 修改SVN的地址

    方法 1:右键在工作复本的根目录上右键->TortoiseSVN->重新定位 (Relocate),然后修改URL就可以了,但最好先备份一下,据说这样的操作有一定的危险性(至今我没有发现) ...

  7. python main

    python中的main函数,总体来说就是,main比较适合写test测试,有点类似于java中的testcase,就是程序单独运行时是运行main的,但是当被调用时就不会运行main了.具体可以参考 ...

  8. spring-bean(xml方式管理)

    特点 每一次加载XML文件时候,都会将配置文件中包含的配置实例化. ID与name区别:name不是唯一的,但是可以使用特殊字符 Class:生成类的实例 Bean的作用域: 三种实例化方式 类的构造 ...

  9. motto - question - bodyParser.urlencoded 中设置 extended 为 true 和 false 有什么区别吗?

    本文搜索关键字:motto node nodejs js javascript body-parser bodyparser urlencoded x-www-form-urlencoded exte ...

  10. Linux文件服务器实战(系统用户)

    ftp匿名用户设置完成之后任何人都可以访问服务器端文件,目录,甚至可以修改删除文件和目录,,那如何存放私密文件并保证文件或者目录专属于拥有者呢,就需要使用vsftp系统用户来实现了. 1.在linux ...