Games101 图形学入门笔记

光追(Ray Tracing)

为什么要用光线追踪?首先知道光追是跟光栅化/完全不同的一种成像方式,那我们为什么要使用另一种方式呢,那就要说一下光栅化所不好实现的效果

总的来说光栅化不好实现一些全局的效果,比如软阴影,高光反射,间接光照等

演示图片

光追跟光栅化的对比,光追效果更好,但是会非常慢,一般用于离线渲染

演示图片

定义:

1.光线是一条直线,在图形学中

2.光线之间不会发生碰撞,在图形学中

3.从光源发射光线通过与场景中的物体发生一些反射折射以后到摄像机,而且具有光线可逆性,也就是说同样的从摄像机发射一条光线通过一样的操作也能到达光源,光追这种做法就是利用了光线的可逆性,从摄像机发射光线出去

演示图片

光追步骤

下图展示了一个完整的光追步骤:前提是眼睛是一个点,光源是一个点

1.首先从eye point发射出一条射线,这条线会经过图像平面的某个像素,然后朝场景中射去

2.永远会射到最近的物体点上,这里其实就已经解决了光栅化时深度测试的难题

3.然后在这个点像光源发射一条线,如果没有任何阻挡,说明能被光源看见,就没有阴影,如果有阻挡,就是在阴影中

4.如果没有被物体遮挡,就对此点做着色,然后这里有了法线,有了视角方向和光源方向,就可以按之前的着色模型去着色,然后返回到当前经过的像素即可

演示图片

补充

这里要特别补充一下光线经过某一个像素得到一个方向这一步,因为说过从视点出发穿过ImagePlane,很容易被理解成穿过屏幕像素,这里的ImagePlane其实是从光栅化像素空间映射到[-1,1]的空间形成的平面,因为我们知道所有的物体都在已经被变换到一个[-1,1]的盒子里,所以我们的射线自然要从映射过的平面空间射过去,所以在生成射线方向的时候要经过一系列的映射和缩放才是最终的像素坐标,大致思路就是先从光栅化空间转到NDC,再转到屏幕空间([-1.1]),然后再分别乘上FOV的缩放值,然后再把x水平的像素考虑屏幕长宽比,参考链接:https://www.scratchapixel.com/lessons/3d-basic-rendering/ray-tracing-generating-camera-rays/generating-camera-rays

演示图片

Whitted-Style Ray Tracing

定义:

我们前面说的光追依然只是与物体只有一次弹射,Whitted光追可以经过物体以后反弹多次得到更好的效果,比如图中一个透明破璃球和一个反射球,都是需要多次折射和反射才会达到的效果,使用的是递归的算法

演示图片

步骤

1.同样从眼睛发射一条光线出去,然后经过像素点,达到场景中某一个最近的点

2.到达某一个点以后会根据这个物体的材质发生不同的反弹,比如图中如果是个玻璃的话,会发生反射,和折射,然后又会射到其他物体的点上,这些N次反射的线我们可以统称为次要光线(Secondary rays)

3.然后同样我们要对这些所有射到的点都要连一条线到光源,然后做阴影逻辑,如果没有被遮挡就对这些点做一遍Shadering,然后把着色后的值累加返回到像素上,当然这里每次的反弹都会有能量的损耗

演示图片

光线

首先光线在数学上的定义就是一条射线,就是由一个起始点和一个方向组成,然后光线上的某一个点就等于 r(t)=o + td,也就是当前时间在射线上的点,t是时间,大于等于0,无限大

演示图片

隐式几何交点

这里通过举例跟一个球的交点来说明光线跟物体的交点怎么算

首先我们知道在光线上的点的定义:r(t)=o + td,在球上的点的定义:p点满足 (p-c)平方 - R平方 = 0,然后我们可以知道交点一定满足即在光线上又在球上,所以得到:(o+td - c)平方 - R平方=0,然后式子我们除了时间t,其他都是已知的, 我们只需要去算出时间T是多少

演示图片

通过二次函数的分解我们可以得到t的值是多少,如下图,通过已知的定义,我们知道得到的根t要满足,是一个实数,是一个正的值,然后因为射线可能会跟球发生相交,只需要取最小的那个t就是我们需要的

演示图片

同样只需要利用上面我们已知的概念,然后借用隐式几何的特性,就是一个点P一定满足 函数 f(p)=0,那我们就直接可以得到要与光线相交的话就满足 f(o+td)=0,那我们不管是什么隐式几何,只要通过这种方式算出时间T即可,然后知道了T,自然就知道交点了,规定T是一个实数且非负数

演示图片

显示几何交点

首先我们知道跟显式几何的交点,其实就是跟三角形发生交点,因为我们之前学过显示几何应用最多的就是三角形,通过射线跟三角形的交点可做到Rendering的很多事情,可见性,阴影等,也可以通过交点得到是否在这个几何体内或外面,然后我们可以知道基本的算法就是对屏幕内所有的三角面做一次摄像机射线检测,然后通过判断是不是跟三角形有一个交点来得到T,有很多T的时候取最小的那个,这是一种正常的思路,但是会非常慢

演示图片

与三角形交点的计算

首先我们无法直接算出一个点是否在三角形内,我们可以把这个简化成,先得到射线跟三角形所在的平面内所形成的交点,然后再判断这个点是否在三角形内

演示图片

平面的定义

我们要得到一个平面就也要满足这个平面上的任意一个点一定要在这个平面内,那我们就可以得到通过法线向量N跟平面中任意的一个点P跟已知点P丿组成向量应该是正好垂直的,这样得到一个公式 (p-p丿)点乘N=0,这样就可以定义出一个平面了

演示图片

时间T的计算,依然按照之前的方式把射线代入点P,然后得到时间T的公式,然后依然要满足是实数和非负数

演示图片

一种更快速的得到一个射线是否在三角形内的算法,基本思想就是定义好了如果射线一定跟三角形有交点的话,那射线上的点一定=重心坐标中的点,利用了重心坐标满足的时候一定在三角形内,通过对下面这个式子求解会得到 时间T,和 b1,b2,那通过判断这几个值T一定要是非负,b1,b2,和(1-b1-b2)要非负来知道是否在三角形内,详细可去学习Moller Trumbore算法

演示图片

加速射线跟几何的交点计算

显然我们之前说的那种跟场景中的每个三角形做一次计算,那是非常慢,无法接受的,下面会提出几种方案来做加速

包围盒(Bounding Volumes)

首先说明概念,包围盒就是包裹住物体的一个盒子,然后在光追里面的应用就是,如果这个光线连包围盒都不会碰到,就更不会碰到盒子里面的物体,这个后面会说有什么好处

演示图片

在3维空间中的定义,首先一定是一个Box,他在3维空间中我们要把它想象成3对对面的平面组成的,一般用轴对齐包围盒(AABB)去定义这个,他的每一个Box的任意边都是沿着XYZ轴形成的,也就是永远相对于轴都是水平或者竖直的,不会发生渲染倾斜,这是一个包围盒在3维空间中的定义

演示图片

计算射线跟AABB的交点

首先先看2D情况下,一根射线跟分别两个对面平面的交点情况,我们会发现进入这个盒子的点和出这个盒子的点形成的线段就是之前两个对面平面形成的两个线段的交集,也就是第三幅图的那段红线

演示图片

**那我们可以由此在3维空间中定义,如果想得到射线进入box过,或者说相交过,就必须满足这个射线跟box的三个对面平面都有交点,然后离开这个box时只要满足离开任意一个平面时就是离开了这个盒子,所以就可以算出射线进入这个盒子的进入点和出去的点,就是所有平面相交时间t的最大值和最小值,然后如果进入点 < 出去点的时候就代表在盒子里,但是要考虑可能会出现负值的情况下,如果盒子在射线点后面和射线在盒子里时,所以最终条件就是 **

演示图片

演示图片

演示图片

还有一个就是计算相交点的细节,因为前面规定每个平面都是沿着XYZ轴,就是为了计算相交点是有更方便的算法,也就是下图下面的方式

演示图片

Uniform Grid加速求交

格子划分加速法,基本思路如下,先找到物体包围盒,然后把包围盒划分成若干个均匀的格子,然后把格子内有物体的标记,这些工作都是在光追之前做好的预准备工作

演示图片

然后射线向一个方向射到包围盒和里面格子的时候判断每个格子是否与射线有相交,然后再判断格子内是否有物体,如果有物体再判断是否跟物体相交,基本思路就是通过与一系列的格子求交来判断求交点,这里可以可能会问怎么知道射线会正好经过那些格子然后出包围盒,这里有一个简单的算法就是打到一个格子以后如果已知射线的方向,比如右上的话,只需一直取格子右边和上面的一个格子做判断即可,这只是一种方法,在3D中,是有很多种方法知道这个射线的下一个格子的,这就是格子加速的基本思路,由此可以做到一定快速的情况下找到与想要物体的交点

