光线的三点假设:
- 光线按直线传播
- 光线之间不会发生碰撞
- 光线会经过一系列折射反射进入摄像机
可以从摄像机发出光线,推出可逆的光路
上图中,透明球在与相机直连的线条处,需要将折射和反射的着色点结果相加,如果有光源直射,需要将光源在该点的着色结果也相加
相机直射出的第一条光线为primary Ray,之后做处理的均被称为secondaryRay,与光源的连线被称为shadowRay
- 光线定义
对于球表面求光线交点
之后解得t的值:
t:首先是正数
在可以分多种情况讨论,相离相交相切 - 总过程可总结为:
- 关于光线和物体求交
如果光源在物体内,则与物体交点一定是奇数个,否则一定为偶数个 - 光线和物体求交
- 与三角形求交
可以首先将这个问题转化为光线和平面求交,再判断交点是否在三角形内 - 如何定义一个平面?
记录该平面上一个点p,和该平面的法线,即可定义一个平面
上图中,N为法线,p’为平面上的一个点,平面内任意一个点p可以满足该式子
带入光线射入的公式可得出t的值,从而可得光线与该平面的焦点
最后根据重心坐标的知识得出该点是否在三角形内。 - 另一种方法Moller Trumbore算法
解这个式子主要通过矩阵形式解
- AABB包围盒(包围体积)
Axis-Aligned Bounding Box轴对齐包围盒
如果针对物体上每一个三角形都判断是否会被光线照射到,那么带来的消耗将会非常大,所以引入AABB包围盒机制来对判断光线照射这个过程进行加速,如果光线碰不到包围盒的话,就不可能碰到物体上任何一个三角形
- 光线和包围盒相交
上图中,找到光线经过x0,x1平面的时间,找到光线经过y0,y1的时间,通过交集的性质求得tmin和tmax,如果最后的结果是tmax > tmin,那么说明光线穿过了包围盒
那么对于3D包围盒求tmin和tmax:
如果光线进入时间为负,离开时间为正,则说明光源在包围盒内
那么有: