PS4 "Killzone : Shadow Fall" のIBL リフレクションシステムの説明

IBL リフレクションシステムの構成

  • Killzone の IBL リフレクションシステムは下図のように "スクリーンスペースのグロッシーな光沢リフレクション", "ローカルな環境キューブマップの参照", "スカイボックスの参照" の 3 段階の構成になっています.


  • IBL リフレクションシステムでのピクセル単位のリフレクションの計算手順
    • 1. "スクリーンスペースの光沢リフレクション" : まずは半分の解像度のバッファに対してピクセルごとに, 光沢反射をスクリーンスペースのレイマーチで計算してから結果をアップサンプリングします. 光沢リフレクションの結果は勿論ラフネスに応じてぼけ具合が変化します. またこれはもしリフレクションベクトルが物陰に当たったときにはその色をリフレクションとして利用するので, スクリーンスペースのデプスバッファを使ったスペキュラオクルージョンとして作用します.
    • 2. "ローカルな環境キューブマップの参照" : 1. のスクリーンスペースのレイマーチの際に画面内のデプスバッファにレイがぶつからずにレイマーチに失敗したピクセルについては, 特定の区域ごとに置かれた"ローカルな環境キューブマップ"を参照します.
    • 3. "スカイボックスの参照" : もし特定の区域ごとに置かれた"ローカルな環境キューブマップ"の範囲外であるときには, スカイボックスを参照します.

スクリーンスペースの光沢リフレクション

  • 下図は "ローカルな環境キューブマップの参照", "スカイボックスの参照" だけを使って, リフレクションを計算した例です.
  • この図では "ローカルな環境キューブマップの参照"が主にリフレクションで使われており, 下図の赤い点線で囲われた領域については画面中央のゲートが明らかに映りこんでなかったり, 実際の床面と違う絵が映りこんでいるので不自然です.

  • 下図がこれにスクリーンスペースの光沢リフレクションを追加した結果です. 中央のゲート部分などが映り込むようになってより自然なリフレクションになりました.


  • 下図は別のシーンで, "ローカルな環境キューブマップの参照", "スカイボックスの参照" だけを使って, リフレクションを計算した例です.
  • この図では, 左の箱の下部の設置感のなさが気になります.

  • 下図がこれにスクリーンスペースの光沢リフレクションを追加した結果です. 箱の下部については恐らく, スクリーンスペースの計算によって(環境キューブマップではなく)箱の影の部分をリフレクションとして参照するようになったので設置感が出るようになりました.
  • これがスクリーンスペースのデプスバッファを使ったスペキュラオクルージョンとしての効果です.
  • またわかりづらいですが右側の床面にうっすらと天井部分の青白いリフレクションが載るようになりました.


  • 最後に下図はヘリコプターが出てくるシーンで, "ローカルなキューブマップの参照", "スカイボックスの参照" だけを使って, リフレクションを計算した例です.
  • 赤い線で囲われた部分に影が落ちていないので不自然な感じがします.

  • 下図はこれにスクリーンスペースのグロッシーなリフレクションを追加した結果です.スクリーンスペースの計算によって(環境キューブマップではなく)ヘリコプターの影部分をリフレクションとして参照するようになったのでセルフシャドウのようになっています.

ローカルな環境キューブマップ

  • Killzone ではよく他のゲームでもあるように(ユーザが指定した)領域のボックスごとに環境キューブマップを作っていて, 下図のようにそのボックス内にあるポリゴンについてはその環境キューブマップを参照しています.
  • 領域のボックスについては今はワールド座標系の AABB と言っていました.

  • 下の 2 つの図はプローブにローカルな環境キューブマップによるリフレクションを適用したり, あるいは一番右の白いプローブについては(環境キューブマップから作ったディフューズ用の)イラディアンスマップを適用した結果です.


  • 下図は環境キューブマップに対して Cook Torrance BRDF でフィルタ処理を行ったものです.

IBL リフレクションシステムの絵の合成の流れ

  • 下図は (a) 焼きこんだディフューズのライトマップ と (b) 動的なエリアライトによるライティング だけの結果です.
  • リフレクション成分がないので, 絵的に寂しいです.

  • 下図は (c) ローカルな環境キューブマップを参照 したときの成分です.


  • また (d) スクリーンスペースの光沢リフレクション をした結果の成分はこれです.

  • そして, 下図は (d) スクリーンスペースの光沢リフレクション用のマスク画像で, これはスクリーンスペースの光沢リフレクションの計算に含まれるレイトレース時のサンプリング数を表しています.
  • ここの解釈はちょっと自信ないので, 以下に講演者の発言を書いておきます.
  • This is the coverage mask. This is the mask tells us how many samples from the ray traced actually were part of the integral that I was talking about previously. So we us this mask to blend over the realtime reflection in the previous buffer.

  • そして, 下図が全ての結果の合成したものになるはずなのですが, どうやら発表資料のミスによって下図は左上に「最終合成結果」と書いてあるにも関わらず, この光沢リフレクションが入っていないことがわかりました.

  • 具体的には, 下図の光沢リフレクションがないときの絵と見た目が全く一緒です.

  • ということで, 残念ですが最終合成結果の図については正しい図が手に入ったら貼り付けます.
  • 光沢リフレクションの結果については上の方の項目の"スクリーンスペースの光沢リフレクション"の図を参照して下さい.