游戏客栈今日报道(2016.7.5)“The Lab Renderer”是 Valve 在制作 The Lab 这个 demo 里所有 Unity 体验(除了修理机器人那个 Source2 的以外)的渲染器,Valve 把它发布出来让 Unity 的开发者能基于这个学习,打造本世代 VR 渲染的最高保真度和最佳性能的体验。
这并非一个替代 Unity 庞大渲染功能的完整渲染解决方案,但它提供了 Valve 所有用来制作 The Lab 这个演示的功能。包含了所有的源代码和着色器的代码,让开发者来修改以便符合自己的需要。
以下是这个渲染器提供的特性:
单向前置渲染(Single-Pass Forward Rendering)和多重采样抗锯齿(MSAA)
对于 VR 来说,单向前置渲染非常必要,因为它可以使用多重采样抗锯齿,目前已知的对 VR 来说最好的抗锯齿方案。延迟渲染器则会受锯齿影响,目前的画面-空间抗锯齿算法水平无法为其优化。
Unity 默认的前置渲染器是多重的,每次点光点亮到物体时几何体又会被渲染一次。The Lab 的渲染器在一次前置渲染中支持最多18个动态阴影光线。
自适应质量
Valve 在 GDC2016 上 Alex Vlachos 的演讲“高级虚拟现实渲染性能”中展示了自适应质量的算法,视频和幻灯片在此:
http://www.gdcvault.com/play/1023522/Advanced-VR-Rendering
自适应质量是一种动态改变渲染保真度来确保帧率的技术,不依赖于可能产生抖动和其它问题的重投射类方法。自适应质量的参数针对每个地图进行完整订制。
自定义着色器
这个插件需要所有的材料使用 The Lab 的着色器。如果你有 Unity 着色器和 Lab 着色器混合在一起,Unity 会在渲染阴影时多次渲染,导致性能开销。菜单选项在 Valve->ShaderDev 下面,可以让你把自己现存的材料转化成使用 The Lab 的渲染器。当然在使用这些帮助命令前请先备份你的项目。
我们发布了完整的着色器源代码,所以你可以进行修改来满足产品的需求。
GPU 刷新
在 VR 渲染的性能优化方法中,最少为人知的一种方法就是以合适的节奏来刷新渲染 API,保证 GPU 的负载是满的,避免了空闲。这个插件叫做 Unity’s GL.Flush(),在主摄像头的 OnPostRender() 下,在阴影渲染后最多每帧三次。这能确保 GPU 在 DirectX runtime 下的绘制调用能被正确排序。