计算机图形学之GAMES101课程蒙特卡洛积分和路径追踪

计算机图形学之GAMES101课程蒙特卡洛积分和路径追踪


上一节课

辐射度量学

intencity
Irradiance
radiance

光的传播

BRDF
反射方程
渲染方程

概率论


一、概率论(Probability)

概率密度函数(PDF)

在这里插入图片描述

二、蒙特卡洛积分(Monte Carlo Integration)

理解:

在这里插入图片描述
计算[a,b]内的定积分就是求曲线 f(x)、直线 x=a,x=b以及x轴围成的形状的面积,因此,如果我们在曲线上随机地选取N个点,计算如图所示的粉红色长方形面积之和,再求个平均,其实就得到了定积分的近似值。点的数量取得越多,这个平均值就越逼近定积分的真实值。

整个过程用数据公式来表达的话就是: S = 1 / 4 *(f(x1)(b-a) + f(x2)(b-a) + f(x3)(b-a) + f(x4)(b-a)) = 1 / 4(b-a)(f(x1)+f(x2)+f(x3)+f(x4)) =
在这里插入图片描述
所以,蒙特卡洛积分为:
在这里插入图片描述

p(Xi)解释

在这里插入图片描述

对于更一般的情况4次变成N次,乘以(b-a)可以看做除以 1 / (b-a)。 而前面讲过了随随机在曲线上采样因此随机到每个点的概率都是1 / (b-a),扩展到更一般的随机情况则有 1 / pdf(x)。 pdf(x)函数为x采用的概率密度函数。因此可以推导出更具有一般性的公式也就是蒙特卡洛积分法:
在这里插入图片描述

三、路径追踪(Path Tracing)

1.动机

Whitted-Style Ray Tracing的问题:
Always perform specular reflections / refractions
Stop bouncing at diffuse surfaces

问题一:Whitted-Style Ray Tracing 在处理光照反射时总是沿着镜面反射方向进行,这适用于镜面材质,但却不适用于 Glossy 之类的材质。

在这里插入图片描述

问题二:漫反射后会停止

在这里插入图片描述

Path Tracing可以让渲染更加真实。

2.涉及

在这里插入图片描述

实现

渲染模型

在这里插入图片描述
蒙特卡洛积分方案
在这里插入图片描述
则有
在这里插入图片描述

代码

在这里插入图片描述
在这里插入图片描述

问题:递归计算爆炸

在这里插入图片描述

只取一条光线

在这里插入图片描述

光线生成

在这里插入图片描述
在这里插入图片描述

问题:递归不会停止

在这里插入图片描述

解决方案:俄罗斯轮盘赌

使用俄罗斯轮盘赌来随机终止递归
在这里插入图片描述
在这里插入图片描述

问题:光线使用效率不高

在这里插入图片描述

解决方法:改变蒙特卡洛积分的采样函数

在这里插入图片描述

解决与光线中有阻挡物问题

在这里插入图片描述

在这部分的课程中,我们将专注于使用光线追踪来渲染图像。在光线追踪中 最重要的操作之一就是找到光线与物体的交点。一旦找到光线与物体的交点,就 可以执行着色并返回像素颜色。在这次作业中,我们需要实现两个部分:光线的 生成和光线与三角的相交。本次代码框架的工作流程为: 1. 从 main 函数开始。我们定义场景的参数,添加物体(球体或三角形)到场景 中,并设置其材质,然后将光源添加到场景中。 2. 调用 Render(scene) 函数。在遍历所有像素的循环里,生成对应的光线并将 返回的颜色保存在帧缓冲区(framebuffer)中。在渲染过程结束后,帧缓冲 区中的信息将被保存为图像。 3. 在生成像素对应的光线后,我们调用 CastRay 函数,该函数调用 trace 来 查询光线与场景中最近的对象的交点。 4. 然后,我们在此交点执行着色。我们设置了三种不同的着色情况,并且已经 为你提供了代码。 你需要修改的函数是: • Renderer.cpp 中的 Render():这里你需要为每个像素生成一条对应的光 线,然后调用函数 castRay() 来得到颜色,最后将颜色存储在帧缓冲区的相 应像素中。 • Triangle.hpp 中的 rayTriangleIntersect(): v0, v1, v2 是三角形的三个 顶点, orig 是光线的起点, dir 是光线单位化的方向向量。 tnear, u, v 是你需 要使用我们课上推导的 Moller-Trumbore 算法来更新的参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值