演示图片

大家就会发现格子的数量密度影响了这个算法的复杂度和精度,太少也不行太多也不行,所以人们就得到了一种相对刚好的数量算法,如下图公式,只要知道这些格子的数据要保证在一个合理值就行

演示图片

问题:也会发现这种做法也有他的弊端,就是在场景分布特别稀疏或者不均匀的时候,如果空白空间过大,物体很小的情况下,这种算法就会非常非常耗时的,但是在一些物体分布非常密集的情况下,当然也会发挥他的优势,这就是他的利与弊

演示图片

空间划分(Spatial Partitions)

下面列了几种空间划分的例子:下面几种划分方式都是按某种规则和划分的方式来对盒子空间以树的结构进行划分,这里要提一下划分到什么地步不继续划分了,要按如果你觉得当前节点空间中没有任何物体了或者物体数量在合理范围之内了,即可停止划分

Oct-Tree:八叉树,在每个物体上都先横竖两次划分,在2维下会划分成四份,3维下分成8份,然后再对划分后的自节点再横竖两次,以此类推,这种方式有一个问题就是无法正确应对不同维度的情况,比如2维和3维下他划分出的节点个数都是不一样的

KD-Tree:整个划分的形式与八叉树类似,有一个重要的区别就是他可以不管是任意维度都能按同样的方式得到同样的结果,做法就是比如下面中间这个2维演示下,先把大的盒子横向划分成两份,再把划分的子节点竖向划分成两份,再把子节点横向划分…听这个规则就会发现他其实是按照每次只按某一个轴向循环顺序划分,比如3D就是先延x,再y,再z,这样就能得到一个都是二叉的结构

BSP-Tree:跟KD-Tree基本相同,只是他的划分方式不是按轴向平行方向划分,是以某种角度倾斜然后按平面划分,这种即不利于计算,又不利于多维度的划分,比如2维下是以一根线,3维下就要以一个平面,高维下就要以更复杂的方式,所以不利于使用

通过上面的几种方式,我们会发现KD-Tree是相对比较利于使用的,所以我们后面会着重讲KD-Tree的加速相交方案

演示图片

KD-Tree

划分规则对应结构就比较简单了,如下图,只需要对每次划分后的两个子节点存取在父节点的分支上,然后继续做划分,这里要提的一点就是当前节点内所有的Objects都存取在当前节点上,下面第二幅图就是划分的规则和步骤

演示图片

演示图片

光追判断物体交点流程:

先判断最外面的大包围盒是否与射线有交点,有说明有可能会有里面物体相交

演示图片

然后判断他的子节点的两个区域是否有交点,有就继续往下面子节点走,如果每个子区域发现有相交的话就要把他里面的所有物体都判断一遍与射线有没有相交

演示图片

直到判断到我们有交点的物体

演示图片

但是可能细心一点的就会发现这里划分的区域会出现一种问题,如上图中紫色跟绿色区域中间有一个几何,但是哪些几何属于哪个区域,就要通过几何上的三角形来判断,但是很难判断一个三角形是不是在一个盒子内,还有一个问题就是一个物体可能会存在与多个区域之内,那可能多个区域都会存在这个物体,就会有多份,不够直观,所以这种方案很大的问题存在,下面我们就要说一种以物体来划分空间的方案

BVH(物体划分)

基本概念说一下,基本结构还是跟KD-Tree有点像,思路就是把一堆物体先分成左右或上下两堆,然后算出每一堆模型的包围盒,然后再把每一堆三角形继续划分,继续生成包围盒,直到盒子里就只剩合理的三角形数量时,我们就生成出对应的结构了,还是每个父节点下面只有两个子节点的结构

演示图片

演示图片

建立一个BVH最重要的点:

1.选择一个轴向来划分

2.大家发现选择一个相对最长的轴来优先开始划分会最后划分的比较均匀

3.那已知最长的轴了以后,选哪一个位置为划分点呢,大家发现用在这个轴向上最中间的物体的重心点作为这个点最合适,因为这样能保证树两端的物体数量尽量平衡,这里说一下简单的找最中间的三角形的方法,就是可以把这所有三角形按某个轴向的值先进行排序,然后选择最中间的那个就可以了,当然也可以用"快速选择法"来做这个事,速度更快

