写个读书笔记,一来作为字典以后可以查,二来记录自己的理解。
并没有对每个知识点的详细解释,大部分只有主观的定性的解释。
光线跟踪受到的限制:
1.时间复杂度和空间复杂度都很高。
2.主要时间用在了可见性计算和求交测试。
所以为了加速光线跟踪,对空间的结构有了如下一些优化:
• Hierarchical (层次性) Bounding Volumes (包围盒)
• Uniform Grids (均匀格点)
• Quadtree/Octree (四叉树/八叉树)
• K-d tree / BSP tree (空间二分树)
都是基于一个思路,先测试是否与 父节点相交, 再判断是否与子节点相交。只是划分方式不同。
层次包围盒:
均匀格点:
每个格点有自己所含的面的索引,所以将相交检测 变为了对格点的遍历。
八叉树:
均匀格点,划分得太均匀肯定有问题,应该物体多的地方就划分细一些,物体少的地方就划分得少一些。所以有了八叉树。
即:如果一个格子里的物体的数量大于了一个阈值,就将其划分为八个子格子。
BSP二分空间树:
八叉树是在需要的时候把格子分为八个子格子,BSP是分为两个格子。
所有的空间划分方法都有与轴平行的需求,因为与轴平行可以简化计算。
其他的光线追踪技术:
Distributed Ray tracing(分布式光线跟踪) :
普通光线追中用单一的光线,分布式光线追踪用多条光线。实现了以下效果:
- 光照方面Illumination :extended light sources, soft shadows 软阴影
- Pixel: anti-aliasing; 反走样
-
Lens: depth-of-field; 景深
-
BRDF: glossy-reflection; (模糊镜面反射)
- Time: motion-blur 动态模糊
光束跟踪Beam Tracing :
如果光束的四个角围成的矩形与物体相交,则在光束内的 光线是与其相交的