首页 > 其他分享 >Ray Tracking 渲染方程

Ray Tracking 渲染方程

时间:2024-04-01 09:44:39浏览次数:17  
标签:Radiance 立体角 Radiant 渲染 radiance 弹射 单位 Tracking Ray

Basic radiometry (辐射度量学)

Radiant flux

Radiant energy Definition: Radiant energy is the energy of lectromagnetic radiation. It is measured in units of joules, and denoted by the symbol:

\[Q [J = Joule] \]

Radiant flux (power) Definition: Radiant flux (power) is the energy emitted,reflected, transmitted or received, per unit time.

\[\Phi\equiv\frac{\mathrm{d}Q}{\mathrm{d}t}\text{ [W = Watt] [lm = lumen]}^{\star} \]

flux是功率,可以看成是单位时间辐射出来的光子数量

intensity

Radiant Intensity 是单位立体角上点光源的功率
立体角是在球上一个角对应面积与球半径平方的比值。

当立体角发生微小变化时,dA是对应的面积,可以发现这个角度和\(\theta\)角相关,也就是说一个微小立体角对应的面积其实和角与赤道和向上轴之间的夹角有关。

w是面积与半径平方的比值,当是单位长度时,这定义了一个方向(因为和\(sin\theta\)相关)

如果对球面上各个方向的光线做积分。可以得到这个点光源的功率。同时,点光源发出的Itensity是各向同性的,所以I可以由\(I=\frac\Phi{4\pi}\)得到。

也就是说立体角定义了空间中一个角。然后Intensity定义了单位立体角上点光源的功率。

irradiance

Definition: The irradiance is the power per unit area incident on a surface point.
平面上一点接收到的单位面积的功率。

radiance

【这实际上定义了一个光线,对于接受到它的物体而言,可以对立体角积分得到Irradiance然后再对面积积分得到Energy】
radiance是描述环境中光分布的基本场量
radiance是与光线相关的量
渲染的计算围绕radiance

Definition: The radiance (luminance) is the power emitted, reflected, transmitted or received by a surface, per unit solid angle, per projected unit area.

定义在单位立体角上单位面积辐射出来的功率。

然后,有了以上定义就可以解释单位面积入射和射出来的Radiance了。
Incident radiance(入射Radiance)是每单位立体角的irradiance。

Exiting Radiance(出射Radiance)可以认为是每个Intensity(Intensity对于这个单位面积来说就是来源于一个单位立体角的光线)在单位面积上的功率。

Radiance 和 Irradiance 之间的关系

Irradiance 是这个单位面积上收到的total power
Radiance 是这个单位面积上收到的来自一个单位角的power
对Radiance在单位角上积分,就可以得到Irradiance:

\(cos\theta\)的意思是要与平面垂直。

Bidirectional Reflectance Distribution Function(BRDF)

反射就是我这个单位面积上的Irradiance对立体角微分出去,可以得到沿方向上的Radiance。同时Irradiance又是对入射Radiance的积分,所以如果直接定义某个方向的入射Radiance对某个方向的出射Radiance,就是反射的过程。可以通过BRDF定义。

双向反射分布函数 (BRDF) 表示有多少光从每个入射方向反射到每个出射方向。【BRDF定义了每个入射和出射radiance之间的关系】

反射方程

但是这里有一个问题是入射的光其实也来源于别的点的反射。

渲染方程

总而言之,渲染方程可以认为是场景中所有光源发出的辐射和所有光源反射出来的辐射:

渲染方程出来之后,其实问题变为了怎么求解【老师的原PPT和课程简直是优雅,不开心的时候可以去听一听】:

首先,简写一下:

然后,再抽象一下,写成算子:

变换一下,发现\((I-K)^{-1}\),这个东西类似泰勒展开里的\(\frac{1}{1-x}=1+x+x^2+x^3+...+o^n(x)\)然后展开就变成了这样:

它的物理意义可以解释为,这个L表示场景里的全局光照,它包括了直接光照和间接光照(在场景中进行一次弹射的光、2次弹射、。。。n次弹射的光,PPT上的弹射指的是对间接光照的弹射)。

光栅化的过程只囊括了直接能看到光源和Direct illumination on surfaces也就是物体表面反射过来的光。【当然光栅化也能做多次弹射】

