軽くメモ。正確な資料は、英文かつpdfだけどここのHardware Shadow Mapsの項で。
- 普通にテクスチャ使ってシャドウマップをまず実装
- 参照するテクスチャを深度バッファ(D3DFMT_D24S8とかで作ってSetDepthStencilSurfaceしてたやつ)に変更
- HLSLでの深度比較を「今の深度<テクスチャから取ってきた深度」ではなく「テクスチャから取ってきた深度そのもの」にする
- テクスチャからtex2Dprojで持ってきた段階で、「影になるなら0」「そうでないなら1」が返ってくる
- tex2Dで取ってきた場合は上のような判断は内部で行われないので、必ずtex2Dprojの方を使う
やっぱり英文を参照しないと駄目なのか。しんどいだぜ。
→日本語版あったよ、ちくしょー。ここ(同じくpdf)。
////////////
やっぱりシャドウマップの深度に24bit使えるのは大きい。8bitだと2の8乗=256段階しか扱えないので、高さが大きくなると誤差が致命的になる。
そして今の問題は、残りの8bit=ステンシルの使い方を良く知らない、ということだ。
→上の資料では「シェーダからはステンシル見えまへんでー」みたいなこと書いてある。8bitもったいないよぅ。