处理器/DSP
在上一篇文章中,我们阐述了PowerVR光线追踪API的基本知识,包括场景生成和光线处理。在本文中,我们将展示如何有效地使用这些光线来呈现不同的效果,并将其结果与光栅化进行对比。
以下视频即光线工厂——我们最新的混合渲染演示:
混合光线追踪可以更好地进行渲染
像素阴影最基本的要素便是识别环境:它所处的位置、光线来自哪里,光线是否会受到其他曲面的阻碍或折返回来等等。光栅化则不会确定以上信息,因为每个三角形都是独立存在的。在某种程度上,有一些很显然的方法来应对这个问题,但这些方法过于复杂或效率低下,往往导致图像质量不佳。而另一方面,光线跟踪非常擅长获悉周边的环境,但由于计算更复杂,所以速度会很慢。混合渲染器则结合了光栅化的速度和光线跟踪的环境感知能力。在使用光线追踪计算曲面的光线和反射时,它已将G缓冲区光栅化,呈现出所有可视的曲面。
阴影
在光栅化中处理阴影非常不直观,需要相当多的运算:需要从每条光线的视角渲染场景,再存储在纹理中,随后在光照阶段再次投射。更糟糕的是,这样做未必会产生优质的图像质量:那些阴影很容易混叠(因为光线所视的像素与摄像头所视的像素并不对应),或堵塞(因为暗影贴图的纹素存储的是单一的深度值,但却可以覆盖大部分区域。此外,大多数光栅化需要支持专门的阴影贴图“类型“,如立方体贴图阴影(用于无方向性的光线),或级联阴影贴图(用于大型户外场景),而这大大增加了渲染器的复杂性。
在光线追踪器中,单一的代码路径可以处理所有的阴影场景。更重要的是,投影过程简单直观,与光线从曲面投向光源及检查光线是否受阻一样。PowerVR光线跟踪架构呈现了快速的“试探”光线,其用于检测光线投射方向的几何图形,这也使得它们特别适合进行有效的阴影渲染。
像素良好的阴影十分清晰,但却没有吸引力,所以下一步便是绘制一个漂亮的软半影。同样,这个过程非常直观且具有逻辑性:半影是由曲面的光源产生,而非无限小的点。我们并非将单一的光线投射至某个点,而是将一些光线投射至光曲面上的某个随机点,再取平均结果。曲面越大,半影则越大。那么,为了获得更优质的图像,我们便需要更多的光线。
显然,这个方法非常简洁,也非常容易实现。使用更先进的方法当然可以获得更好的效果,这一点我们在之前的文章(在游戏引擎中应用快速的光线追踪软阴影)中有所阐述。
正如半影一样,要将半透明阴影添加至光栅化中并非易事,特别是当它涉及到多层半透明材料。在光线追踪中,再次展示了一个简单的过程:当阴影光线接触曲面时,检查这个曲面的不透明程度,并相应地降低光线密度。
环境光遮蔽
环境光遮蔽(AO)可以被看作是一个无限的穹顶光的阴影,因此可以以非常相似的方式实现软阴影。将光线穿过半球曲面,若没有几何图形,一些光线便会积聚。由于整个半球的光线将被集成,因此在选择抽样方法时则务必注意。在这个特定的例子中,我们在余弦叶取样器中获取一个2D霍尔顿序列,它将生成赏心悦目的可视效果。
环境光遮蔽并非仅通过光栅化便可以轻易完成。当前的方法通常需要其近似于屏幕空间,并忽视第三个维度,或者用体积呈现一个场景,并在着色器中模拟光线追踪。
全局光照
全局光照(GI)本质上与环境光遮蔽相对,但它通过一个简单AO渲染器扩展便可以实现。当光线没有接触任何事物时,GI并非积累光线,而是积累其接触到的曲面上的光线。这意味着,快速“试探”光线不能再使用,必须用全局光线替换,以此找出最近的曲面交线,然后再评估这个点上的光线。
在这个特定的例子中,我们将同时使用单反射GI和AO。尽管在物理上而言,使用GI和AO有些不确定性,但就审美角度而言,其生成图像的质量令人赏心悦目,几乎接近预渲染时的质量。
使系统支持发光曲面并非难事,且任何几何图形都可以转化为区域光,并被完美地集成至场景中。而光栅化仍然没有解决区域光的问题:它们通常局限于简单的形状,且不能投射阴影,故而在现实场景中难以使用。
优化
相比完全使用光线追踪渲染器,使用混合方法可以节省大量的计算工作。大型的场景若要生成复杂的效果仍是造价昂贵,但我们必须尽一切努力来实现最佳的性能。
我们的光线工厂演示以每秒30帧,1080p在PowerVR GR6500 GPU上运行,每秒可以投射1亿条光线。不同的光线追踪效果所需的成本如下所示:
意想不到的是,环境光遮蔽比单一的阴影成本更高,因为它需要大量的光线。同样,当AO取样器扩展到支持全局光照,同样需要额外的计算来识别最近的曲面及评估光线。
时间超级采样
在大多数情况下,两个连续的帧极其相似:有些曲面可能有稍许移动,但仍然是按先前渲染的相同的曲面。从一帧转入下一帧时,成本较高的阴影操作则可以被再次使用,只要像素及其先前的位置之间可以进行映射。这种方法在实时图像中非常通用,已经被用于改善抗锯齿、SSAO、屏幕反光等。通过将光线分布至几帧中,它可以减少每帧所需光线的数量。
时间超级采样只需要访问前一帧和每像素运动向量。由于基于拼贴的PowerVR GPU架构,通过使用像素本地存储扩展,渲染这些额外的运动向量便非常有效,且无需消耗额外的带宽。
尽管大幅提高了光线质量(或减少了光线数量,取决于你的视角),它不会造成时间假象。例如,在移动对象后可以看到阴影痕迹。
更好的场景管理
场景层次架构生成(SHG)是大量的光线追踪发生的地方:顶点着色器在场景几何图形上运行,生成的三角形存储在加速结构中,从而使得实时光线追踪成为可能。随着场景的发展,这个任务可能需要大量的帧渲染时间:
所幸,SHG可以与主渲染平行运行。这意味着,当前的一帧完成渲染时,下一帧的几何图形已经准备就绪,这就大大降低了帧处理时间。然而,这需要场景具有多个缓冲,这样,修改某个缓冲时,另一个缓冲可以进行渲染。想要开发Vulkan或优化OpenGL渲染器则必须采用以上类似的方法。
在光线工厂演示中,平行运行的场景层次架构生成大约减少8ms帧时间,而我们的性能调优应用程序显示,其所生成的三角形数量可以轻松翻倍,且不影响性能。
我们还可以进一步改善场景层次结构生成的性能:静态几何图形可以被预先计算,并被预先缓存,随后在运行时间与动态元素合并。这一点通常非常有用,因为环境大多是静态的。
总结
通过使用PowerVR光线追踪器可以大幅改善实时3D图像的质量:光线效果可以更精准(如阴影、环境光遮蔽)。但更重要的是,光线追踪可以突破当前渲染器的限制,允许生成如实时全局光照这类的新效果。最后,光线追踪不仅仅允许更好的光照效果,也可以处理传统引擎中的复杂的问题,从而使渲染器的工作更加简易。
原文链接: https://imgtec.com/blog/hybrid-rendering-for-real-time-lighting/
全部0条评论
快来发表一下你的评论吧 !