渲染方程

Ray Tracing2 (Lectures 14~15)

内容:

  • 辐射度量学
    • Motivation
  • 相关的物理量
    • Radiant Energy and Flux (Power)
    • Radiant intensity
    • Irradiance
    • radiance
    • Bidirectional Reflectance
  • Distribution Function(BRDF)
  • The Reflection Equation
  • The Rendering Equation
  • 对渲染方程的理解

Basic radiometry (辐射度量学)

Motivation

在之前的Blinn-Phone光照中涉及到的光线强度并没有仔细定义,并且在光线反射处理中的能量损失等相关问题也并没有定义。

辐射度量学是专门对光照的一系列的物理量的精确的定义方法、单位。整个一套路线追踪(高级的光线追踪)的内容就是建立在辐射度量学上。

avatar

定义的是光照在空间中的属性不是在时间上的属性,同样是定义在几何光学之上的,认为光沿直线传播,不考虑波动性。

基于物理定义的一系列光照的物理量。

相关的物理量

Radiant Energy and Flux (Power)

Radiant Energy(辐射能)

avatar

光源辐射出的一系列的(电磁波)能量

Radiant Flux (Power) (辐射通量(功率))

avatar

单位时间内的能量,可以理解为不同W的灯泡,就是所谓的光源的亮度

物理上的实际定义:单位时间内通过感光平面内光子的数目。

avatar

Radiant intensity(辐射强度)

avatar

就是单位立体角上的功率。能量除以立体角。一个光源往四面八方发散光源,定义一个与方向有关的光的能量的相关的物理量。

立体角: 对二维角度定义的延伸,从球心引一条锥(对应角有多大--立体角描述)交圆的面积(正对圆心)除以半径的平方。

avatar

微分(单位)立体角:
规定球坐标后,便可求得对应的微分立体角。
avatar

由此也可以看出,θ、φ并不是对球的均匀的划分,发现微分立体角的变化前面还有个系数。

avatar

辐射度量中,通常用ω表示三维中的方向,ω可以用θ、φ来定义,进而求出其微分立体角。
avatar

avatar

其中I对应的是intensity,由intensity的定义反过来通过积分便可以得到对应的power,进一步便可以得到:如果点光源的光是均匀散发的,那么其中任意方向(向量)的intensity除以4*pi,也就是在方向上定义的强度。

Irradiance 辐照度

avatar

与intensity较为类似,注意,对应的unit area要与光线垂直,不垂直的话要进行投影。
avatar

对应的直观理解,地球的四季轮转。

avatar

同样用它可以解释光照模型中的能量衰减的问题。

avatar

对应的,由于光在传播过程中立体角始终没变,故intensity没有改变,衰减的是irradiance。

radiance

avatar

与之前物理量的联系:

avatar

radiance与irradiance的区别关键在于是否有方向性,irradiance表示一个单位区域接收到的能量,而radiance考虑的是其中来自某个方向的能量。

avatar

同样,从光线发出的角度理解,一个区域往一个方向发出光线(intensity),对应其中的一个很小的面, 认为两者的方向一致,可得radiance

avatar

radiance与irradiance的联系: 二者差的方向性:

avatar
irradiance就是将四面八方的radiance积分。

Bidirectional Reflectance Distribution Function(双向反射分布函数)

某个方向进来的能量如何在不同的反射方向上分配。

将反射的过程理解为:光线 从某个方向打到某个单位区域,这个区域将能量吸收后在散发出去。BRDF对应的意义就是这些散发出去的能量与角度的关系,BRDF定义不同出射方向上的能量分配。

avatar

从一个方向的立体角ω的radiance乘积或积分就得到这一块的irradiance,然后irradiance再转化成radiance出去(不同方向上分配不同的能量)

BRDF就是定义在一个单位面积上接收到来自一个微小立体角接收到的irradiance如何分配到不同方向上。

对于任意一个出射方向计算出radiance,除以单位面积的irradiance

avatar

就是来自某个方向上的能量打到某个表面上,然后怎样分配到不同方向上的问题。

如果是漫反射,对应的BRDF就会定义income的能量会均匀的各个不同的出去的方向上,如果是镜面反射,能量就会集中在均匀反射方向。

