ステンシルシャドウボリュームの原理

シャドウボリュームの概念がわかったところで、これをコンピューター上で実現しなければいけません。
実現方法はいろいろあります。

現在のハイエンドなマシンではステンシルバッファが標準で装備されているので、これを使います。

もしステンシルバッファがないときは?
もし、ステンシルバッファがないプラットフォームでは他の方法でも実現できます。

例えばZバッファ(深度バッファ)を使って実現することもできます。
その他にもカラーバッファのアルファチャンネルを利用して実現することも可能です。
このようなことは他の本やサイトでは紹介されていないですね!

私はステンシルバッファが存在していないころから、シャドウボリュームを実現しようといろいろ試していたのでこのような発想が生まれます。

  

それではシャドウボリュームを作る過程を説明します。

説明を簡単にするために、上から並行光があたっているものとします。
そのときに、できるシャドウボリュームはAの各辺から、板を作ることにより表現できます。
その様子が下の図になります。

Aが作るシャドウボリュームは無限に伸びていきます。
実際には適当な長さで切ってしまっても問題ありません。
この図では省略していますが、Bも同じようにシャドウボリュームを作ります。
もしBの下にさらに板や何かの物体があれば、その物体にBの影が落ちます。
ここでは説明を簡単にするためAのシャドウボリュームについてのみ考えることにします。

さらに見やすくするために、板BのうちでAが作るシャドウボリュームに関係のない部分をカットします。
(Bのカットされた部分は影になるとこはないので、気にしないで大丈夫です。)
すると下のような図になります。

わかりやすくBの部分を紫色にすると下のようになります(笑)

次のページからは、この図を用いてステンシルバッファをどのように操作していくかを説明します。