VR游戏中的性能优化

VR游戏相对传统游戏,个人认为主要有三个方面的不同:玩法设计,输入方式,性能压力。今天就来谈一下VR游戏中的性能优化。

为什么VR游戏的性能压力很大?

·  主要有三个因素的影响:高帧率,高分辨率,画两遍,影响权重由高到低。

·  高帧率:DK2为75,最新的CV1是90;HTC Vive为90;PS4 VR为120。对比PC游戏的60以及主机游戏的30,压力可想而知!

·  需要说明的是鉴于帧率这么高,每一帧即便2ms的提升意义也巨大。即便以75为例,每帧时间为13.33ms,2ms占比15%!

·  高分辨率:DK2为1920 * 1080,最新的CV1为2160 * 1200;HTC Vive为2160 * 1200;PS4 VR为1920 * 1080

·  除了账面分辨率之外,实际渲染时为抵消透镜畸变带来的分辨率损失需要超采样,具体:DK2为135%,CV1和HTC Vive都为140%

·  即使以DK2的数据:1920 * 1080 @75Hz来说,每秒的像素处理量为283 millions, 这个数据4倍于一般的主机游戏!更别忘了,最新硬件的这个数据提升至457 millions

·  画两遍

方法一:依次画两遍场景

, SetTexture,SetTransforms,SetViewport,切换RenderState,DrawCall等均翻倍

方法二:依次画两遍物体

,相比较方法一有节省,但DrawCall依旧翻倍

关于像素处理部分

通过上面的数据可以看到其实VR游戏性能压力主要集中在像素处理方面,那么如下和像素处理相关的部分就要特别注意:

·  光影计算方案的选择:空间换时间尤为重要,light map、静态AO,环境反射贴图等能上就上,dynamic shadow在任何时候能省则省。

·  后期处理:不用的效果统统干掉。如DOF、Motion Blur、Lens Flare等本就不适合VR游戏;SSR、SSAO等尽量用前面说的静态方案来替代;

AA也可以不用,因为已经有Super Sampling了

·  特别注意OverDraw的问题:典型的如范围巨大的透明面片特效省着点用,不要动不动叠加个7、8层。

·  Shader复杂度问题:UE4的viewmode里面有一个是专门查看shader复杂度的。一般来说,出现粉色和白色的情况说明shader太复杂了,需要修正。

原理:

延迟渲染已经成为各大引擎的标配,很多人觉得对于延迟渲染来讲,early z culling没有存在的必要,毕竟生成GBuffer之后 相当于已经做了像素级别的culling,而且多了一个pass提前写深度往往得不偿失;

但early z culling针对延迟渲染的受益部分主要在GBuffer的 生成阶段,传统游戏这部分相对于lighting计算阶段开销不大,所以往往被忽略掉,但VR游戏中受制于超大的像素处理量,这部分的优化提升 在我们游戏中经过测试是相当明显的。

当然,世事无绝对,这里仅作下提醒,实际要根据自己的游戏场景做下详尽的测试。

关于画两遍批次翻倍加上面数翻倍因此VR游戏中优化批次和面数较传统游戏的意义更大。

·   静态场景的批次优化:针对UE4,我们专门做了扩展工具来合并场景中相同物体的批次,而不需要美术对已经做好的场景进行返工。绝大多数情况下,这事总是程序开发效率对美术制作效率的妥协,程序逃不掉的:)

·  动态批次优化:多用instance的思想合并数量巨多但因个头小而往往被忽视的物体,典型的如FPS游戏中的子弹。

·  其实优化中很多这样的情况,比如不起眼的string对性能和内存造成的巨大的压力(当然如string相关的如此底层的优化,现代成熟引擎已经都做好了)

·  面数:对UE4而言,其消耗体现在生成GBuffer的Base pass阶段,要善用统计工具去定时定性得分析游戏场景;

·  另外关于面数除了美术提供的静态场景和角色之外一定要关注下自动生成的东西,如tessellation;工具可能也会统计不到。

·  举例:UE4中Ribbon特效的tessellation默认步长为15uu,而我们游戏中的Ribbon特效可达30000uu,如果不改变默认值,一条拖尾可生成4000面,同屏50条拖尾就令绝大部分GPU歇菜了

·  特定游戏中特例化的问题防不胜防,应善用不同工具从多种角度分析。

其他

当然,前面讲的都是针对VR游戏的特点来重点强调的,其他的优化方法同样使用,根据之前的经验做下总结,包括但不限于:

·  对表现效果妥协,如很多手机平台的游戏角色连normal都没有。。还有贴图精度,模型精度等

·  对制作流程 、制作效率的妥协。如开发无尽之剑XboxOne版时发现,UI直接调用d3d API画的。。

·  开发效率的妥协。 注意shader中的数据类型,顶点的数据格式等,能用16位浮点就不要用32位的浮点

·  游戏类型具体分析,比如如果确定场景中物件都必须渲染则把Ocullusion Culling关掉,因此这种情况下不需要预计算遮挡剔除关系!

·  特别注意下CPU、GPU的同步点,线程之间的同步点(多发生在竞争统一资源上,如主线程和第三方库的线程用同一个内存分配器)

·  善用第三方库站在巨人肩膀,比如小内存多,分配频繁自己又懒得写内存库的话,干脆用tcmalloc、nedmalloc等

·  多用LOD,不只是贴图mipmap、模型LOD等这种,还有逻辑层面的LOD,如特效分层LOD

·  不同Actor、不同Component、不同系统设置不同的更新频率

·  多线程加速、SIMD加速

·  很track的做法:避免使用基于win32 API的高级函数,例如memeset,因为这个是单字节填充;可用汇编进行优化,效率提升明显(当然成熟引擎不需要操心这点)

其他方案

除了这些,业界还有些全新的优化方案,这里也做下介绍。

·  多/双显卡渲染:

·  DX12支持显卡混搭,可把render task绑定到任意GPU上

·  Nvidia的SLI和ATI的CrossFire可应付非DX12的情况,叫法不同但原理相同:一块显卡渲染左眼,另一块显卡渲染右眼:

要求两块显卡必须型号一致,实测效果很不错

·   StencilMesh的思想,同样是culling,不过在另外的层面上。UE4中的实现叫做HMD Distortion Mask,实际也是节省掉周围四角区域的像素计算。

·   Instanced stereo Rendering:

·   核心思想:一次提交绘制双份几何体,draw call不需要翻倍了

·   UE4的4.11 preview版本已经放出了第一个版本的实现

·   Multi-Resolution

·  人眼对中心区域像素更敏感,所以保持中心区域分辨率并降低边缘区域分辨率。整体分辨率降低的同时尽可能抵消对效果的影响。

这种方法可以节省25%~50%的像素处理量

补充和总结

其实真正做优化之前,有两点怎么强调都不为过:

· 稳定测试环境。包括关闭PC上其他3D程序,关闭垂直同步,保证每次采样点以及采样上下文完全一致,不要以编辑器模式启动等等。

· 量化观测数据。同一游戏,在完全稳定的测试环境下,前后两次测试的性能观测数据有有些许浮动都是很正常的,因此直觉不可靠!直觉不可靠!

直觉不可靠!重要的事情说三遍!不要想当然的认为:”这个没影响“,”那个没关系“,”这次有提升“,”感觉没作用“等等。捕获如下精确的数据加以分析才是靠谱的做法。

另外,优化是一个长期迭代进行的过程,中间过程做好记录;遇到和美术PK的情况,也要做到尽量用数据说话。

联系方式:0755-81699111

课程网址: http://www.vrkuo.com/course/vr.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容