BRDF相关

发布时间 2023-03-28 16:23:58作者: 爱莉希雅

前言

​ 在图形学中,BRDF(Bidirectional Reflectance Distribution Function,双向反射分布函数)是真实感图形学中最核心的概念之一,它描述的是物体表面将光能从任何一个入射方向反射到任何一个视点方向的反射特性,即入射光线经过某个表面反射后如何在各个出射方向上分布。BRDF 模型是绝大多数图形学算法中用于描述光反射现象的基本模型。本篇将介绍辐射度量学、BRDF

数学基础

球面坐标

​ 因为光线以方向来表示,所以用球面坐标对其进行表达比用笛卡尔坐标系更为方便
image-20230327221135832

用三个参数来表示球面坐标的向量:

  • \(r\) :向量的长度
  • \(\theta\) :向量和 Z 轴的夹角
  • \(\varphi\):向量在 xy 平面上的投影和 x 轴的逆时针夹角

立体角

​ 立体角描述了从原点向一个球面区域张成的视野大小,可以看成是弧度的三维扩展
image-20230327220930931

求立体角:我们知道弧度用于度量二维角度,它等于角度在单位圆上对应的弧长,单位圆的周长是 2 π,所以整个圆对应的弧度也是 2π 。立体角则是度量三维角度的量,用符号Ω表示,单位为立体弧度(也叫球面度,Steradian,简写为 sr),等于立体角在单位球上对应的区域的面积(也就是在任意半径的球上的面积除以半径的平方ω= s/r2 ),单位球的表面积是 4 π ,所以整个球面的立体角也是4π
image-20230327221914334

其中立体角\(\omega\)的表达式:\(dA = (r d \theta)(r sin\theta d\varphi) = r^2 sin\theta d\theta d\varphi\),\(d\omega = \frac{dA}{r^2} = sin\theta \space d\theta \space d\varphi\)

什么是辐射度量学?

​ 辐射度量学给出一系列度量方法和单位去定义光照,它定义的光照在空间中的属性在物理上是完全正确

为什么需要辐射度量学?

​ 仅仅用RGB向量对光线亮度进行定义是不完全对的,也就是说Whitted风格光线追踪并不是一个真实的结果,因此需要用物理量来描述光线

辐射度量学

wiki上的辐射度量学的参数表:
image-20230327220745169

​ 以下介绍几个常用物理量,其中最重要的是Radiance和Irradiance:

  1. Radiant Energy(辐射能) and Flux (辐射通量)

    • 辐射能:辐射出的电磁能量,单位焦耳\(J\),以\(Q\)来表示,可与做的功类比
    • 辐射通量(辐射功率):单位时间的辐射能,单位瓦特\(W\),以\(\Phi\)来表示\(\Phi = \frac{dQ}{dt}\),可与功率类比
      image-20230327230517049
  2. 辐射强度(Radiant Intensity):单位立体角的辐射通量,单位\(W·sr^{-1}\),以\(I\)表示\(I = \frac{d\Phi}{d\omega}\)

  3. 辐照度(Irradiance):单位面积入射表面的辐射通量,单位\(W·m^2\),以\(E\)表示\(E = \frac{d\omega}{dA} = {\displaystyle \int_{\Omega} L(\omega) cos\theta d\omega}\)(\(\Omega\)为入射光形成的半球,\(L(\omega)\)为沿\(\omega\)方向的光强)。随着球的半径增大,对应的立体角没有变化,变化的是单位面积,因此Irradiance变小
    image-20230327231803437
    image-20230327233301043

  4. 辐射率(Radiance):物体表面沿某一方向的明亮程度,也就是 某单位面往某单位立体角方向上的发出的能量,单位\(W·sr^{-1}·m^{-2}\),以\(L\)表示\(L = \frac{d^2 \Phi}{cos\theta dA d\omega}\)
    image-20230327233434522

Bidirectional Reflectance Distribution Function(BRDF)

  • 定义:在计算机图形学领域,BRDF(双向反射分布函数)是一个用来描述表面如何反射光线的方程,给定入射的光线数量和方向,计算出指定方向的出射光亮度(radiance),也就是说我们知道反射点吸收来自某个方向的radiance并将其转化为irradiance,求反射到某方向上的radiance的能量大小。更精确的定义是出射的radiance和入射的irradiancce的微分之比\(\large f(l,v) = \frac{dL_r(\omega_r)}{dE_i(\omega_i)}\),其中\(dE(\omega_i)\)表示从\(\omega_i\)方向入射的radiance到达反射点时,被吸收转化为irradiance;\(dL(\omega_r)\)表示从反射点向\(\omega_r\)方向反射出的radiance
    image-20230328104043063
    image-20230328105412349

  • 为什么需要BRDF?

    我们知道反射会将入射光线反射到另一个方向,且若是漫反射则会向四面八方反射,但我们不知道反射后的某方向的能量是多少,因此我们需要一个函数来解决该问题,该函数就是BRDF,它决定了物体的材质属性

  • 反射方程

    由于反射不仅仅只接受某一方向的能量,而对四面八方的能量求和,再反射到某一角度,因此反射方程如下:
    image-20230328110508608

    其中,\(H^2\)表示积分的面积是半球面

    • 注意:因为反射点接收的能量还来自间接光且反射后的能量还会反射到其他方向上,所以反射方程是一个递归
  • 渲染方程

    渲染方程只是比反射方程多出了一个自发光,因此渲染方程 = 反射光 + 自发光。方程如下:
    image-20230328111212556

    • 渲染方程实例

      • 若场景中只存在一个点光源,那么无需进行积分
        image-20230328111821875

      • 若存在多个点光源,只需求和即可
        image-20230328112003148

      • 若是面光源(可以理解为点光源的集合),则需要进行积分
        image-20230328112043970

      • 再加入其他物体。对这些物体看做面光源,对它所占的立体角进行积分,不同之处是该立体角并没有在每个入射方向都有radiance,只有部分方向有
        image-20230328112203949

        可以看到该处只有物体的反射不清楚,因此可以缩减为如下式子,其中uv表示位置角度,K为反射因子:
        image-20230328113037786
        image-20230328113347808

全局光照

​ 上述式子可以进行转化(广义二项式)
image-20230328113611424

从该式子可以看出,这是一个全局光照算法,会不断和物体相交反射

而对于光栅化来说\(L = E + KE\),只有自发光和直接光

BRDF性质

​ BRDF有如下性质

  1. 可逆性。交换入射光与反射光,并不会改变 BRDF 的值
  2. 能量守恒.入射光的能量与出射光能量总能量相等
  3. 线性

reference

https://github.com/QianMo/Game-Programmer-Study-Notes/blob/master/Content/

GAMES101:现代计算机图形学入门 – 计算机图形学与混合现实在线平台 (games-cn.org)