ボカシ付きデプスシャドウ技法~手軽にソフトシャドウを得る

デプスシャドウ技法の弱点は、シャドウマップの解像度が不十分だと、影にジャギーが出てしまうということだった。

他の解像度が高いのに、影だけにジャギーが出ているのは不自然だ。かといってビデオメモリ使用予算の関係からシャドウマップの容量を闇雲に増やすことが出来ない場合もある。

影のジャギーが目立つのは影の輪郭付近なので、だったら、このジャギーを積極的にボカして消してしまってはどうか。つまり、影生成技法そのものを改良するのではなく、生成された影のジャギーをポストプロセスで消そうとするアイディアだ。

「バーチャファイター5」(セガ、2006)より。デプスシャドウ技法をそのまま実装して生成するとこのように影にケバだったようなエリアシング(ジャギー)が出てしまう(胸元あたりに注目)
(C)SEGA

このテクニックの場合、影生成自体は通常のデプスシャドウ技法の実装でよい。ただし、この時、影生成だけを表示フレームと同解像度のテクスチャに対して行う。これで作り上げられるのは画面上の「日影と日向」の0か1の2値画像テクスチャになる。

デプスシャドウ技法で影フレームを生成。この時点では毛羽立ってい

その影フレームをぼかす

ボカした影フレームを表示フレームと合成する。前出の画像と比較すると影の毛羽立ちが低減されていることが分かる

今度はこの「日影と日向」の2値画像テクスチャをバイリニアフィルタを使った縮小バッファやガウスフィルタ等を使ってぼやかしてしまう。こうすることで、影の詳細情報は失われてしまうが、その代わり影の輪郭のジャギーは低減される。

あとは、普通に各種シェーダを動作させてレンダリングした通常の表示用フレームと、このボカして出来た影フレームを合成して完成になる。

こうしたぼけた影の表現は「ソフトシャドウ表現」(Soft Shadow)と呼ばれる。

現実世界においても影がシャープに出ることは珍しいのでややぼけているくらいの方がリアルに見える。そのため、このテクニックはジャギーも消えてリアルに見えて一石二鳥の方法だといえるわけだ。

しかし現実世界の影のボケは、影自体の投射距離が長い時に光の散乱によって影の外周に光が入ってきてしまうことによるボケだったり、あるいは光を作り出す光源自体に大きさがあることでボケる場合もあり、その要因は様々だ。このテクニックでは、影のボカシ処理を二次元的な……正確には画面座標系で行ってしまうため、影のボケ方は物理量的には正しくはない。

ソフトシャドウ

とはいえ、比較的単純な実装で見栄えの悪いジャギーを消せて、ソフトシャドウの効果が得られるのは効果として大きい。

ただ、このテクニックには少々問題点もなくはない。

このテクニックでは影をぼかす際の処理を二次元的に行ってしまっているので、このボカした影を合成すると、ぼけて滲んだ影のエッジが、3Dグラフィックスの前後関係を無視して溢れてきてしまうのだ。

例えば、奥の影のボケ部分が手前の3Dオブジェクトの日向部分に溢れてきてしまったりするのだ。

これを改善するアイディアもいくつかあるにはある。

例えば影フレームのボカシ処理をシーンの深度値を見て、シーンの前後関係に配慮しながらぼかすといった案が1つ。あるいはボカす際に、どの深度値の影のボケなのか……に相当する情報をボカした影フレームにも保存しておき、これを合成時に配慮する、というのもいいだろう。

なお、シャドウマップの解像度が低すぎると、いくら影フレームをぼかすからと言ってもジャギーを消しきれない。このテクニックを使う場合は、「シャドウマップの解像度」と「どのくらいぼかすか」の調整は慎重に行う必要がある。比較的視点が寄ったり離れたりするような3Dゲームでは、一定のシャドウマップ解像度や一定のボカシ量では「粗」が目立ってしまうことがあるかもしれない。比較的視点位置が落ち着いている三人称視点のアクションゲームやリアルタイムストラテジー、RPGのような3Dゲームとの相性がよいかもしれない。(続く)

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