光照探针中的光照信息被编码为球谐 (SH) 基函数。我们使用三阶多项式,也称为 L2 球谐函数。它们采用 27 个浮点值进行存储,每个颜色通道使用 9 个浮点值。
Unity 中 Realtime Global Illumination 实现,采用了一种与该功能的原开发者 Geomerics 不同的球谐函数方法,即 Peter-Pike Sloan 的论文球谐函数 (SH) 的实用小技巧 (Stupid Spherical Harmonics (SH) Tricks) 中的表示法和重建方法。Geomerics 最初的方法是基于 Ramamoorthi/Hanrahan 的论文辐照度环境贴图的高效表示方法 (An Efficient Representation for Irradiance Environment Maps) 中的表示法和重建方法。
用于重建的着色器代码可在 UnityCG.cginc 中找到,并使用 Peter-Pikes 论文的“附录 A10 辐射环境贴图的着色器/CPU 代码 (Appendix A10 Shader/CPU code for Irradiance Environment Maps)”中的方法。
数据在内部的排列顺序如下:
[L00: DC]
[L1-1: y] [L10: z] [L11: x]
[L2-2: xy] [L2-1: yz] [L20: zz] [L21: xz] [L22: xx - yy]
R、G 和 B 的 9 个系数的排列顺序如下:
L00, L1-1, L10, L11, L2-2, L2-1, L20, L21, L22, // red channel
L00, L1-1, L10, L11, L2-2, L2-1, L20, L21, L22, // blue channel
L00, L1-1, L10, L11, L2-2, L2-1, L20, L21, L22 // green channel
有关 Unity 光照探针系统的更多“背景”信息,可阅读 Robert Cupisz 在 2012 年游戏开发者大会 (GDC 2012) 上的演讲报告使用四面体曲面细分的光照探针插值 (Light Probe Interpolation Using Tetrahedral Tessellations)”- GDC 2012
2017–06–08
在 5.6 版更新了光照探针