目录
加速结构
均匀空间划分(Uniform Spatial Partitions)
空间划分
空间划分例子
KD-Tree
KD-Tree存储数据结构
KD-Tree结构中进行光线追踪
KD-Tree的缺点
物体划分
Bounding Volume Hierarchy(BVH)结构
如何划分一个节点
BVH的存储
BVH算法
空间划分 vs 物体划分
辐射度量学
Radiant Energy and Flux(Power)
Radiant Intensity
加速结构
对AABB结构进行优化来加速光线追踪的速度

均匀网格(Uniform grids)
空间划分(Spatial partitions)
均匀空间划分(Uniform Spatial Partitions)
对整个空间用小格子进行划分,判定哪个格子与物体的表面相交。

先判断格子与光线是否相交,若相交,进一步再判断格子里的物体是否与光线相交。

可以通过格子的结构排列很快求出与光线相交的格子。因此这种方法可以提高算法的速度。

当格子过大或者过小时,效果都不好,因此根据经验,格子的数量由以下公式决定(格子数量 = 常数C×场景中物体的数量)

PS:当场景中物体分布不均匀时,不适合使用这种方法。

空间划分
空间划分例子

Oct-Tree:八叉树(在二维是四叉树)
KD-Tree:每次划分只沿着一条轴砍一刀,分成两块。竖直和水平在树的层次中交替。例:第一层一个节点水平分割,第二层两个节点竖直分割。
BSP-Tree:二分法,每次选一个方向将空间分割开。
KD-Tree

KD-Tree将空间划分为一个二叉树结构。

KD-Tree存储数据结构
非叶子节点存储:

划分轴:xyz轴
划分的位置:划分平面的沿轴位置
指向子节点的指针
非叶子节点不存储物体
叶子节点存储:
对应区域包含的物体
KD-Tree结构中进行光线追踪

对树结构进行逐级判断,判断每个节点表示的包围盒与光线是否有交点。

若一个节点与光线有交点,则其子节点都必须进行下一步判断。
若一个节点与光线没有交点,则可直接忽略该节点及其子节点,不用进行下一步判断。

KD-Tree的缺点
KD-Tree很难建立,因为判断三角形和盒子是否相交是困难的。三角形可能三个顶点都不在盒子中,但与盒子相交,这种情况很难判断。
上图一个圆圈与3,4,5节点都相交,则这三个节点都必须存储该圆圈。
物体划分
Bounding Volume Hierarchy(BVH)结构
BVH是将物体划分为多个部分。将多个三角形划分为一堆一堆的,再分别求不同堆的包围盒。

一个物体只会出现在一个节点中。先划分再求包围盒。
包围盒是有可能相交的。为了提高效率,应该让包围盒的相交尽可能小。

总结,BVH过程:

先为整个场景计算一个包围盒
把包围盒中的物体根据物体数量划分为两个部分
重新计算划分后的两个部分的包围盒
递归进行计算
停止条件:如当叶子节点内部有足够少的三角形
如何划分一个节点
选择一个维度来划分
技巧1:总是选择最长的轴来进行划分,让最长的轴变短
技巧2:选择中间的物体作为划分。
三角形从左到右进行排列,找到中位数三角形进行划分,这样可以使两个节点的三角形数平衡。(快速选择:可在O(n)时间内完成找到第K大的数字)
BVH的存储
非叶子节点存储:

包围盒
子节点指针
叶子节点存储:
包围盒
包含的物体
BVH算法

空间划分 vs 物体划分

辐射度量学
可以精确的定义光,光与物体的交互,实现真实的光照。
在物理上精确的定义了光的各个属性

Radiant Energy and Flux(Power)
Radiant Energy:是光源辐射出来的能量总量(Q),单位是焦耳(J)。
Radiant Flux(power) : 是单位时间内光源辐射出的能量,单位是瓦特(W)。

FLux还可理解为单位时间内通过的sensor(光子)
Radiant Intensity
单位时间内光源向单位立体角(Solid Angles)所辐射出的能量。

Angle:使用弧长来定义,弧长/半径

立体角:三维空间内的角,面积/半径平方

单位立体角:

对于整个球来说,立体角为:

使用立体角可以代表从秋心发出的光线的方向。
Intensity就是光源在任何方向的亮度。将每个立体角方向的randiant Intensity积分得到radiant flux。

