Unity 样品
Unity 的混合平面渲染采用了和 UE4 版本基本一致的思路,但是完全通过 C# 和着色器来实现的。
用到了两个摄像机 — 一个进行近景的立体渲染,一个进行远景的平面渲染。远近景的分裂平面被用来限制渲染到合适的深度范围,我们依赖 Unity 的视锥体剔除来避免为视锥体外的物体进行绘制调用。
基本的步骤如下:
把远景部分渲染到纹理(平面摄像机)。
把近景部分用立体渲染 — 每只眼一次(左右眼立体摄像机)。
针对每只眼,通过 Unity 图像效果来把立体单眼图像放到平面图像之上。
这个平面渲染器是通过把摄像机的“Target Eye”设置为“Left”而非“Both”来实现的。摄像机物体位置经过调整,因此实际上是通过中间眼来进行渲染的。
这都已经打包成了一个可以取代 Oculus 摄像机的预制包。
此 Unity 的实现包并没有采用任何类似 UE4 下的过着色优化,毕竟我们的主要兴趣在于节省绘制调用。当然,那些东西之后都可以被整合进来。
下图显示了采用了混合立体/平面渲染后的包含了很多球体的合成测试场景的结果。
未开启平面渲染 — 10846 绘制调用,48.7 FPS
混合立体/平面渲染(平面区域被显示为红色) — 8583 绘制调用,97.7 FPS
当然显然这个场景不是那么常用的,主要展示了最好情况下的效果。当你把平面远景距离设为十米时,基本上无法区分出全立体和混合式场景的区别。
我们打算把这个作为 Unity 的一项内置功能,让所有开发者都能轻易使用,并会继续为所有引擎的立体渲染进行优化。