Games101-Ray Tracing (Introduction) -L13

Ray Tracing - Introduction (L13)

0.Introduction

0.1 光栅化无法处理的问题

Rasterization couldn’t handle global effects well.

1

1.Soft Shadows(软阴影)

image-20220207102616490

2.light bounces more than once(多次反射)

0.2 Rasterization vs. Ray Tracing

1
2
3
4
5
6
7
8
Rasterization
-fast, but low-quality
-real-time

Ray Tracing
-accurate, but very slow
-offline
-~10K CPU core hours to render one frame in production

质量和时间为“Trade-off”

1.Recursive (Whitted-Style) Ray Tracing

1.1 Light Rays

基本假设: 直线传播;不发生碰撞;光路可逆

(将物体发射到观察者的光线等效成由观察者发向物体一道“感知光线”,光路仍成立,这也是光线“追踪“的命名由来)

1
2
3
1. Light travels in straight lines (though this is wrong) 
2. Light rays do not “collide” with each other if they cross (though this is still wrong)
3. Light rays travel from the light sources to the eye (but the physics is invariant under path reversal - reciprocity[可逆性]).

image-20220211191805453

Eyes send out feeling rays to the world

1.2 Ray Casting(光线投射:生成不同的光线)

1.2.1 概述

image-20220211193001892

1
2
3
基本流程:
1. Generate an image by casting one ray per pixel
2. Check for shadows by sending a ray to the light

1.2 2 An Example:

1
2
Assumptions
1.光源为点光源,眼睛为针孔摄像机(即忽略光源和相机的大小和尺寸)

image-20220211193740056

Step 1

image-20220211193754261

Step 2
1
2
3
4
基本步骤:
1.对于每个像素,与眼睛连线形成Ray,计算这条光线照亮的场景中最近的点
2.该点与光源连线[这条连线叫做Shadow Ray],判定是否被照亮以及计算颜色
3.将计算结果写回原像素

1.2.3 Recursive Ray Casting(Whitted-Style) 概述

image-20220211195529474

模拟光线不断弹射的过程,将多次反射和折射的结果都加入到该点的像素值上

注意:多次反射和折射当然要考虑能量衰减。

image-20220211195825708

效果图

1.3 Ray-surface Intersection

1.3.1 Ray Equation

Ray is defined by its origin and a direction vector.

ATTENTION:图形学中一般不纠结边界条件(如t>0还是t>=0)

Example: Ray Intersection With Sphere

image-20220211212028153

最后可以化为二次方程进行求解,注意根据光线与球面的位置关系分类讨论。

image-20220211212559675

1.3.2 For implicit surface

image-20220211213140679

Examples of implicit surfaces

1.3.3 For Triangle Mesh(Explicit surfaces)

(作为显式表示的最重要代表,选用三角形面)


[Point in polygon Test]

检查一点是否在多边形之内,可作一射线从该点开始往任意方向投射,如果射线与多边形边的交点个数为奇数,则该点位于多边形内部。

img


但是直接按此方法判定光线和三角形面的位置关系计算量过大。

改进:问题转化为求出光线和三角形所在平面的交点,再判断交点是否在三角形内部

image-20220207193014512

示意

定义平面:法线+平面上任意一点P’

image-20220207194031126

至此已经可以解出光线与平面的交点,再判定是否在三角形内部。

改进:(可以直接解出光线和三角形的交点,并验证其解的合理性)

image-20220207200051961

重心坐标均非负,则交点在三角形内

1.4 Accelerating Ray-Surface Intersection

在像素数过多、光线弹射情况复杂时,上述方法效率过低。

image-20220211220424258

San Miguel Scene(经典场景), 10.7M triangles
1.4.1 Bounding Volumes

引入”包围盒“Bounding Volumes,即光线如果不会碰到Bounding Volumes,则它一定不会碰到物体

image-20220207202144038

对于Bounding Volumes的进一步定义:Bounding Box is the intersection of 3 pairs of slabs

即:包围盒是三组平面的交集

常用包围盒:Axis-Aligned Bounding Box(AABB,轴对齐包围盒)

image-20220211220932624

1.4.2 Ray Intersection with AABB
1
2
3
KEY ideas
The ray enters the box only when it enters all pairs of slabs
The ray exits the box as long as it exits any pair of slabs

image-20220211223237789

即:进入任何一对平面即认为进入box,离开所有平面才认为离开box。

因此对于每一对平面计算$t_{min}$和$t_{max}$,求出进入时间和离开时间:

再考虑由于光线实际为射线带来的正负号问题。

综上,得到结论:

1.4.3 Why Axis-Aligned?

因为计算更方便。

image-20220207212226703


Games101-Ray Tracing (Introduction) -L13
http://example.com/2022/03/02/Games101-Ray-Tracing-Introduction-L13/
作者
Thunderbolt
发布于
2022年3月2日
许可协议