Games101-Ray-Tracing-Path Tracing-L16

Ray Tracing-Path Tracing

Monte Carlo Integration

image-20220306204532500

引入:对难以解析求解的定积分求数值解。

基本思想:在区域内不断采样,并认为采样值=函数平均值

其中积分域已经在$p(X_i)$中体现。

Path Tracing

Introduction

Whitted-style Ray Tracing 存在很多问题:

1
2
- Always perform specular reflections / refractions 
- Stop bouncing at diffuse surfaces

问题1:无法处理glossy reflection

image-20220312152618274

The Utah teapot

问题2:漫反射无反射光

image-20220312152920081

The Cornell box

PS:图中箱子内部立方体侧面为红色/绿色的现象称为Color Bleeding(可以理解为墙上的颜色“流血”到箱子上)

这一经典模型(The Cornell box)被广泛引用于测试全局光照效果。

但是Rendering Equation是对的!

A Simple Monte Carlo Solution(直接光照情形)

image-20220312154809839

考虑这一场景中特定点P的直接光照(即忽略所有多次反射)。

渲染方程简化为:

几何意义:在半球不同方向上的积分

image-20220312155116645

用Monte Carlo积分法写成

其中分母上的p表示概率密度函数,其余的p代表点。

$p(\omega_i)$可以取半球上的均匀分布$p(\omega_i)=\frac{1}{2\pi}$

算法伪代码:

1
2
3
4
5
6
7
8
shade(p, wo) //计算p点向wo方向发出的光
Randomly choose N directions wi~pdf
Lo = 0.0
For each wi
Trace a ray r(p, wi)
If ray r hit the light
Lo += (1 / N) * L_i * f_r * cosine / pdf(wi)
Return Lo

通过递归加入全局光照(Global Illumination)

image-20220312161649732

1
2
3
4
5
6
7
8
9
10
shade(p, wo) 
Randomly choose N directions wi~pdf
Lo = 0.0
For each wi
Trace a ray r(p, wi)
If ray r hit the light
Lo += (1 / N) * L_i * f_r * cosine / pdf(wi)
Else If ray r hit an object at q //考虑p点接受的反射光
Lo += (1 / N) * shade(q, -wi) * f_r * cosine / pdf(wi)
Return Lo

问题1:光线数目指数爆炸

image-20220312162107711

因此只能保留一根光线:

1
2
3
4
5
6
7
shade(p, wo)
Randomly choose ONE direction wi~pdf(w)
Trace a ray r(p, wi)
If ray r hit the light
Return L_i * f_r * cosine / pdf(wi)
Else If ray r hit an object at q
Return shade(q, -wi) * f_r * cosine / pdf(wi)

只保留一根光线,使用Monte Carlo积分的方式称为Path Tracing(直观理解;对于每一根光线实际上产生了一条从观察者到物体的路径并进行追踪,即为“路径追踪”)

问题2:noisy

解决:对于一个像素计算多条path求平均值

image-20220312162457532

算法:Ray Generation

1
2
3
4
5
6
7
8
ray_generation(camPos, pixel)
Uniformly choose N sample positions within the pixel
pixel_radiance = 0.0
For each sample in the pixel
Shoot a ray r(camPos, cam_to_sample)
If ray r hit the scene at p
pixel_radiance += 1 / N * shade(p, sample_to_cam)
Return pixel_radiance

问题3:递归边界问题

问题:以上算法中使用递归进行转移,但是没有给出边界条件(即停不下来)

dilema:自然界中的光反射本就是无数次,但是无法用计算机模拟;如果指定反射次数进行切断,又会带来能量损失(见下方对比图)

image-20220312163308511

3 bounces

image-20220312163339735

17 bounces

解决方式:俄罗斯轮盘赌(Russian Roulette , RR)

即生成一个概率值P,对于特定点以概率P向外发射光线,以概率(1-P)不发射光线。

这样期望值

仍为$L_o$。

算法改动:

1
2
3
4
5
6
7
8
9
10
11
shade(p, wo)
Manually specify a probability P_RR
Randomly select ksi in a uniform dist. in [0, 1]
If (ksi > P_RR) return 0.0;

Randomly choose ONE direction wi~pdf(w)
Trace a ray r(p, wi)
If ray r hit the light
Return L_i * f_r * cosine / pdf(wi) / P_RR
Else If ray r hit an object at q
Return shade(q, -wi) * f_r * cosine / pdf(wi) / P_RR

至此,已经完成了正确的Path Tracing

Efficiency

目前讨论的Path Tracing效率不高。

image-20220312164914218

原因:采样选用半球面上均匀,导致很多光线“浪费”

image-20220312165205732

想法:如果采样可以直接在光源上进行,就可以避免光线浪费。但是光源上采样的变量和原先选取的点不同(积分域不同),需要变换,即寻求$d\omega$和$dA$之间的关系。

image-20220312170359426

渲染方程重写为

至此积分域变换到光源。可以将一个点接受的Radiance分为两部分:

1
2
1. light source (direct, no need to have RR) 
2. other reflectors (indirect, RR)

Final

1
2
3
4
5
6
7
8
9
10
11
12
13
14
shade(p, wo)
# Contribution from the light source.
Uniformly sample the light at x’ (pdf_light = 1 / A)
L_dir = L_i * f_r * cos θ * cos θ’ / |x’ - p|^2 / pdf_light

# Contribution from other reflectors.
L_indir = 0.0
Test Russian Roulette with probability P_RR
Uniformly sample the hemisphere toward wi (pdf_hemi = 1 / 2pi)
Trace a ray r(p, wi)
If ray r hit a non-emitting object at q
L_indir = shade(q, -wi) * f_r * cos θ / pdf_hemi / P_RR

Return L_dir + L_indir

NOTES:

1.在前述进行积分域变换时,需要考虑光源与物体之间是否有遮挡情况

image-20220312171616075

修改代码:

1
2
3
4
5
6
# Contribution from the light source.
L_dir = 0.0
Uniformly sample the light at x’ (pdf_light = 1 / A)
Shoot a ray from p to x’
If the ray is not blocked in the middle
L_dir = …

2.Pah Tracing 难以处理点光源

3.Path Tracing 的正确性

可以实现PHOTO-REALISTIC

image-20220312171945678

4.现代光线追踪介绍

1
2
3
4
5
6
7
8
• Previous 
- Ray tracing == Whitted-style ray tracing
• Modern
- The general solution of light transport, including
- (Unidirectional & bidirectional) path tracing
- Photon mapping
- Metropolis light transport
- VCM / UPBP…

5.未展开的话题

(1)关于均匀采样的具体实现?

(2)对于不同的函数形式,Monte Carlo积分选取什么PDF?(重要性采样理论,importance sampling)

(3)随机数生成要求(low discrepancy sequences)

(4)对光源和对指定点采样的结合(multiple imp. sampling)

(5)像素的颜色就是选取path计算结果的平均吗?(pixel reconstruction filter)

(6)我们计算出的radiance和颜色直接的关系?(gamma correction, curves, color space)

Fear the science, my friends.


Games101-Ray-Tracing-Path Tracing-L16
http://example.com/2022/03/06/Games101-Ray-Tracing-Path-Tracing-L16/
作者
Thunderbolt
发布于
2022年3月6日
许可协议