4.什么时候停止划分,一般来说物体数量在<=5的情况下就可以了

演示图片

数据结构跟之前KD-Tree一致,中间节点只存BOX信息,子节点上存取Objects信息

演示图片

求交伪代码,基本思路跟KD-Tree一致

演示图片

总结KD-Tree跟BVH的区别

演示图片

辐射度量学(radiometry)

定义

为什么要学辐射度量学:

首先我们之前已经做过Blinn-Phone着色,里面有一个光的强度10,这个10在这里是没有概念的,我们不知道10是什么,也不知道为什么是10,其次在光追的效果那里,实现出来的其实是不符合现实物理意义的效果,因为没有灯光能量的损耗等等,所以我们为了实现更好更真实的效果,要引用辐射度量学这个东西

演示图片

辐射度量学是什么:

一种表示灯光照亮的东西,通过一些属性来表示光,Radiant flux(辐射通量), intensity(辐射强度), irradiance(辐射度), radiance,后面会一一介绍这些属性的意思,这些属性是基于空间中的属性,这里光线依然是延着几何学的传播,延直线传播,然后以物理正确的方式计算光照

然后这里要说一下一个基本学习方法,先从为什么要学这个,到这个东西是什么,再到最后这个东西怎么用,我后面的笔记也会按照这个流程来去记

演示图片

Radiant flux

这每一个属性都有对应物理的概念,我们一个个的从物理上去理解这些属性,首先先定义一下Radiand Energy的概念,它就是光源辐射所散发出来的能量,物理上单位是焦耳

Radiant Flux(Power)的定义就是单位时间上的能量,也就是用总能量/时间,那这个在物理上就是对应瓦特W,功率,光学上也可以叫lumen,意思着多亮,我们知道一个物体如果受光照辐射的时间越久就会越热,知道是收到了能量很多,那我们如果想研究这个东西,我们就要知道在单位时间上受到了多少能量,也就是我们这个属性的概念,我们就可以把他理解成物理上的功率

演示图片

总览

这里列举了剩下的三个物理属性

Radiant Intensity:它表示的就是光源向四面八方所辐射的能量,是一个方向性的跟能量相关的概念

Irradiance:它表示物体表面接受到了多少能量

Radiance:它度量光线在传播过程中的能量

演示图片

Radiant Intensity

首先他跟前面单位时间所辐射的能量概念相似,他是单位时间内单位立体角(Solid Angle)所辐射的能量,所以表示的也是能量,但是他可能是属于比Flux更低一级,他是Flux下每个单位立体角所辐射的能量,它也有自己的单位,就是W/sr = cd,cd就是他的单位瓦特除以/立体角所得到的能量,下面说什么是立体角

演示图片

立体角

我们先从一个圆中的角度来理解,一个圆上的一个角度等于他对应的弧长除以半径,然后一个圆的角度就是圆的周长(也就是弧长)除以半径也就是2π

立体角就是角度在3维空间中的延伸或者说表示,3维空间中的立体角就是球面上角度在球上形成的一块面积A除以半径的平方,这就是立体角的计算方法,那整个球的立体角就是球的面积除以半径的平方,就是4π,立体角就是定义了空间中的角度有多大

演示图片

单位立体角(微分立体角)

**如果在球上定义了一个方向,通过 下面 $\theta$ 和 **$\phi$来定义的话,我们就可以算出这个单位面积A是多少,如下图公式,然后通过该公式/半径的平方就可以得到单位立体角是多少

演示图片

这里是用微分的方式得到一个球的立体角是4π,这里需要去了解**微积分,**暂时只需要知道单位立体角等于

$$
\sin\theta d\theta d\phi
$$

演示图片

在辐射度量学里面我们会用图中的w符号来表示一个三维空间中的方向,然后可以用过前面的方式算出他的单位立体角,这是一个重要的概念

演示图片

我们通过前面所有对Flux和立体角等的讲解,现在可以总的来认识一下这两个东西,首先我们把前面的Flux如果想象成下图中的中心是一个灯泡总的能量的话,Intensity就是这个灯泡往任意一个方向的能量,那我们就能通过前面已知一个单位立体角的能量等于Flux/单位立体角,那我们就能算出Intensity和Flux分别是多少了,对应右边的两个公式,把所有单位立体角的能量微分出来就是这个灯泡当前的Flux能量,也就是4π*I,把Flux除以/4π就是Intensity

