|
|
@@ -2044,11 +2044,44 @@ Shadow Mapping可以处理硬阴影的情况:即一个点要么在阴影中,
|
|
|
|
|
|
### 加速计算光线与物体表面的求交 (Accelerating Ray-Surface Intersection)
|
|
|
|
|
|
-最暴力的做法,每个像素打出的光线都要与所有的物体,所有的三角形计算交点,并且光线每经过一次 反射/折射 都要计算新的光线与每个物体的三角形的交点
|
|
|
+计算光照最暴力的做法,每个像素打出的光线都要与所有的物体,所有的三角形计算交点,并且光线每经过一次 反射/折射 都要计算新的光线与每个物体的三角形的交点
|
|
|
|
|
|
如果真的是上面这种暴力做法,计算效率就特别低
|
|
|
|
|
|
所以必须想办法提高渲染的效率
|
|
|
|
|
|
+使用 **包围盒** / **包围体积** / `Bounding Volumes`
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+保证复杂物体一定在某个简单体积内
|
|
|
+
|
|
|
+如果光线碰不到包围盒,那么盒子内的物体更不可能碰到
|
|
|
+
|
|
|
+> 对应的表示方法可以是AABB表示
|
|
|
+
|
|
|
+依旧以 $(o + td - c)^2 - R^2 = 0$ 为例
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+以二维平面为例
|
|
|
+
|
|
|
+- 上图中间得到 $t_{y_{min}}$ 和 $t_{y_{max}}$ 两个点,表示光线与包围盒y轴交点是t的值
|
|
|
+- 上图左边得到 $t_{x_{min}}$ 和 $t_{x_{max}}$ 两个点,表示光线与包围盒x轴交点是t的值
|
|
|
+- 那么在包围盒中的t值为 $t_{x_{min}}$ 和 $t_{y_{max}}$
|
|
|
+
|
|
|
+通过求出 光线 与 x、y 平面相交的的时间,得出 $t_{enter} = min(t_{y_{min}}, t_{x_{min}})$ 和 $t_{quit} = max(t_{y_{max}}, t_{x_{max}})$
|
|
|
+
|
|
|
+> $t_{quit}$ 表示 光线 离开碰撞盒的t值
|
|
|
+> $t_{enter}$ 表示 光线 进入碰撞和的t值
|
|
|
+
|
|
|
+于是将该理论发展到三维空间
|
|
|
+
|
|
|
+$t_{enter} = min(t_{x_{min}}, t_{y_{min}}, t_{z_{min}})$
|
|
|
+$t_{quit} = max(t_{x_{max}}, t_{y_{max}}, t_{z_{max}})$
|
|
|
+
|
|
|
+- 如果 ${t_{quit}}$ 小于 0,则表示 光线 与 碰撞体 不相交,因为 光线 离开碰撞盒子的 t 小于0, 则表示 碰撞盒 在光线的反方向
|
|
|
+- $t_{enter}$ 小于0, ${t_{quit}} 大于0,则表示 光源 在碰撞盒 内部
|
|
|
+- 如果 $t_{enter}$ 小于 ${t_{quit}},并且 $t_{quit}$ 大于 0, 则表示 光线 与 碰撞盒 相交
|
|
|
|
|
|
# 动画模拟、仿真
|