我的博客和笔记我的博客和笔记
首页
文章
  • TurboLink
  • TinyEncrypt
  • UnrealStyleGuide
  • AxTrace
  • Cyclone
  • 数学相关
  • 图形学
  • 密码学
  • 编程语言
关于
GitHub
首页
文章
  • TurboLink
  • TinyEncrypt
  • UnrealStyleGuide
  • AxTrace
  • Cyclone
  • 数学相关
  • 图形学
  • 密码学
  • 编程语言
关于
GitHub
  • 我的文章

    • 从抛币协议到智能合约

      • Part1
      • Part2
    • JPEG算法解密

      • Part1
      • Part2
      • Part3
      • Part4
      • Part5
      • Github
    • SPH算法简介

      • Part1
      • Part2
      • Part3
      • Part4
      • Github
    • 赌博中的数学:Martingle策略
    • 如何生成一个随机的圆形
    • 一个简单的DH密钥协商算法的实现
    • 如何计算线段和圆的交点
    • 一道数学趣题
    • 斐波那契数列和1/89
    • 匀速贝塞尔曲线运动的实现

      • Part1
      • Part2
  • 开源项目

    • TurboLink
    • TinyEncrypt
    • UnrealStyleGuide
    • AxTrace
    • Cyclone
  • 学习笔记

    • 数学相关

      • 常用数学符号
      • 群
      • 数论(一)
      • 数论(二)
      • 数论(三)
      • 概率
    • 密码学

      • RSA
      • 抛币协议
      • 智能扑克协议
    • 图形学

      • 数学基础

        • 矢量
        • 矩阵
        • 立体角
        • 几何变换(一)
        • 几何变换(二)
        • 法线变换
        • 摄像机变换
      • 光照模型

        • 传统光照模型
        • 光度学
        • 双向反射分布函数(BRDF)
          • 1. 物体对光的反应
            • 1.1 金属
            • 1.2 非金属
          • 2. BRDF
            • 2.1 定义
            • 2.2 特性
            • 2.3 为什么BRDF方程是L和E的比值
        • 微平面理论(一)
        • 微平面理论(二)
        • 微平面理论(三)
        • 光照方程
      • 环境光渲染

        • 环境光渲染(一)
        • 环境光渲染(二)
    • 编程语言

      • JavaScript

        • 环境搭建
        • 基本语法
        • 函数
        • 对象和类

BRDF(双向反射分布函数)


1. 物体对光的反应

1.1 金属

对于金属,折射进表面的光线的能量会立即被金属中的自由电子吸收,转换成电子的能量,不再可见

1.2 非金属

对于非金属(电介质或绝缘体),它们往往不是由单一成分构成,而可以认为其中包含了很多折射率不同的微粒,光线遇到这些粒子后发生反射折射,在物质内部不断传播,散射到不同方向,其中一部分会再次穿过表面被观察到,这种现象称为次表面散射(Subsurface Scattering)

1.2.1 观察尺度

根据物质属性和观察尺度的不同,次表面散射会表现出不同的效果

如果光线在物质中传播距离小于观察尺度(绿色区域,可以认为是一个像素区域),我们看到情况如下面的右上图,入射点、反射点、次表面散射的出射点看起来是同一个点。其中反射部分(图中浅棕色出射光)就是我们常说的高光(Specular Light),常聚集在一个方向周围,向这个方向观察该点会看到明显的高光,从其他方向观察该点时高光则比较微弱;次表面散射部分(图中蓝色出射光)是漫射光(Diffuse Light),光线被散射到各个方向。

如果光线在物质中的传播距离大于观察尺度,就需要使用次表面散射算法来建模

2. BRDF

2.1 定义

BRDF(bidirectional reflectance distribution function),是用来描述反光小平面的反射光和入射光的比例关系的函数,设一个不透明的、不发光的小平面,BRDF的定义为

f(ωi→,ωo→)=dLo(ωo→)dEi(ωi→)

其中f就是BRDF函数 ωi→是入射光方向, ωo→是观察方向 Lo(ωo→)是ωo→方向反射光的亮度(Luminance) Ei(ωi→)是小平面接受的照度在ωi→方向上的分量, 由照度和亮度的定义可知,来自入射方向的入射光的辐射率(亮度)为

Li(ωi→)=dΦdωidAProj=dΦdωidAcos⁡θi=dE(ωi→)dωicos⁡θi

得到dEi(ωi→)=Li(ωi→)cos⁡θidωi,所以

f(ωi→,ωo→)=dLo(ωo→)Li(ωi→)cos⁡θidωi

2.2 特性

f(ωi→,ωo→)≥0f(ωi→,ωo→)=f(ωo→,ωi→)∀ωi→,∫Ωf(ωi→,ωo→)cos⁡θodωo≤1

2.3 为什么BRDF方程是L和E的比值

参考

2.3.1 从测量方面来看

测量入射光的设备测量小平面的照度(E)最方便,不用关心方向,而测量出射光则是测量辐射率(L)最方便,用狭长的测光筒

2.3.2 从数学角度来解释

一束光照到平面后,被平面反射到各个方向,其中一个出射方向的光通量只是整个反射光通量极小的一部分,当出射方向立体角趋于0时,

limωo→0dLoLi=0

所以在实际计算中使用辐射率和辐射率比值是没有意义的。而如果分母改成表面上接收到的来自光源方向的微分辐照度,dE=Li(l)dωcos⁡θi,dE会小很多,所以比值dLo/dEi是有意义的

Prev
光度学
Next
微平面理论(一)