6-3-1漫反射辐照度

113 阅读1分钟

给定任何方向向量 wi,我们需要一些方法来获取这个方向上场景的辐射度。

反射方程可以分为两部分,漫反射和镜面反射

Lo(p,ωo)=∫Ω(kdcπ)Li(p,ωi)n⋅ωidωi+∫Ω(ksDFG4(ωo⋅n)(ωi⋅n))Li(p,ωi)n⋅ωidωi

在漫反射中,漫反射兰伯特项是一个常数,去除之后变为Lo(p,ωo)=kdcπ∫ΩLi(p,ωi)n⋅ωidωi,只依赖于wi,计算新的立方体贴图是通过卷积计算出来的

用来采样的wi的半球,应该面向卷积的输出方向

立方体贴图在每个采样方向 wo 上存储积分结果,被称为辐照度图

HDR文件格式可以使储存通道变为8位,提高效率

立方体贴图卷积先预先计算半球辐照度

Lo(p,ωo)=kdcπ∫ΩLi(p,ωi)n⋅ωidωi

对环境光照进行卷积,转换为立方体贴图,对立方体贴图进行卷积等于计算朝向 N 的半球 ΩΩ 中每个方向 wi 的总平均辐射率

反射积分方程的离散版本:o(p,ϕo,θo)=kdcπ1n1n2∑ϕ=0n1∑θ=0n2Li(p,ϕi,θi)cos(θ)sin(θ)dϕdθ

使用菲涅尔公式计算表面简介反射率,通过Fresnel-Schlick 方程解决金属粗糙度,在计算菲涅尔效应时纳入粗糙度

vec3 fresnelSchlickRoughness(float cosTheta, vec3 F0, float roughness) 
{ 
return F0 + (max(vec3(1.0 - roughness), F0) - F0) * pow(1.0 - cosTheta, 5.0); 
}