Shadow Map

シャドウマップは光源に対してポリゴンが側面を向く場合にノイズが発生するのですが、一般的にこれはどのようにして回避しているんでしょうね?自分の回避方法をちょっと書いてみます。

自分の解決策は、シャドウマップに光源のグラデーションを重ねてノイズそのものを隠すという方法です。左のグラフが通常のランバートの計算式です。ジャギーは側面(内積ゼロ)付近に発生するので、このままだとノイズは隠しきれません。真中のグラフはランバートを二乗した式ですが、ノイズを隠せてはいるものの陰の面積が広くなってしまいます。なので右のグラフのように、ジャギーが隠れる程度の場所からグラデーションを発生させるように計算式をいじっています。(図の式の係数は2となっていますが1.2ぐらいにしています。)

上がランバートにシャドウマップを重ねたもので、下が幅をいじったものです。比べるとうまくノイズが隠れているのがわかると思います。

shadowmap_panzers
こうして出来たシャドウマップの画像をマスクとして利用して、光と陰を描画しています。ライティングについての話はまた今度。CEDECで得たヒントを参考に現在いろいろ試行錯誤中です。

広告

Shadow Map」への2件のフィードバック

  1. シャドウマップの表面にでるジャギーは、固定バイアスかZ傾斜でバイアスをかけるのがセオリーだと思うのですが、こちらの方法は試されないのですか?

  2. 固定バイアスをかけているのですが、境界付近でジャギーが発生してしまうんですよね・・・。なにか見落としているかもしれません。ご指摘ありがとうございます!

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中