Games101 计算机图形学课程笔记: Lecture13 Ray Tracing 1

为什么需要光线追踪

实现软阴影
提高场景的真实感,尤其是光线不止反射一次时
在这里插入图片描述

基础光线追踪算法

对光的说明:

  • 光沿直线传播
  • 光在相交处不碰撞
  • 光从光源出传播到人眼,反过来也可以,即一种"感知光线"从人眼处传播至光源(光路的可逆性)

光线的投射

  • 从人眼放出“感知光线”,透过投影平面上的像素投射到虚拟世界上的某一点
  • 从这点向光源连一条线,检查该点是否在光照范围内
    在这里插入图片描述

Recursive (Whitted-Style) Ray Tracing

在这里插入图片描述
从人眼发出一条“感知光线”,与玻璃球相交,可以发生镜面反射和折射。在这里插入图片描述
反射光线和折射光线与物体再次相交,从这些物体都连接一条到光源的线。
分别计算光线与物体相交的所有点(下图4个黑点)处的着色,相加就得到了最开始“感知光线”第一个相交点的着色。
在这里插入图片描述

Ray-Surface相交计算

射线定义

在这里插入图片描述

表面形状定义

球体定义为 ( p − c ) 2 − R 2 = 0 (p-c)^2-R^2=0 (pc)2R2=0,其中p为球上的点,c为秋心点,R为半径。
其他平面可以隐式定义为 f ( p ) = 0 f(p)=0 f(p)=0

相交计算

射线与球体的相交: ( o + t d − c ) 2 − R 2 = 0 (o+td-c)^2-R^2=0 (o+tdc)2R2=0
射线与任意平面的相交: f ( o + t d ) = 0 f(o+td)=0 f(o+td)=0

射线与三角面片的相交

  • 先计算射线与三角面片所在的面的交点
  • 再计算交点是否在三角形内

面的定义

使用面的法线和面上一点可以定义一个平面: ( p − p ′ ) ⋅ N = 0 (p-p')·N=0 (pp)N=0
在这里插入图片描述

射线与面的相交

在这里插入图片描述

Möller Trumbore Algorithm

使用三角形的重心坐标
在这里插入图片描述
那么线与三角形的交点可以直接计算
在这里插入图片描述

Accelerating Ray-Surface相交计算

大场景中的三角形面片很多,计算一条射线与所有三角面片是否相交不合理,计算量太大,因此引入了包围盒的概念。
为了计算简单,使用轴对齐包围盒(Axis-Aligned Bounding Box, AABB)

轴对齐包围盒

包围盒可视为由三个对面围城的一个立方体,轴对齐包围盒的轴与坐标轴是平行的。
若光线与包围盒不相交,则包围盒中的物体与光线必不相交。
在这里插入图片描述

射线与AABB的交点

以二维为例:

  • 求直线在x=x0和x=x1上的交点,直线在这对面范围内被标记为红色线段
  • 求直线在y=y0和y=y1上的交点
  • 则两个红色线段的交集是直线在包围盒内的范围
    在这里插入图片描述
    在三维中,对三个对面分别做以上操作,则直线在包围盒内的t为
    在这里插入图片描述
    因为我们要求射线与包围盒的交点,射线的t必须是大于0的。
    满足下列条件,则射线与包围盒相交
    在这里插入图片描述

为什么使用AABB

为了计算简便。图中:

  • 上面的是射线与任意平面交点的计算。
  • 下面是射线与平行于y-z面的平面的交点计算,只需要计算x分量即可。
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/almost_afei/article/details/110497322