计算机图形学----光线追踪(Ray Tracing)----加速(BVH)

光线追踪–加速

	光线要和所有的三角形求交点,每一个光线都得计算光线和三角形求交。为了提高渲染的效率,我们需要计算加速。
	下图为1000w+三角形,光线弹射很多次,计算复杂。

在这里插入图片描述

加速的方法—包围盒的定义

如果光线碰不到物体的包围盒,那么光线肯定碰不到物体本身
二维包围盒:
在这里插入图片描述
三维的包围盒:
轴对齐包围盒(AABB).我们把包围盒看成是3个对面,且3个对面都与x,y,z中的某一个平面平行。
在这里插入图片描述

光线和包围盒(AABB)相交

光线和AABB求交(二维):
图一:光线在tmin时间进入到盒子(准确来讲,是进入到x0所在的线),tmax出去盒子(准确来讲,是出去到x1所在的线)
图二:光线在tmin进入y0所在的线,在tmax出去y1所在的线。(且tmin <0 ,因为光源在y0和y1之间)
图三:对于二维的情况,光线在tmin进入长方体,在tmax出去长方体。光线实际在包围盒的时间是tmax-tmin。图一和图二的交集为图三。
在这里插入图片描述
光线和AABB相交(三维):
理解为光线和三个对面(可以理解为无限大的平面)相交:
1.光线只有进入每个对面,光线才算进入到三维的AABB包围盒
2.光线只要离开一个对面,光线就离开了AABB包围盒
光线进入包围盒:
t_enter = max{tmin} // 光线进入最后一个对面的时间
t_exit = min{tmax} // 光线离开包围盒的时间
如果 t_enter < t_exit ,那么我们认为光线在包围盒内有一段时间。也就是光线和包围盒相交。
问题:
如果t_exit <0 :光线在三角形背后
i如果 t_exit >=0 and t_enter < 0? 光线的起点在包围盒中。
结论:
光线和AABB包围盒有交点,当且仅当:
t_enter < t_exit && t_exit >=0
*

算法简化:
原理:光线和平面x相交的时间t,可以理解为(p.x - o.x) / dx。

在这里插入图片描述

如何利用光线和AABB包围盒相交加速求交

1.场景预处理,划分格子(可以理解为块,包围盒)
2.首先判断光线如何和格子相交
在这里插入图片描述空间划分的算法:
在这里插入图片描述
KD-Tree和Oct-Tree 比较难判定三角形是否在某个包围盒内。
通过物体来划分加速结构(BVH划重点)
BVH算法根据物体来划分包围盒:
1.BVH防止一个物体出现在多个格子中
2.有可能有重叠的部分
在这里插入图片描述
如何做合适的划分:
1.沿着最长的轴划分
2.划分子节点的时候,永远选择第n/2大的三角形进行划分(n为场景中的三角形数目)

如何计算光线和BVH相交:
在这里插入图片描述

BVH效率优化

思路:
1.沿着最长的轴划分做第一次划分
2.找到cost最小的组合方式:
假设有Na个物体划分为子节点A,有Nb个物体划分给子节点B. 并且认为概率p与包围盒表面积成正比。
那么如下公式,可以计算出划分子节点的时候的代价C,该划分方式使得该节点的代价最小。
在这里插入图片描述
致谢:
截图和公式来源闫令琪老师games101课程 Ray Tracing 1
https://www.bilibili.com/video/BV1X7411F744?p=13
感谢闫令琪老师为我们带来这么精彩的图形学课程

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值