15、计算机图形学——基于AABB进行光线追踪的加速(上)

white-styled光线追踪需要计算光线与每个三角形面的交点,并投影到像素上,并且还要考虑光线的反射和折射,所以,计算量很大(GPU你忍一下)

那么,如何降低white-styled光线追踪的计算量呢

一个基本的思想就是把三维场景中的物体用一个外壳包起来,如果光线和这个外壳都没有交点,那么,必然和物体的表面也没有交点

基于这个思想,就产生了AABB

一、AABB(Axis-Aligned Bounding Box)

AABB中文翻译是轴对齐包围盒,三对儿面都与xyz轴平行

为啥需要与xyz轴平行呢,是因为计算方便,如下图所示

普通平面计算与光线求交点计算t,需要三次减法(三个方向的坐标相减),六次乘法(两次向量点积)和一次除法

而AABB的这两个面只垂直于x轴,法线向量的后两个维度都是0,所以只需要在计算点积时,只需要考虑x方向的分量即可,所以只需要一次减法和一次除法

接下来,该如何计算t呢?以二维AABB为例

分别考虑xy两对儿直线,先看垂直于x轴的两条直线,穿过左边的时间为tmin,穿过右边的时间为tmax,再看垂直于y轴的两条直线,穿过下面的直线的时间为tmin,穿过上面直线的时间为tmax

这么多t,怎么甄别这么多t呢(t是负值表示反向传播)?依据有两点:1、光线穿过所有平面,才算进入AABB;2、光线离开任意平面,就算离开AABB

那么对于所有进入AABB的时间tmin来说,只要选择一个最大的tmin来表示进入的时间,就代表了此时光线已经穿过了所有平面,进入AABB;

对于所有进入AABB的时间tmax来说,只要选择一个最小的tmax来表示离开的时间,就代表了此时光线已经离开了AABB

所以可得,进入时间和离开时间为

试想一下,如果tenter小于texit,那是不是就表示光线是反向传播的(可以把最右边的那个图的光线反向传播),那么,此时光线就不会和AABB有交点

此外,如果texit<0,那么也表示光线和AABB没有交点

所以,如果想让光线和AABB有交点,那么必须满足如下条件

还有一种较为特殊的情况,就是texit>=0,tenter<0,那么就表示光源在AABB里面

有了AABB,就有了下面三种基于AABB对光线追踪加速的方法

二、均匀空间划分加速光线追踪

均匀空间划分的过程如下:

首先对于场景中所有的物体,先找一个大的AABB包起来

然后将这个大的AABB均匀划分成一系列小的AABB

之后把物体信息存储在每个小的AABB上

最后,根据光线的方向得到所有与光线相交的小AABB,如果该AABB中存在物体信息,那么再判断光线与物体表面的三角形网格是否相交

上述过程有一个关键点,就是将一个大的AABB具体要划分成多少小AABB,考虑两种极端情况,在下图的左上角,如果完全不划分的话,那么将不会有任何的加速效果

但是如果划分的太密集,那么得到的小AABB会太多,也会在一定程度上减缓加速的效果

所以,根据经验来看,小AABB的数量一般是一个常数乘以物体数量,而这个常数一般在27左右

因为存在划分小AABB数量多少会导致加速效果不同的问题,所以,这种加速方法如果被用来加速渲染比较空旷的场景,那么就会产生大量没有物体信息的小AABB,加速效果就不会太好

 

所以,这种方法一般适用于加速渲染物体分布均匀且较为密集的场景,比如下面的这种场景

参考

 GAMES101-现代计算机图形学入门-闫令琪_哔哩哔哩_bilibili

欢迎大家评论交流,作者水平有限,如有错误,欢迎指出

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值