GAMES101回顾 -- 光线追踪

Ray Tracing

光线追踪

实现步骤

  1. 发射光线(Ray Generation):光线追踪算法从观察者的视点(如相机位置)发射一条主光线。这条光线的起点是相机位置,方向是从相机位置经过像素位置的射线。

  2. 光线求交(Ray-Object Intersection):发射的主光线与场景中的物体进行求交计算。算法会检查光线是否与场景中的任何物体相交,以确定光线是否遇到了物体表面。

  3. 确定最近交点(Closest Intersection):如果光线与场景中的物体相交,算法会确定与光线最近的交点。这个交点通常是离观察者最近的物体表面上的点。

  4. 光照计算(Shading):在确定了最近的交点后,算法会计算该点的光照属性。这包括考虑光源的位置、光照颜色、物体表面的反射特性等因素,以确定交点处的颜色和亮度。

  5. 反射和折射(Reflection and Refraction):如果物体表面具有反射或折射特性,算法会根据物体的材质属性计算反射光线或折射光线。这些光线会从交点处继续传播,并进行下一轮的光线追踪。

  6. 阴影计算(Shadow Calculation):对于光照计算中的每个交点,算法会检查该点是否在阴影中。这涉及到发射从交点位置到光源位置的阴影光线,检查光线是否与场景中的其他物体相交。如果有相交,则交点处被阻挡,处于阴影中。

  7. 递归追踪(Recursive Tracing):如果光线发生了反射或折射,算法会递归地进行下一轮的光线追踪。这意味着从反射或折射点发射新的光线,并重复前面的步骤,直到达到设定的追踪深度或光线不再与物体相交。

  8. 合成图像(Image Composition):在完成光线追踪的过程中,算法会根据计算得到的光照和阴影信息,将每个像素的颜色值计算出来。最终,这些颜色值会合成为最终的图像。

在这里插入图片描述

与光栅化的区别

  1. 光栅化是基于几何图形的渲染技术,将几何图形转换为像素进行渲染,而光线追踪是基于光线的渲染技术,模拟光线在场景中的传播和交互。

  2. 光栅化是一种实时渲染技术,适用于交互式应用和实时渲染,如游戏。光线追踪通常需要更多的计算资源和时间,适用于生成高质量的静态图像或动画。

  3. 光栅化在处理复杂场景时可能会出现遮挡问题,需要使用技术(如深度测试和遮挡剔除)来处理。光线追踪能够处理遮挡和反射等复杂光线交互,因此能够生成更真实的渲染结果。

  4. 光栅化通常使用多边形作为基本几何图形,而光线追踪可以处理任意形状的物体,包括曲面和体积。

直接光照和全局光照

  1. 直接光照(Direct Lighting):
    只考虑场景中的直接光照贡献。它基于光源的位置和属性,计算光线从光源到物体表面的直接照射,以确定物体表面的颜色和亮度。

  2. 全局光照(Global Illumination):
    考虑场景中的间接光照和多次反射、折射等光线交互。全局光照模型不仅考虑了光源的直接照射,还考虑了光线在场景中的传播、反射、折射等过程,以模拟真实世界中的光照效果。全局光照模型通常使用光线追踪等算法,追踪光线的路径,计算光线与物体表面的交点、光线的反射、折射等,并考虑光线与场景中其他物体的交互,以获得更真实的光照效果。

Whitted 光线追踪

Whitted光线追踪(Whitted Style Ray Tracing)是一种经典的光线追踪算法,由Turner Whitted于1980年提出。它是光线追踪算法的基础,也是后续各种改进和扩展的基础。

基本思想
从相机或观察者位置发射一条光线,然后通过与场景中的物体进行相交测试,找到光线与物体相交的点。在相交点处,通过考虑反射和折射等光线传播方式,计算出光线的颜色值。

基本方程式:

L = L_e + k_d * L_d + k_s * L_s + k_r * L_r

Whitted风格光线追踪主要关注局部光照效果的模拟,通过考虑漫反射和镜面反射来计算光线的颜色。漫反射光线的颜色由物体表面的漫反射系数和光源的颜色决定,镜面反射光线的颜色由物体表面的镜面反射系数和反射光线的颜色决定。

路径追踪

路径追踪的基本方程式可以描述为:

L(O, W) = L_e(O, W) + ∫[S] f_r(X, W, W’) * L(X, W’) * |cosθ| dA

其中,L(O, W)表示从观察点O沿着方向W的辐射亮度,L_e(O, W)表示观察点O处的自发光亮度,f_r(X, W, W’)表示物体表面在点X处的反射函数,L(X, W’)表示从点X沿着方向W’的辐射亮度,θ表示入射光线和法线之间的夹角,dA表示微分面积。

基本思想
从相机或观察者位置发射一条光线,然后通过与场景中的物体进行相交测试,找到光线与物体相交的点。然后,通过随机采样来追踪光线的传播路径,包括反射、折射和散射等。最终,通过对所有路径进行蒙特卡洛积分,计算出光线在观察点处的辐射亮度。

区别
路径追踪与传统的光线追踪算法的区别在于路径追踪考虑了光线的多次反射和散射,而传统的光线追踪算法通常只考虑一次反射。路径追踪通过追踪光线的传播路径,模拟了光线在场景中的复杂传播和交互过程,可以生成更真实的光照效果和渲染结果。

whitted style ray tracing存在问题

  • 漫反射无光照考虑
  • Mirror和Glossy区别

猜你喜欢

转载自blog.csdn.net/m0_51947486/article/details/132187616
今日推荐