游戏开发论坛

 找回密码
 立即注册
搜索
查看: 6896|回复: 1

来点新鲜的 VR的渲染优化经验总结

[复制链接]

1万

主题

1万

帖子

3万

积分

论坛元老

Rank: 8Rank: 8

积分
36572
发表于 2015-9-25 17:00:44 | 显示全部楼层 |阅读模式
本帖最后由 小篱 于 2015-9-25 17:02 编辑

2.jpg

  GameRes游资网授权发布 文 / 逍遥剑客

  VR渲染需要左右眼两幅不同的画面,现在的大部分引擎都是暴力的直接渲染两遍,这样做想想性能也很难达到75FPS(或90FPS)。

  以Oculus DK2为例,1920x1080@75FPS,加上Super Sampling就变成了(UE4默认135%)2592x1458@75FPS。

  如果是Oculus的消费者版本和HTC Vive,分辨率和刷新率更是提升到了2160x1200@90FPS, 推荐配置是GTX980惊恐,以135%的Super Sampling为标准的话,只是Color Buffer每秒的数据量就有2160x1200x1.35x90x8 byte ≈ 2.34GB。这还没算Post Processing里的N多张Render Target和Deferred Rendering的GBuffer、Light Buffer。

  性能永远是VR渲染的最具有挑战的部分,本着能省一点是一点的思路,VR的渲染优化我总结了这么一些:

  虽然VR渲染需要左右两幅画面, 但是有很多效果是不需要画两次的:

  Shadow Map

  部分的Reflection

  Occlusion Query

  大多数Post Processing

  API层面的优化,有这么几个思路:

  如果实现了多线程的渲染,一般会有一个Command Buffer,直接分别以不同的View提交两次。针对每个物体分别提交两次, 相比上面这个State切换开销会节省一些。使用Geometry Shader直接把Mesh分成左右眼的,drawcall不会翻倍了。但是坑爹的GS性能不咋地。使用Instancing一次drawcall绘制两个Viewport, 跟GS类似,但性能大约是GS的3倍。这只是减少一些API调用、State切换还有Vertex处理的消耗,那瓶颈最大的Pixel处理的消耗怎么减少呢?

  Valve使用一个Stencil Mesh, 剔除了17%的像素。

1.jpg

2.jpg

3.jpg

  NVIDIA的GameWorks也提供了一种方法, 叫Multi-Resolution Shading,大概的思路就是边缘的像素经过变形后会损失一些,另外人眼对视线中心的像素更敏感,所以周围一圈可以降低分辨率来渲染。通过这种方式可以节省25%到50的像素。

4.jpg

5.jpg

6.jpg

  硬件方面,NVIDIA和AMD都推出了双GPU渲染的支持,即每块GPU渲染一只眼睛的画面。嗯,这一定是个阴谋,他们肯定在偷着乐:这下显卡不愁卖了。

20150925112654362.jpg

  SONY的PS VR在PS4的机能下实现了120FPS。听起来不可思议,实际是60FPS通过reproject插值出中间帧,跟Killzone的Temporal Reprojection 和Oculus的Timewrap差不多原理。

3

主题

28

帖子

132

积分

注册会员

Rank: 2

积分
132
发表于 2015-9-25 21:17:36 | 显示全部楼层
这文章大赞一个!
话说双GPU会是VR以后的标配吧,它们该如何通信呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-11 08:15

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表