最新情報
シャドウボリュームの概念
左上図のように2枚の板があり、上の板をA、下の板をBとします。
現実世界では上から平行光が当たったときに、Aの影がBに落ちます。
それを右上図に示します。
Aが作る影の領域は次の下図のようになります。
この領域に入ったものは全てAの影が落ちます。
このときにAが作る影の領域のことをシャドウボリューム(shadow volume)といいます。
上手の四角柱がシャドウボリュームになります。
試しに下図のように、このシャドウボリュームに別の板を突き刺した状態を考えます。
この状態のときに影がどのように落ちるかを表したのが下図です。
下図を見ていただくと、その様子が現実世界で起きることと同じであることがわかると思います。
Bに落ちている影は、Aの影だけでなく、新しく突き刺した板の影も落ちています。
これは新しく突き刺した板も、Aと同様にシャドウボリュームを作るからです。
このようにシャドウボリュームは合成することが可能です。
カテゴリー:シャドウボリュームの概念
ピクセルフィルレート
ステンシルシャドウを行うときに、一番問題になるのは、ピクセルフィルレートです。
ピクセルフィルレートとは、ゲーム機やパソコンが画面上に点を打つスピードのことで、この値が大きいほどシャドウボリュームに向いています。
ピクセルフィルレートは、マシンにより変えようがないので、プログラムで点を打つ面積を減らすことを考えます。
これがシャドウボリュームの高速化で最も効果が得られる部分です。
シャドウボリュームやシャドウマップだけでなく、グラフィックス全体に関してもピクセルフィルレートは重要なので、覚えておくとよいと思います。
カテゴリー:ステンシルシャドウの高速化
デプスフェイル法
シャドウボリュームの問題点の1つである、
「カメラがシャドウボリュームの中に入ると影が破綻する」
を解決する方法について説明します。
一番簡単に解決する方法はデプスフェイル法です。
id Softwareのジョン・カーマックが広めた方法です。
別名カーマックリバースとも言われています。
ステンシルバッファに描画するときの+1、-1の決め方を変えるだけなのでほとんど手直しすることなく実装できます。
簡単なので、一般的によく使われていると思います。
ではさっそく簡単に説明します。
デプスフェイル法では、ステンシルバッファにシャドウボリュームを描画するときの条件が違います。
まず描画をするのはZテストが失敗したときです。
普通はZテストが成功したときしか描画しませんが、この方法では失敗したときに描画します。
それでこの方法の名前がデプスフェイル法と呼ばれています。
また、+1、-1の操作も違います。
裏面を描画するときには、Zテストに失敗したものを+1で描画する。
表面を描画するときには、Zテストに失敗したものを-1で描画する。
どちらの場合も、フレームバッファやZバッファには何も操作しません。
デプスフェイル法での、ステンシルバッファにシャドウボリュームを描画していく手順を図で説明します。
上の図は、裏面を+1で描画したものです。
赤い部分の値は+1になっています。
上の図は、表面を-1で描画したものです。
青い部分の値は-1になっています。
そしてこれらを合成すると、最終的なステンシルバッファが出来上がります。
下の図は+1の領域と-1の領域を合成したものです。
元の画像に、影の色をグレーにして塗りつぶしてみると下の図のようになります。
普通のステンシルシャドウの結果と同じことが確認できました。
カテゴリー:デプスフェイル法