PS4 ”Killzone : Shadow Fall” の物理ベースなエリアライティング

PS4 "Killzone : Shadow Fall" の物理ベースなエリアライティングの説明

リアライト

  • "Killzone : Shadow Fall" では全ての光源が 大きさ・形・ライトの強さを持つようになっています. つまり, 大きさが無限小であるポイントライトは使っていないです.
  • BRDF を使ってきちんとライティングの計算をする際には基本的には光源の強さ(正確には放射輝度)と光源の大きさ(正確には光源の見た目の立体角)のペアを使って計算します.
  • 従って 恐らく光源の大きさがないと, ライティングの計算の都合が悪いので導入したのだと思います. (Unreal Engine 3 もだいぶ前にエリアライトに移行していました. http://udn.epicgames.com/Three/Lightmass.html )
  • 下は元の情報のスライドです.

  • 以下にローカルライトを使ったライティング結果の図を貼っておきましたが, 図の見方について簡単に説明します.
    • 中央のデバッグ表示っぽいところにライトが置いてあります.
    • 図を見るときは「図の中央の上部にある赤い柱に映っている白い光源の形」や「床面の映っている白い光源の形」を見るとわかりやすいです.
  • [a] 球ライト(sphere light)

  • [b] 円盤ライト(disk light)

  • [c] 長方形ライト (rectangle light)

  • [d] 投影テクスチャ付きの長方形ライト (rectangle light)

リアライトのディフューズライティング( Irradiance )の計算方法

  • Killzone では Cook Torrance BRDF を使っていて, エリアライトによるディフューズライティングの計算のために標準的な計算によって Irradiance を求めています.
  • 下図によると,点 p (法線 n)に対して微小面積 dA のエリアライトの点p'(法線n')から出る Irradiance を計算する際には
dE[エリアライトの微小面積の Irradiance] =
    L[エリアライトの放射輝度] * cos(fi)[法線nと対角線の角度] * cos(fo)[法線n'と対角線の角度] *
    dA(エリアライトの微小面積) / d^2[立体角への変換用]

で求めています.

  • この計算をエリアライトの領域分だけ計算して総和を求めて, 結果的にエリアライトによる Irradiance を求めています.

リアライトのスペキュラライティング( radiance )の計算方法

  • 次にエリアライトによるスペキュラライティングの計算方法についてです.
  • 下図のように視点位置からレイを飛ばした際に, シェーディング位置p(法線n)の反射ベクトル(赤い矢印)を求め, ラフネスに応じてエリアライトからサンプリングするコーン[黄色]の角度の開きの大きさを調整していると思います.

  • ラフネスが滑らかで完全な鏡面反射のときにはくっきりとしたリフレクションの結果を得るためにこの黄色のコーンが直線になり, スペキュラライティング用にサンプリングするエリアライトの領域が点になります.
  • 一方でもしラフネスが粗くなると, 光沢感があるグロッシーなスペキュラの結果を得るためにこの結果のコーンの角度の開きが大きくなって, スペキュラライティング用にサンプリングするエリアライトの領域が2D の面積になります.
  • 下図がライトの座標系から, エリアライトの面積(青い長方形)とスペキュラサンプリング用の黄色のコーンを見たものです.

  • 実際のスペキュラライティングに使うエリアライトの領域については, 下図の赤い面積部分のようにエリアライト[青い長方形]とサンプリング用の黄色のコーンが交差している面積になります.

  • 実際にエリアライトとサンプリング用のコーンの交差領域から radiance を計算する際には, 交差領域の各点を等価には扱っていないです.
  • 具体的には, 下図のように円状に重みづけをしたテーブルを用意しておいて, それをサンプリング用のコーンの中心に配置したうえで交差領域の各点の重み付けをして, radiance を求めています.

  • つまり, エリアライト内の点のうち, 反射ベクトルを伸ばしてエリアライトと交差した点に近いものほど スペキュラライティングに対する寄与が高いことになります.
  • Killzone の技術資料で "Roughness as Specular Importance Cone Angle" という言葉があったのですが, これはラフネスに応じてこのコーンの角度が変化し, 結果としてスペキュラライティングのボケ具合(計算に使うエリアライトのサンプリング領域)が変化することを表していると思います.

IES light profile

  • 最後に物理ベースなライティングをするために, 照明器具の照度データである IES light profile を使っているようです.