【コラム】

3Dグラフィックス・マニアックス

68 事前計算放射輝度伝搬(PRT)~PRTの基本。静的PRT(3)

68/99

球面調和関数とはなにか?

「球面調和関数」は言葉の響きが難しいので、まずはイメージから捉えよう。

球面調和関数とは、かなり極端に簡略化して説明すると、球っぽいモノから任意の長さの針が突き出た「いびつなウニ」みたいな物体の形状を数学的な関数で表すためのもの……といえる(ウニの針が逆に凹んでいる場合もある)。

これがどうしてキューブマップの圧縮に使えるのかイメージが湧きにくいかもしれない。

順番に説明していこう。

全方位の情景を表したキューブ環境マップを球に見立て、そのキューブ環境マップのテクセル(画素)の値を"高さ"に見立てる。すると「いびつなウニ」みたいな立体ができあがる。そして、このいびつなウニを正確に記録するのは諦めて、「大体の形状」を記録する方針に変更する。その手段として球面調和関数を用いるのだ。

先ほど、32×32テクセルの6面体のキューブ環境マップの例を出したが、非圧縮では1頂点あたり24kBのデータ量であった。記録する球面調和関数の係数の個数でデータ量が変わるのだが、実用レベルで16個程度でも十分といわれる。例えば仮に16個の32ビット浮動小数点とすればわずか64バイト。24kBの1/400に小さくできることになる。先ほどの4万頂点の例で行けば、2.4MBで済むことになり、938MBと比べればかなり現実的なデータ量に圧縮できる事が分かる。

球面調和関数は「いびつなウニ」の近似化表現手法として使う

球面調和関数は、ある形状を表現するのに複数の関数群から成り立っている。その関数の数が多いほど形状表現が正確になる。詳しい数学的な定義はここでは省略するが、下図に、あるパラメータを与えられた球面調和関数を示す。この図において上から1段目までの球面調和関数を用いれば1個、2段目までを使うならば合計4個、3段目までを使うならば合計9個、4段目までを使うならば合計16個……という具合に関数は増加する。

l=0,1,2,3… m=-l~+lにおける球面調和関数の数式(上)と3次元可視化図(下)。もし、たとえばl=3の4段目まで使うとすれば総計16個の球面調和関数を使うことになる

図をもう一度見て欲しい。

lの値が小さい時ほど形状が単純で、逆にlの値が大きくなると(下に行けば行くほど)トゲトゲして形状が複雑になっている事が分かる。先ほどの「いびつなウニ」の形状を近似するにあたり、多くの球面調和関数を用いれば高品位に近似できると述べた。これはつまり、この図の下の方の複雑な形状までを用いれば用いるほど、その「いびつなウニ」を正確に表現できるということなのだ。

表現したい「いびつなウニ」は、キューブ環境マップであり、その値はキューブ環境マップごとに固有だ。ということは、それぞれそのトゲの長さやその球っぽい形の大きさが違う。あるトゲが長ければそのトゲが長くなるように球面調和関数の大きさを変えてやる必要がある。「いびつなウニ」形状の近似には、複数の球面調和関数に対して最適なスケーリング係数(大きさを決定づける掛け値)を与える必要があるのだ。この係数を求める計算はここでは省略するが、簡単に言えばある決められた方程式を解くことで求められる。

例えば、l=3までの16個の球面調和関数を用いて近似する際には16個のスケーリング係数を求める必要がある。

「いびつなウニ」形状の近似には、使用した球面調和関数1つずつに最適なスケーリング係数を導出して組み合わせてやる必要がある

スケーリング係数を導出してしまえば、これだけで近似した「いびつなウニ」形状の復元が行える。なお、経験則的に、リアルタイム3DグラフィックスにおけるPRT用途の場合、大体16個(l=3)~36個(l=5)の球面調和関数で十分ということが分かってきている

球面調和関数そのものは既存のものであり、算術的に算出できる。であれば、ある「いびつなウニ」形状を記録&再現しようとした際(近似されてはしまうものの)、その求めた係数だけを記録しておけば復元可能だ。

例えば前出の一頂点あたり24kBものデータ量が必要だったあの形状データを、16個の球面調和関数で表現するとすれば、わずか16個の係数を保存しておけば復元ができる。球面調和関数で1/400に圧縮できるからくりはここにある。

