为什么要光线追踪
光栅化存在什么问题
-
无法实现软阴影(光源不是严格点光源时)

-
无法解决光线反射超过一次的情况

-
相对来说光照效果的质量低

光线追踪的特点
- 准确
- 慢(相对光栅化)

什么是光线追踪
光线的基本假设
- 光线沿直线传播(x)
- 光线在传播的过程中相互不干扰(x)
- 光线从光源传播到眼睛,其物理特性在路径反转的情况下相同
光线追踪的基本原理
- 从相机沿着每个像素,向真实世界看去,找到其相交的物体
- 计算该物体的实际着色

最最基础的光线追踪(Whitted-Style Ray Tracing)
从上图可以看见,只考虑光线的一次反射,就是Blinn Phong模型,下面我们要介绍一个基础的光追模型Whitted-Style Ray Tracing。
Whitted-Style Ray Tracing 做了啥?
-
考虑了Reflected Ray

-
考虑了Refracted Rays

-
递归计算
伪代码
for pixel in image
for triangle in object
ray -> direct light
ray -> reflected ray
for triangle in object
ray -> refracted rays
for triangle in object

so!! 如何判断一个光线与三角网的相交情况??
我们怎么肝
光线-物体(Triangle Mesh)相交
- 先对光线和三角形所在的平面求交
- 判断交点是在三角形内还是外

存在的问题
- 慢
(判断次数:像素数 x 三角形数 x 碰撞数)
(判断难度:每一次均须进行光线与三角形的相交判断)
如何变得更快 - Bounding Volumes
什么是 Bounding Volumes
一个包围住物体的盒子

使用方式 & 优点
- 使用:先进行包围盒的相交判定,如果相交再和其内的三角网进行判定
- 优点:如果和物体的包围盒不相交,避免了大量的无效计算
如何划分 Bounding Volumes
Uniform grids
How To Use
- Build Acceleration Grid

- Ray-Scene Intersection

Problems
-
格子太大:相当于没有加速效果

-
格子太小:不必要的网格遍历变相导致效率下降

-
object分布不均匀导致格子难以划分

Spatial partitions(KD-Tree)
- Oct-Tree
- KD-Tree
- BSP-Tree


问题
- 一个三角形可能会属于多个叶子节点
- 进行空间划分的过程中需要对每个包围盒和三角形的相交判定(难)
Object partitions & Bounding Volume Hierarchy(BVH)

优点
- 每个三角形只会属于一个包围盒
- 根据范围内的三角形,可以直接算出包围盒的大小,避免了相交判断
参考资料
- Games 101






![[HBZ分享] 小米手机如何解BL锁](https://img-blog.csdnimg.cn/7974185433104db192cc9f4f871078fb.png)












