实时光线的混合渲染:光线追踪VS光栅化

实时光线的混合渲染:光线追踪VS光栅化,第1张

在上一篇文章中,我们阐述了PowerVR光线追踪API的基本知识,包括场景生成和光线处理。在本文中,我们将展示如何有效地使用这些光线来呈现不同的效果,并将其结果与光栅化进行对比。

以下视频即光线工厂——我们最新的混合渲染演示:

混合光线追踪可以更好地进行渲染

像素阴影最基本的要素便是识别环境:它所处的位置、光线来自哪里,光线是否会受到其他曲面的阻碍或折返回来等等。光栅化则不会确定以上信息,因为每个三角形都是独立存在的。在某种程度上,有一些很显然的方法来应对这个问题,但这些方法过于复杂或效率低下,往往导致图像质量不佳。而另一方面,光线跟踪非常擅长获悉周边的环境,但由于计算更复杂,所以速度会很慢。混合渲染器则结合了光栅化的速度和光线跟踪的环境感知能力。在使用光线追踪计算曲面的光线和反射时,它已将G缓冲区光栅化,呈现出所有可视的曲面。

阴影

在光栅化中处理阴影非常不直观,需要相当多的运算:需要从每条光线的视角渲染场景,再存储在纹理中,随后在光照阶段再次投射。更糟糕的是,这样做未必会产生优质的图像质量:那些阴影很容易混叠(因为光线所视的像素与摄像头所视的像素并不对应),或堵塞(因为暗影贴图的纹素存储的是单一的深度值,但却可以覆盖大部分区域。此外,大多数光栅化需要支持专门的阴影贴图“类型“,如立方体贴图阴影(用于无方向性的光线),或级联阴影贴图(用于大型户外场景),而这大大增加了渲染器的复杂性。

在光线追踪器中,单一的代码路径可以处理所有的阴影场景。更重要的是,投影过程简单直观,与光线从曲面投向光源及检查光线是否受阻一样。PowerVR光线跟踪架构呈现了快速的“试探”光线,其用于检测光线投射方向的几何图形,这也使得它们特别适合进行有效的阴影渲染。


栅格化阴影(左)呈现的是块状效应,而光线追踪阴影(右)则像素精准

像素良好的阴影十分清晰,但却没有吸引力,所以下一步便是绘制一个漂亮的软半影。同样,这个过程非常直观且具有逻辑性:半影是由曲面的光源产生,而非无限小的点。我们并非将单一的光线投射至某个点,而是将一些光线投射至光曲面上的某个随机点,再取平均结果。曲面越大,半影则越大。那么,为了获得更优质的图像,我们便需要更多的光线。


进行了恰当的半影处理的光线跟踪阴影(右)

显然,这个方法非常简洁,也非常容易实现。使用更先进的方法当然可以获得更好的效果,这一点我们在之前的文章(在游戏引擎中应用快速的光线追踪软阴影)中有所阐述。

正如半影一样,要将半透明阴影添加至光栅化中并非易事,特别是当它涉及到多层半透明材料。在光线追踪中,再次展示了一个简单的过程:当阴影光线接触曲面时,检查这个曲面的不透明程度,并相应地降低光线密度。


标准的光线追踪阴影(上)VS高级的光线追踪阴影将雨伞当作一个半透明材料(下)

环境光遮蔽

环境光遮蔽(AO)可以被看作是一个无限的穹顶光的阴影,因此可以以非常相似的方式实现软阴影。将光线穿过半球曲面,若没有几何图形,一些光线便会积聚。由于整个半球的光线将被集成,因此在选择抽样方法时则务必注意。在这个特定的例子中,我们在余弦叶取样器中获取一个2D霍尔顿序列,它将生成赏心悦目的可视效果。


光栅化屏幕空间环境光遮蔽(上)和光线追踪环境光遮蔽(下)

环境光遮蔽并非仅通过光栅化便可以轻易完成。当前的方法通常需要其近似于屏幕空间,并忽视第三个维度,或者用体积呈现一个场景,并在着色器中模拟光线追踪。


光栅化屏幕空间环境光遮蔽(左),和光线追踪环境光遮蔽(右)

全局光照

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2545516.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-05
下一篇 2022-08-05

发表评论

登录后才能评论

评论列表(0条)

保存