加速光线追踪

通过在aabb包围盒内画格子加速光线追踪

上一篇博客为了加速光线追踪启用了aabb包围盒 我们发现和包围盒相交容易 和每一块模型相交比较难 如果我们一旦和包围盒相交了 我们就需要和包围盒内的每一个物体相交 一样很耗时 所以我们在每一个包围盒内分出格子 如图
计算机图形学第十天
当我们与包围盒相交后 我们再与盒子内的格子(三维来说就是小方块)相交 当相交的格子内有物体时(我们会先把有物体的格子标记出来)我们就会判断一次光线和物体是否相交 这样就加快了速度

Oct-Tree(八叉树)

计算机图形学第十天
最左边那张图 八叉树就是把aabb包围盒切三刀分成八块 然后在每个子节点再切成八块 一直切到你不想切为止 图中只切了左上角那一部分 而什么时候不切了 就是看你自己定条件(比如说从图中二维的情况可以定 如果切出来的四块里面有三块是没有东西的 这个时候就不用再切了

KD-Tree

计算机图形学第十天
图中我们标的数字就是KD-Tree树每一轮切的 他会横竖交替着切(在三维上就是xyz轴交替着切) 每切一次把包围盒分成两部分 类似于二叉树
计算机图形学第十天
就像图中这样 蓝色绿色橙色那边也一样要分 只是不方便写出来 他分的具体位置没有定死 不是一定要在中点处分 每分一次要知道下一次是分什么轴(x,y,z)这个要按顺序来

KD-Tree难点

很难判断一个三角形是否在这个小的包围盒内 就如上面图中的 很难判定圆圈是否有一部分在分出来的区域内
比如说 圆圈有可能是一小部分在包围盒内 也有可能圆圈包住了包围盒
一个物体可能在多个小包围盒内(一个圆圈可能在多个方框内) 可能出现重复计算

BSP-Tree

相较于KD-Tree他的区别就是它可以斜着切

Bounding Volume Hierarchy(BVH)(现今最常用的)

他是通过物体来划分的

如何创建BVH

计算机图形学第十天
计算机图形学第十天
他是按照物体来划分小包围盒 (同样黄色那边还要划分)小包围盒之间可以出现重叠的情况 但他不会出现重复计算的问题 因为虽然有重叠的部分 但是不会出现一个三角形属于多个小包围盒(子节点)
步骤:
1.递归的把大包围盒的物体按一定规则分为两个部分(也可以按x,y,z轴依次划分,具体情况具体分析(可以每次按 分一个最长的轴))
2.把划分成的两个部分(划分的时候要把里面的物体分的尽量平均 就是分出来的两棵树里面的三角形尽量一样多 这个时候我们就需要找到第n/2个三角形的位置进行划分 有一个算法是快速选择可以尽快找到(也可也以之间排序 再找))重新计算包围
3.当叶子节点里面的三角形足够少的时候停止划分

创建好BVH后如何使用

计算机图形学第十天
先判断光线是否和该节点相交
如果不想交相交直接返回
如果相交则判断是否为叶子节点
如果是叶子节点 就判断光线和节点里面的物体是否发生碰撞
如果不是叶子节点 就通过递归分别判断该节点的两个子节点和光线 是否相交

辐射度量学

Radiant flux(power):

Radiant flux(power):是单位时间内的能量 有点更类似于光的亮度
单位:lumen(lm)
计算机图形学第十天

Radiant Intensity:

Radiant Intensity:每一个单位立体角上的能量
单位candela
计算机图形学第十天

Solid Angles(立体角):

计算机图形学第十天
平面角是弧度l / 半径r
而立体角就是面积 / 半径平方r2
整个球的立体角是 球表面面积 / 半径平方 得 4Π

单位(微分)立体角:

计算机图形学第十天
总的来说就是单位立体角上的能量Radiant Intensity = 单位时间上该物体发出的所有能量Radiant flux(power) / Solid Angles(立体角) 4派

相关文章: