19、计算机图形学——蒙特卡洛路径追踪

【Algorithm】最容易理解的蒙特卡洛树搜索(Monte Carlo Tree Search,MCTS)算法 看了不少解读和笔记,本文把最容易理解的解读做个总结。 阅读详情

一、蒙特卡洛积分

蒙特卡洛积分主要解决的问题是当被积函数很难被以函数的形式表示时,需要对该被积函数指定概率密度函数并进行多次采样。然后用采样得到的局部面积除以局部采样点的概率来近似得到整体的面积(积分)。

当采样次数足够多时,将这些整体近似值除以采样次数,就能得到一个整体值得平局,则该整体值的平均就表示该积分的近似值。

可见,采样次数越多,最后得到的值越精确

二、蒙特卡洛路径追踪

在https://blog.youkuaiyun.com/Master_Cui/article/details/119898277中,渲染方程的形式如下

但是问题在于,如何对该渲染方程的积分项进行求解呢?在这里,就用到了蒙特卡洛积分

先只考虑直接光照,表示如下图所示,积分项一共有三个,所以,fx就是入射radiance*brdf*n.wi

再看下图,假设入射光线的概率密度函数服从均匀分布,因此,就可以从单位半球上的任意一点入射,因此,任意一点的概率就是1/2π,2π是单位半球的面积

所以,概率密度函数就是

因此,在只考虑直接光照的情况下,原始的积分项就可以写成

伪代码如下

考虑完直接光照后,再考虑间接光照(弹射),该如何计算Q点反射出能radiance呢

Q点本身是直接接受光照,反射出来的光线自然就是和上述的直接光照相同,只不过,Q点反射出来的光线需要再被当做入射光线,因此,这是个递归的过程,伪代码如下

至此,通过蒙特卡洛积分算出了全局光照,但是还是有两个小问题

第一个问题是光线随着反射次数的增多会出现指数级的增长

考虑下图,比如从一百个方向进行采样,最终进入相机的光线只有一个,但是,如果这100个光线是经过了一次反射之后得到的,那么,这100个光线中的每个光线也要采样100次,那么也就是说,此时场景中需要有10000个光线,随着反射次数增多,场景中的光线就会出现指数级别的增长,对渲染速率有消耗

解决这个问题的办法就是每次只在一个方向上进行采样,因此,伪代码需要进行如下修改

但是,由于只进行一次采样,随机性太大,效果必然不好,那么就可以进行对多条路径分别采样求平均即可,如下图

因此,伪代码再次进行修改

这样就解决了采样方向过多而导致的光线数量指数级增长的问题

第二个问题是上述递归没有退出条件,这个退出条件该如何写呢,这里借助了概率的思想。假设光线会出现反射的概率为P,那么,当光线相机接收到该光线时的Radiance就是L0/P,光线如果不仅进入相机的概率就是1-P,那么相应的radiance自然就是0。这样做之所以可行是因为整体的radiance期望L是不变的

因此,伪代码也需要进行进一步修改

到目前为止,蒙特卡洛光追算法基本OK,但是还有个小问题,就是有一部分光线被浪费了,导致效率不高

如下图所示,当对光线进行采样时,如果光源很大,那么能保证该光源发出的很多光线都被采样到,但是如果光源很小,那么,光源发出中的光可能只有极个别会被采样到,那么,光源中的其他光线就没法被采样到,这就导致光源的光线会被浪费。

因此,如果可以对光源的单位面积进行积分,那就可以解决光源光线浪费的问题。当前是对半球的单位立体角积分,所以,就需要找到半球单位立体角和光源单位面积的关系。

从而可以对积分变量进行换元。

因为单位立体角等于单位面积除以半径的平方,可以,先计算出把dA的方向调整到与dw一致,调整后,dA调整后的值是dA*cosθ,最后在除以两点距离的平方,就能得到dA与dw的关系,如下

这样,反射方程和蒙特卡洛积分就可以写成如下形式

至此,伪代码进一步修改

如果需要判断光线和反射点中间是否有物体遮挡,可以从光源发出一条光线,判断是否和物体相交即可

最后放一张蒙特卡洛路径追踪和真实照片的对比

几乎一毛一样

参考

GAMES101-现代计算机图形学入门-闫令琪_哔哩哔哩_bilibili

欢迎大家评论交流,作者水平有限,如有错误,欢迎指出

从Halton到Sobol:一文搞懂低差异序列家族,以及它们如何提升你的渲染和AI采样效率 本文深入探讨了从Halton到Sobol的低差异序列家族,详细解析了Van der Corput序列的构造原理及其在高维空间的应用演进。通过对比分析各序列在渲染、AI采样和金融模拟中的性能表现,提供了针对不同场景的优化选择指南,帮助开发者显著提升计算效率和结果精度。 阅读详情