演示图片

现实生活中的举例,便于理解

演示图片

Irradiance

定义:单位面积上对应的能量表示

演示图片

**unit area(单位面积)的定义是垂直于光线,或着投影后垂直于光线的面积才算是单位面积,其他不算是,这个定义在之前着色模型上也可以有一定理解,下图就是我们之前漫反射光照计算,正是应对了这个理论,也就是当光的方向跟面不垂直时,受到的能量会跟 **$cos\theta$有关系

演示图片

同样之前在Blinn-Phone reflectance model时讲过光照强度的计算,当时说过按照半径的平方进行计算,现在我们就可以用Irradiance来解释这种衰减的算法,如下图所示

演示图片

Radiance

描述:描述一条光线的基本属性,在光线传播中的一些能量属性,所以会跟后面的** 路径追踪 有很大的关系**​

演示图片

定义:在单位立体角下的单位面积上的能量就是Radiance,听起来有点绕,其实就是把前面两个概念 (Radiant Intensity Irradiance)引用过来理解,相当于把Power微分两次得到Radiance

演示图片

这里就可以把这两个概念引入进来就会得到如下图的两种方式,也就是只要把Irradiance 再微分一次单位面积或者把Intensity微分一次单位立体角就会得到Radiance

演示图片

Incident Radiance:可以理解成从某个方向过来Irradiance受到了多少能量,图上看就是一个方向的光射到dA这个面时,这个面收到了多少能量也就是入射进来的

演示图片

Exiting Radiance:在dA这个平面上以一个方向(单位立体角)辐射出去的能量有多少,这个其实就是Intensity的概念,所以Radiance可以用这两个东西混合来诠释他的意义,这个是发射出去的

演示图片

**现在再来最后总结一下Irradiance 和 Radiance,这两个概念是后面最常用的,而且这两个概念也是互相有联系的,Irradiance就是平面dA受到的所有能量,Radiance就是平面dA从方向 **$d\omega$收到的能量,那dA平面受到的能量就是从不同方向微分出来的能量,这样就可以把这两个概念联系起来,简单说这俩就是方向性的差异

演示图片

BRDF(Bidirectional Reflectance Distribution Function)

定义:全称(双向反射分布函数),首先我们知道反射是一个入射光线打到物体上以一个角度反弹出去,那BRDF就是描述光线从某个方向进来时到某一个方向去的能量有多少,但是我们可以把反射这样理解,就是光线从某个方向进来打到物体上以后被物体吸收,然后再把能量发射出去,那这样子就跟我们之前说的Irrdiance和Radiance的概念对上了,那在下图中,我们就可以用这两个概念来理解,就是单位立体角的单位面积能量Radiance打到平面dA上,这就是Irrdiance,然后再转化成Radiance发射出去,这就是一个反射的过程,那我们可以发现我们知道Radiance从某个方向来,但是最终往那个方向发射出去我们是不知道的,那这就是BRDF所干的事,把一个如果把一个表面收到的能量反射到另一个方向去

演示图片

那通过下图我们发现BRDF的定义就是从入射单位角过来的Radiance 与 表面dA的Irradiance的比例,那反射其实就是把辐射过来的光线然后朝不同的方向分配出去,可能不同反射方式(漫反射或镜面反射等)分配方向不同,但是DRDF就是定义如果去分配的,或者说分配了多少能量出去,那就是前面强调的Radiance 和 Irradiance的比例,数学或物理上的定义就是如下图下面的公式,两个微分的比例,那BRDF其实就是说明了光线跟物体是怎么作用的,也就是说BRDF定义了物体的不同材质,这个后面会说

演示图片

反射方程

**定义:就是从不同入射角进来的光线通过我们这个着色点的累加然后反射到观测方向去,这样就可以得到这个点最终的效果 **

**那下面的公式就是 **

入射角对于平面的Irradiance \* BRDF得到的反射出去的能量的积分

这些都是基于我们对于这几个概念的理解推导出的这个方程,那不管是基于什么着色模型下都可以通过这种来计算光照传播的效果

演示图片

渲染方程

在说渲染方程之前我们要知道在真实环境下,这种反射的入射Radiance可能不光是光源,也可能是其他物体接受到的然后反射出来的,那张就是一种递归的思想

