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

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

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

2026/9/27 0:07:09 阅读更多 →
低成本打造7英寸副屏:硬件选型、软件配置与效率提升全攻略

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

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

2026/10/6 5:07:28 阅读更多 →

最新新闻

5G信令流程解析实战:从NAS、RRC到NGAP的日志分析与排障指南

5G信令流程解析实战:从NAS、RRC到NGAP的日志分析与排障指南

简介:《5G信令流程解析信息介绍及学习技巧》面向5G通信初学者及相关从业者,集中讲解信令流程中的关键概念与学习方法,帮助读者理解用户终端、基站、核心网等通信实体及其交互机制。文档从背景知识出发,阐述5G相对前代在速率、延迟…

2026/10/14 20:51:17 阅读更多 →
Unity IL2CPP Android打包内存不足报错排查与构建优化指南

Unity IL2CPP Android打包内存不足报错排查与构建优化指南

做 Unity 项目的朋友应该都有这种经历:构建窗口的进度条走了大半,连“生成 APK”都快冒出来了,结果 Console 里突然飘红,整个项目卡死在最后一步。我这次遇到的坑,就是切到 IL2CPP 后打 Android 包报错,从怀…

2026/10/14 20:51:17 阅读更多 →
搭建智能家居线上服务体系,2026年智能家居AI客服厂商推荐指南

搭建智能家居线上服务体系,2026年智能家居AI客服厂商推荐指南

智能家居线上服务涉及咨询接待、安装预约、售后报修等多个环节,渠道分散且场景复杂。AI客服可承接高频标准化业务,提升服务效率。本文梳理选型逻辑,并介绍合力亿捷等多家厂商的能力特点,供企业参考。智能家居行业的产品品类不断丰…

2026/10/14 20:51:17 阅读更多 →
继续教育论文降AI率实战:AIGC检测原理与降AIGC工具避坑指南

继续教育论文降AI率实战:AIGC检测原理与降AIGC工具避坑指南

最近刷到不少继续教育学员在问同一个问题:论文和作业里的“AI味”怎么去掉?很多高校和继续教育学院的查重系统已经不只是看重复率了,还会叠加AIGC检测模块,直接给出一份“疑似AI生成比例”。AI率一旦标红,轻则打回修改…

2026/10/14 20:51:17 阅读更多 →
驱动器软件架构实战:实时性、分层设计与重构经验解析

驱动器软件架构实战:实时性、分层设计与重构经验解析

搞驱动器软件这些年,我越来越觉得,“驱动器软件系统架构”这个词,典型属于那种“听起来很虚、做起来要命”的东西。它不像控制算法有现成的公式可以抄,也不像硬件板卡画完原理图心里就踏实。架构是一堆看不见的取舍:哪…

2026/10/14 20:51:17 阅读更多 →
3天从85%降到20%!这3个降AIGC平台让我导师直夸原创

3天从85%降到20%!这3个降AIGC平台让我导师直夸原创

还记得上周三凌晨两点,当我第三次收到知网AIGC检测报告时,手心都在冒汗——85%的AI相似度,40%的查重率,这意味着我的毕业论文根本达不到盲审要求。导师直接在我的初稿上批注“学术合规性存疑,建议重写”,那…

2026/10/14 20:50:15 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →