文章

在OpenGL中实现实时Area Light

LearnOpenGL - Area Lights

1 Introduction

虽然我们已经实现了三种经典的光源类型:平行光、点光源、聚光灯,但是这些光源存在一个相同的缺点:无法模拟现实世界中具有真实面积/形状的光源。


2 Problem Description

假设场景中放置了一个邻近几何体的矩形面光源,该光源需向周围发射光线。我们需要在着色点处,将面光源对应的球面多边形立体角范围内的入射辐射亮度,通过BRDF积分计算得出射辐射亮度。该出射亮度即构成物体表面反射至视点的最终光照效果。

Heitz等人的论文阐述了如何通过3x3矩阵表示的线性变换作用于某个基础分布,从而生成具有核心共性的新分布族。这类新分布被命名为“线性变换余弦”(LTC),因其通过对截断余弦分布施加线性变换,同时保留使其能近似基于物理的BRDF的关键特性。所谓”截断”指将余弦分布(即Lambertian分布)限制在半球空间,这至关重要——虽然单位球面立体角范围为[0,4π],但光源不应照亮背向它的物体,故将分布限制在着色点法线方向的”上半球”

实时渲染领域所使用的BRDF通常具有复杂形态,支持掠射角各向异性拉伸、偏斜度调整及多级材质粗糙度等特性,这些特性正是其能呈现逼真视觉效果的关键。若我们能设计一种线性变换,通过矩阵乘法将这些特性赋予余弦分布,即可获得理想的材质属性。选择余弦分布的优势在于其积分存在闭合解表达式:

\[D_o(\omega_o)=\frac{1}{\pi}cos\theta_o\]

总结而言,我们的核心策略是:构建一个代表目标BRDF的3x3变换矩阵,将其作用于截断余弦分布,继而利用该分布的闭合积分表达式高效计算立体角度量

在线性代数中,当两个矩阵A与B相乘时,若B可逆,我们可以进行”逆运算”操作。

若我们将线性变换矩阵M作用于余弦分布以近似目标BRDF,则可通过逆向运算将问题转换至余弦空间进行积分求解。如下图所示,该方法的核心思想正是通过逆向变换回归至基础余弦分布空间进行积分计算,此过程被原作者形象地称为”逆变换至余弦空间”。

本文由作者按照 CC BY 4.0 进行授权