「PBR 系列」总览:基于物理的渲染从理论到引擎落地

本系列共 五篇,沿着「物理理论 → Cook-Torrance 框架 → Disney 工业化 → 引擎工程化 → 扩展模型」的脉络,系统梳理基于物理的渲染(PBR)从 1970 年代微表面理论到 2020 年代分层材质前沿的全链条。每一篇可独立阅读,但顺序串联起来能形成一张完整的 PBR 知识地图。

系列目录

第一篇 · 理论基石:从渲染方程到 Cook-Torrance 框架

由 Kajiya 渲染方程出发,建立 PBR 的两条核心公理(能量守恒 + 互易性),梳理 BxDF 术语家族(BRDF/BTDF/BSDF/BSSRDF),并沿着微表面理论展开 Cook-Torrance 框架的三项演化:

  • NDF (D 项):Beckmann → Phong → GGX,长尾效应为何成为工业标准
  • G 项:隐式几何项 → Smith → Heitz 的 Joint Smith
  • F 项:菲涅尔精确解 → Schlick 近似 → 双控
  • 漫反射:Lambert → Oren-Nayar 的逆反射修正

第二篇 · Disney Principled BRDF 全解析

本系列的核心。Burley 2012 的论文不仅是数学的整理,更是工业化的奠基。本篇详解:

  • 三大设计原则(艺术导向、参数归一化、可观测)
  • 11 个参数完整解析(BaseColor / Metallic / Roughness / Specular / Anisotropic / Sheen / Clearcoat / Subsurface 等)
  • Disney Diffuse 公式从原始形式到 Lambert + retro-reflection 整理形式的推导
  • Disney Specular(GGX + Smith + Schlick)三项的具体选型理由
  • 2015 BSDF 扩展:透射、各向异性的二次迭代、薄表面材质
  • 完整 HLSL 参考实现

第三篇 · 实时化工程实践:IBL、Filament 与 URP 源码

理论必须落到引擎。本篇覆盖:

  • Karis Split Sum 近似:IBL 卷积积分如何被拆成「预滤波 cubemap × BRDF LUT」
  • 预积分 FGD LUT:通道编码、烘焙脚本、运行时采样
  • Filament 标准模型:reflectance / baseColor / roughness 的重映射理由
  • URP BRDF.hlsl 源码对照:BRDFData 结构、DirectBRDF、GlobalIllumination 函数解构
  • 移动端优化:half 精度、ALU 折叠、IBL mip 级联简化
  • 调试三件套:白炉测试、粗糙度梯度图、金属/电介质对照

第四篇 · 布料与 Sheen 渲染:从 Charlie 到丝绸天鹅绒

布料是 Disney 框架的第一个真正”破例”——GGX 在掠射角无法表现绒毛的环形高光。本篇剖析:

  • 为什么传统微表面 BRDF 在布料上失效
  • Charlie 分布 vs Ashikhmin Velvet vs Neubelt 修正版
  • Visibility 项三选一:V_Charlie / V_Ashikhmin / V_Neubelt
  • Filament 的 cloth specular BRDF(sheen color + subsurface color 双参数)
  • UE4 The Order: 1886 的方案:金属/非金属布料分类设计
  • 丝绸 vs 天鹅绒:同一个 Charlie 模型如何用 roughness、F90、tangent warp 区分质感
  • 各向异性布料(IllusionRP 实战代码)

第五篇 · 次表面散射与能量补偿:从 BSSRDF 到 Kulla-Conty

PBR 的最后两块拼图:高维次表面散射的近似与单次散射的能量找回。

  • BRDF / BSSRDF / BTDF 的维度差异
  • 扩散剖面(Diffusion Profile)与 Gaussian Sum 近似
  • 主流 SSS 方案对比:Light Warping / Pre-Integrated Skin / Spherical Gaussians / Separable SSS
  • Translucency 透射近似(Colin GDC 2011 的快速半透明方案)
  • 多次散射的能量危机与白炉测试
  • Kulla-Conty 补偿模型与预积分 LUT
  • 前沿:SpongeCake 分层微薄片 BSDF(2023)

符号约定(Nomenclature)

整个系列五篇文章共用一套符号体系。为方便跨篇阅读,先统一约定如下,后续不再重复说明。

数学符号 含义 代码对应(HLSL/GLSL)
/ 入射光方向(指向光源) lightDirectionWS, L
/ 出射方向(指向相机) viewDirectionWS, V
/ 半角向量 halfDir, H
宏观表面法线 normalWS, N
/ 切线 / 副切线 tangentWS, bitangentWS
真实粗糙度 = roughness
半向量 (或 )的夹角 LoH, VoH
垂直入射时的反射率(Schlick 基底) F0, brdfData.specular
掠射角时的反射率(通常为 1) F90
法线分布函数(NDF) D_GGX(...)
/ 几何遮蔽 / 可见性项 V_SmithGGXCorrelated(...)
菲涅尔项 F_Schlick(...)
漫反射反照率(diffuse albedo) diffuseColor
微薄片体积密度(仅第四、五篇用)

点积速记(出现频率最高的代码变量):

速记 计算 物理意义
NoL 入射光与法线夹角余弦,决定 Lambert 余弦衰减
NoV 视线与法线夹角余弦,加 防除零
NoH 半角与法线夹角余弦,NDF 主输入
LoH 菲涅尔项主输入
VoH 同 LoH(半角对称时相等)

约定:saturate(x) = clamp(x, 0, 1);所有点积在 BRDF 内默认 saturate;clamp 下限可省略时用 max(x, 1e-5) 防 NaN。


阅读建议

公式较多,建议在桌面端阅读以获得最佳数学公式渲染效果。
如果时间紧张,可以先看每篇的「核心结论」段落(在每篇开头),需要细节时再回头查公式与代码。

主要参考资料:QianMo 的 PBR-White-Paper、Burley 的 Disney Principled BRDF (2012/2015)、Karis 的 Real Shading in UE4 (2013)、Filament 文档、Unity URP 源码,以及 Imageworks、Guerrilla 等公司的 SIGGRAPH 课程笔记。