GAMES101: Lecture 16: Ray Tracing 4 (Monte Carlo Path Tracing) ppt笔记
Monte Carlo Integration计算复杂的定积分时通过随机采样的函数值的平均值估计该函数的定积分对于函数f(x)f(x)f(x)的积分∫abf(x) dx\int_a^b f(x) \, dx∫ab​f(x)dx其蒙特卡洛积分表示为1N∑i1Nf(Xi)p(Xi) \frac{1}{N} \sum_{i1}^N \frac{f(X_i)}{p(X_i)}N1​i1∑N​p(Xi​)f(Xi​)​采样数量越多误差越小在x上采样在x上积分Path Tracing前面介绍的Whitted-style ray tracing只考虑了镜面反射和折射并在遇到漫反射表面时停止反射光线如左图未考虑光线在遇到漫反射表面后的继续传播天花板被渲染成黑色且柱形的侧面没有与周围墙壁颜色相关的color bleeding我们需要更符合物理规律的算法下面围绕渲染方程进行展开Lo(p,ωo)Le(p,ωo)∫ΩLi(p,ωi)fr(p,ωi,ωo)(n⋅ωi) dωi L_o(p, \omega_o) L_e(p, \omega_o) \int_{\Omega^} L_i(p, \omega_i) f_r(p, \omega_i, \omega_o) (n \cdot \omega_i) \, d\omega_iLo​(p,ωo​)Le​(p,ωo​)∫Ω​Li​(p,ωi​)fr​(p,ωi​,ωo​)(n⋅ωi​)dωi​首先只考虑下面场景中一个像素接受到的直接照亮direct illumination的光不考虑Le(p,ωo)L_e(p, \omega_o)Le​(p,ωo​)项要计算定积分∫ΩLi(p,ωi)fr(p,ωi,ωo)(n⋅ωi) dωi\int_{\Omega^} L_i(p, \omega_i) f_r(p, \omega_i, \omega_o) (n \cdot \omega_i) \, d\omega_i∫Ω​Li​(p,ωi​)fr​(p,ωi​,ωo​)(n⋅ωi​)dωi​设置蒙特卡洛积分的概率密度函数pdf为p(ωi)1/2πp(\omega_i) 1/2\pip(ωi​)1/2π得到定积分的计算结果Lo(p,ωo)≈1N∑i1NLi(p,ωi)fr(p,ωi,ωo)(n⋅ωi)p(ωi) L_o(p, \omega_o) \approx \frac{1}{N} \sum_{i1}^N \frac{L_i(p, \omega_i) f_r(p, \omega_i, \omega_o) (n \cdot \omega_i)}{p(\omega_i)}Lo​(p,ωo​)≈N1​i1∑N​p(ωi​)Li​(p,ωi​)fr​(p,ωi​,ωo​)(n⋅ωi​)​初步得到path tracing的计算方式计算某一点反射的光时随机采样n个入射方向向这n个方向追踪光线若光线到达光源将结果加上上述公式计算出的结果若光线到达物体以该物体在该方向反射出的光作为上式中的Li(p,ωi)L_i(p, \omega_i)Li​(p,ωi​)计算公式结果加到最终结果中这里可以把物体反射出的光看作另一种光源发出的光伪代码如下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 Lo (1 / N) * shade(q, -wi) * f_r * cosine / pdf(wi) Return Lo这种算法具有下列问题1.指数爆炸需要计算的光线数量是采样数量的反弹次数次幂因此我们假设采样次数N为1这样只随机采样一个方向的光没有for循环另采样次数不为1的算法称作分布式光线追踪Distributed Ray Tracing而采样次数过少会带来很大噪声我们对一个像素追踪多条路径并对radiance结果取平均值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) // 利用path tracing的函数shade Return pixel_radiance2.递归算法无限递归计算机不能做无限次的光线弹射减少弹射次数意味着截断power我们采用俄罗斯轮盘赌Russian Roulette从前我们采样时永远会向表面上的采样点发射一个光线返回radianceLoL_oLo​现在设置一个概率P在发射光线后有 P 的概率返回Lo/PL_o / PLo​/P有 1-P 的概率返回 0这保证了返回radiance的数学期望仍然是LoL_oLo​现在解决path tracing的效率问题若光源面积过小采样发出的很多条光线因不会到达光源而被浪费对于光源发出的光线我们不在采样点上对立体角积分而是在光源处采样对光源面积A积分设置光源的pdf 1 / A找到dωd\omegadω和dAdAdA的数量关系立体角的定义是区域在单位球上投影的面积我们将光源在垂直光线上的分量等比例投射到单位球上下面θ′\thetaθ′表示光源法线与光线的夹角dωdA∥x′−x∥2cos⁡θ′ d\omega \frac{dA}{\|x - x\|^2} \cos \thetadω∥x′−x∥2dA​cosθ′将dωd\omegadω代入到上面的公式得到对光源积分的结果Lo(x,ωo)∫ALi(x,ωi)fr(x,ωi,ωo)cos⁡θcos⁡θ′∥x′−x∥2 dA L_o(x, \omega_o) \int_A L_i(x, \omega_i) f_r(x, \omega_i, \omega_o) \frac{\cos \theta \cos \theta}{\|x - x\|^2} \, dALo​(x,ωo​)∫A​Li​(x,ωi​)fr​(x,ωi​,ωo​)∥x′−x∥2cosθcosθ′​dA现在我们就把结果分为两部分1.光源直接照射不考虑俄罗斯轮盘赌2.其他反射indirect考虑RR最后考虑光线是否被物体遮挡得到最终path tracing算法shade(p, wo) # Contribution from the light source. 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 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_indirNot covered上面的讨论未涉及很多细节均匀采样半球 -带权重的半球采样蒙特卡洛的pdf选择 -重要性采样Importance Sampling随机数的选择 -低差异序列Low Discrepancy Sequences光源与半球采样的结合 -组合采样Multiple Importance Sampling像素的radiance为所有路径得到radiance的平均值 -像素重建滤波器Pixel Reconstruction Filter像素的radiance和color的关系 -伽马矫正gamma correction图形学博大精深