本质上反映了光线与物体是如何作用,不同材质的物体与光线作用不同,也就是定义了不同材质的物体。

BRDF的作用就是帮助计算机模拟物体材质表面效果,让渲染出来的虚拟图像更加真实。

The Reflection Equation

BRDF考虑某一个方向上的入射,往某一个方向反射出去是什么样的结果。

对于一个着色点,它在各个不同的光照环境下,考虑它在不同反射环境下的反射光照对观测方向上的贡献。对所有的环境下积分,对应的就是反射方程所描述的。

avatar

后三项乘积表示着色点处的对radiance相乘得到的irradiance,再通过BRDF决定了这些能量在观测方向上的分配,最后将整个光照环境进行积分,就得到的对应的着色。

但是存在一个问题,到达这个着色点的地方的光不仅仅来自于光源,也可能是来自其他面的反射后的光线再到达这个地方(考虑光线是弹射多次)也就是一个不断递归的问题。

The Rendering Equation

以上忽略了物体自己会发光的情况,加上自己发的光的情况便可以得到渲染方程。

avatar

同着色模型一样,考虑方向时认为所有的方向(单位向量)是朝外的。 即考虑入射方向是从一个球心往上半球的方向发散,对应积分域是上半球。(下半球对反射没有贡献)。

同时将夹角改写成了法线与入射方向的点乘。

所有的限制在物体表面上的光线传播都是满足这个渲染方程。

Understanding the rendering equation

  • 考虑一个点光源的情况,由上述方程可以得到:

avatar

  • 考虑多个点光源的情况,光线传播对应的线性的性质:

avatar

  • 考虑面光源,面光源对应的是一堆点光源的集合,将面光源上的任意一点的贡献积分起来
    • 将整个面光源表示为一些列点光源的积分,然后再计算BRDF
    • 先计算面光源上的一点的贡献,最后积分得到整个面光源的贡献

avatar

  • 考虑平面的接收到的光线不仅仅是来自光源,也可能是来自其他物体反射后的光线,将反射的物体、反射面当成光源计算:
    • 一个点辐射出的radiance依赖于其他点的radiance,等式中变量改变的体现
    • 多次弹射
    • 从某个角度看向A点对应的radiance不知道,其他物体反射到这一点的radiance也不知道需要解,通过简化方程求解

avatar

  • 将其简化处理:
    avatar

  • 定义光源、物体材质即可知到emission,BRDF,夹角也可通过几何计算得到

  • 只剩下两个未知量

  • 右端=着色器本身物体的发光+从其他物体表面的radiance(未知)通过BRDF反射到我们现在观察的着色点的方向上的radiance

进一步定义算子形式:

avatar

  • 所有物体辐射出的能量=所有光源的能量+辐射之后的能量被反射之后的能量,K理解为反射操作符
  • L是个向量

求解,算子同样有类似泰勒展开的性质:

avatar

最终得到:

avatar

  • 最终看到的图分解成直接看到光源会看到什么(直接看光源)+光源辐射出的能量经过一次弹射的能量会看到什么(直接光照,光线达到物体再打到眼睛,包括类似阴影)+.......(两次称为间接光照,反射本身也是一种间接光照)
  • 所有不同的光线的弹射次数全部加起来(直接光照+间接光照+..........)----对应全局光照
  • 光栅化就是对应0次和一次的弹射(光源自己以及直接光照),剩余的部分光栅化较难处理。

更为直观的例子:

avatar

  • 光打不到的地方就是黑的,打得到的地方就亮。

avatar

avatar

avatar

  • 三次弹射的时候灯是黑的:光线只从摄像机中进入物体里面并没有出来,考虑一个玻璃球光线弹射一次进去,弹射一次出来。

  • 随着光线弹射次数的增加,最后场景中的亮度会收敛到某一个亮度(能量守恒),直观的例子就是自然界就是全局光照的效果,最后的效果一定会收敛到某个亮度。

  • 路径追踪就是解渲染方程的一种方式,同样可以解释收敛的问题。

reference:

[1] GAMES101-现代计算机图形学入门-闫令琪

posted @   田下有心  阅读(429)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示