本系列根据国外一个图形小哥的讲解为本,整合互联网的一些资料,结合自己的一些理解。
该方法是通过跟踪穿过图像平面中每个像素的光路来生成图像。
在现实世界中,光从光源出发,然后到达我们的眼睛。然而,我们在光线追踪中以相反的方式做到这一点。
通过光线追踪渲染的场景比扫描线渲染更加真实,它还可以模拟多种光学效果,如反射、折射、阴影、散射、焦散等。
从根本上说,它是基于几何光学的数字模拟。光线追踪使用向后映射的方式,从观察者到物体,然后从物体到光源的有限数量的光线。
生成射线遵循两点之间的直线方程。
通过这种方式,我们可以从视角产生初始光线。
但有一个问题。我们的场景中通常存在很多几何图形,计算它们的所有反射成本太高。我们可以根据包裹子网格的新网格(边界体积层次结构)来计算它,而不是再次计算基元
我们有两个方程。一个是关于射线的,另一个是关于球体的。然后,我们可以通过线性求解方程来求根。
得到交点 P 后,我们需要找到该点上的法向量。
它与从球体中心点到P点的矢量方向相同。我们只需要将其归一化即可。
2. 如果满足条件一,则检查三角形区域内部是否存在交点。
首先,使用两条边 (V1, V2) 计算法线向量 (N1),然后我们在 (p-p0) 和法线 (N1) 之间进行点积。如果结果为负,则表示交点在三角形之外。
关于求交点,单纯地计算所有交叉点太费力了。我们可以使用包围盒层次结构来加速该过程。
与三角形相交类似,我们首先检查光线和包围盒之间是否存在相交,如果它相交,我们就进入包围盒的子节点,然后不断重复该过程!
让我们来看下面的例子。在此图中,光线进入包围盒1,与包围盒 2 相交。然后,我们需要进入包围盒的下一个深度,计算出也与包围盒 B 相交。像这样,我们重复这个算法,直到它击中最后一个子节点。