より感覚的なたとえをすれば、球面調和関数とは、MPEGやJPEGの圧縮に用いられる離散コサイン変換の「球体バージョン」ということができるかもしれない。(続く)

(トライゼット西川善司)

68/99

インデックス

連載目次
第99回 3D立体視の解体新書 - 立体視という知覚(4)~単眼立体視と両眼立体視の有効範囲の考察
第98回 3D立体視の解体新書 - 立体視という知覚(3)~両眼立体視
第97回 3D立体視の解体新書 - 立体視という知覚(2)~単眼立体視(2)
第96回 3D立体視の解体新書 - 立体視という知覚(1)~単眼立体視(1)
第95回 人工知性でコンテンツを生成するプロシージャル技術(19)
第94回 人工知性でコンテンツを生成するプロシージャル技術(18)
第93回 人工知性でコンテンツを生成するプロシージャル技術(17)
第92回 人工知性でコンテンツを生成するプロシージャル技術(16)
第91回 人工知性でコンテンツを生成するプロシージャル技術(15)
第90回 人工知性でコンテンツを生成するプロシージャル技術(14)
第89回 人工知性でコンテンツを生成するプロシージャル技術(13)
第88回 人工知性でコンテンツを生成するプロシージャル技術(12)
第87回 人工知性でコンテンツを生成するプロシージャル技術(11)
第86回 人工知性でコンテンツを生成するプロシージャル技術(10)
第85回 人工知性でコンテンツを生成するプロシージャル技術(9)
第84回 人工知性でコンテンツを生成するプロシージャル技術(8)
第83回 人工知性でコンテンツを生成するプロシージャル技術(7)
第82回 人工知性でコンテンツを生成するプロシージャル技術(6)
第81回 人工知性でコンテンツを生成するプロシージャル技術(5)
第80回 人工知性でコンテンツを生成するプロシージャル技術(4)
第79回 人工知性でコンテンツを生成するプロシージャル技術(3)
第78回 人工知性でコンテンツを生成するプロシージャル技術(2)
第77回 人工知性でコンテンツを生成するプロシージャル技術(1)
第76回 3Dモデルの変形までが可能な動的PRT(5)~SH Exp演算の大胆な近似による高速化
第75回 3Dモデルの変形までが可能な動的PRT(4)~SH Log演算とSH Log次元における遮蔽の統合
第74回 3Dモデルの変形までが可能な動的PRT(3)~帯域調和関数(Zonal Harmonics)の導入
第73回 3Dモデルの変形までが可能な動的PRT(2)~SH LogとSH Expとは?
第72回 3Dモデルの変形までが可能な動的PRT(1)~3Dモデルの変形に対応した動的PRT技術の台頭
第71回 限定条件付き動的PRT(2)~PSF技法におけるライティング
第70回 限定条件付き動的PRT(1)~動的PRT第一段階PSF技法とは?
第69回 事前計算放射輝度伝搬(PRT)~PRTの基本。静的PRT(4)
第68回 事前計算放射輝度伝搬(PRT)~PRTの基本。静的PRT(3)
第67回 事前計算放射輝度伝搬(PRT)~PRTの基本。静的PRT(2)
第66回 事前計算放射輝度伝搬(PRT)~PRTの基本。静的PRT(1)
第65回 事前計算放射輝度伝搬(PRT)~PRTとは?
第64回 表面下散乱によるスキンシェーダ(8)~表面下散乱とスキンシェーダ(6)
第63回 表面下散乱によるスキンシェーダ(7)~表面下散乱とスキンシェーダ(5)
第62回 表面下散乱によるスキンシェーダ(6)~表面下散乱とスキンシェーダ(4)
第61回 表面下散乱によるスキンシェーダ(5)~表面下散乱とスキンシェーダ(3)
第60回 表面下散乱によるスキンシェーダ(4)~表面下散乱とスキンシェーダ(2)
第59回 表面下散乱によるスキンシェーダ(3)~表面下散乱とスキンシェーダ(1)
第58回 表面下散乱によるスキンシェーダ(2)~ハーフライフ2で採用の疑似ラジオシティライティング(2)
第57回 表面下散乱によるスキンシェーダ(1)~ハーフライフ2で採用の疑似ラジオシティライティング(1)
第56回 水面の表現(5)~大きな波
第55回 水面の表現(4)~水面のライティング(2)
第54回 水面の表現(3)~水面のライティング(1)
第53回 水面の表現(2)~動的なさざ波
第52回 水面の表現(1)~水面表現の歴史
第51回 HDRレンダリング(11)~トーンマッピング
第50回 HDRレンダリング(10)~HDRブルーム/グレア処理
第49回 HDRレンダリング(9)~HDRテクスチャ
第48回 HDRレンダリング(8)~HDRレンダーターゲット
第47回 HDRレンダリング(7)~HDRレンダリングのプロセス
第46回 HDRレンダリング(6)~HDRレンダリングの歴史と動向(2)
第45回 HDRレンダリング(5)~HDRレンダリングの歴史と動向(1)
第44回 HDRレンダリング(4)~HDRレンダリングの第三の効能
第43回 HDRレンダリング(3)~HDRレンダリングの第二の効能
第42回 HDRレンダリング(2)~HDRレンダリングの第一の効能
第41回 HDRレンダリング(1)~HDRレンダリングとは?
第40回 ジオメトリシェーダ(11)~ジオメトリシェーダを活用した新表現(7)
第39回 ジオメトリシェーダ(10)~ジオメトリシェーダを活用した新表現(6)
第38回 ジオメトリシェーダ(9)~ジオメトリシェーダを活用した新表現(5)
第37回 ジオメトリシェーダ(8)~ジオメトリシェーダを活用した新表現(4)
第36回 ジオメトリシェーダ(7)~ジオメトリシェーダを活用した新表現(3)
第35回 ジオメトリシェーダ(6)~ジオメトリシェーダを活用した新表現(2)
第34回 ジオメトリシェーダ(5)~ジオメトリシェーダを活用した新表現(1)
第33回 ジオメトリシェーダ(4)~ジオメトリシェーダのアクセラレーション的活用(4)
第32回 ジオメトリシェーダ(3)~ジオメトリシェーダのアクセラレーション的活用(3)
第31回 ジオメトリシェーダ(2)~ジオメトリシェーダのアクセラレーション的活用(2)
第30回 ジオメトリシェーダ(1)~ジオメトリシェーダのアクセラレーション的活用・ステンシルシャドウボリューム技法の影生成を加速する
第29回 影の生成(10)~改良型デプスシャドウ技法(5)
第28回 影の生成(9)~改良型デプスシャドウ技法(4)
第27回 影の生成(8)~改良型デプスシャドウ技法(3)
第26回 影の生成(7)~改良型デプスシャドウ技法(2)
第25回 影の生成(6)~改良型デプスシャドウ技法(1)
第24回 影の生成(5)~デプスシャドウ技法
第23回 影の生成(4)~ステンシルシャドウボリューム技法(2)
第22回 影の生成(3)~ステンシルシャドウボリューム技法(1)
第21回 影の生成(2)~投射テクスチャマッピング技法
第20回 影の生成(1)~3Dグラフィックスにおける2つのカゲの存在
第19回 バンプマッピングの先にあるもの(3)~セルフシャドウ付き視差遮蔽マッピング
第18回 バンプマッピングの先にあるもの(2)~視差遮蔽マッピング
第17回 バンプマッピングの先にあるもの(1)~視差マッピング
第16回 微細凹凸表現の基本形「法線マップ」(3)
第15回 微細凹凸表現の基本形「法線マップ」(2)
第14回 微細凹凸表現の基本形「法線マップ」(1)
第13回 3Dグラフィックスの概念とレンダリングパイプライン(5)
第12回 3Dグラフィックスの概念とレンダリングパイプライン(4)
第11回 3Dグラフィックスの概念とレンダリングパイプライン(3)
第10回 3Dグラフィックスの概念とレンダリングパイプライン(2)
第9回 3Dグラフィックスの概念とレンダリングパイプライン(1)
第8回 GPUとシェーダ技術の基礎知識(8)
第7回 GPUとシェーダ技術の基礎知識(7)
第6回 GPUとシェーダ技術の基礎知識(6)
第5回 GPUとシェーダ技術の基礎知識(5)
第4回 GPUとシェーダ技術の基礎知識(4)
第3回 GPUとシェーダ技術の基礎知識(3)
第2回 GPUとシェーダ技術の基礎知識(2)
第1回 GPUとシェーダ技術の基礎知識(1)

もっと見る

関連キーワード

人気記事

一覧

新着記事