Games101 计算机图形学课程笔记: Lecture14 Ray Tracing 2相关推荐

  1. 计算机图形学学习笔记——Whitted-Style Ray Tracing(GAMES101作业5讲解)

    计算机图形学学习笔记--Whitted-Style Ray Tracing GAMES101作业5讲解 遍历所有的像素生成光线 光线与平面求交 遍历所有的像素生成光线 关于作业五中如何遍历所有的像素, ...

  2. Games101 计算机图形学课程笔记:Lecture 19 Cameras, Lenses and Light Fields

    目录 相机 快门与传感器 针孔相机 视场 Field of View(FOV) 曝光 Exposure ISO 光圈 快门 薄透镜近似 Thin Lens Approximation 薄透镜方程 De ...

  3. Games101 计算机图形学课程笔记: Lecture 08 Shading 2 (Shading, Pipeline and Texture Mapping)

    目录 Specular Term (Blinn-Phong) Specular Term 高光项 Ambient Term 环境项 Blinn-Phong Reflection模型效果 着色频率 fl ...

  4. Games101 计算机图形学课程笔记: Lecture 10 Geometry 1 (Introduction)

    目录 Applications of Textures Environment Map 凹凸贴图 位移贴图 三维纹理 几何 隐式表示 Algebraic Surfaces Constructive S ...

  5. 计算机图形学六:光线追踪-Ray Tracing

    文章目录 阴影映射(Shadow Mapping) Whitted-Style 光线追踪 原理 光线与物体求交 光线的表示方法 光线与隐式曲面求交 光线与显示曲面求交 如何加速 轴对齐包围盒(Axis ...

  6. Games101计算机图形学学习笔记:线性代数-向量

    目录 一.标量与向量 1.标量 2.向量 1.向量的方向 2.向量的长度 3.向量的计算 1.向量加法 2.向量的减法 3.向量的乘法 1.点乘 1.在图形学中我们经常使用点乘来计算两个向量的夹角,比 ...

  7. [NJUPT | 2021-2022-1] 南邮计算机图形学课程代码与笔记

    NJUPT-CG-OpenGL 由于疫情,[2021-2022-1] 的计算机图形学课程(课程代号:B0301312C )采取了线上教学模式. 鉴于这门课程的内容有一定难度,我已将课程回放保存并上传 ...

  8. GAMES101-现代计算机图形学学习笔记(作业07)

    GAMES101-现代计算机图形学学习笔记(作业07) Assignment 07 GAMES101-现代计算机图形学学习笔记(作业07) 作业 作业描述 思路 结果 原课程视频链接以及官网 b站视频 ...

  9. 计算机图形学 学习笔记(一):概述,直线扫描转换算法:DDA,中点画线算法,Bresenham算法

    前言 本笔记基于 http://www.icourse163.org/learn/CAU-45006?tid=1001746004#/learn/announce 感谢中国农大 赵明老师的分享~ 现在 ...

最新文章

  1. java获取真实ip
  2. WPF 4 Ribbon 开发 之 标签工具栏(Tab Toolbar)
  3. 红茶一杯话Binder(ServiceManager篇)
  4. 15.深度学习练习:Deep Learning Art: Neural Style Transfer
  5. 矩形分割(洛谷P1324题题解,Java语言描述)
  6. 每天定时打开某个网页_纯技术分享,不借助任何工具下载网页中的视频、音乐等~...
  7. display:inline-block;在各浏览器下的问题和终极兼容办法
  8. python深度学习第四讲——python神经网络参数更新
  9. c语言中局部变量存放在哪里,C语言全局变量存放在哪里?
  10. 八:微服务调用组件Dubbo
  11. 新浪低调上线开源镜像站
  12. php老虎杠子鸡虫条件,老虎、杠子、鸡——在游戏中学习
  13. Unity实现类似于LookAt 的功能
  14. 深入理解JVM03--判断对象是否存活(引用计数算法、可达性分析算法,最终判定),Eclipse设置GC日志输出,引用
  15. 树莓派 和 电脑共用显示屏 无屏幕玩转树莓派
  16. 怎样自己定制标签(Custom Tag)
  17. 超高清视频体验-4K片源
  18. 兼职淘宝刷好评的工作靠谱吗,商家补单时应该注意些什么?
  19. oracle latch锁,DTCC:Oracle栓锁竞争与Latch优化实践
  20. latex 模板使用技巧——参考文献篇

热门文章

  1. 贪 心 学用markdown
  2. 零基础机器学习(2)-你的第一个Python程序
  3. JAVA 创建学生类
  4. 5g通用模组是什么_中国联通发布《5G通用模组白皮书V2.0》
  5. 【电脑问题】win10更新后,java环境有问题:Error:missing `server` JVM at `*:\java\jre8\bin\server\jvm.dll`
  6. 关于windows重装原先wubi安装的Ubuntu启动项消失的解决办法
  7. centos 关机命令_Linux anacron命令用法详解
  8. ROS中阶笔记(五):机器人感知—机器视觉
  9. html一个页面多个动画,如何在单个html页面中添加两个相同的adobe边缘动画?
  10. 解决:Gitlab上出现“You won‘t be able to pull or push project code via SSH until you add an SSH key to you