Games101-课程14笔记

目录

两种AABBs加速光线

1.均匀空间分区(网格)

预处理-构建加速均匀网格

如何知道光线方向是如何遍历网格?

网格的划分大小问题, 分为两个极端

网格最佳的划分方法

优点: 网格适用于在大小和空间上均匀分布的大型对象集合

缺点: 不适用于大规模空白的场景

        2.空间划分

        2.1 八叉树

        2.2 BSP-Tree

        2.3 KD-Tree

        KD-Tree 预处理过程

        判断是否有交点 - 实际做法

        KD-Tree缺点(难点)

        2.4 BVH

        BVH的运作过程

        BVH过程总结

        BVH 与 KD-Tree的区别

        BVH缺点

        BVH如何划分一个节点(包围盒)

        停止划分原则

        内部节点存储

        叶节点存储

        节点表示场景中原有物体的子集

        算法的伪代码

        空间划分VS对象划分

        空间划分(比如KD-Tree)

        对象划分(比如BVH)

Basic radiometry(辐射度量学)

为什么要学辐射度量学?

辐射度量学是什么?

新术语介绍

辐射能定义

辐射通量定义

重要的光测量单位

① 从光源发出的光-----”辐射强度(Radiant Intensity)”

② 落在表面上的光-----”辐照度(Irradiance)”

③ 沿着射线传播的光-----”辐射度(Radiance)”

辐射强度的计算

角度与立体角

微分(单位)立体角的计算


第十四节课 :光线追踪(Ray Tracing 2)

使用AABBs加速光线追踪, 以下为两种AABBs方法:

1.均匀空间分区(网格)

2.空间划分

均匀空间分区(网格)(Uniform Spatial Partitions(grids))

预处理-构建加速均匀网格

1. 找到包围盒

2. 创建网格

 

3. 将对象与格子相交的区域记录下来(涂成灰色)

小错误: 右上角有一块应该涂成灰色

4. 最后, 对光线与场景求交点

4.1 按光线遍历的顺序逐步穿过网格

4.2 对于每个网格单元,测试与存储在该单元中的所有对象是否相交

如何知道光线方向是如何遍历网格?

答: 不可能对每个网格单元都测试一次是否有交点, 可以利用光线方向判断可能经过的网格,

比如方向为↗, 则只判断当前已产生交点的网格位置的右或者上是否有交点.

 

对于网格的划分大小问题, 分为两个极端

①太稀疏, 导致没有产生加速效果

 ② 太密集, 导致要判断太多的网格是否有交点,而效率低下

于是, 有人测试出网格最佳的划分方法.

C是一个常数, objs为3d物体数量

最佳划分方法没有很大意义, 主要思想就是要适中.

优点: 网格适用于在大小和空间上均匀分布的大型对象集合

如下图:

 

想象一下“运动场上的茶壶”, 描述一个大规模空白的场景出现一个需要判断光线与网格交点的物体, 需要遍历很多无效的网格,造成浪费.

缺点: 不适用于大规模空白的场景

2.空间划分(Spatial Partitions)

2.1 八叉树(Oct-Tree)

下图是2D的, 所以变成了四叉树, 每次切两刀(以网格中心为原点, 往x,y轴切)

如果已经切好的网格是空的(无物体), 那么就停止该网格的继续切分两刀的操作.

缺点 :如果维度上升, 切的次数会增多同时网格数量也会增多, 导致计算量增大.

2.2 BSP-Tree

不沿着x,y轴方向划分.

缺点: 与八叉树一样, 随着维度增高, 计算量就增大

2.3 KD-Tree

划分方式和八叉树极为类似, 但是KD-Tree只砍一刀(沿着x轴或者y轴), 一般是以x轴划分一次, 再以y轴划分一次, 这样交替划分, 以确保均匀划分.如果已经切好的网格是空的(无物体), 那么就停止这个网格的继续切分一刀的操作.

给定一个场景, 先把加速结构做好(例如KD-Tree)

KD-Tree 预处理过程

① 网格划分一次(沿y轴砍了一刀)(蓝/绿)

 

② 再次划分(沿x轴再砍一刀)(绿色=绿色+橙色)

Ps:下图只是忽略蓝色被处理过程, 蓝色和绿色网格处理方式一致.

 

③ 不断划分得到最终的KD树的数据结构

内部节点存储

-分割轴:x、y或z轴

-分割位置:分割平面沿轴的坐标

-子节点:指向子节点的指针

在内部节点中不存储任何对象, 物体对象都存储在叶子节点.

叶节点存储 : 对象列表

 

判断是否有交点 - 实际做法:

遍历KD树(每次都记录tmin和tmax,判断是否有交点)

① 先和最大的包围盒做交点检测

判断光线是否与A包围盒有交点

 发现光线与A包围盒确实有交点

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值