Ray Tracing
Ray Tracing
Light Rays
光线的定义:
- 光线沿直线传播,不考虑波动性。
- 光线之间不发生碰撞。
- 光线从光源发出,经过吸收、散射进入到人眼,但光路可逆。
Ray Casting(光线投射)
- 从摄像机对屏幕中的每一个像素链接一条线,打出一根光线,判断该光线是否与物体相交。
- 若相交,选取最近的交点,从交点打出一条线链接点光源,若与物体不相交,两条线形成一条有效光路,否则该点在阴影内。

Recursive (Whitted-Style) Ray Tracing(递归式光线追踪)
从摄像机进行光线投射,光线打到物体时计算该点的着色;光线进行反射和折射,在该点继续对反射光和折射光进行光线投射,打到的交点进行着色。最后将所有着色点的颜色相加,映射到像素上。

Ray-Surface Intersection(光线与物体的相交)
光线在数学上的定义
光线定义为射线,由起点和方向向量构成。
隐式表面
将光线方程与隐式表面方程联立,求解出t,o + td
即为交点位置。
显式表面
将每一个三角形与光线判断求交。
判断一个点是否在封闭物体内:
以该点为起点发出射线,若与物体有偶数个交点,在物体外;有奇数个交点,在物体内。
判断光线是否与三角形相交
-
先找到光线与三角形平面的交点,在判断该交点是否在平面内。
使用点法式定义平面,联立两方程求解: -
直接使用重心坐标表示交点,解线性方程组:
Accelerating Ray-Surface Intersection(加速求交)
Bounding Volumes
包围盒方面可参考:
18 DirectXCollision碰撞库 (directx11.tech)
Ray intersection with Axis-Aligned Box
对于轴对齐包围盒,可以通过求光线到达平面的时间来判断。对于一对平面,可以求出光线进入的时间\(t_{min}\)和离开的时间\(t_{max}\),对于其他对平面也是如此,最后再取所有时间的交集,即\(max(t_{min})\)和\(min(t_{max})\)。
三维物体求交:
对于三维物体,当光线进入了三个对面,光线才进入了物体;离开其中一个对面,就离开了物体,即\(t_{enter}=max(t_{min})\),\(t_{exit}=min(t_{max})\)。
当离开时间\(t_{exit}<0\)时,物体在光线的反方向,不相交。
当\(t_{exit}>0\),\(t_{enter}<0\)时,光线的起点在物体内,相交。
因此,相交的条件为
使用轴对齐包围盒可简化t
的计算: