シャドウボリュームの問題点
シャドウボリュームは影の表現としては最も美しいものを作ることができます。
前のページで紹介した、簡単なステンシルシャドウでは、そこまで美しい影はつくれません。
もっとリアルで美しい影を作るには、現在最高峰のゲーム機であるPLAYSTATION4でもリアルタイムでは不可能です。
今はその方法は置いておくとして、シャドウボリュームの問題についていくつか説明します。
シャドウボリュームの問題点は大きく分けて
- カメラがシャドウボリュームの中に入ると影が破綻する
- ピクセルフィルレートを大量に消費する
の2つがあります。
まずは、カメラ(視点)がシャドウボリュームの中に入ると影が破綻することについて説明します。
前のページで図解したようにステンシルを描画するときに+1、-1といった値でシャドウボリュームを描画します。
このときカメラがシャドウボリュームの中に入ると+1で描かれるはずの面が、カメラの後ろに行ってしまうために描かれません。
その結果、影の形がおかしくなってしまいます。
この影が破綻するという問題に対する解決方法は3つあります。
おそらくほとんどのプログラマーはデプスフェイル法しか知らないかと思います。
なぜなら他の2つは実装が面倒なため、ほとんど解説されることがありません。
他の2つの方法というのは、ZP+法と、キャッピング法です。
私がお勧めするのは、キャッピング法です。
実装するのは面倒ですが、これはデプスフェイル法に比べて30%ほど高速になるからです。
後でデプスフェイル法、キャッピング法について説明します。
2つめの問題として、ピクセルフィルレートを大量に消費する(描画が重くなる)という問題があります。
多くのプログラマーはピクセルフィルレートを理由に、シャドウボリュームではなくシャドウマッピング法を使用します。
私の周りでもシャドウボリュームを使用している人はいません。
しかし、あらゆる手を尽くすと、シャドウボリュームは各段に早くなります。
この高速化も後で解説していきます。