IShadowMap

- Indexed Shadow Mapping Demo -

version 1.2 is now available!



Counting Since 2000.08.29
Today  Yesterday

1.1 からの主な変更点

Anisotropic Filtering(異方性フィルタ)サポート
ソースコードも公開(スパゲッティな無駄の多いコードですが)

English docment is here.

System Requirements Download !! Trouble Shooting

What is IShadowMap ?

OpenGL で作成した シャドウマッピング(Shadow Mapping) のデモサンプルです。 が、それだけでは面白味に欠けるため、

などのエフェクトを行っています。

なお、このデモは NVIDIA Deveroper サイト テクニカルデモ に採用されました。

Screen Shots !
System Requirements
  • Intel 80x86 系 CPU を搭載した DOS/V AT 互換機
  • Microsoft Windows 95/98/NT4/2000
  • OpenGL-1.1 以降に対応し
    • GL_ARB_multitexture
    • GL_EXT_multitexture
    • GL_SGIS_multitexture
    のいずれかの拡張機能をサポート
が基本的な動作条件です。 が、これだけでは肝心のシャドウマッピングとグロスマッピングが有効になりません。 これらのエフェクトの実行には、OpenGL が
  • 4ビット以上のαプレーン
  • GL_EXT_texture_env_combine
をサポートしている必要があります。 環境によって微妙に変化するような機能を使っているため、 これらをすべて実装している環境でも動くとは限りません。 正しい動作と充分な速度が出ることを確認した環境は nVIDIA GeForce 256 reference driver 5.x 以降 だけです。 GeForce2 GTS もおそらく大丈夫でしょう。 nVIDIA Riva TNT シリーズでは点光源の投影にバグが出るため、デフォルトで平行光源で起動します。 が、基本的には GeForce シリーズ専用と考えてください(ぉぃぉぃ

Riva TNT シリーズで実行する場合、 nVIDIA reference driver 6.x 以降、 GeForce シリーズで実行する場合は nVIDIA reference driver 5.x 以降のドライバを使わないと極端に遅くなります。

Install
アーカイブを適当な場所に展開し、 ishadowmap.exe を実行するだけです。 実行中 'h' キーでコントロールのヘルプが出ます。 適当に操作して遊んでみてください。 できるだけ 32 bits カラーモードで実行することをお勧めします。

アンインストールは、展開したファイルを削除するだけで OK です。

Download !!
ishadowmap-1.2.zip (510KB) Executable for Windows 95/98/NT/2000
ishadowmap-1.2_src.zip (591KB) Source code (Visual C++ 6.0 project)
Techniques
通常、シャドウマップは光源からの距離をレンダリングして テクスチャのα値として保存しておきます。 実際の描画時にフラグメントの光源からの距離を計算し、 これを、プロジェクションマッピングしたシャドウマップのα値と 比較することで影か否かを判定します。 が、このサンプルでは距離情報は一切使わず、 代わりに凸面体単位で固有のIDをシャドウマップの αチャネルにレンダリングしています。 実際の描画時には同じIDをα値として与え、 それがプロジェクションマッピングしたシャドウマップの α値と一致したピクセルのみが光源から直接光を受けているとみなし、 ライティングを行います。 これにより、
  • 深度の精度不足(αチャネルのビット深度に依存)
  • 距離比較のためだけにテクスチャが2枚必要
といったシャドウマッピングの弱点を解消できます。 逆にデメリットとして、
  • 凸面体をαチャネルの精度で表現できる数しか描画できない
  • 凹面体は凸面毎に別のα値を与える必要があるため面倒
  • 凹面体はシャドウテクスチャのサイズをかなり大きくしないと継ぎ目が目立つ
といった点が挙げられます。 ついでにα値の一致判定はおそらく環境依存し易いです。 とりあえずは GeForce に最適化しましたが、 他の環境ではおかしな結果になる可能性が高いと思われます(ぅ
Trouble Shooting
描画がおかしくなってうまく影が表示されない場合は、 'a' / 'A' キーでα値の参照バイアスを増加/減少させたり、 't' キーでシャドウマッピング時のテクスチャフィルタを切り替えてみてください。


ホームページに戻る
本ページの御意見・御感想は
E-Mail: masa@daionet.gr.jp