工程师技术详解:在UE4和Unity中的平面/立体混合渲染
为 Gear VR 设计游戏和体验是一件非常有挑战的事情。由于移动渲染力的限制,三角形数量和着色器都需要经过小心的优化。虚拟现实渲染中的一个比较浪费渲染力的地方就是你需要为双眼在略微不同的角度针对同一场景进行重复渲染。这种“双目视差”能给用户带来景深立体的感觉 – 左眼和右眼都能从稍微不同的位置看到同一个物体,然后大脑就能够把这种区别解析为物体到自己面前的距离。
这种左右眼之间看到的差异,对距离自己较近的物体,差别还是比较大的;但随着物体越来越远这种差别也会越来越小。双眼之间的距离 – 以及生成的像素 – 也在物体离自己越来越远时差别相对越来越小。为了利用这一点,我们制作了一个 Unity 的样品和一个改进后的 UE4 移动前置渲染器,来为近处物品进行立体渲染(为两眼分别渲染一次),同时为远处物体进行单目渲染(为两眼同时渲染一次)。在这里我们会解释一些我们在制作这个单目渲染样品过程中的一些选择,以及一些折衷的妥协。
UE4 移动设备渲染器
我们在代表左右眼的立体摄像机位中间放置了第三个摄像机位。这三个机位在一条线上,这样它们的视角才能匹配上。对于 Gear VR,两只眼睛的摄像机的视椎体都是左右对称的,因此中间这个摄像机位的投射矩阵和双眼立体摄像机的投射矩阵也是一样的。在 Rift 上,两眼的摄像机位视椎体则是非对称的(靠内朝鼻子这个角度,比靠外的角度要稍小一些),因此中间这个平面摄像机位的视椎体实际上是左右眼视椎体的集合体。这包括了两眼看到的所有物体,但是也导致了它渲染出来的目标会比两只眼分别渲染的目标要稍微大些。
我们增加了一个分裂平面,来选择哪些内容会被用双眼立体摄像机来渲染,而哪些内容会用中间的平面摄像机来渲染。我们发现用10米来作为默认值效果还不错(十米内立体渲染,十米外平面渲染)。这个距离值可以在游戏中任意帧被随意修改,也可以在编辑器中的 World Settings / VR / Mono Culling Distance 下进行配置。
我们还修改了 UE4 针对移动设备的前向渲染器来达到以下效果:
1.用立体摄像机来渲染非透明内容。
2.通过改变和结合输出来制作一个平面的遮罩。这个遮罩也会预先设定平面的深度缓存。
3.用平面摄像机来渲染非透明内容。
4.把平面摄像机的结果整合进立体的缓存里。
5.立体化渲染所有的透明内容,并进行所有的后期处理。
第一步的结果,纯立体缓存加上近景深度剔除
第三步的结果,远景是平面的,此截图特意做成左右两眼
第四步的结果,把第三步结果整合进第一步,加上近景深度剔除
相关阅读
- 补帧大法好!Oculus新技术ASW如何45 FPS变90 FPS?
- 120帧技术开创最清晰画质!10部革新电影技术的影片