相关新闻

JS逆向入门:从黑猫投诉平台sign参数破解到Python爬虫实战

JS逆向入门:从黑猫投诉平台sign参数破解到Python爬虫实战

1. 从“请求失败”到“参数逆向”:一个爬虫工程师的日常今天想聊一个几乎所有爬虫工程师都会遇到的经典场景:你兴致勃勃地打开一个网站,打开开发者工具,准备像往常一样复制请求头、提取接口URL,却发现数据根本不在你熟…

2026/8/2 6:14:49 阅读更多 →
Labelme JSON转Mask:语义分割数据预处理核心技术与实战

Labelme JSON转Mask:语义分割数据预处理核心技术与实战

1. 项目概述:从标注文件到像素级掩码的转换在计算机视觉,特别是语义分割任务中,我们经常遇到一个看似简单却至关重要的环节:如何将标注工具(如Labelme)生成的JSON文件,转换成模型训练所需的Mask…

2026/8/2 6:14:49 阅读更多 →
低成本打造7英寸副屏:硬件选型、软件配置与效率提升全攻略

低成本打造7英寸副屏:硬件选型、软件配置与效率提升全攻略

1. 项目概述:为什么你需要一块副屏?如果你和我一样,每天面对着一块主显示器,同时开着代码编辑器、浏览器、通讯软件、终端和性能监控面板,那么你一定经历过那种在十几个窗口间疯狂切换的焦躁感。主屏幕再大&#xff0c…

2026/8/2 6:14:49 阅读更多 →

最新新闻

Inochi Creator终极指南:让2D角色动起来的开源动画编辑器

Inochi Creator终极指南:让2D角色动起来的开源动画编辑器

Inochi Creator终极指南:让2D角色动起来的开源动画编辑器 【免费下载链接】inochi-creator Inochi2D Rigging Application 项目地址: https://gitcode.com/gh_mirrors/in/inochi-creator 你是否曾经看着自己精心绘制的2D角色,希望它们能够真正&qu…

2026/8/2 17:49:24 阅读更多 →
如何通过轻量级开源工具GHelper实现华硕笔记本硬件控制的极致优化?

如何通过轻量级开源工具GHelper实现华硕笔记本硬件控制的极致优化?

如何通过轻量级开源工具GHelper实现华硕笔记本硬件控制的极致优化? 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook,…

2026/8/2 17:49:24 阅读更多 →
打破音乐平台壁垒:163MusicLyrics如何成为你的私人歌词管家

打破音乐平台壁垒:163MusicLyrics如何成为你的私人歌词管家

打破音乐平台壁垒:163MusicLyrics如何成为你的私人歌词管家 【免费下载链接】163MusicLyrics 云音乐歌词获取处理工具【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 你是否曾经为了给心爱的歌曲配上完美的歌词而四处…

2026/8/2 17:49:24 阅读更多 →
AI折叠时代:从普惠技术到精英游戏,普通开发者如何破局?

AI折叠时代:从普惠技术到精英游戏,普通开发者如何破局?

1. 从“全民狂欢”到“精英游戏”:AI折叠时代的来临最近,关于Fable 5和GPT-5.6的讨论在圈子里热度不减,但讨论的焦点已经从“它能做什么”悄然转向了“谁能用得起它”。这种感觉很熟悉,就像几年前我们谈论顶级显卡、高性能计算集群…

2026/8/2 17:49:24 阅读更多 →
一滴液体如何被精准控制?

一滴液体如何被精准控制?

《一滴液体如何被精准控制?》——压电阀正在进入高端制造现场当制造精度进入微米时代,控制液体也成为一项精密技术在很多人的认知中:阀门的作用很简单。打开。关闭。控制流量。但是在高端制造领域,阀门正在面临一个新的挑战&#…

2026/8/2 17:49:24 阅读更多 →
模型能聊天了,然后呢?Dify 把你的本地模型焊进真实业务,真正干活

模型能聊天了,然后呢?Dify 把你的本地模型焊进真实业务,真正干活

模型能聊天了,然后呢?Dify 把你的本地模型焊进真实业务,真正干活本文基于 Dify v1.x(2026年7月最新版)编写。所有配置和 API 调用均经过验证,可直接复制运行。 Dify 需要 Docker Desktop 已安装并运行。它是…

2026/8/2 17:48:24 阅读更多 →

日新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/2 0:00:38 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/2 0:00:38 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/2 6:34:16 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/2 2:47:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/2 0:23:22 阅读更多 →