Games101笔记——Lecture 13: Ray Tracing(Whitted-Style Ray Tracing)

Lecture 13: Ray Tracing(Whitted-Style Ray Tracing)

Why Ray Tracing?

  • 光栅化无法很好地表示全局效果
    • 软阴影
    • 当光线多次反射的时候(包括间接光照)
  • 光栅化很快,但其品质相对较低
  • 光线追踪很准确,但是非常慢
    • 光栅化:实时,光线追踪:离线
    • 生成1帧需要10k个cpu小时

Light Rays(光线的定义/假设)

  1. 光线沿直线传播(尽管不那么正确)
  2. 如果光线交叉,彼此不发生碰撞(尽管也不那么正确)
  3. 光线一定从光源发出经过反射、折射最后到达我们的眼睛(同样光线具有可逆性)

古代西方:眼睛发出感知光线的理论(有一定道理)

Ray Casting (光线的投射)

Games101笔记——Lecture 13: Ray Tracing(Whitted-Style Ray Tracing)_第1张图片

Ray Casting - Generating Eye Rays

Games101笔记——Lecture 13: Ray Tracing(Whitted-Style Ray Tracing)_第2张图片

Ray Casting - Shading Pixels (Local Only)

Games101笔记——Lecture 13: Ray Tracing(Whitted-Style Ray Tracing)_第3张图片

Recursive (Whitted-Style) Ray Tracing (重点)

Games101笔记——Lecture 13: Ray Tracing(Whitted-Style Ray Tracing)_第4张图片

Recursive Ray Tracing

  • 对于不同材质表面,一条光路经过时考虑(多次)折射和反射

  • 如果光源能够照到光线的弹射点(折射或反射),则对应着色结果加入最后的图像

  • 因此要通过shadow rays 计算每一个弹射点对于光源的可见性

  • 而且要考虑距离导致的光线衰弱(因为能量守恒)

  • primary ray:由眼睛直接“打出”的光线

  • secondary ray:由眼睛“打出”一次弹射后的光线

  • 接下类解决具体的技术问题

Ray-Surface Intersection (光线和物体表面的焦点)

Ray Equation (光线方程定义)

  • 光线由其起点和方向定义
    Games101笔记——Lecture 13: Ray Tracing(Whitted-Style Ray Tracing)_第5张图片

Ray Intersection With Sphere (光线和球的交点)

  • 交点同时满足光线方程和球方程
    Games101笔记——Lecture 13: Ray Tracing(Whitted-Style Ray Tracing)_第6张图片
    Games101笔记——Lecture 13: Ray Tracing(Whitted-Style Ray Tracing)_第7张图片

Ray Intersection With Implict Surface (光线和隐式表面的交点)

Games101笔记——Lecture 13: Ray Tracing(Whitted-Style Ray Tracing)_第8张图片

Ray Intersection With Triangle Mesh (光线和三角形网格的交点)

为什么这么做

  • 三角形网格是最重要的显示表面
  • 渲染上:可见性,阴影,光照
  • 几何上:测试某点发出的光线,若光线与物体交点为奇数,则该点在物体内部,否则在外部(推广到3d仍然可行,前提是物体应该为封闭的)

如何计算

  • 简单的想法:就逐个三角形计算交点个数
  • 简单但是比较慢(加速方法?)
  • 注意:可以用0或1个交点(忽略恰好平行的情况)

Ray Intersection With Triangle

分解为两个问题

  • 光线和平面的交点(问题)
  • 交点是否在三角形内(做过)
Plane Equation (平面的定义)
  • 平面基于一条法线和其经过的一个点定义
    Games101笔记——Lecture 13: Ray Tracing(Whitted-Style Ray Tracing)_第9张图片
Ray Intersection With Plane

Games101笔记——Lecture 13: Ray Tracing(Whitted-Style Ray Tracing)_第10张图片

Moller Trumbore Algorithm
  • 更一步到位的算法
  • 只需要解出公式表示的线性方程组(使用克莱默法则)
  • 要求t为正,重心坐标系数均为正
    Games101笔记——Lecture 13: Ray Tracing(Whitted-Style Ray Tracing)_第11张图片

Accelerating Ray-Surface Intersection (光线表面求交点的加速)

  • 像素×物体×弹射:逐个计算的原始方法太慢了!
  • 怎么办呢?
Bounding Volumes (包围盒/包围体积)
  • 如果光线碰不到包围盒,更加碰不到包围盒中的物体
  • 三维中最常用的是长方体,理解成三组不同的对面的交集
  • 通常我们使用轴对齐包围盒(AABB),长方体的轴沿着坐标轴
Ray Intersection with Axis-Aligned Box (判断光线和包围盒交点)
  • 在二维中考虑
  • 从两个轴方向上计算得到两组进入、出去的时间值,即为两个线段
  • 求得两个线段的交集,即为光线实际进入和移出合资的时间
  • 三维中考虑相似,即当光线进入全部三个对面时才进入,光线离开任意一个对面就算离开
  • 即对各对面进入时间求max,对各对面离开时间求min
  • 由此,如果进入时间<离开时间,则与盒子又交点,否则没有

其他问题

  • 如果离开时间<0:盒子在光线“背后”——无交点
  • 离开时间>=0,进入时间<0:一定有焦点
  • 总结:光线和AABB有交点,当且仅当进入时间<离开时间 且 离开时间>=0
Why Axis-Aligned?
  • 利用了当平面和轴垂直时计算更加容易,如下图:
    Games101笔记——Lecture 13: Ray Tracing(Whitted-Style Ray Tracing)_第12张图片

你可能感兴趣的:(Games101,图形学)