ライトプローブ
ライトプローブの配置

ライトプローブ - 技術的な情報

ライトプローブ内のライティング情報は、球面調和基底関数として符号化されます。 L2 球面調和関数とも呼ばれる 3次多項式を使用します。 これらは、各カラーチャンネルに 9 つずつ、全部で 27 の浮動小数点値を使用して格納されます。 Unity は Geomerics 社のEnlighten を使用していますが、ブログで見るものとは異なる球面調和ベースを使用します (y 軸と z 軸が入れ替わっています)。Unity は Peter-Pike Sloan の論文 Stupid Spherical Harmonics(SH)Tricks の表記法と再構成法を使用しており、Geomerics 社は Ramamoorthi / Hanrahan の論文 An Efficient Representation for Irradiance Environment Maps の表記法と再構成法を使用しています。

再構成のための Unity シェーダーコードは UnityCG.cginc にあり、Peter-Pikes の論文の 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, // レッドチャンネル

L00, L1-1,  L10,  L11, L2-2, L2-1,  L20,  L21,  L22, // ブルーチャンネル

L00, L1-1,  L10,  L11, L2-2, L2-1,  L20,  L21,  L22  // グリーンチャンネル

Unity のライトプローブシステムに関するさらに詳しい情報は、GDC 2012 の Robert Cupisz の講演 Light Probe Interpolation Using Tetrahedral Tessellations, GDC 2012 を参照してください。


ライトプローブ
ライトプローブの配置