玩VR的时候,很多人都有过这种体验:画面很清晰,但戴久了头晕,或者帧率一低就特别难受。这背后的原因,很多时候就跟通道渲染有关。今天就用大白话讲讲,VR通道渲染到底是怎么回事,为什么它这么吃性能,以及开发时该怎么优化。
VR通道渲染的基本概念
人有两只眼睛,看到的画面其实是有细微差别的,大脑把这两个画面合在一起,才有了立体感和空间感。VR设备要模拟真实视觉,就必须给左眼和右眼分别渲染一个画面,这就是所谓的双通道渲染。左眼一个通道,右眼一个通道,两个画面内容相近但视角略有偏移。
和普通电脑游戏只渲染一个画面不同,VR相当于同时要画两遍场景,工作量直接翻倍。而且VR对帧率要求非常高,一般要稳定在90帧甚至120帧以上,一旦掉帧,用户马上就会感到眩晕。这就让通道渲染成了VR开发中最核心、也最需要抠性能的环节。
多通道渲染与单通道渲染的区别
最传统的做法是双通道渲染,也叫多通道渲染。简单说就是整个渲染流程跑两遍:先渲染左眼画面,再渲染右眼画面。场景里的每个物体、每个灯光、每个特效,都要处理两次。优点是逻辑简单,兼容性好,几乎所有的渲染功能都能正常用。缺点也很明显,CPU和GPU的负担直接翻倍,场景一复杂就容易掉帧。
后来出现了单通道渲染方案。它的思路是:既然两只眼睛看到的场景基本一样,那能不能只提交一遍渲染指令,一次性把两只眼睛的画面都画出来?于是就有了单通道双目渲染,也就是常说的Single Pass渲染。
在支持多视图渲染的硬件上,比如用了实例化立体渲染或者多视图渲染技术,GPU可以在一次绘制调用里同时输出左右两个视角的画面。CPU只需要提交一次数据和指令,GPU内部自动处理两份输出。这样CPU的开销大大降低,只画一遍指令但输出两份画面,效率提升非常明显。
单通道渲染的优势与限制
单通道渲染最大的好处是省CPU。VR应用里CPU往往比GPU更容易成为瓶颈,因为要处理头部追踪、手柄输入、物理计算等等。减少一半的绘制调用,意味着CPU有更多余量去做别的事情,帧率自然更稳。
不过它也有代价。首先对硬件有要求,老的显卡和老的移动芯片可能不支持多视图渲染,只能退回双通道方案。其次有些渲染特性不好用,比如某些屏幕空间特效、后处理效果,需要针对双视角做特殊处理,处理不好可能出现左右眼画面不一致的情况,比如阴影错位、特效位置不对等等。开发的时候需要额外测试。
通道渲染的常见优化技巧
第一是降低渲染分辨率。VR需要两块屏幕,像素总量非常大,很多引擎支持动态分辨率渲染,在画面简单的时刻自动提高清晰度,复杂的时刻适当降低,保证帧率优先。
第二是善用注视点渲染。人眼只有中间一小块区域看得特别清楚,边缘其实很模糊。注视点渲染就是中间区域用高分辨率渲染,边缘区域降低分辨率,能省下大量GPU算力。
第三是控制绘制调用和面数。VR场景里物件不宜过多,能合批的合批,能用LOD的用LOD,远处模型用低模代替。左右眼共享的材质和贴图尽量复用。
第四是合理使用异步时间扭曲。就算偶尔掉帧,也可以通过重投影技术补救,把上一帧画面根据最新的头部姿态重新计算再显示,减少眩晕感。
总结
VR通道渲染本质上就是同时给两只眼睛各渲染一份画面,核心矛盾在于工作量翻倍和高帧率要求之间的冲突。从早期的双通道分开渲染,到现在的单通道多视图渲染,技术一直在朝着省性能的方向走。对开发者来说,选对渲染通道方案,再配合分辨率调整、注视点渲染等优化手段,才能做出既流畅又不晕的VR体验。对普通用户来说,了解这些原理,也能更好地理解为什么有些VR应用丝般顺滑,有些却卡得让人想摘头盔。
