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:51阅读更多 →
Labelme JSON转Mask:语义分割数据预处理核心技术与实战

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

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

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

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

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

2026/8/2 6:14:51阅读更多 →
深入解析SIMD指令集:从SSE到AVX的性能优化实战指南

深入解析SIMD指令集:从SSE到AVX的性能优化实战指南

1. 项目概述:为什么我们需要重新审视SIMD指令集?如果你在优化一段图像处理、科学计算或者游戏物理引擎的代码,发现循环里的计算慢得让人难以忍受,那么“SIMD指令集”这个词,大概率会出现在你的搜索列表里。它听起来像是…

2026/8/2 7:23:12阅读更多 →
【Bug已解决】fsdp2 + lora |TypeError: fully_shard() got an unexpected keyword argument ‘ignored_params‘ 解

【Bug已解决】fsdp2 + lora |TypeError: fully_shard() got an unexpected keyword argument ‘ignored_params‘ 解

【Bug已解决】fsdp2 lora |TypeError: fully_shard() got an unexpected keyword argument ignored_params 解决方案 一、现象长什么样 在用 FSDP2 做 LoRA 训练时,想让基座参数被全分片、而 LoRA 的 lora_A / lora_B 参数不被分片(保持每卡…

2026/8/2 7:23:12阅读更多 →
5秒解锁百度网盘资源:智能提取码查询工具完全指南

5秒解锁百度网盘资源:智能提取码查询工具完全指南

5秒解锁百度网盘资源:智能提取码查询工具完全指南 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾为百度网盘加密资源而苦恼?面对心…

2026/8/2 7:23:12阅读更多 →
ESP32物联网开发:ESP-MQTT客户端配置、优化与实战问题解决

ESP32物联网开发:ESP-MQTT客户端配置、优化与实战问题解决

1. 项目概述:为什么ESP32的MQTT客户端是物联网开发的“必修课” 如果你正在用ESP32做物联网项目,无论是智能家居传感器、工业数据采集器还是远程控制设备,那么MQTT协议几乎是你绕不开的一环。而ESP-IDF框架内置的ESP-MQTT组件,就是…

2026/8/2 7:23:12阅读更多 →
Zookeeper在Ubuntu上安装-搭建集群-详细步骤

Zookeeper在Ubuntu上安装-搭建集群-详细步骤

在Ubuntu 20.04.6 LTS上安装zookeeper3.9.5版本一、下载https://archive.apache.org/dist/zookeeper/zookeeper-3.9.5/apache-zookeeper-3.9.5-bin.tar.gz二、解压mkdir /usr/local/zookeepertar -zxvf /opt/software/apache-zookeeper-3.9.5-bin.tar.gz -C /usr/local/zookeep…

2026/8/2 7:23:12阅读更多 →
扬州中央空调维修-欧米到家金牌师傅全城区30分钟火速上门覆盖广陵/邗江/江都/仪征等全域各区 专治不制冷/漏水/异响/跳闸

扬州中央空调维修-欧米到家金牌师傅全城区30分钟火速上门覆盖广陵/邗江/江都/仪征等全域各区 专治不制冷/漏水/异响/跳闸

在扬州,中央空调突发故障是家庭、商铺与写字楼的高频烦心事——中央空调不制冷、内机漏水、外机异响跳闸、开机没反应等问题,往往在盛夏高温时集中爆发。很多用户会搜索“扬州中央空调维修”“扬州附近中央空调上门师傅”“扬州中央空调漏水维修电话”寻…

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

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

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

2026/8/2 0:00:10阅读更多 →
限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

更多请点击: https://intelliparadigm.com 第一章:AI模板批量生成的核心价值与落地全景 AI模板批量生成正从实验性工具演进为现代软件工程的关键基础设施。它通过语义理解、上下文感知与结构化约束,将重复性高、模式明确的代码/文档/配置生成…

2026/8/2 0:00:12阅读更多 →
如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南 【免费下载链接】web-archives Browser extension for viewing archived and cached versions of web pages, available for Chrome, Edge and Safari 项目地址: https://gitcode.com/gh_mirrors/we/web-a…

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

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

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

2026/8/2 0:00:10阅读更多 →
限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

更多请点击: https://intelliparadigm.com 第一章:AI模板批量生成的核心价值与落地全景 AI模板批量生成正从实验性工具演进为现代软件工程的关键基础设施。它通过语义理解、上下文感知与结构化约束,将重复性高、模式明确的代码/文档/配置生成…

2026/8/2 0:00:12阅读更多 →
如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南 【免费下载链接】web-archives Browser extension for viewing archived and cached versions of web pages, available for Chrome, Edge and Safari 项目地址: https://gitcode.com/gh_mirrors/we/web-a…

2026/8/2 0:00:13阅读更多 →
无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 在数字媒体创作领域,视频编辑处理的质量损…

2026/8/2 1:29:34阅读更多 →
AI辅助本科论文写作:8大工具评测与高效使用指南

AI辅助本科论文写作:8大工具评测与高效使用指南

1. 本科生论文写作的AI辅助现状本科毕业论文是每个大学生必须跨越的一道坎。记得我当年写论文时,光是文献检索就花了整整两周时间,打印的参考文献堆满了半个书桌。如今AI技术的发展为学术写作带来了革命性变化,合理使用这些工具可以节省80%以…

2026/8/2 2:32:55阅读更多 →
如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到热门演唱会门票…

2026/8/2 2:09:20阅读更多 →