我的博客和笔记我的博客和笔记
首页
文章
  • 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. 反射方程分解
          • 3. Lambert漫反射模型
          • 4.最终形式
      • 环境光渲染

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

      • JavaScript

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

渲染方程(一)


1. 定义

1.1 反射方程

计算反射表面反射到ωo→方向上的来自于上半球所有方向入射光的辐射率

Lo(ωo→)=∫Ωf(ωi→,ωo→)Li(ωi→)cos⁡θidωi

上式称为反射方程(Reflectance Equation),用来计算表面反射辐射率

1.2 渲染方程

将反射方程增加上自发光因素,可以得到渲染方程(Rendering equation)

Lo(ωo→)=Le(ωo→)+∫Ωf(ωi→,ωo→)Li(ωi→)cos⁡θidωi

完整形式的渲染方程,需要考虑到反射平面所处的位置、时间,光的波长这些因素,具体形式为

Lo(x,ωo→,λ,t)=Le(x,ωo→,λ,t)+∫Ωf(x,ωi→,ωo→,λ,t)Li(x,ωi→,λ,t)(ωi→⋅n→)dωi

2. 反射方程分解

根据前面的微表面理论分析,入射光能量在材质表面分解为两部分,高光反射部分,比例为ks=F,折射到材质内部的部分,比例为1−F,这部分能量一部分在材质内部转换为其他能量消失掉(对于金属材质为全部),一部分重新从表面发射出去,称为漫反射,所以漫反射的比例为ks=(1−F)(1−M),其中M表示金属度,范围从0到1,所以可以将反射方程中的BRDF分解为两部分

f(ωi→,ωo→)=kdfd(ωi→,ωo→)+ksfs(ωi→,ωo→)

3. Lambert漫反射模型

参考 Lambert模型认为,材质的漫反射是均匀发射到所有方向的,所以fd是一个常数,先设想一个最简单的情况,材质只有漫反射,也就是kd=1,ks=0,入射光均匀遍布所有的方向,而且每个方向的亮度都是相同的常数。因为这样fd和Li都是常数,可以提到积分外面。反射方程变成

Lo=fdLi∫Ωcos⁡θidωi

计算这个半球积分

∫Ωcos⁡θdω=∫−ππ∫0π/2sin⁡(θ)cos⁡(θ)dθdϕ=π

得到

Lo=fdLiπ

考虑一下,如果所有方向都有射向球面的光,而且每个方向的光强度都等于Li,那么小平面受到的入射光照度,应该等于光强度乘以半球面积。

Ei=2πLi

根据能量守恒,光出射度Mo=Ei

Mo=2πLo=2π2fdLi=2πLi

可知

fd=1π

考虑材质的颜色,在这里颜色可定义为对三原色的吸收比例,比如白色(1,1,1)表示不吸收任何光,红色(1,0,0)表示将绿色和蓝色完全吸收掉,所以最终漫反射的BRDF为

fd=cπ

4.最终形式

Cook-Torrance模型其实就是一种材质的高光模型,公式

fs=DGF4(n→⋅ω→i)(n→⋅ω→o)

中的F就是高光反射的分量比例ks,所以结合在一起,得到最终的渲染方程为

Lo(ωo→)=Le(ωo→)+∫Ω(kdcπ+DGF4(ω→on→)(ω→in→))Li(ωi→)(ω→in→)dωi

其中

kd=(1−F)(1−M)
Prev
微平面理论(三)