カスケード・LSPSM技法~デプスシャドウ技法の改良版その第3形態
LSPSM技法でデプスシャドウ技法の弱点がだいぶ克服できるものの、それでも、遠方までが描かれるような広大な屋外シーンでは、やはり1枚のシャドウマップで遮蔽構造を生成していたのでは解像度不足が生じてしまうことがある。
1枚のシャドウマップで不足してしまうならば、複数のシャドウマップを利用してはどうか……という明解な改善策として自然発生的に生み出されたのが「カスケードLSPSM技法」(Cascaded LSPSM)だ。
1つの光源からの遮蔽構造を記録するのに複数のシャドウマップを用いるわけだが、複数のシャドウマップをどのように生成するのかがこの工夫のポイントになる。
様々な方法が考えられるが、一番分かりやすいのは、視点からの視界(視錐台)を視点位置から近い位置から遠方に向かって適当に分割し、分割された視界それぞれに対して、前述したLSPSM技法に求められた2つの条件を満たす座標系でのシャドウマップ生成を行えばよい。
概念図的には下図のようになる。この図は視界を視点から近距離、中距離、遠距離の3段階に分割して、それぞれにシャドウマップを生成する……という例を示したものになる。
3つに切り分けた各視界の境界付近は重なり合っている事が分かると思うが、この部分については、シャドウマップは重複して生成されることになる。その意味ではこの方法は多少なりとも冗長性があり、それが余計な負荷となる。
最終的なレンダリング時では、この複数枚生成したシャドウマップを使い分けて影生成行うことになる。
デプスシャドウ技法では、あるピクセルをレンダリングする際、そのピクセルと光源までの距離を算出し、これと、そのピクセルに対応するシャドウマップに格納されている値と比較を行う。あるピクセルをレンダリングする際には、当然、深度値(Z値)を求めることになるので、この深度値をキーにして複数生成しておいたシャドウマップから、どれを選択して参照すればいいかを決定する。
なお、どのくらいで分割するか、いくつに分割するか……は、影に求めるクオリティのレベル、あるいはGPUの処理能力、ビデオメモリの容量などの様々な要因で臨機応変に決める必要がある。(続く)
(トライゼット西川善司)