蒙特卡洛光线追踪简介和基础知识 基础知识一

2024-04-07 20:48

本文主要是介绍蒙特卡洛光线追踪简介和基础知识 基础知识一,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

蒙特卡洛光线追踪技术系列 见 蒙特卡洛光线追踪技术

蒙特卡洛光线追踪的介绍:

真实感图像合成在娱乐(电影、特效和游戏)、设计、建筑等领域越来越重要。在所有这些领域中,一个共同的趋势是要求越来越复杂的模型具有更真实的图像。基于蒙特卡罗射线追踪的技术唯一能够处理这种复杂性的方法。算法和计算能力的最新进展使得蒙特卡罗射线追踪成为大多数问题的自然选择。这与几年前(有限元)光能传递方法是大多数图形研究人员首选的算法相比是一个重大的变化。蒙特卡罗射线追踪法与有限元法相比有许多优点。来自的最近列表包括:

•几何结构可以是程序性的

•无需细分

•不必预先计算解决方案的表示

•可以使用实例复制几何体

•可以处理任何类型的BRDF

•镜面反射(在任何形状上)都很容易

•内存消耗低

•精度控制在像素/图像级别

•根据经验,复杂性为O(log N),其中N是场景元素的数量。将其与最快有限元方法的O(N logn)进行比较[12]。

此外,人们可能会补充说,蒙特卡罗光线追踪方法可以非常容易地实现。一种基本的路径跟踪算法具有上述所有优点,是对光线跟踪的一个相对简单的扩展。

蒙特卡罗光线跟踪的主要问题是在渲染图像中被视为噪声的方差。使用更多的样本可以消除这种噪声。不幸的是,Monte Carlo方法的收敛速度很慢,需要大量样本才能将方差降低到可接受的水平。减少方差的另一种方法是尽量变得更聪明;本课程的大部分内容都致力于使蒙特卡罗射线追踪更有效的技术和算法

本课程的目的

本课程的目的是让参加者对蒙特卡罗射线追踪法的原理有一个透彻的了解,并对最近发展的方法有一个详细的概述

先决条件

读者应具备良好的光线跟踪工作知识,并了解全局照明的基本知识。这包括辐射术语(如辐射和通量)和基本反射模型(如漫反射、镜面反射和光泽)的知识。

概率论基础回顾:

现在讨论蒙特卡罗积分,其中随机数用于近似积分。首先回顾了概率论中的一些基本概念,然后将它们应用于积分的数值估计。然后讨论了在具有任意光照和反射特性的点上估计直接光照的问题。下一部分将蒙特卡罗积分应用于光线追踪中的直射光问题。

在讨论蒙特卡罗技术之前,我们需要几个定义,其中最重要的是连续随机变量概率密度函数(pdf)、期望值方差。这一节是一个回顾,那些不熟悉这些术语的人应该参考一本基本概率理论书(特别是关于连续的,而不是离散的,随机变量的章节)。

一维连续概率密度函数,不严格地说,连续随机变量x是一个标量或向量量,它“随机”从实线 R = (-∞, +∞) 取一些值。x的行为完全由它所取的值的分布来描述。这种值的分布可以用与x相关的概率密度函数p来定量描述(关系表示为x∼p)。x在某个区间[a,b]上取a值的概率由积分给出:

粗略地说,概率密度函数p描述了随机变量取某一值的相对可能性;如果p(x1)=6.0和p(x2)=3.0,那么具有密度p的随机变量具有“接近”x1的值的可能性是其具有接近x2的值的两倍。密度p有两个特征:

一维期望值:一个一维随机变量的实数函数f底层pdf p平均值称为它的期望值E(f(x))(有时写为Ef(x)):

一维随机变量的期望值可以通过让f(x)=x来计算。期望值有一个令人惊讶和有用的性质:两个随机变量之和的期望值是这些变量的期望值之和:

对于随机变量x和y。因为随机变量的函数本身就是随机变量,所以这种期望的线性也适用于它们:

一个明显的问题是,如果被求和的随机变量是相关的(不相关的变量称为独立的),那么这个属性是否成立。这个线性性质实际上决定了变量是否独立!这种求和性质对于大多数蒙特卡罗应用程序都是至关重要的

多维随机变量随机变量及其期望值的讨论自然扩展到多维空间。大多数图形问题都会出现在这样的高维空间中。例如,许多照明问题都是以半球表面为基础的。幸运的是,如果我们在随机变量所占的空间上定义一个度量μ,那么一切都与一维情况非常相似。假设空间S具有关联的度量μ,例如S是球体的表面和μ度量区域。我们可以定义一个pdf p:S →R,如果x是具有x∼p的随机变量,那么x在某个区域Si⊂S上取一个值的概率由积分给出:

