GAMES101 Lecture14 光线追踪2

目录

      • [Uniform Spatial Partitions (Grids)](#Uniform Spatial Partitions (Grids))
        • [Preprocess - Build Acceleration Grid(预处理,构建加速网格)](#Preprocess - Build Acceleration Grid(预处理,构建加速网格))
        • [Ray-Scene Intersection](#Ray-Scene Intersection)
      • [Spatial Partitions(空间划分)](#Spatial Partitions(空间划分))
        • [KD-Tree Pre-Processing (预处理KD树)](#KD-Tree Pre-Processing (预处理KD树))
          • [Traversing a KD-Tree(遍历KD树)](#Traversing a KD-Tree(遍历KD树))
        • [Object Partitions & Bounding Volume Hierarchy(BVH)](#Object Partitions & Bounding Volume Hierarchy(BVH))
          • [Building BVHs](#Building BVHs)
          • [Data Structure for BVHs(存储BVH的数据结构)](#Data Structure for BVHs(存储BVH的数据结构))
      • 空间划分和物体划分的区别
      • [Basic radiometry(辐射度量学)](#Basic radiometry(辐射度量学))
        • [Radiant Energy and Flux(Power)](#Radiant Energy and Flux(Power))
        • [Radiant Intensity(辐射强度)](#Radiant Intensity(辐射强度))
      • 参考资料

Uniform Spatial Partitions (Grids)

Preprocess - Build Acceleration Grid(预处理,构建加速网格)

  1. 首先,找到包围盒。
  2. 创建网格
  3. 存储与物体表面相交的格点

Ray-Scene Intersection

求出光线与哪些各点相交,沿着光线传播的方向遍历每个格子。

与这个格点存储的物体依次求交,判断是否与物体相交。

通常情况下,划分的格子数量与场景中的物体数量存在一个常数关系。

格子不能太稀疏,也不能太密集。

这种方法比较适合于场景中物体分布较为均匀的情况。

对于场景中存在大量空白的场景就不适合。

Spatial Partitions(空间划分)

空间划分的例子:

KD-Tree Pre-Processing (预处理KD树)

KD树的内部节点存储的信息:

  • 当前划分的轴是哪个轴:x-, y-, z-
  • 划分的位置:某个轴的坐标
  • 子节点:指向子节点的指针
  • 实际的物体都只存在于叶结点中。
Traversing a KD-Tree(遍历KD树)

从根节点开始,判断光线是否可能与当前节点相交;如果可能相交就递归地去搜索子节点,再去判断;如果不可能相交直接返回。

Object Partitions & Bounding Volume Hierarchy(BVH)

BVH 将场景中的物体进行划分,划分为两个子BVH ,两个子BVH 中的物体不存在交集,递归划分下去,保证每个物体最终只出现在一个包围盒中。

这种以物体进行划分就可以完全避免在KD树中,物体、三角形与包围盒求交,一个物体出现在多个节点中的问题。

BVH划分的包围盒有可能相交。

主要步骤:

  1. 找到当前的包围盒
  2. 递归地将当前的对象划分为两个子集。
  3. 重新计算两个子集的包围盒。
  4. 在必要的时候停止递归。
  5. 在每个叶节点存储物体。
Building BVHs

如何在划分一个节点呢?

  • 选择一个维度来划分。
    • 技巧1:总是选择当前最长的维度来进行划分。
    • 技巧2:以当前位于中位数的物体的位置来进行划分。

终止条件:

当节点中的物体数量少于某个数时停止划分,比如5.

Data Structure for BVHs(存储BVH的数据结构)

中间节点:

  • 包围盒
  • 子节点

叶节点:

  • 包围盒
  • 对象列表

BVH和光线算法的主要步骤:

空间划分和物体划分的区别

  • 空间划分(KD-Tree)

    • 空间划分为两个不相交的部分
    • 一个物体可能被包含在多个节点中。
  • 物体划分

    • 物体被划分在不相交的子集中。
    • 包围盒可能在空间中相交。

Basic radiometry(辐射度量学)

定义了照明测量系统和单位。

能够精确测量空间中光的一些属性:

复制代码
辐射通量、强度、辐照度、辐射度

辐射度量学相当于在物理上准确定义和度量光照的一个方法。

Radiant Energy and Flux(Power)

Radiant Energy: Energy that is transferred by electromagnetic radiation, such as light, X-rays, gamma rays, and thermal radiation, which may be described in terms of either discrete packets of energy, called photons, or continuous electromagnetic waves.(电能,由电磁辐射(如光、X 射线、伽马射线和热辐射)传递的能量,可以用离散的能量包(称为光子)或连续的电磁波来描述)

Radiant flux : 单位时间内的能量,也就是功率,单位是lumen.

几个重要的光学度量名词:

Radiant Intensity(辐射强度)

定义:由点光源发出的每单位立体角辐射强度,单位立体角的Power。

什么是立体角呢?

角度:弧长除半径。

立体角:在三维空间中的延伸。

面积除半径的平方。

因此,Radiant Intensity的定义就得到了:

参考资料

GAMES101 Lecture14

相关推荐
Mintopia3 小时前
三维空间的 “切蛋糕大师”:八叉树的底层奥秘与妙用
前端·javascript·计算机图形学
Mintopia1 天前
B 样条曲线:计算机图形学里的 “曲线魔术师”
前端·javascript·计算机图形学
Mintopia12 天前
探索屏幕空间效果:SSR 与 SSAO 的奇妙之旅
前端·javascript·计算机图形学
Mintopia13 天前
计算机图形学:屏幕空间效果的奇幻之旅
前端·javascript·计算机图形学
martian66513 天前
AI大模型学习之基础数学:高斯分布-AI大模型概率统计的基石
人工智能·学习·数学·机器学习
Porien14 天前
Vulkan-记录 官方教程的详细步骤(记录踩坑)
c++·计算机图形学
Mintopia15 天前
计算机图形学之自定义着色器:用 GLSL 在 JavaScript 中绘制奇幻光影
前端·javascript·计算机图形学
IceTeapoy15 天前
【基础概念】蒙特卡洛算法
数学·算法
八一考研数学竞赛16 天前
第十七届全国大学生数学竞赛初赛模拟试题
学习·数学·latex·全国大学生数学竞赛
Mintopia16 天前
在数字画布上跳华尔兹:用 JavaScript 粒子系统模拟自然奇观
前端·javascript·计算机图形学