5.2 光线追踪、路径追踪、光线投射、光线步进介绍
光线追踪
光栅化渲染
光栅化渲染:将场景中的渲染任务按照以下方式拆解:物体->三角面->像素。这种拆解会导致全局信息的丢失,无法精确实现一些全局效果。但是可以利用阴影贴图、反射贴图等等来实现这些效果,但只是近似实现,并不精确。(常用各种纹理贴图简析(AO, Normal等) - 知乎 (zhihu.com))
为了解决光栅化渲染的缺点,出现了光线追踪技术。
光线追踪
光线追踪是一种渲染框架,与光栅化渲染并列。采用路径追踪的光线追踪方法步骤为:从相机出发,对每个像素点,向场景投射光线,直到光线与场景中第一个物体相交,在交点处根据物体性质、光源属性和光照模型等计算这个交点的颜色。然后,在交点处,该光线发生反射或折射,继续遍历追踪反射光线和折射光线,直到光线与下一个表面相交,计算该交点的颜色。直到光线到达光源或逸出场景。
光线追踪将一个场景的渲染任务按照光线拆解。这些光线之间是并行的。光线追踪可以获得一个场景的全局信息。
为什么说它能获得全局信息呢?我们先来看光线投射。
光线投射
例如下图中,我们从人眼发出一条射线,穿过屏幕与场景中的物体相交,将该交点与光源连线,这时候我们就知道了该点的视线、光线和法线方向。这样的话我们就可以通过例如Bulin-phong模型计算该点的颜色等信息。
光线投射模型提出的初衷是判断物体是否处于阴影之中的,如果光源连线中没有其他物体遮挡,那么就不处于阴影中。
光线投射是光线追踪的前身,但不是真正的光线追踪方法。
递归光线追踪
第一种光线追踪,也成为经典光线追踪技术。
如图,假设与视线相交的第一个物体是半透明物体,那么会产生折射与反射,产生二次交点。将所有交点和光源连线后,将这些光线分类:初始光线、二次光线、阴影光线。
这些光线的用处,对应到公式里面:
:视线的第一个交点的漫反射(可以有多光源)
:反射再反射的交点,计算该点的漫反射(兰伯特)
:反射再折射
:环境光
加起来就是该点在屏幕上的颜色
我们发现上述方法都需要计算交点,如何计算交点呢?
递归光线追踪有一定的缺点,首先在物理上不过严谨,这是因为这里的折射和反射都是理想情况下的,其次它没有考虑来自其他物体的漫反射光线,例如该点没有考虑长方体的漫反射。
为了解决这个问题,提出了路径追踪的方法。
路径追踪
说到路径追踪,就不得不提到Kajiya渲染方程,这个方程解决了两个问题:
- 什么是渲染
- 怎么渲染
出射光 = 自发光 + 半球上贡献的积分
详见BRDF
问题
例如三条光线,只反射一次。最后混合,计算像素的颜色。
假如有一条光线反射迭代了很多次都没有达到光源,那么会很耗性能。
路径追踪的一个显著缺点是噪点。但是,随着更多路径的积累,噪点会消失,并最终收敛为清晰的图像。
:::color5
在了解以上后,我们重新总结一下光线追踪的定义
:::
体积光线投射
例如要获得Start点的颜色,就需要对Start和End之间的点进行三维纹理采样之后混合,得到Start的颜色。
光线步进
总结
作业
分别分析光线追踪,路径追踪,光线投射,光线步进在游戏上有哪些技术的应用。
光线追踪、路径追踪、光线投射和光线步进在游戏开发中有着广泛的应用,它们各自的技术特点和适用场景如下:
- 光线追踪:
- 路径追踪:
- 应用场景:配合降噪实现RayTracing的一些技术,用于当光源面积较小时的全局光照计算。
- 技术特点:路径追踪的理论基础是渲染方程,通过不断递归的过程计算光照,直到光线到达光源或逸出场景。它通过蒙特卡洛积分运算对每条路径的贡献值进行平均求和,实现较为真实的渲染效果。
- 光线投射:
- 应用场景:主要用于体绘制技术,如医学影像处理。
- 技术特点:从视线出发,穿过三维物体,物体的每一个体素都储存着所需要的信息,通过插值计算出采样点的信息,之后按照固定信息对光线上的采样点进行信息的合成,计算出光线对于屏幕上像素的颜色值。
- 光线步进:
- 应用场景:与距离场相关的算法,如体积云、海浪、简易光线追踪等。
- 技术特点:是一种迭代算法,通过逐步调整光线的位置和方向,直到达到预期的效果或满足特定的终止条件。它适用于处理复杂的几何结构和需要精细控制光线路径的场景。
光线追踪
多年来,在游戏中进行路径追踪的想法是无法想象的。虽然许多游戏开发人员都同意,如果他们拥有实时图形所需的性能,他们会希望使用路径追踪,但性能远未实时实现,路径追踪似乎无法实现。
然而,随着 GPU 的不断发展和增加,以及 RTX 硬件的广泛使用,实时路径追踪变得触目了然。正如电影在切换到路径追踪之前开始采用一些光线追踪技术一样,游戏开始以有限的方式使用光线追踪。
目前,越来越多的游戏部分应用了光线追踪。它们将传统的基于光栅化的渲染技术与一些光线追踪效果相结合。
光线追踪的技术要求是什么?
- 到目前为止,只有少数硬件和软件系统支持光线追踪技术。要使用流体光线追踪显示游戏和动画,快速、强大的计算机和 RTX 显卡是必不可少的。通常需要昂贵的 PC 升级才能拥有必要的计算能力。提供光线追踪支持的显卡包括第一代和第二代 Nvidia RTX 显卡(例如 GeForce RTX 2070 和 GeForce RTX 3070)。Radeon-RX-6000 一代的某些 AMD 显卡(例如 RX 6800 和 RX 6900 XT)也已经支持光线追踪。
以下游戏使用光线追踪:一系列不同的 PC 和计算机游戏已经提供了光线追踪支持。
具有光线追踪的 PC 游戏:我的世界 RTX 版、古墓丽影之影、巫师 3:完整版、使命召唤:黑色行动冷战、控制、F1 2021
具有光线追踪的主机游戏:跑车浪漫旅 7、光环无限、看门狗:军团、齿轮 5
路径追踪
那么,在这种情况下,路径追踪意味着什么呢?这可能意味着技术的组合。游戏开发人员可以栅格化远光灯,然后跟踪场景的照明。栅格化相当于从单个点发射一组光线,该点在它接触的第一个对象处停止。光线追踪更进一步,从任何方向的许多点发射光线。路径追踪模拟光线的真实物理特性,它使用光线追踪作为更大的光线模拟系统的组件。这意味着场景中的所有灯光都使用 Monte Carlo 或其他技术进行随机采样,既可用于直接照明、灯光对象或角色,也可用于光照室内或具有间接照明的环境中的全局照明。为此,正如 Kajiya 所指出的那样,光束将多次反射跟踪,而不是通过反射向后跟踪光束,大概是回到它们的光源。
一些游戏已经在这样做了,结果令人印象深刻。Microsoft 发布了一个附加组件,它利用了 Minecraft 中的路径跟踪。Quake II 是一款经典射击游戏,通常是高级图形技术的沙盒,借助新插件,也可以完全跟踪。
光线投射
光线步进
参考:
路径追踪 (Path tracing) | High Definition RP | 10.4.0 (unity3d.com)
路径追踪:您需要了解的有关将彻底改变视频游戏图形的技术的所有信息 - GEARRICE
【百人计划】图形 5.2 光线追踪、路径追踪、光线投射、光线步进_预烘焙ao-CSDN博客
在Unity里使用光线步进(Raymarching)_unity raymarching-CSDN博客
RayMarching实时体积云渲染入门(上) - 知乎 (zhihu.com)