VSM(Variance Shadow Maps)のスタディメモ

とりあえずLiSPSM終わったんでVSMの勉強中。確率は苦手なのでログ取りながら。

  • まずはここから論文を持ってくる
  • 分散とか標準偏差ここを見て思い出す
  • 「Chebychev’s inequality」は「チェビシェフの不等式」で調べる。ちなみにgoogle先生にはchebyShevでは?と言われる


チェビシェフの不等式は
Pr(|X - \mu| \ge k \sigma ) \le \fraq{1}{k^2}
で表される。ただし、\muは平均、\sigmaは分散。
k \sigma = k'と置き換えると
Pr(|X - \mu| \ge k' ) \le \left(\fraq{\sigma}{k'}\right)^2
と表現できる。これは、「平均からk'以上ずれる確率は、右の式以下の確率だよ」ということを表す。つまり、右側の式の値がチョー小さければ、平均からk'以上ずれることはないと仮定して良いんじゃね?ということ。


VSMで使われてるのは、絶対値を抜かしたバージョン(one-tailed)で
Pr(X - \mu \ge k \sigma ) \le \fraq{1}{1 + k^2}
で表される。導出は一応http://www.econ.hit-u.ac.jp/~tanaka/mathsta/chap1.pdf:このPDFファイル(PDF注意。大学のやつなので将来消えてるかも)の「片側チェビシェフの不等式」で基本部分を確認できる。(証明過程は自分で)
このk\fraq{t - \mu}{\sigma}で置き換えれば論文中の式になる。


サンプルコード

  • VSMDepth.cpp
    • 深度とその二乗を求める
  • VSMSpotLight.cpp
    • Variance shadow mappingの項で実際の計算


普通のシャドウマップの判定で

  • 日向なら
    • 日向
  • 影なら
    • VSMの計算結果を使う

という感じ。


残りは明日?別のことを先にやるかも