相关推荐

【信息科学与工程学】计算机科学与自动化——第三百零五篇 计算机系统中的各类运算操作01

编号类型领域运算操作运算类型算法算法的详细设计及数学分析参数列表及参数的数值设计应用场景 (100+条)集合运算​1集合运算关系代数并集 (Union)集合运算归并排序去重合并两个集合,去除重复元素。时间复杂度 O(n+m),n,m为两集合大小。输入:集合A, B。输出:A∪B。数据集成、多表结果合并、去重后的全量数据提取。2集合运算关系代数交集 (Intersection)集合运算哈希交集找出同时属于两个集合的元素。平均时间复杂度 O(min(n,m)),最坏 O(n*m)。输入:集合A, B。输出:A∩

weixin_49199313的博客 1386

计算机图形学【GAMES-101】9、蒙特卡洛路径追踪(Path Tracing)(光源采样)

概率论复习 (1)随机变量 X: 表示潜在值的分布 (2)X~p(x):概率密度函数Probability Distribution Function(PDF) X取到某个值的概率 (3)期望E[X]: 从随机分布中反复抽取样本所得到的平均值,E[X] = Σxipi ( i = 1 ~ n) 例如一颗六面骰子 X可能取值为1,2,3,4,5,6 p(1) = p(2) = p(3) = p(4) = p(5) = p(6) E[X] = (1+2+3+4+5+6)/6 = 3.5 连续情况:概率分布函

记录值得记录的东西 4331

【信息科学与工程学】计算机科学与自动化——第十篇 芯片设计31 芯片中的参数02

编号类型领域参数名称参数所属于的数学方程式参数约束数学方程式参数数值(示例/参考)关联参数列表及集合关联知识数学分析与数学推理385材料/电学电学(可靠性)偏置温度不稳定性(BTI)中阈值电压漂移的恢复(Recovery)比例 (Rrec)在去除应力后,部分被俘获的电荷被释放,V_th 部分恢复。恢复比例 R_rec = (ΔV_th,stress - ΔV_th,recovery) / ΔV_th,stress。R_rec 是时间和温度的函数。受俘获电荷能级分布、界面质量、温度约束。R_rec 影响 BT

weixin_49199313的博客 515

计算机图形学GAMES101(十五)光线追踪(蒙特卡洛积分与路径追踪)