演示图片

通过前面我们已知会经过很多不同的入射光线得到一个最终的反射Radiance,还有一种情况就是自己会发光,那就是我们看到的一个物体上的点的能量就是它自己的加上它反射的所有的Radiance,这就是反射方程的定义,方程公式如下图,这里一个方程就可以表现所有在物体表面的光线传播,针对反射,所以下面公式是只针对半球,因为之前Phone着色模型说过,光线只会从上面辐射过来我们才会角色有意义,从下面辐射过来会忽略点

演示图片

** 下面我们来解这个渲染方程的步骤,首先我们看到如果只有一个点光源反射的情况,如下图反射公式,眼睛所看到的光就是=自己辐射的+光源辐射的BRDF夹角**​

演示图片

那如果是一堆点光源就是自己的+所有点光源反射的之和

演示图片

如果是一个面光源,就是所有点光源的集合,那就是对所有的点光源反射的光做一个积分就得到一个面光源所贡献的值

演示图片

如果有其他不止光源,其他物体反射过来的Radiance,我们只需要把这个也当做光源来处理就行,就是之前光源的位置变成了物体表现的位置而已其他物体和光源的反射只是一个递归的过程而已,这样会利于后面的理解

演示图片

然后这个式子我们要求最终输出的Radiance,我们已知着色点自己辐射的能量,和BRDF(也就是材质),但是各个物体对这个着色点反射的能量是多少是不知道的,但是在数学上我们可以把上面简化写成下面一种公式,便于理解,也就是

最终输出的值=自身辐射值+其他入射值的反射值,这里写成了一种只有u,v的形式,当然这是一种数学上的推导,这里不详细说明

演示图片

最终可以通过"算子"的方式简化成下图中的一个式子,就是把白框中的一大块简化成一个反射操作符K,然后最终就是 看到的值=自身点的辐射+其他反射的值,这样写就是为了方便理解,为了后面的解L

演示图片

然后通过一系列数学上的解,和展开,最终就为了得到下面的一个L的展开式

演示图片

然后通过这个式子我们可以很方便的理解,我们最终的看到的值L=光源辐射的值+光源反射到物体一次的值+光源反弹到物体N次的值,这样我们就会发现光源反射一次就是直接光照,两次及以上就是间接光照的效果,我们光栅化所做的事情其实也就是到直接光照这一步的效果这就说明我们光追方式去做全局光照(GI)的话就会很简单,只是对光源做多次反弹即可,全局光照的概念就是多次间接光照的集合

演示图片

下面就是展示实际直接光照和全局关照的区别,也就是直接光源到不了的地方会更亮一些,就算无限次数弹射,也不会一直亮下去,这也最符合自然界的现象,跟能量守恒有关

演示图片

演示图片

演示图片

这里引用了全局光照的概念,后面会解全局光照,也就是全局光照要怎么做

概率论

随机变量

定义:随机变量就是可能取很多值的一个数,随机变量的分布就是取一些值有很大的概率,有些值是很小的概率,下图中骰子的概率就是每个面的都是一样的,那这六个面对应的点数就是随机变量,每个面数投中的概率就是概率分布(p(x))

演示图片

那我们就可以定义这个概率的范围了,就是一个非负,并且一定是等于1的数,也就是所有随机变量的概率都必须满足这个属性

演示图片

期望值

随机变量的期望值就是,每一个变量乘以它的概率,然后每个相加,就是它们的期望值,如下面举例的骰子的期望值3.5

演示图片

概率密度函数(Probabillity Distribution Function(PDF))

概率密度概念:如下图右上角曲线所示,概率在这个图中的表示就是假设取x轴为2的一个点,然后去它周围dx的一个点,然后这两个点向纵坐标连线形成的面积就是概率,然后这条曲线就是概率密度函数

如果我们有一个随机变量X,然后他可以取一些连续的值,并且他取的概率密度就是之前的p(x),那概率密度也一样满足非负,然后值就是每个变量的概率积分起来等于1,之前是相加,那期望值也同理,概率密度的期望值就是 每个变量的值乘以概率然后积分起来

演示图片

对于一个函数来说,如果一个函数能返回一个随机变量,那算这个函数也是同理,也是那变量乘以概率然后积分就是期望值,说这些概念都是为了下节课用概率论学习蒙特卡罗积分,然后使用路径追踪

演示图片