光线追踪(Ray Tracing)应该是最基础的,核心是发射光线检测交点,模拟反射折射。但传统方法可能只处理镜面效果,而真实世界还有漫反射,这时候路径追踪(Path Tracing)就派上用场了,通过多次采样和蒙特卡洛方法处理复杂光照,尤其是全局光照效果,不过计算量很大。
光线步进(Ray Marching)听起来和光线投射有点像,但主要用于处理隐式表面,比如SDF。它是一步步推进光线检测距离,而不是直接求交,适合烟雾、云层或者程序化生成的场景。而光线投射(Ray Casting)是最简单的,主要用于快速检测视线是否碰撞物体,比如早期的3D游戏或者体积渲染的初始步。
路径追踪是光线追踪的扩展,而光线步进和光线投射是不同用途的技术
1. 光线投影
核心思想:这是最简单、最基础的技术。对于屏幕上的每个像素(更具体地说,从相机/视点出发通过该像素的一条射线),沿着这条射线的方向投射一条光线。
关键操作:找到这条光线与场景中最近的物体的交点。
输出:通常直接使用交点处物体的颜色(或简单纹理)作为该像素的颜色。不考虑光照计算(如阴影、高光)或光线在交点后的行为(反射、折射)。
应用:早期3D游戏(如《德军总部3D》)、体积渲染(如CT/MRI数据可视化的第一步)、简单的视线检测(如判断物体是否可见)。
特点:速度快,实现简单,效果非常基础(类似无光照的线框图填充了颜色)
2. 光线追踪
核心思想:在光线投射的基础上进行扩展。同样从相机发射光线(主光线)并找到第一个交点。
关键操作:在交点处,根据物体的材质属性,模拟光线的后续行为:
- 反射:生成一条新的反射光线,继续追踪。
- 折射:生成一条新的折射光线(如果物体透明),继续追踪。
- 阴影:从交点向光源发射一条阴影光线(或称为“感觉光线”)。如果这条光线在到达光源前被其他物体阻挡,则该交点处于阴影中。
输出:像素颜色是交点处物体自身的颜色(考虑纹理)、直接光照(考虑阴影)以及递归追踪到的反射/折射光线带来的颜色贡献的综合结果。
应用:电影特效、高质量离线渲染、需要精确反射/折射效果的场景。
特点:能生成非常逼真的镜面反射、折射、硬阴影效果。计算量比光线投射大很多(尤其是递归深度深时),通常用于非实时渲染。经典光线追踪通常只精确模拟镜面反射/折射,对漫反射的处理是近似或简化的。
3. 路径追踪
核心思想:这是光线追踪的一种具体实现方法,并且是当前最主流的、能物理正确地模拟全局光照的技术。它基于蒙特卡洛积分。
关键操作:
- 从相机发射主光线。
- 找到交点后,不再确定性地计算反射/折射方向。
- 而是根据交点处材质的双向反射分布函数,随机地选择一个新的光线方向进行追踪(重要性采样)。
- 这个过程递归进行,直到光线达到最大深度、射出场景或根据俄罗斯轮盘赌终止。
- 每条路径(从相机出发,经过一系列反弹,最终到达光源或射出场景)对像素颜色的贡献被累积。
- 对每个像素发射多条路径(采样数),最后取平均值来减少噪声。
输出:像素颜色是所有成功路径贡献的平均值。它能自然产生软阴影、漫反射互光照、焦散等复杂光照效果。
应用:现代电影渲染引擎(如皮克斯的RenderMan、迪士尼的Hyperion)、高端产品可视化、追求物理真实感的离线渲染。
特点:是无偏的蒙特卡洛方法(理论上无限采样收敛到真实解),能处理所有类型的光传输(漫反射、光泽、镜面)。计算量极大,噪声随采样数减少而减少,是离线渲染的黄金标准。路径追踪是解决渲染方程的一种有效且流行的蒙特卡洛方法。
4. 光线步进
核心思想:这是一种不依赖显式几何求交的渲染技术,特别适合渲染隐式定义的表面(如由有符号距离场定义的形状)、体积效果(云、烟、火)和程序化生成的内容。
关键操作:
- 同样从相机发射光线。
- 不直接计算光线与物体的精确交点。
- 沿着光线方向,一步一步地前进。
- 在每一步的位置,调用一个距离函数(通常是SDF - Signed Distance Field)。这个函数告诉你当前位置到最近物体表面的最短距离。
- 以这个距离(或更小一点)作为下一步的步长。因为该距离保证了在这个步长范围内不会碰到任何表面。
重复这个过程,直到:
距离值小于一个很小的阈值(认为已到达表面)。
步数超过最大值。
光线累计行进距离超过最大距离。
- 如果到达表面,则计算该点的光照和着色。
输出:像素颜色可以是到达表面的着色结果,或者是在行进过程中累积的体积效果(如烟雾的颜色、密度)。
应用:Shadertoy上的实时艺术演示、程序化建模和动画、体积效果渲染(云、烟)。
特点:非常灵活,能渲染传统多边形难以表达的复杂形状和体积。效率高度依赖于距离函数的计算速度和步进策略。需要仔细控制步长和精度以避免走过头(漏掉表面)或效率过低。通常不直接处理复杂的全局光照(如多次漫反射反弹),但可以结合环境光遮蔽或其他近似技术。
总结与关系:
光线投射是基础:发射光线,找最近交点,简单着色。
光线追踪是扩展:在交点处模拟光线的物理行为(反射、折射、阴影),追求更真实的效果(尤其是镜面效果)。
路径追踪是实现光线追踪的一种具体且强大的方法:使用随机采样和蒙特卡洛积分来物理正确地计算所有类型的光传输(包括困难的漫反射全局光照),是离线渲染的基石。
光线步进是一种替代的求交/渲染技术:通过逐步前进和距离函数来渲染隐式表面和体积,不依赖传统几何求交。它有时会与光线追踪/路径追踪结合使用(例如,在体积内部使用光线步进采样,在表面使用路径追踪),但其核心的步进机制是独特的。
| 特性 | 光线投射 | 光线追踪 | 路径追踪 | 光线步进 | |
|---|---|---|---|---|---|
| 核心目标 | 简单可见性/基本着色 | 精确反射/折射/阴影 | 物理正确的全局光照 | 渲染隐式表面/体积 | |
| 求交方式 | 直接几何求交(最近) | 直接几何求交(最近) | 直接几何求交(最近) | 逐步逼近 (距离函数引导) | |
| 光照模型 | 无光照或极简 | 直接光照+镜面反射/折射+阴影 | 所有光传输 (直接+间接, 漫+镜) | 通常简单或自定义 (体积累积) | |
| 阴影 | 无 | 硬阴影 | 软阴影 (自然产生) | 可模拟 (如Voxel AO) | |
| 反射/折射 | 无 | 有 (确定性) | 有 (随机采样) | 可能模拟 (复杂) | |
| 全局光照 | 无 | 有限/近似 (通常无漫反弹) | 有 (核心能力) | 通常无/近似 (如AO) | |
| 计算成本 | 低 | 中高 | 极高 (大量采样) | 中高 (依赖步数和SDF复杂度) | |
| 主要应用 | 简单3D, 体积初探 | 电影特效 (镜面主导) | 电影特效, 产品渲染 (物理真实) | 程序化内容, 体积效果, 艺术Demo | |
| 实时性 | 容易 | 困难 (现代硬件逐步支持) | 非常困难 (离线为主) | 可能 (精心优化/简单场景) | |
| 物理基础 | 弱 | 部分 | 强 (基于渲染方程) | 弱 (但SDF本身有数学基础) |
版权声明:本文为CSDN博主「@Dinosaur」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/2301_81589795/article/details/149356007