一些VR渲染优化方法

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

以Oculus DK2为例,[email protected],加上Super Sampling就变成了(UE4默认135%)[email protected]

如果是Oculus的消费者版本和HTC Vive,分辨率和刷新率更是提升到了[email protected], 推荐配置是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%的像素

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

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

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

参考资料:

Fast Stereo Rendering for VR - Google Slides - Google Docs

‘Advanced VR Rendering‘ by Alex Vlachos (Valve) - Steam

GameWorks VR Presentation - NVIDIA Developer

Asynchronous Timewarp Examined

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-07 12:38:32

一些VR渲染优化方法的相关文章

一些VR延迟优化方法

http://m.blog.csdn.net/article/details?id=50667507 VR中的”延迟”, 特指”Motion-To-Photon Latency”, 指的是从用户运动开始到相应画面显示到屏幕上所花的时间.  这中间经过了大概这么几个步骤: 传感器采集运动输入数据 采集到的数据进行过滤并通过线缆传输到主机 游戏引擎根据获取的输入数据更新逻辑和渲染视口 提交到驱动并由驱动发送到显卡进行渲染 把渲染的结果提交到屏幕, 像素进行颜色的切换 用户在屏幕上看到相应的画面 当然

地图渲染 优化方法

1.减少DrawCall次数,最大化一次性传入数据给显卡避免使用glVertex之类,转而使用glDrawArray,对数据集进行批次传送.在这里它的作用不仅仅只是优化数据传递带宽需求,它更可以减少函数调用在系统当中的消耗(在某些系统下,消耗相当可观) 2.减少OpenGL的状态变化尽可能将状态相近的图形绘制命令放在一起,减少OpenGL状态变化.使用状态集合,降低驱动程序的CPU处理时间, 3.图元类型优化尽可能地使用GL_TRIANGLE_STRIP替代GL_TRIANGLES.使用状态集合

提高VR渲染速度的关键

提高VR渲染速度的关键,这个教程比以往的教程都要重要很多,如果你是刚刚步入学习和上升阶段那么这将是你必须要看的东西,他会让你迅速提升技能达到比你死看书本好很多的效果,不多说上教程 VR的基本渲染方法已经掌握,虽然材质和灯光方面还有许多不足,但是当前最迫切需要解决的问题是VR的出图速度问题.动则需要数小时的渲染时间真的是很难以接受,不管是练习还是真正的做方案都是漫长的等待,这样修改起来也不方便.因此当务之急是要弄清楚影响VR速度的根本原因,优化参数. 最近的几个例子来看,GI的时间都不长,就是抗锯

Unity渲染优化中文翻译(三)——GPU的优化策略

如果游戏的渲染瓶颈来自于GPU 首要任务就是找出造成GPU瓶颈的因素所在,通常GPU的性能受到像素分辨率的影响,特别是在移动客户端的游戏,但是内存带宽和顶点计算的影响也需要注意.这些因素的影响都需要实时的测试和定位. 像素分辨率 像素分辨率是指GPU每秒可以渲染的像素个数,如果游戏受到像素分辨率的影响,则意味着游戏每帧描绘的像素点个数超过了GPU可以处理的极限. 检测游戏是否收到像素分辨率的影响可以通过以下方式: . 分析游戏,注意GPU的运行时间: . 在unity的Player Settin

Android性能优化方法(八)

Android SDK tools目录下提供一个观察布局的工具,层级观察器(Hierarchy Viewer).Hierarchy Viewer工具是一个非常好的布局优化工具,同时,你也可以通过它学习他人的布局.应该说是一个非常实用的工具. AD:WOT2014:用户标签系统与用户数据化运营培训专场 层级观察器(Hierarchy Viewer): Android SDK tools目录下提供一个观察布局的工具,层级观察器(Hierarchy Viewer).Hierarchy Viewer工具

Android性能优化系列之渲染优化

众所周知的Android系统每隔16ms重新绘制一次activity,也就是说你的app必须在16ms内完成屏幕刷新的所有逻辑操作,这样才能达到60帧/s.而用户一般所看到的卡顿是由于Android的渲染性能造成的. 本篇博客将介绍Android的渲染相关知识. 然而有的时候你的程序会出现这样的情况,如果某个绘制操作超过了16秒用了24秒这时候用户看同一张图片花了32秒而不是16s,用户会感到卡顿,这种现象我们叫-丢帧 Android的渲染机制 首先我们要了解android的渲染机制,andro

离屏渲染优化

离屏渲染(Offscreen Render) objc.io 出品的 Getting Pixels onto the Screen 的翻译版绘制像素到屏幕上应该是国内对离屏渲染这个概念推广力度最大的一篇文章了.文章里提到「直接将图层合成到帧的缓冲区中(在屏幕上)比先创建屏幕外缓冲区,然后渲染到纹理中,最后将结果渲染到帧的缓冲区中要廉价很多.因为这其中涉及两次昂贵的环境转换(转换环境到屏幕外缓冲区,然后转换环境到帧缓冲区).」触发离屏渲染后这种转换发生在每一帧,在界面的滚动过程中如果有大量的离屏渲

[ios]离屏渲染优化

原文链接:https://mp.weixin.qq.com/s?__biz=MjM5NTIyNTUyMQ==&mid=2709544818&idx=1&sn=62d0d2e9a363d250beb2d6887dca54b3&scene=0&key=b28b03434249256bb3a6b7bd2f2cbe21550293fa9af7ff8669e50331f9be4207e196edd9757d3c09338a394b4dfefce6&ascene=1&a

ASP.NET MVC 提高运行速度的几种性能优化方法

主要介绍ASP.NETMVC 应用提速的六种方法,因为没有人喜欢等待,所以介绍几种常用的优化方法. 大家可能会遇到排队等待,遇到红灯要等待,开个网页要等待,等等等. 理所当然,没有人喜欢等待网页慢吞吞地加载,尤其是在移动端访问网站时.其实,Web 开发者敏感的神经决定了我们等待与否. 现在,快速响应不仅是来自用户的要求,还是决定搜索引擎的速度. 考虑到大多数网站都存在速度方面的问题,在本文中将介绍六种为 ASP.NET MVC 应用提速的方法. 希望可以帮助到大家!!! 1. 应用程序缓存 缓存