本节涉及内容: 蒙特卡罗积分 路径追踪 蒙特卡罗积分 蒙特卡罗积分的核心思想还是求一个不规则图形的面积,它的做法是:首先在a和b之间找一个值xi然后求f(x)。接着以f(x)为高,ab为宽求矩形的面积,最后将所有的值求平均。当采样数量xi趋于无穷时,就近似求到了该不规则图形的面积。 怎么求蒙特卡罗积分 **FN**表示蒙特卡罗积分 **Xi~p(x)**表示概率分布 因为我们取xi时是在a到b之间均匀的取值,所以xi在ab上服从均匀分布。由均匀分布的概率密度函数可知 C=1/(b-a) 即p(x

weixin_45712636的博客 2228

【信息科学与工程学】计算机科学与自动化——第六十六篇 算子篇 第一章 通用算子01 多模态数据(图形/图像/文本/语音)中推断人类内在状态、策略、动机和利益的算法算子知识库

编号领域算法/方法算子名称算子的数学方程式/表达复杂度 (示例)关联知识11量子场论正则量子化产生/湮灭算符对易关系: [â_p, â†_q] = δ⁽³⁾(p​ - q)应用于态空间,计算复杂度取决于截断福克空间,粒子数表象,二次量子化12统计力学蒙特卡洛模拟马尔可夫链转移算子T(s → s‘) :满足细致平衡条件 π(s)T(s→s’)=π(s‘)T(s’→s)收敛到平衡分布需 ~O(τ), τ为相关时间细致平衡,Metropolis-Hastings准则,重要性采样13电磁学边界元法单层势/双层势算子

weixin_49199313的博客 306

【信息科学与工程学】【数据科学】数据科学领域 第六篇 算法设计 01

算法设计

weixin_49199313的博客 1499

计算机图形学入门23:蒙特卡洛路径追踪

计算机图形学入门,蒙特卡洛积分,蒙特卡洛路径追踪,俄罗斯轮盘赌。

YanisWu的博客 1640

光线追踪渲染器实战:从BVH加速到Cook-Torrance材质实现

光线追踪是计算机图形学中模拟光线物理行为以生成逼真图像的核心技术。其原理在于从相机发射光线,与场景中的几何体求交,并根据材质属性计算光照与颜色,从而实现全局光照、软阴影和复杂反射折射效果。这项技术的工程价值在于,它能以物理准确的方式生成电影级视觉特效,广泛应用于游戏、影视和工业可视化领域。在具体实践中,构建高效的包围盒层次结构(BVH)是加速光线与复杂模型(如赛车)求交的关键,而实现Cook-Torrance微表面模型则是模拟金属漆等现代材质质感的必要环节。本文正是通过一个在程序化管道场景中渲染赛车模型的综

weixin_29029995的博客 298

GAMES101学习笔记(一):Overview 计算机图形学概述

Computer Graphics 计算机图形学,即使用计算机合成和操作视觉信息。

qq_39281631的博客 1399

MonteCarloPathTracing:蒙特卡洛路径追踪

Monte Carlo Path Tracing 蒙特卡洛光线追踪 依赖库 freeglut 3.0 Eigen 3.3.4 Lua 5.3 Sol 2.19 stb 中的stb_image_write.h 各平台运行指南 Windows Visual Studio 2015 x64 依赖库已经配置好,直接可以编译运行。 也可以通过双击脚本run_xxx.bat直接运行可执行程序。 运行参数可通过工程->属性->配置属性->调试,在右侧"命令参数“处设置;第一个参数即为lua脚本文件。 Linux ubuntu 16.04 GCC (>= 5) 需要安装的额外依赖 sudo apt install libreadline-dev freeglut3-dev 运行步骤(以scene01为例) cd path/to/this/project mkdir build && cd build cm

蒙特卡罗抽样 vs 拉丁超立方体抽样

蒙特卡罗抽样vs拉丁超立方体抽样 区别和原理

【路径追踪】数学工具--蒙特卡洛方法(Monte Carlo)

介绍求解渲染方程的时候需要使用的数学工具: 蒙特卡罗方法

冠位仓鼠--慕白 3528

IAR许可证Generation 18代际不匹配问题解析与解决

IAR Embedded Workbench 的许可证机制采用‘代际(Generation)’模型,而非简单版本号匹配——这是一种基于数字签名算法、加密协议和硬件绑定策略演进的授权安全体系。Generation 18 是 v9.30 及以上版本强制要求的许可代际标准,对应 ECDSA 签名与增强型硬件指纹校验,旨在提升防破解能力与平台适配性。当旧版许可证(如 Generation 16/17)被用于新 IDE 时,启动器会在本地完成代际校验并直接拦截,导致‘The generation feature is

weixin_34203832的博客 337

MonteCarloPathTracing 项目教程

MonteCarloPathTracing 项目教程 项目介绍 MonteCarloPathTracing 是一个基于蒙特卡洛路径追踪的计算机图形学项目。该项目旨在通过模拟光线在三维场景中的传播,生成高质量的图像。蒙特卡洛路径追踪是一种全局光照算法,能够忠实地再现现实世界中的光照效果,包括软阴影、间接光照、焦散等复杂的光学现象。 该项目依赖于多个开源库,包括 freeglut、Eigen、Lua、...

gitblog_00316的博客 1007

UG/NX二次开发实例流程样例(nx1980+vs2019)

以上就是基本操作了,下面进入界面开发流程,nx1980的界面开发操作,也需要在块UI界面编辑器中操作,很多教程都没有讲解这一点,尤其是如何进入块UI界面编辑器,那么我在这里详细说明一下步骤。》,这一篇文章我们将详细讲述,如何开发一个具体的功能——根据用户输入的数据,在特定的点上创建一个指定大小的立方体。可以将文件保存当桌面,笔者保存在桌面的create_block目录中了,如下图所示,可以发现生成了三个文件。4.在新建模型完成后,我们准备创建交互UI,按照下图所示的顺序,找到块UI界面编辑器,。

秋月的私语 1万+

在Mac下配置用VSCode编写C/C++程序的环境

前言    最近需要编写一些C/C++程序,由于体量都不是很大所以想要追求一个轻量化的编辑和编译环境,于是想起了在Dock栏吃灰的VSCode。通过查找资料,包括VSCode的官方文档,最终配置实现了Mac下基于VSCode的C/C++编辑环境搭建。 正文    在配置环境之前先检查一下机器上都安装了什么C++编译器,通过以下两条命令可以查看是否安装了g++/clang编译器,本人两种编...

Kalikali的专栏 5万+

计算机图形学20个核心渲染技术

让读者对“计算机图形学20个核心渲染技术”有大概的了解,部分内容由AI辅助生成。(作者的学习记录,如有错误,可批评、指正)

CYY1921的博客 616

告别地图偏移!手把手教你用MapOnline V1.2在ArcGIS里加载无偏谷歌影像和历史影像

本文详细介绍了如何使用MapOnline V1.2插件在ArcGIS中加载无偏谷歌影像和历史影像,解决GIS工程师长期面临的地图偏移问题。通过三步安装配置、无偏影像加载和时空分析功能,提升地理信息数据的精确度和工作效率,特别适用于城市规划、环境监测等场景。

weixin_29252171的博客 232

【GAMES101】笔记目录

本文为GAMES101现代计算机图形学入门 的学习笔记系列。我们的系列笔记将分为两部分:原课程为2020年2月闫令琪所教授的 GAMES101 现代计算机图形学入门。课程主页:https://sites.cs.ucsb.edu/~lingqi/teaching/games101.html (幻灯片和课程录像均在此处)课程共计22节。作业共计8次。针对人群:计算机图形学入门新手教材: Steve Marschner and Peter Shirley的"Fundamentals of Computer Gra

beidou111的博客 1130

V.PhyloMaker实战:从物种列表到维管束植物系统发育树的完整流程

本文详细介绍了使用V.PhyloMaker工具包,从物种列表快速构建维管束植物系统发育树的完整实战流程。内容涵盖R包安装、物种名标准化、核心函数phylo.maker的三种构建方案选择、结果树的可视化与导出,以及与picante包的联动分析,为生态学和生物地理学研究提供了高效解决方案。

weixin_29057237的博客 374

新手友好的PythonUI库PySimpleGUI项目已下架,切换4.50.6版本的方法

过期后,如果还想使用 PySimpleGUI,则需要切换到版本 4,而版本 4 在 GitHub 上有很多社区维护的版本可以选择。开发团队尝试了 7 年,但始终没能获得足够的收入来维持项目的运营,尤其是开源项目通常面临资金不足的问题。商业许可证是永久有效的,用户可以在支持期结束后依然使用应用程序,并会提供离线版本的文档以供参考。尽管项目关闭,但对购买了商业许可证的用户,团队仍会在接下来的一年内提供支持。

baidu_34681715的博客 6857

蒙特卡洛方法:随机抽样的艺术与科学

— 它让不可解的问题变得可计算,让复杂的分布变得可采样。

拒绝AI玄学,只聊真技术▲ 1534

ATAC-seq差异分析实战:从原始数据到GO富集(R/Bioconductor全流程)

本文提供了ATAC-seq差异分析的完整R/Bioconductor实战流程,涵盖从原始数据准备、一致峰集构建、计数矩阵生成,到使用DESeq2进行差异可及性分析,以及差异峰的基因组注释与GO富集分析。文章详细讲解了关键步骤、参数设置和常见问题,旨在帮助研究者获得可靠且可解释的生物学结果。

weixin_29246195的博客 228

GAMES101学习记录合集

GAMES101(讲师:闫令琪 )课程个人学习记录学习笔记:几句话回顾games101现代图形学入门-01计算机图形学概述 学习笔记: GAMES101 链接: 第一到二十一集合集. 几句话回顾 games101现代图形学入门-01计算机图形学概述 课程问题 回答 什么是计算机图形学? Video Games(视频游戏)、Movies(电影)、Animations(动画)、Disign(设计)、可视化、虚拟现实、数字绘画、物理模拟、GUI、计算机字体 为什么学习计算机图形学? 基本知

ddgf01的博客 799

AMDGPU驱动中Doorbell与Event机制简要对比

摘要:AMDGpu驱动中,Doorbell和Event是两种异步通知机制。Doorbell是CPU→GPU的单向硬件通知,通过写MMIO寄存器触发GPU拉取任务,延迟低且无需内核介入,适用于队列任务提交。Event是GPU→CPU的双向同步通知,基于中断和内核事件对象,支持阻塞等待,用于任务完成或异常上报。核心区别在于方向、用途和实现方式:Doorbell侧重任务触发,Event侧重状态反馈。两者配合实现高效的任务下发与完成通知流程。

图形/计算GPU的驱动与虚拟化技术分享园地 1845

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Physically Based Rendering学习:第一章:引言 — 从零开始理解物理渲染

渲染(Rendering)就是:给定一个三维场景的描述,生成一张对应的图像。 pbrt 采用的是基于物理的渲染(Physically Based Rendering),即用物理学中光与物质的交互原理来模拟真实世界的光照效果。从历史上看,人类对光的理解经历了漫长演变: 对于计算机图形学而言,好消息是:我们不需要理解到量子层面。 可见光的波长只有几百纳米,在厘米/米尺度的物体上,波动效应可以忽略不计。因此 pbrt 使用的是 16~19 世纪建立的几何光学模型:把光看作沿射线传播的粒子。这就是光线追踪的物理基础

虾球 181

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: 18、计算机图形学——BRDF与渲染方程
下一篇: 20、计算机图形学——微平面理论和Cook-Torrance BRDF
Master Cui
博客等级 码龄9年 1408粉丝 224原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值