【Unity3D技术文档翻译】第3.6.6.1篇 光照探针:技术
上一章:【Unity3D技术文档翻译】第3.6.6篇 光照探针概述 (Light Probes)
本章原文所在章节:【Unity Manual】→【Graphics】→【Graphics Overview】→【Lighting】→【Global Illumination】→【Light Probes】→【Light Probes: Technical information】
光照探针:技术说明 (Light Probes: Technical information)
光照探针中的光照信息被编码为球面谐波基函数(Spherical Harmonics basis functions)。我们使用三级多项式,又称为 L2 球谐函数。它们被存储为27个浮点值,每个颜色通道使用其中9个值。虽然 Unity 使用了 Geomerics 的 Enlighten 技术,我们使用了一种与他们博客中不同的球谐(简称 SH)基础(y 和 z 轴被交换了)。Unity 使用了 Peter Pike Sloan 的论文 Stupid Spherical Harmonics (SH) Tricks 中提到的符号和再建方法,而 Geomerics 使用的符号和再建方法来自于 Ramamoorthi/Hanrahan 的论文 An Efficient Representation for Irradiance Environment Maps。
Unity 中用于再建的 shader 代码可以在 UnityCG.cginc 中看到,使用的是来自 Peter-Pikes 论文中用于辐照度环境映射的附录 A10 中的 shader/CPU 代码。
数据的内部排序就像这样:
[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 在 GDC 2012 上发表的演讲 Light Probe Interpolation Using Tetrahedral Tessellations”, GDC 2012。
如果本文对你有帮助的话,点个赞或者评论一下吧!