一些例子(有一个例子是,看到镜子里的物体其实需要弹射两次:眼睛-镜子-物体-光源;弹射一次只能看到镜子本身:眼睛-镜子-光源)

标签:Radiance,立体角,Radiant,渲染,radiance,弹射,单位,Tracking,Ray
From: https://www.cnblogs.com/code-fun/p/18107441

相关文章

  • 渲染农场最简单三个步骤是什么?
    ​在涉及三维图像渲染时,渲染农场是设计师经常围绕的一个话题。通过渲染农场可实现一个高效的渲图速度,帮助设计师节省大量的时间。渲染农场又分为本地渲染与云渲染农场,那么渲染农场使用过程简单的操作是什么一起来看看吧!本地渲染农场搭建步骤用户如何多余的闲置电脑,可自行搭建一......
  • 【前端面试3+1】06继承方式及优缺点、缓存策略、url输入到渲染全过程、【二叉树中序遍
    一、继承有哪些方式?以及优缺点        继承的方式包括原型链继承、构造函数继承、组合继承、原型式继承、寄生式继承和组合式继承。1.原型链继承:实现方式:将子类的原型指向父类的实例来实现继承。优点:简单易懂,代码量少。缺点:存在引用类型共享的问题。functionPare......
  • Ray Tracking 加速结构
    基本原理中使用AABB作为判断光线和物体相交的加速。在AABB内部如何快速判断判断光线和物体的相交情况呢?主要分为种方法:UniformgridsSpatialpartitions注意这里使用的加速结构是在光线追踪之前做的准备工作。Grids分格子,然后记住每个格子里有哪些物体。碰到格子的话,再和......
  • Python大数据为啥一定要用Numpy Array,靠着这份900多页的PDF面试整理
    1.内存占用更小适当地使用Numpy数组替代List,你能让你的内存占用降低20倍。对于Python原生的List列表,由于每次新增对象,都需要8个字节来引用新对象,新的对象本身占28个字节(以整数为例)。所以列表list的大小可以用以下公式计算:64+8*len(lst)+len(lst)*28字节而使......
  • Ray Tracking 基本原理
    光线追踪和光栅化的区别光栅化不能处理更全局的信息。比如软阴影、玻璃的反射以及以及经过多次反射的光线。光线追踪将整个过程变换为从摄像机发出感知射线,到达物体之后,如果相同的点也能够被光源感知到,以此进行渲染。感觉光栅化这个过程是从光源出发,最后通过投影转到相机上。光......
  • Blazor学习记录_8.CSS隔离和代码隔离_异常处理_流式渲染
    19.CSS隔离和代码隔离19.1代码隔离使用C#partial关键字,创建一个与razor文件同名,扩展名加.CS的C#类文件,然后把razor文件中的@code中的代码迁移至cs文件中。注意命名空间、泛形参数声明、依赖注入的迁移19.2CSS隔离如同前面代码隔离文件一样,我们创建一个组件样式文......
  • PCL点云处理之 点云垂直度计算与颜色渲染(二百三十八)
    PCL点云垂直度计算与颜色渲染(238)一、算法介绍二、垂直度的计算步骤与实现1.步骤描述2.代码示例三、基于垂直度的点云颜色渲染1.代码示例2.渲染效果四、参考文献一、算法介绍点云垂直度的计算方法:通过公式能知道地面,人行道、绿篱等位置的点云,法向......
  • qrcodejs2 首次生成微信支付二维码不渲染问题
    使用qrcodejs2生成微信支付二维码,后端向前端传递了微信二维码url,通过此方法生成渲染二维码图片  qrcode(url){ //前端根据URL生成微信支付二维码   console.log("调用二维码生成")   //先清除,后增加   document.getElementById("qrcodeIm......
  • Yii2-助手类(ArrayHelper)
    Yii2-助手类(ArrayHelper)数组助手类ArrayHelperYii数组助手类提供了额外的静态方法,让你更高效的处理数组。模型转数组$model=Country::findOne(['code'=>'BR']);VarDumper::dump(ArrayHelper::toArray($model));//['code'=>'BR''name'=&g......
  • Array方法总结(三)
    Array.prototype.slice()返回一个新的数组对象。从原数组的start和end(不包括end)索引范围内浅拷贝。slice(start,end)constfruits=["Banana","Orange","Lemon","Apple","Mango"];constcitrus=fruits.slice(1,3);//fruits包含['......