跳转到主要内容
games101 4 tags

L13~14 Ray Tracing (1)

Whitted风格光线追踪

cover

1 引入——Shadow Mapping 阴影贴图

之前提到光栅化的着色,我们知道这是一种局部的现象。着色的过程中,我们只会考虑着色点自己,光源,以及摄像机。我们不考虑其他物体,甚至不考虑物资自身的其他部分对着色点的影响。而事实上是会有遮挡的关系的,是会有阴影的。

Shadow Mapping

Shadow Mapping这个方法是一种图像空间的做法。关键思想在于——如果有点不在阴影里,那么这个点可以被摄像机和光源都看到

阴影思想

1.1 阴影贴图原理

  1. 从光源看向场景,做一遍光栅化,得到光源能看到什么
  2. 把这个图的深度记下来
  3. 从摄像机出发,再次看向这个场景
  4. 把现在看到的点,投影回光源刚才看到的投影平面上进行深度比较
从光源看 深度图 从相机看 深度一致 深度不一致

1.2 存在的问题

  • 硬阴影(点光源)
  • 阴影图的分辨率
  • 浮点数的比较
软硬阴影

2 Why Ray Tracing?

光栅化不好做全局的效果,比如软阴影,光泽反射,间接光照。

全局效果 光线追踪示例

3 基本光线跟踪算法

3.1 光线定义

  • 光沿直线传播
  • 不发生碰撞
  • 是从光源到人眼的(根据光路可逆性,应用时会采取从人眼到光源的方法)

3.2 Ray Casting 光线投射

光线投射 Eye Ray Shadow Ray

3.3 递归(Whitted风格)光线追踪

光线可以弹射很多次,在每一个弹射点都会去计算着色的值,然后把它们都加回这个像素的值里面去。

Whitted开始 反射折射 多次弹射

4 光线与物体相交

4.1 光线与隐式表面相交

光线与球 求解 一般隐式表面

4.2 光线与显式表面求交

三角形肯定在一个平面内,所以问题可以被分成两部分:光线是否和平面有交点;这个交点在不在三角形内部。

三角形求交 分两步 平面定义 平面求交 Moller-Trumbore

5 轴对齐包围盒(AABB)

包围盒的思想是,将一个复杂的物体,用简单的形状围起来,保证物体一定在这个简单的形状之内。如果光线连包围盒都碰不到,那肯定碰不到包围盒里的物体。

AABB求交 AABB条件

6 加速结构

6.1 均匀空间划分

均匀划分 光线遍历

6.2 KD树

KD树每次沿着某一个轴砍开,并且只砍一刀。空间被划分成类似二叉树的结果。

KD树结构

6.3 物体划分 & BVH

BVH不从空间划分,而是从物体开始划分。一个物体只会出现在一个节点里,并且不用算三角形和包围盒求交了。

BVH划分1 BVH划分2

到这里我们算是讲完了Whitted风格的光线追踪。

Related Articles

继续阅读