NVIDIAでHLSLと深度バッファを使ってハードウェアシャドウマップを行う方法

軽くメモ。正確な資料は、英文かつpdfだけどここのHardware Shadow Mapsの項で。

  • 普通にテクスチャ使ってシャドウマップをまず実装
  • 参照するテクスチャを深度バッファ(D3DFMT_D24S8とかで作ってSetDepthStencilSurfaceしてたやつ)に変更
  • HLSLでの深度比較を「今の深度<テクスチャから取ってきた深度」ではなく「テクスチャから取ってきた深度そのもの」にする
    • テクスチャからtex2Dprojで持ってきた段階で、「影になるなら0」「そうでないなら1」が返ってくる
  • tex2Dで取ってきた場合は上のような判断は内部で行われないので、必ずtex2Dprojの方を使う


やっぱり英文を参照しないと駄目なのか。しんどいだぜ。
→日本語版あったよ、ちくしょー。ここ(同じくpdf)。


////////////


やっぱりシャドウマップの深度に24bit使えるのは大きい。8bitだと2の8乗=256段階しか扱えないので、高さが大きくなると誤差が致命的になる。
そして今の問題は、残りの8bit=ステンシルの使い方を良く知らない、ということだ。
→上の資料では「シェーダからはステンシル見えまへんでー」みたいなこと書いてある。8bitもったいないよぅ。