我的博客和笔记我的博客和笔记
首页
文章
  • 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. 概述
          • 2. 法线分布函数
            • 2.1 定义
            • 2.2 微表面的面积
          • 3. 几何衰减因子
            • 3.1 定义
          • 4. 菲涅尔方程
            • 4.1 定义
          • 5.Cook-Torrance模型
            • 5.1 定义
            • 5.2 推导过程
        • 微平面理论(二)
        • 微平面理论(三)
        • 光照方程
      • 环境光渲染

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

      • JavaScript

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

微平面理论(一)


1. 概述

微表面理论(Microfacet Theory)认为我们看到的表面上的一点是由很多朝向各异且光学平的微小表面组成。当光线从l→方向照射到这点,而我们在v→方向观察时,由于光学平面只会将光线l→反射到关于法线对称的v→方向,而l→和v→已经确定,所以只有法线朝向正好是l→和v→的半角向量h→的微表面才会将光线发射到v→方向,从而被我们看见。

2. 法线分布函数

2.1 定义

法线分布函数(Normal Distribution Function,简写为NDF)用来描述微表面法线的概率分布,可以这样理解:向NDF输入一个朝向h,NDF会返回法线是h→的微表面数占微表面总数的比例,需要注意的是D(h)是描述微表面数量的概率分布函数

2.2 微表面的面积

设一个小平面,面积为dA,此小平面由更小的微表面组成,其中法线为h→的微表面的概率为D(h),这些微表面的面积总和为D(h)dA,考虑到法线范围,定义微表面的法线为h→,范围在立体角dωh之内的所有微表面的表面积为

dA(h→)=D(h→)dωhdA

3. 几何衰减因子

3.1 定义

由于微表面之间的互相遮挡(Shadowing),并不是所有微表面能够接收到光线,还有一部分微表面反射的光线会被阻挡(Masking),还有一部分光线会在微表面之间互相反射. Shadowing和Masking效应用几何衰减因子(Geometrical Attenuation Factor)来表示,用G(l,v)表示

4. 菲涅尔方程

4.1 定义

光学平面会将一部分光线反射,一部分光线折射,其中反射光线的比例用菲尼尔方程(Fresnel Equations)计算,用F(ω→i,ω→h)表示,因为菲尼尔函数一般只和光线和法线之间的夹角相关,有时候也会用F(ω→i⋅ω→h)表示

5.Cook-Torrance模型

5.1 定义

Cook-Torrance模型用来描述反射平面的的BRDF模型中的高光(Specular)部分,公式为

f(ω→i,ω→o)=F(ω→i,ω→h)G(ω→i,ω→o)D(ω→h)4(n→⋅ω→i)(n→⋅ω→o)

5.2 推导过程

设一个小平面,面积为dA,法线方向n→,入射光方向ω→i,微分变量为dωi,观察方向ω→o,微分变量为dωo

根据上面的推导,这个小平面上所有法线为ωh→的微平面的面积为

dA(ωh→)=D(ωh→)dωhdA

由于其他微平面接受的入射光通量不会反射到ω→o方向上,所以不用考虑,所以在ω→h方向上有效入射光通量为

dΦh=Li(ω→i)cos⁡(θh)dA(ωh→)dωi=Li(ω→i)cos⁡(θh)D(ωh→)dωhdAdωi

出射光通量为

dΦo=dLo(ω→o)cos⁡(θo)dAdωo

根据菲尼尔公式,出射光通量和入射光通量的比例可以用如下公式表示

dΦo=F(ω→i,ω→h)dΦh

联立以上公式可得

dLo(ω→o)=dΦocos⁡(θo)dAdωo=F(ω→i,ω→h)dΦhcos⁡(θo)dAdωo=F(ω→i,ω→h)Li(ω→i)cos⁡(θh)D(ωh→)dωhdωicos⁡(θo)dωo

根据BRDF的定义

f(ω→i,ω→o)=dLo(ω→o)Li(ω→i)cos⁡(θi)dωi=F(ω→i,ω→h)D(ω→h)cos⁡(θh)cos⁡(θo)cos⁡(θi)⋅dωhdωo

下面考察dωo和dωh的关系,设小平面上的一个微平面,接受的入射光线方向为ω→i, 法线为ω→h,出射光线方向为ω→o,和单位圆的交点分别是I,Q,R

立体角dωh和立体角dωo之间的约束关系在于,保持ω→i不变,让法线ω→o在立体角dωo范围之内移动,则ω→h需要保证是ω→i和dωo的半角法线,它的活动范围dωh比较小,具体可以计算一下

dωhdωo=dAhdAr

连接IR相交法线ω→h于交点P,由于IR=2IP,所以

dArdA″=4

由于OP=cos⁡(θh),所以

dA′dA″=1cos2⁡(θh)

由于dAh=dA′cos⁡(θh),联立以上公式,可以得到

dωhdωo=14cos⁡(θh)

带入上面的BRDF公式,可以得到

f(ω→i,ω→o)=F(ω→i,ω→h)D(ω→h)4cos⁡(θo)cos⁡(θi)

将几何衰减因子G考虑在内,可以得到

f(ω→i,ω→o)=F(ω→i,ω→h)D(ω→h)G(ω→i,ω→o)4cos⁡(θo)cos⁡(θi)
Prev
双向反射分布函数(BRDF)
Next
微平面理论(二)