GAMES101-现代计算机图形学学习笔记(14)

本文是GAMES101现代计算机图形学的学习笔记,主要探讨了光线追踪的加速技术,包括Uniform grids和Spatial partitions(如KD-Tree)以及辐射度量学的基础概念,如Radiant Energy, Flux和Radiant Intensity,为理解更真实的光照模型提供理论基础。" 120147558,5000057,Hive窗口函数row_number详解与应用,"['hive', '大数据', '排序函数']
摘要由CSDN通过智能技术生成

GAMES101-现代计算机图形学学习笔记(14)


原课程视频链接以及官网
b站视频链接: link.
课程官网链接: link.

光线追踪的加速

上一节课说了计算光线-物体的求交通常可以通过计算光线与物体表面包围盒的求交来进行加速。这只是从物体出发的一个角度,另外一种方式是通过对场景进行划分来达到加速的效果。常用的对场景进行划分的方法有 Uniform grids 和 Spatial partitions。

Uniform grids

U n i f o r m   g r i d s Uniform\,grids Uniformgrids 简单来说就是将场景划分成一个个规整的格子,通过格子来判断光线与物体的相交情况。

构建 U n i f o r m   g r i d s Uniform\,grids Uniformgrids 的步骤如下:

  1. 找到包围盒
  2. 创建格子
  3. 存储每个对象至格子中

那么此时判定光线与物体相交就转换成光线与格子相交问题,当光线与格子相交后,再去考虑它与格子内物体的相交情况:
在这里插入图片描述

这种方式有一些问题:

第一个是格子的分辨率问题,如果格子的分辨率设置太小就失去了划分的意义,如果分辨率太大也不好。

第二个是格子通常只适用于规整的场景,相反,物体位置较为稀疏的场景就不适用这种划分方案,因为此时很多格子都不存储物体,大量时间被浪费在了光线与格子的求交上:
在这里插入图片描述

Spatial partitions

S p a t i a l   p a r t i t i o n s Spatial\,partitions Spatialpartitions 通常有 Oct-Tree 、KD-Tree 以及 BSP-Tree 三种划分方案:
在这里插入图片描述

下面将在二维对三种方案进行讨论:

Oct-Tree:每次迭代都将区域重新切分为均匀四块,按一定规则停止切分(如切分得到的四块区域中,三块都没有物体;或四块区域都还有物体,但是此时的区域已经较小)

KD-Tree:总是沿某个轴进行切分,每次划分总会在原来的区域上生成两块新的区域(这里沿轴的次序是由交替进行的,如二维中总是按着 x/y 或 y/x 的次序进行交替切分)

BSP-Tree:每次都是沿着一定方向进行切分(非水平或竖直)

KD-Tree 预处理

KD-Tree 每次划分都会生成新的两块区域,然后再在两块区域内进行划分,直至满足递归截至条件。

下图显示了一个三维k-d树.。第一次划分(红色)把根节点(白色)划分成两个节点,然后它们分别再次被划分(绿色)为两个子节点。最后这四个子节点的每一个都被划分(蓝色)为两个子节点:
在这里插入图片描述
假设空间 A 被划分为如图所示 KD-Tree,那么它的结构等同于其中树结构所所描述:
在这里插入图片描述
数据结构
中间节点(A,B,C,D)存储了:

  1. 划分后的轴
  2. 划分后的切分平面
  3. 子节点的指针
    叶子节点(1,2,3,4,5)存储了:
    区域中包含的物体的列表

遍历:

  1. 发射光线从根节点出发,分别判断光线与左右节点是否相交,若相交则进入2;否则,则与节点不相交
  2. 递归判断相交直至叶子节点,若与叶子节点相交,进入3
  3. 挨个判断叶子节点存储物体与光线的相交情况

下列图分别显示了光线遍历至 B 节点的情况:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值