Games101-6-光线追踪(Whitted-Style)
Games101-6-光线追踪(Whitted-Style)
为什么要用光线追踪
光栅化无法生成效果好的环境光,如软阴影。
光栅化效果一般但是渲染速度很快,光线追踪效果很好但是渲染速度慢。
Whitted-Style 的光线追踪
光线与表面求交
光线方程
光线与球面求交
同理可以推广到光线与所有隐式表面的求交,因为隐式表面有定义其的方程,可以将光线方程带入转化为解方程。
光线与三角形求交
方法一:先与平面求交
三角形处于一个平面中,首先判断光线是否与该平面相交,再判断是否与三角形相交(交点是否在三角形内部:叉乘的应用)。
平面方程: 由一个点和一个法相向量定义
方法二:直接利用重心坐标求交
Recall:重心坐标由三个点定义,可以表示这三个点所在平面的任意点。当系数都为正的时候表示点在三角形内。
加速结构
Bounding Volumes(包围盒)
先判断光线是否与包围盒相交,如果不与包围盒相交那就不可能与物体相交。
Axis-Aligned Bounding Box(AABB)
为了简化计算,包围盒都使用轴对齐包围盒。
与轴对齐包围盒求交
将包围盒想象成三对平面围成的,分别用光线与每对平面求交,得到光线进入这对平面的时间 tmin 和射出这对平面的时间 tmax(负值也可以,这里先将光线看作直线)。
思考:
光线进入包围盒仅当光线进入所有三对平面
光线射出包围盒直到光线离开所有三对平面
因此,就是要求最大的 tmin 和最小的 tmax:
包围盒划分
Uniform Grids
仅仅适用于有大量物体且其均匀分布在整个场景中的情况。
e.g. 当一个场景有大量留白只有中间有一个茶壶的情况,这种划分需要光线与大量不包括任何物体的盒子求交,因此效率很低。
KD-Tree
但是这种划分有个致命的缺点:难以求得哪些表面与划分出的包围盒相交,因此引出BVH。
物体划分(Bounding Volume Hierarchy)
为了避免统计哪些表面与包围盒相交,直接对表面进行划分,再对划分后的表面求新的包围盒。
参考
Games101-6-光线追踪(Whitted-Style)
https://kenny-hoho.github.io/2022/10/11/Games101-6-光线追踪(Whitted-Style)/