这里概率(event)是事件为真的概率,所以积分是x在区域Si中取一个值的概率。在图形中,S通常是一个区域(dμ=d a=dxdy)或一组方向(单位球面上的点:dμ=dω=S Inθdθdφ)。例如,二维随机变量α是半径为R的圆盘上均匀分布的随机变量。这里均匀地表示面积均匀,例如,坏飞镖运动员的命中率在飞镖板上分布的方式。因为它是均匀的,我们知道p(α)是一个常数。从方程2.3,以及面积是适当的度量,我们可以推断出p(α)=1/(πR2)。这意味着α在磁盘的某个子集S1中的概率是:

这都很抽象。为了实际使用这些信息,我们需要一个可以计算的形式的积分。假设Si是圆盘靠近中心而不是周长的部分。如果我们转换成极坐标,那么α表示为(r,θ)对,S1表示r<r/2。注意,仅仅因为α是均匀的并不意味着θ或r必然是均匀的(事实上,θ是,r不是均匀的)。微分面积dA变为r dr dθ。这将导致:

实数函数的期望值公式适用于多维情况:

其中x∈S和f:S →R,p:s→R。例如,在单位平方S=[0,1]×[0,1]和p(x,y)=4xy上,x坐标fo(x,y)∼p的期望值为:

注意这里f(x,y)=x。

注意为什么这里可以让p(x,y)=4xy,因为我们可以自己进行一下积分,然后就能发现:

\int_{0}^{1}\int_{0}^{1}4xydxdy = 1

即符合总概率为1。

方差

一维随机变量的方差V(x)定义为x和E(x)之差的平方的期望值:

一些代数运算可以给出不明显的表达式:

如果变量是独立的,则随机变量之和的方差就是方差之和。方差的这种求和性质是概率模型分析中常用的原因之一。方差的平方根称为标准差σ,它给出了绝对期望值与期望值的偏差。

这篇关于蒙特卡洛光线追踪简介和基础知识 基础知识一的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/883637

相关文章

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

SpringBoot如何使用TraceId日志链路追踪

《SpringBoot如何使用TraceId日志链路追踪》文章介绍了如何使用TraceId进行日志链路追踪,通过在日志中添加TraceId关键字,可以将同一次业务调用链上的日志串起来,本文通过实例代码... 目录项目场景:实现步骤1、pom.XML 依赖2、整合logback,打印日志,logback-sp

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

计组基础知识

操作系统的特征 并发共享虚拟异步 操作系统的功能 1、资源分配,资源回收硬件资源 CPU、内存、硬盘、I/O设备。2、为应⽤程序提供服务操作系统将硬件资源的操作封装起来,提供相对统⼀的接⼝(系统调⽤)供开发者调⽤。3、管理应⽤程序即控制进程的⽣命周期:进程开始时的环境配置和资源分配、进程结束后的资源回收、进程调度等。4、操作系统内核的功能(1)进程调度能⼒: 管理进程、线

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

业务协同平台--简介

一、使用场景         1.多个系统统一在业务协同平台定义协同策略,由业务协同平台代替人工完成一系列的单据录入         2.同时业务协同平台将执行任务推送给pda、pad等执行终端,通知各人员、设备进行作业执行         3.作业过程中,可设置完成时间预警、作业节点通知,时刻了解作业进程         4.做完再给你做过程分析,给出优化建议         就问你这一套下

go基础知识归纳总结

无缓冲的 channel 和有缓冲的 channel 的区别? 在 Go 语言中,channel 是用来在 goroutines 之间传递数据的主要机制。它们有两种类型:无缓冲的 channel 和有缓冲的 channel。 无缓冲的 channel 行为:无缓冲的 channel 是一种同步的通信方式,发送和接收必须同时发生。如果一个 goroutine 试图通过无缓冲 channel

容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么? K8s的架构原理  控制平面(Control plane)         kube-apiserver         etcd         kube-scheduler         kube-controller-manager         cloud-controlle

【Tools】AutoML简介

摇来摇去摇碎点点的金黄 伸手牵来一片梦的霞光 南方的小巷推开多情的门窗 年轻和我们歌唱 摇来摇去摇着温柔的阳光 轻轻托起一件梦的衣裳 古老的都市每天都改变模样                      🎵 方芳《摇太阳》 AutoML(自动机器学习)是一种使用机器学习技术来自动化机器学习任务的方法。在大模型中的AutoML是指在大型数据集上使用自动化机器学习技术进行模型训练和优化。