投稿者「HEXADRIVE001」のアーカイブ

大気散乱シミュレーション -Atmospheric Scattering-

こんにちは、イワサキですわーい(嬉しい顔)
さて、今日は技術的な話題ということで『大気散乱シミュレーション』のお話をしてみたいと思います。
技術資料がWEB上に公開されていますので、その内容を技術デモと共に紹介します。
2011-08-24-0.jpg
(C) 写真素材 足成
屋外のゲームシーンで最もよく目にするであろう『青空』。
一見単純そうで、実はシーンの空気感に影響がある無限遠背景です。
ゲームの中で「天球」を表現する際には、従来の古典的な手法では半球ドームなどの遠景で覆えるモデルに青空テクスチャをぺたっと貼ってそれを天空としていました。
青空の本物っぽさというものはデザイナーの技量と感性によって再現されることが多かったと思います。場合によっては実際に空の写真撮影を行ってその色味を再現したりすることもあるかと思います。
これを実際に物理現象として起きている状況をリアルタイムシミュレーションで再現してゲーム内に活用してみよう!というのが今回のお題です。
この技術を導入することで次の点に特にメリットが出ます。
デザイナーが苦労することなく、簡単に実写品質を得ることができるようになりますぴかぴか(新しい)ぴかぴか(新しい)ぴかぴか(新しい)

2010-10-14-0.png

1昼夜の動的な変化、時間の移り変わりがリアルタイムで表現できる
  次項有時間の概念があるゲームでは必須になってくる表現を太陽の方角を指定するだけでシーンの情景を作りだすことができます。
2地平線付近の夕焼け、朝焼けの微妙な色味が計算で再現できる(見た目が実写により近くなる)
  次項有大気中の微細粒子(塵)のシミュレートによって実写の空気感が出ます。
 又、火星の大気や未知の惑星の大気など、地球外の惑星の大気組成も再現できます。
 そして、標高・高度によって眼下の視界にも霞がかかります。
 今までフェイクで実装していたフォグ実装が不要になりますぴかぴか(新しい)
3昼間になると星空が太陽光によってかき消されて見えなくなる現象が表現できる。
  次項有フェードイン・フェードアウトでフェイクで昼夜入れ替えるのではなく、
実際の光学的な現象で星空が消えるようになります。
4大気圏を表現することで付加価値が生まれる。
  次項有宇宙空間と地上とをシームレスに行き来することができ、金環現象などの光学的現象もリアルタイムで見ることができます。

2010-10-14-0.png

オープンフィールドのゲームを制作する際に昼夜の概念があったりするとシーンごとに時間帯が異なって屋外の風景も太陽の位置によって大きく変化します。
又、天候などでさらに豊かな表情を表現していくことで、よりリアリティをもたせて没入感を高めます。
今回は時間帯によって空の色が変化していく様子にクローズアップしてみます。
それではまずは恒例のデモプログラムを公開します。


このデモは以下からダウンロードすることができます。
今回もWindowsXPでも閲覧実行可能にするためにDirectX9でデモを作成しました。
実際にはDirectX11で実装することで実行効率を上げ、さらに速度を向上させることができるようになります。
太陽光晴れが大気圏内で多重散乱する現象をシミュレートします。

◎動作可能な環境
 < 動作条件>
 Windows XP/Vista/7 DirectX9.0c
 ShaderModel 3.0 以降
 ※注意※ 今回のデモは大変複雑なシェーダーになっています。
 ShaderModel 3.0 以降対応でもドライバの問題などで動作しない場合があります。
 なるべく最新版のグラフィックドライバをご利用ください。
 尚、デモの中でfp16浮動小数点バッファを使用していますので、SM3.0対応GPUでもfp16に非対応のGPUでは起動できません。

2011-08-24-1.jpg2011-08-24-2.jpg
2011-08-24-3.jpg2011-08-24-4.jpg
2011-08-24-5.jpg2011-08-24-6.jpg
Download
HexaSky.zip (約1.36MB)
【動作確認済ハードウェア】
NVIDIA GeForce GT 420
NVIDIA GeForce 9800 GT
【操作方法】
十字キー↑↓…位置を移動
左マウスクリック+ドラッグ…視点を回転
右マウスクリック+ドラッグ…全天の姿勢を回転
Zキー  … 大気散乱ON/OFF


今回のデモは見た目の品質も確保できるように大気散乱シミュレーションの他に
次の技法を併用しています。
ひらめき浮動小数点バッファHDR
ひらめきグレア表現(ブルーム、カメラ絞りの回折9枚羽根)
ひらめきレンズ表現(周辺減光ビネッティング、フレア)
ひらめきトーンマッピング(※今回は評価測光は無く、動的ではなく静的なものです)
屋外光散乱ではなく大気散乱シミュレーションを選択した理由は、
大気散乱の実装によって屋外光散乱も全て実現できてしまうことにあります。
これによって宇宙からも地上からも自在に操れるようになります。
このデモでは春分点で高緯度(北極)でのカメラ視点にしていますので、太陽はさほど高く昇らず、そして夜も薄く地平線が明るくなっているのが観察できます。
十字キーで大気圏を出入りすることで、そこに大気の層を感じることができます。
操作の関係上、地球を固定して相対的に全天を回転させていますが、本来は天動説ではなく地動説ですよね。

デモで使用したテクスチャは次の2つです。それぞれ下記リンク先の素材を使用しています。
ペン地球の地表テクスチャ 32k Virtual Earth Textures for Celestia
   http://celestia.h-schmidt.net/earth-vt/
ペン宇宙全天テクスチャ Axel Mellinger’s Milky Way Panorama 2.0
  http://home.arcor-online.de/axel.mellinger/

2010-10-14-0.png

続きを読む