实时环境光 下
两种方法
Split sum
LTC
Shadow from environment lighting
非常困难
环境光是 many light 问题
需要给每个光源生成 shadow map
需要大量采样的样本,取到该方向的遮挡情况
BRDF 是高频,范围小,
环境光项是低频,范围大
目前解决方案:只生成最主要的阴影,一般是太阳
终极解决方案:RTRT,实时光线追踪
SH
Fourier Transform
函数相乘再积分存在一定的滤波意义
Basis Functions 基函数
一个函数可以描述为其他线性无关的函数的线性组合。和基向量相似。泰勒展开多项式也是。
Shperical Harmonics 球谐函数
SH 是定义在球面上的一组正交基函数 f(θ, φ),即球面上的低频信号。
三阶 SH 可以还原成模糊的 EnvMap 中的一个通道,
三阶 SH 9 个系数,还原成 3 通道 EnvMap 需要 27 个系数,即 7 个 float4
每个 Reflection Probe 都会使用 7 个 float4 拟合烘培好的 EnvMap
Prefiltering 预过滤
使用低频信号表示 EnvMap 就是预过滤的思想
Prefiltering + single query = no filtering + multiple queries
Analytic Irradiance Formula (WIP)
BRDF 用公式不好表达,对于从二维方向进入,二维方向出去的四元方法。可能没有什么公式能去精准的表达 BRDF。
这时候就使用预计算的方式,将相应的输入在纹理上用坐标表示,将输出用 RGBA 表示,离线记录在纹理上。理论上,一张纹理通过离散化加线性插值的方式可以记录任意多输入和任意多的输出。
当使用纹理记录 BRDF 后,还能使用 SH 去拟合这张纹理,光滑程度低,接近漫反射的 BRDF 投影到三阶 SH 足够了
投影
还原
三层 9 个基函数就能基本还原漫反射光照,2 层 4 个也能起到不错的效果。
还原公式
Precomputed Radiance Transfer (PRT)
只适用于视线方向相对场景物体不动的情况
预计算三张纹理
或者使用 SH 代替纹理,这样能把 visibility 和 BRDF 环境纹理存到顶点信息里。
渲染方程和高光方程如下
漫反射 BRDF 是常数,可以提出 BRDF 到积分外部,剩余部分进行预计算存进顶点信息。
最后更新于