シャドウマッピングとは
シャドウマッピング(またはシャドウプロジェクション)は、
3次元コンピュータグラフィックスにおいて、物体が光を遮ることで生じる
影を表現する手法です。この技術は、1978年にランス・ウィリアムズによって発表された論文「Casting curved shadows on curved surfaces」で初めて導入され、以降、多くのゲームや映像制作で利用されています。
シャドウマッピングの原理
シャドウマッピングの基本的な考え方は、光源の位置から見たシーンの深度情報を利用することです。具体的には、以下の手順で
影を生成します。
1.
光源視点からのレンダリング: まず、光源の位置からシーンをレンダリングし、各
ピクセルが光源からどれだけ離れているかという深度情報を記録します。この深度情報は、シャドウマップと呼ばれる
テクスチャに保存されます。
2.
通常のレンダリングと深度比較: 次に、通常のカメラ視点からシーンをレンダリングする際に、各
ピクセルの深度をシャドウマップの値と比較します。もし、
ピクセルがシャドウマップの値よりも光源から遠ければ、その
ピクセルは
影の中にあると判断し、暗く描画します。
この手法は、シャドウボリューム法に比べて精度は劣るものの、高速に処理できるため、リアルタイム描画に適しています。また、追加のステンシルバッファを必要とせず、
影のエッジを柔らかくするなどの応用も可能です。ただし、シャドウマップの解像度に精度が依存するという制約があります。
アルゴリズムの詳細
シャドウマッピングは、大きく分けて2つのステップで構成されます。
1. シャドウマップの生成
まず、光源の位置からシーンをレンダリングします。光源が点光源の場合は、
影を描写する範囲に合わせた透視投
影を行い、平行光源の場合は、正投
影を使用します。このレンダリング結果から、深度バッファ(各
ピクセルの深度情報)を抽出し、シャドウマップとして保存します。この際、色バッファの更新や照明計算は行わず、深度情報のみを記録することで、処理時間の短縮を図ることが一般的です。
シャドウマップは、光源やシーン内の物体に変化がある場合に更新が必要ですが、カメラ視点だけが動く場合は再利用できます。複数の光源がある場合は、各光源ごとに別々のシャドウマップが必要です。
シャドウマップの再描画時間を短縮するために、シーン内の一部のみをレンダリングしたり、Zファイティング(深度が近い場合に発生する描画のちらつき)を避けるために、物体を光源から遠ざける方向に深度オフセットを適用することもあります。また、物体の前面をカリングし、背面だけをシャドウマップにレンダリングすることで同様の効果を得ることもできます。
次に、通常のカメラ視点からシーンを描画します。各物体の座標を光源視点での座標に変換し、その座標に対応するシャドウマップ上の深度値と比較します。もし、描画対象の
ピクセルの深度がシャドウマップの値より大きければ、その
ピクセルは
影の中にあると判断し、暗く描画します。
リアルタイム実装の課題と解決策
リアルタイムシャドウマッピングの主な課題は、シャドウマップの解像度と深度による
影の品質の制限です。シャドウマップの解像度が低いと、
影にエイリアシングや途切れが発生しやすくなります。単純にシャドウマップのサイズを大きくすれば品質は向上しますが、メモリ使用量や計算量が増加し、ハードウェアの制約を受ける可能性もあります。
この問題を解決するために、以下のような手法が用いられています。
カスケードシャドウマップ: 視点からの距離に応じて複数のシャドウマップを使い分けることで、遠景の影の品質を維持しつつ、近景の影の品質を向上させます。
台形シャドウマップ: シャドウマップの解像度を有効に活用するために、シャドウマップの形状を台形に歪ませることで、
影の品質を向上させます。
ライトスペースパースペクティブシャドウマップ: 光源の視点における遠近感を考慮してシャドウマップを生成することで、影の品質を向上させます。
パラレルスプリットシャドウマップ: 視点からの距離に応じてシャドウマップを分割し、それぞれに異なる解像度を割り当てることで、効率的に
影の品質を向上させます。
また、生成される
影のエッジが硬くなるという問題に対しては、以下のような手法で解決が試みられています。
Percentage Closer Filtering (PCF): シャドウマップの周囲の深度値を参照し、平均化することで、影のエッジを柔らかくします。
Smoothies: シャドウマップをぼかすことで、
影のエッジを柔らかくします。
分散シャドウマップ: 深度値の平均だけでなく分散も利用することで、より自然な影の表現を実現します。
関連項目
シャドウボリューム:
影を表現する別の手法
レイキャスト: レイトレーシングで使われる手法
フォトンマッピング: より現実的な照明レンダリングを実現する手法
* ラジオシティ: 間接光を考慮したレンダリング手法
シャドウマッピングは、3Dグラフィックスにおいて
影を表現するための重要な技術です。その原理と実装方法を理解することで、よりリアルで美しい映像表現が可能になります。