施主分享随缘,评论随心,@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. Vsftpd服务传输文件(转)

    本章节先通过介绍文件传输协议来帮助读者理解FTP协议的用处,安装vsftpd服务程序并逐条分析服务文件的配置参数. 完整演示vsftpd服务匿名访问模式.本地用户模式及虚拟用户模式的配置方法,介绍PA ...

  2. matlab所需插件

    1

  3. 第一个AngularJS控制器

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  4. 一篇SSM框架整合友好的文章(二)

    上一篇讲述了DAO 层,mybatis实现数据库的连接,DAO层接口设计,以及mybtis和spring的整合.DAO层采用接口设计方式实现,接口和SQL实现的分离,方便维护.DAO层所负责的仅仅是接 ...

  5. mysql完全卸载大全

    如何在Linux下卸载MySQL数据库呢? 下面总结.整理了一下Linux平台下卸载MySQL的方法. MySQL的安装主要有三种方式:二进制包安装(Using Generic Binaries).R ...

  6. JDK 动态代理 讨债实例

    现弄一个讨债接口 package cn.itcast.g_dongtaidaili; public interface Taozhai { void taozhai(); } 再弄一个讨债实现类 pa ...

  7. 使用ansible安装配置zabbix客户端

    ansible角色简介: 目录名 说明 defaults 默认变量存放目录 handlers 处理程序(当发生改变时需要执行的操作) meta 角色依赖关系处理 tasks 具体执行的任务操作定义 t ...

  8. linux C 数组与指针

    linux C 数组与指针 一.数组 数组是同一数据类型的一组值:属于引用类型,因此数组存放在堆内存中:数组元素初始化或给数组元素赋值都可以在声明数组时或在程序的后面阶段进行. 定义一维数组的一般格式 ...

  9. 实用jquery插件

    jquery toast 一个弹窗插件 jquery.form.min.js 一个Ajax表单插件

  10. uniqueidentifier数据类型转换

    cast(id as varchar(36))