[Caurant 2018Caurant, G. 2018. The Lighting Technology of 'Detroit: Become Human'. Game Developers Conference. https://gdcvault.com/play/1025339/The-Lighting-Technology-of-Detroit.]
The lighting technology of Detroit: Become Human#
お品書き#
- Quantic DreamでのPBRへの道のり
- Heavy RainからDetroit: Become Humanへ
- 測光の単位
- マテリアルの較正
- 直接ライティング
- 解析的なライト
- シャドウ
- ボリューメトリックライティング
- 間接ライティング
Quantic DreamでのPBR#
- Heavy Rain (PS3)
- フォワードシェーディング
- ガンマ空間
- Blinn-PhongスペキュラBRDF
Quantic DreamでのPBR#
- Beyond: Two Souls (PS3)
- ディファードシェーディング
- ガンマ空間のマテリアル
- 線形空間のライティング
- マイクロファセットBRDF近似
- Litシェーダ: 一定の可視性項付き正規化済みBlinn-Phong
- Skinシェーダ: 独自の可視性項付きBeckmann分布
Quantic DreamでのPBR#
- Detroit: Become Human (PS4)
- Clustered Forward Shading
- 完全な線形空間
- マイクロファセットスペキュラBRDF (GGX)
- まだランバートディフューズ()を使っている
- 部分的なエネルギー保存
- ライトとemissiveマテリアルに対する測光単位
Quantic DreamでのPBR#
- マテリアル計算
- Shading Tree
- lit、unlit、ランバート、ガラス、肌、髪、目、歯、車の塗装、服
- 強力だが一貫性を制御し辛い
- いくつかのマテリアルは複数のスペキュラローブを持ち得る。
Quantic DreamでのPBR#
- BRDF積層
- BRDFを複数の層に分割して積み上げる
- 最大2つのスペキュラローブ+1つのディフューズ+1つの表面下または後方散乱
- Litシェーダは1つのスペキュラGGX層を用いる
- 雨用の金属質表面での追加の層
[Langlands 2014Langlands, A. 2014. Physically Based Shader Design in Arnold. Physically Based Shading in Theory and Practice course. ACM SIGGRAPH. https://blog.selfshadow.com/publications/s2014-shading-course/.]
Quantic DreamでのPBR#
- BRDF層間のエネルギー保存
- 各”層”は反射するエネルギーと透過するエネルギーを計算する
- 残りのエネルギーは次の層を計算するのに再利用される
- BRDF全体でのエネルギーの伝達を事前計算する必要がある
- 多重散乱、Fresnel界面
- 残念ながら、我々はF0を計算に入れるだけである
Quantic DreamでのPBR#
- プロダクションサイクル中に直面する問題:
- シーン間の不十分なライティングの一貫性
- マテリアルの一貫性もまた問題である
- 異なるシーンで小道具を再利用し辛い
- => 我々は測光単位に移行することを決断した
測光単位#
- ライティングの一貫性は我々の主な目標であった
- 現実のリファレンスと比較するのがより簡単
- アーティストは現実の入力値を用いることができる
- 彼らがアルベドにライティング情報を焼き込めないようにする
- より良いシーンのコントラストやレンジを可能にする
- [Lagarde and de Rousiers 2014Lagarde, S. and de Rousiers, C. 2014. Moving Frostbite to Physically based rendering. Physically Based Shading in Theory and Practice course. ACM SIGGRAPH. https://seblagarde.wordpress.com/2015/07/14/siggraph-2014-moving-frostbite-to-physically-based-rendering/.] “Moving Frostbite to Physically based rendering”
測光単位#
- 光量 (lm)
- 放射される光の総量
- 光度 (cd)
- ある方向への立体角あたりのルーメン
- 照度 (lux)
- 表面に降り注ぐ光の量
- 輝度 ()
- ある方向における単位面積あたりのカンデラ
測光単位#
- 直接光はルクスで
- 他のライトはルーメンで
- 必須の二次減衰
- 照度は大きさを持たない光源の近くで*非常に*高い
測光単位#
- エミッシブ表面
- すべてのマテリアルにあるEmissive Intensityというパラメータ(と色)
- EV値で表現される
- は線形な尺度だが、人間の目ではそのように知覚されない
- EV値は知覚的に線形である
- EV値を+1すると、知覚される光度は倍になる
測光単位 --- 露出#
- シーンの露出
- レベルエディタでシーンを正確に露出する必要がある
- 自動露出は推奨されない
- 典型的なライティング条件に対する計測された露出を使う
- 我々のレベルは”Scene Zone”(SZ)に分割される
- 撮影のディレクターは”SZ”ごとに露出を規定する
- 値を固定し、使い回さない
- カメラが”SZ”に侵入するときに露出を適用する
- レベルエディタでシーンを正確に露出する必要がある
測光単位 --- 露出#
- シーンの露出
- 露出はEV100で表される
- カメラのシャッタースピードとF値の組み合わせを表現する
- EV100はISO100のセンサ感度に対するEV値である
- 一貫性のあるライティングレンジを保証するためのフレームワークをもたらす
- シーンの露出は露出前の累積バッファにとってとても良いものである
- インゲーム露出にはさらなる制御が必要である
- 露出はEV100で表される
測光単位 --- 露出#
- カメラの露出
- シーン露出の上の露出補正
- 露出を動的に変化させるための制御をもたらす
- アーティストは4つの露出タイプから選択できる
- 自動露出 = ゲームプレイのフェーズ(主に)
- 手動露出 = カットシーン(主に)
測光単位 --- 露出#
- カメラ露出の種類:
- 手動
- EV100におけるEV値、アニメーションカーブで制御できる
- カメラ
- 物理的なカメラ設定(F値、ISO、シャッター時間)から計算される
- 自動・平均
- シーンの対数平均輝度から計算される
- 自動・EVZone
- “Scene Zone”で規定されるEV値+シーンに手動で設置されるEV”デカール”から計算される
- 手動
測光単位(デバッグ)#
- 仮想的な露出計
- ピクセルにとEV100で絶対輝度をもたらす
- RGBおよびsRGBの値
- 以下のときに本当に有用である
- エミッシブ表面を調整するとき
- スペキュラ反射における高い値をデバッグするとき
測光単位(デバッグ)#
- False Colorのデバッグメニュー
- シーンが上手く露出されるかを確認するのに有用
- 緑 → ミドルグレー (18%)
- ピンク → 肌の色合い
- 紫 → 黒潰れ
- 赤 → 白飛び
マテリアル較正#
- ライティングに対する良いフレームワークがある
- 現実のリファレンス
- 一貫した値
- マテリアルは同じ処置を必要とする
- すべてのマテリアルをスキャンするのは不可能
マテリアル較正#
- いくつかのオブジェクトとマテリアルのサンプルをキャプチャする
- 制御された環境がある部屋を設定する
- 3つの白熱電球がある黒い部屋を作った
- 我々のエンジン内で再現し易い
- キャプチャされたマテリアルはライティング環境を評価するのに役立つ
マテリアル較正#
- この際に、我々は”Icing Tool”を作った
- いくつかの較正されたライティング環境を提供する
- あの黒い部屋を含む
- また他には、様々なライティング環境でキャプチャされたフルレンジIBLを含む[Lagarde 2016Lagarde, S. 2016. An Artist-Friendly Workflow for Panoramic HDRI. Physically Based Shading in Theory and Practice course. ACM SIGGRAPH. https://blog.selfshadow.com/publications/s2016-shading-course/.]
- マテリアル特性の可視化
- オブジェクトやマテリアルのリファレンスとの比較
- いくつかの較正されたライティング環境を提供する
- すべての小道具はこのツールで評価できる
#
マテリアル較正(デバッグ)#
- 逸脱したマテリアル特性を持つ値を強調する
- 赤: 誤った基本色
- 誘電体的なマテリアルはsRGBで30から240の範囲内になければならない
- 金属的なマテリアルはsRGBで186から255の範囲内になければならない
- 青: 誤ったガラスシェーダ反射
- Fresnel反射率はsRGBで52から114の範囲内になければならない
- 黄: 誤った金属感パラメータ
- 金属感の値は0または1の近くにあるべきであり、中間的な値はしばしばエラーとなる
- 赤: 誤った基本色
較正#
- マテリアル特性エラー
お品書き#
- Quantic DreamでのPBRへの道のり
- Heavy RainからDetroit: Become Humanへ
- 測光の単位
- マテリアルの較正
- 直接ライティング
- 解析的なライト
- シャドウ
- ボリューメトリックライティング
- 間接ライティング
直接ライティング#
- すべての光源は大きさを持たない
- ディレクショナル
- ポイントライト
- スポットライト
- プロジェクターライト
- 減衰を伴うボックス内に制約された”ディレクショナル”ライト
直接ライティング#
- 減衰は既定で二次関数である
- アーティストはその値を0から2までに調節できる
- 減衰を減らすことでより大きなライトを嘘付くのに役立つ
- パフォーマンス上の理由のために減衰半径と組み合わせられる
- 残念ながら、放出される総エネルギーに関するエネルギー保存則を破る
- [Karis 2013Karis, B. 2013. Real Shading in Unreal Engine 4. Physically Based Shading in Theory and Practice course. ACM SIGGRAPH. https://blog.selfshadow.com/publications/s2013-shading-course/.; Lagarde and de Rousiers 2014Lagarde, S. and de Rousiers, C. 2014. Moving Frostbite to Physically based rendering. Physically Based Shading in Theory and Practice course. ACM SIGGRAPH. https://seblagarde.wordpress.com/2015/07/14/siggraph-2014-moving-frostbite-to-physically-based-rendering/.]に基づく
- アーティストはその値を0から2までに調節できる
- 大きさを持たない光源はスペキュラ反射において本当に高い強度ピークを生み出し得る
直接ライティング#
- エリアライトが助けてくれる(かも)
- この問題を修正するためにエリアライトを実装する
- フォワードエンジンはすべてのライトをエリアライトにする必要があることを意味する
- プロダクションサイクルでは遅すぎたし、そのコストが無視できなかった
- 最終的には、この問題を抑制するためにマテリアルのラフネスを若干バイアスした
直接ライティング#
- 独自のニアクリップ面
- 安価であり、独自のライトジオメトリを使わないライトの位置取りの補助に有用
- ライトはそれに影響を与えずに壁の裏側にあったりオブジェクトの中にあったりすることができる
- ライトの可視性フラグ
- すべての”SZ”、ローカル”SZ”、可視の”SZ”
- ローカルなScene Zoneを照らすだけのてきに有用
近接ライティング#
- 多くの近接カメラショットがあるストーリー駆動のゲーム
- 映画のセットにあるようなカメラショットごとを照らしたい
- シーンライティングはショット毎に編集した
- ライトのセットアップとオブジェクトの選出はムービーエディタで行った
- カメラ、近接ライティング、露出の追跡を持ち得る
近接ライティング#
- 一連のライトは通常のライティングを置き換えるために使った
- 追加の近接ライトとしてシーン中のライトをフラグ立てできる
- 近接シャドウを使う(後に説明される)
- 間接的な寄与に影響を与え得る(GI & IBL color multiplier)
- 近接の選択範囲の境界ボリュームにフィットしたそれ自身のライトクラスタを持つ
- 11x11x4
オン#
オフ#
シャドウ#
- シャドウマップ
- 8サンプルのPCF+テンポラルスーパーサンプリング
- 青色ノイズを用いてジッタリングした
- 3ピクセルの既定のぶらー半径、最大15ピクセルまで増やせる
- ジオメトリの法線から計算される自動的シャドウバイアス
- [Holbert 2011Holbert, D. 2011. Saying 'Goodbye' to Shadow Acne. Game Developers Conference. https://web.archive.org/web/20180524211931/http://www.dissidentlogic.com/old/images/NormalOffsetShadows/GDC_Poster_NormalOffset.png.]をカスタマイズした
- PCSSを試したが、重いregister pressureのために実践的ではない
- 歯シェーダで使っただけ
- 8サンプルのPCF+テンポラルスーパーサンプリング
シャドウ#
- シャドウアトラス
- シャドウは16ビット精度を持つ8192^2のアトラスに格納される
- 256x256のブロックに分けられる
- アーティストは3つの異なるサイズの中から解像度を選択できる
- 256、512、1024
- シャドウはカメラ距離に依存してリサイズされる
- 解像度は最大で半分になり得る
- pixel crawlingを抑制するために4段階で解像度を減らしてゆく
- そして、256ピクセルの倍数に達するときにアトラス内で再パッキングされる
- シャドウは16ビット精度を持つ8192^2のアトラスに格納される
シャドウ#
- シャドウアトラス
- 何かがライト錐台内で動く場合に限り更新される
- ポイントライトのシャドウ面は個々に除外させることができる
- 調節可能なシャドウのニアクリップ面
- 数値計算的な精度とライトの位置取りを助ける
- (回転なしに)ライトのニアクリップ面から相関を失わせることができる
シャドウ#
- Directional Cascaded Shadow map
- テンポラルスーパーサンプリング付きPCF(8サンプル)
- ジッタリングとTAAを用いる分割間のなめらかな遷移
- 各1440ピクセルかつ16ビット精度の最大4分割
- シーンの大部分は2か3つの分割を用いる
- 自動分割分布
静的シャドウ#
- カメラ距離に依存して静的シャドウに切り替える
- バイリニア比較で1サンプルのみ
- 静的シャドウアトラス
- アトラスサイズ: 2048^2
- シャドウあたり64x64
- 最大1024つのシャドウ
- ディレクショナル静的シャドウ
- そのレベルのすべての静的なジオメトリを含む1つの大きなテクスチャ
- サイズ: 8192^2
近接シャドウ#
- 接触部分やセルフシャドウでは精度を追加する
- 各1536^2ピクセルの最大2つの追加シャドウ
- アーティストはシーン中で関連するオブジェクトを選択する
- 例: キャラクター
- これらのオブジェクトのみが近接シャドウを受ける
近接シャドウ#
- オブジェクト選出:
- 半径10m以内にあるすべての可視のフラグ立てしたオブジェクト
- skinned点群から計算されるskinnedオブジェクトの境界ボリューム
- 近接レシーバーの選択範囲の境界ボリュームにフィットさせたニア/ファー面
近接シャドウ#
- オブジェクト選出:
- 半径10m以内にあるすべての可視のフラグ立てしたオブジェクト
- skinned点群から計算されるskinnedオブジェクトの境界ボリューム
- 近接レシーバーの選択範囲の境界ボリュームにフィットさせたニア/ファー面
- 錐台の外側のオブジェクトはニアシャドウ面に投影される
近接シャドウ#
- オブジェクト選出:
- 半径10m以内にあるすべての可視のフラグ立てしたオブジェクト
- skinned点群から計算されるskinnedオブジェクトの境界ボリューム
- 近接レシーバーの選択範囲の境界ボリュームにフィットさせたニア/ファー面
- 錐台の外側のオブジェクトはニアシャドウ面に投影される
オン#
オフ#
シャドウ予算#
- シャドウアトラス
- 8192^2、16ビット
- 10つから1024つの可視シャドウ
- ポイントライトは巨大になり得る(6x1024)
- 静的シャドウアトラス
- 2048^2、16ビット
- レベルあたり1024つの静的シャドウ
- ディレクショナルシャドウ
- 3つの1440^2、16ビット
- ディレクショナル静的シャドウ
- 8192^2、16ビット
- 静的
- 8MB + 128MB
- 動的
- 128MB + 12MB
- 合計
- 276MB
#
シャドウパフォーマンス#
- フレームあたり平均で15つから20つのシャドウが更新される
- 更新の量的な制限はない、いくつかのケースでは荒れる可能性がある
- 先程の映像では1.5msから3.5ms
- 近接シャドウのコスト
- シーン依存
- ニア面に再投影されるオブジェクトが少ないと高速(1ms以下)
- ライトが木の中にあると低速(強大なアルファテストカバレッジ)
- シーン依存
ボリューメトリックライティング#
- Unified volumetric lighting [Wronski 2014Wronski, B. 2014. Volumetric Fog: Unified compute shader based solution to atmospheric scattering. Advances in Real-Time Rendering in Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2014/.; Hillaire 2015Hillaire, S. 2015. Physically-based and Unified Volumetric Rendering in Frostbite. Advances in Real-Time Rendering in Games course. ACM SIGGRAPH. https://www.ea.com/frostbite/news/physically-based-unified-volumetric-rendering-in-frostbite.]
- ライトクラスタ深度にフィットさせる
- チェッカーボードレンダリングを用いる
- PS4: 192x108x64
- PS4 Pro: 240x135x64
- 青色ノイズのジッタリングでのTAA
- 直接光とdiffuse probe gridで照らされる
- GI焼き込みでのフォグの寄与
- 偽の多重散乱
ボリューメトリックライティング#
- ボリューメトリックライトは表面を通して漏れる可能性がある
ボリューメトリックライティング#
- リークを直す
- タイル毎に最大/最小深度を格納する
- ライト計算時にボクセルの薄さをクランプするために最大深度を使う
- ボリューメトリックテクスチャサンプリングでZバイアスを適用する
- (TileDepthVariance > threshold)
オフ#
オン(コーダの設定)#
17つのライトで約1.8ms
#
お品書き#
- Quantic DreamでのPBRへの道のり
- Heavy RainからDetroit: Become Humanへ
- 測光の単位
- マテリアルの較正
- 直接ライティング
- 解析的なライト
- シャドウ
- ボリューメトリックライティング
- 間接ライティング
間接ライティング#
- Beyond: Two Souls (PS3)
- HL2のアンビエントキューブを用いる
- 静的ジオメトリには頂点焼き込み
- 動的ジオメトリにはライトプロブ
- 偽の間接スペキュラライティング
- 静的および動的用に統一された解法が必要
プロブベースのライティング#
- プロブベースの解法
- スペキュラの画像ベースライティング(IBL)では理想的
- シーンのキューブマップをキャプチャする
- GGXのNDFをベイクする[Walter et al. 2007Walter, B., Marschner, S. R., Li, H. and Torrance, K. E. 2007. Microfacet models for refraction through rough surfaces. Proceedings of the 18th eurographics conference on rendering techniques 195–206. 10.2312/EGWR/EGSR07/195-206. https://www.graphics.cornell.edu/~bjw/microfacetbsdf.pdf.; Karis 2013Karis, B. 2013. Real Shading in Unreal Engine 4. Physically Based Shading in Theory and Practice course. ACM SIGGRAPH. https://blog.selfshadow.com/publications/s2013-shading-course/.]
- ホタルを抑制するためのフィルタされた重点サンプリング
- アーティストに制御される[Lagarde and Zanuttini 2012Lagarde, S. and Zanuttini, A. 2012. Local image-based lighting with parallax-corrected cubemaps. ACM SIGGRAPH 2012 talks. 10.1145/2343045.2343094. https://seblagarde.wordpress.com/2012/11/28/siggraph-2012-talk/.]:
- 影響度ボックス
- 視差ボックス
プロブグリッド#
- ディフューズプロブグリッドは台無しにする:
- ライトリーク
- 進行中の研究領域
- 興味深い解法:[McGuire et al. 2017McGuire, M., Mara, M., Nowrouzezahrai, D. and Luebke, D. 2017. Real-time global illumination using precomputed light field probes. Proceedings of the 21st ACM SIGGRAPH symposium on interactive 3D graphics and games. 10.1145/3023368.3023378. https://research.nvidia.com/publication/2017-02_real-time-global-illumination-using-precomputed-light-field-probes.; Iwanicki and Sloan 2017Iwanicki, M. and Sloan, P.-P. 2017. Precomputed lighting in Call of Duty: Infinite Warfare. Advances in Real-Time Rendering in Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2017/.]
- 補間の不規則性
- しばしば対処されないが、我々には問題になると考えられる
- ライトリーク
プロブグリッド#
- 遮蔽に基づくプロブの却下はしばしば補間のアーティファクトを引き起こす
- 最終的にはプロブを破棄することが一切なくなった
Irradiance Sparse Octree#
- 放射照度ボリューム [TAT07]1
- 適応的Sparse Octree
- アーティストの手がかりによって自動的に構築される
- Density Zones
- オブジェクト/壁の周りでより細かい解像度での自動的なシーンのボクセル化
Irradiance Sparse Octree#
- 1つの八分木セルは8つのプロブを持つ、角あたり1つ
- 空間の点は8つのプロブで常に囲われる
- いずれのプロブも破棄しない
- 代わりにプロブを仮想的にオフセットする
Probes attractor#
- アーティストはすべてのプロブを引きつける閉じたメッシュをセットアップする
- 通常は可視性ですでに使われるVolume Zoneに近い
Probes repulsor#
- ボリューム内部のプロブを拒絶する閉じたメッシュ
プロブのオフセット#
- 場合の大部分を解く
- キャプチャ/ベイキング中の仮想のオフセット
- 元のグリッド位置に基づく計算
- いくつかのケースはより難しい
プロブのオフセット#
- 壁や遮蔽物でリークしているならば、分割してオフセットする
- または、誤差を最小化しようとする
- 明るいリークは暗いリークより気付きやすい
プロブの調整#
- (最終手段の)手動調整のためのプロブカラーモディファイヤ
八分木レベルの不連続性#
🔴計算されたプロブ
🔵補間されたプロブ
ボリュームテクスチャアトラス#
ボリュームテクスチャアトラス#
全リーフを格納:2x2x2
大量の冗長性
ボリュームテクスチャアトラス#
リーフの親を格納:3x3x3
この方が良い
球面調和関数#
- 2次のSH
- 4つの係数
- Geometrics reconstructionを用いて[Joseph 2015Joseph, W. 2015. Reconstructing diffuse lighting from spherical harmonic data. Computer Entertainment Developers Conference. https://cedil.cesa.or.jp/cedil_sessions/view/1329.]
- 3つのRGBA16Fのボリュームテクスチャ(R,G,B)
- 24,055つのプロブ → (105x105x3)x3つのテクスチャ ≒ 3MB
GIの表示#
- プロブの破棄はボリューメトリックテクスチャのサンプリングを不可能にする
- ハードウェア(3D)バイリニアフィルタリングを単純に使う
GIの表示#
- 八分木セルのハッシュキーは3D位置から求める
- Morton Key
- O(1)
- 32ビットに限られる
- テクスチャ座標バッファに事前計算されたハッシュを使う
- X座標は最初の15ビットでコード化される
- Y座標は次の15ビットでコード化される
- Z座標は最後の2ビットでコード化される
GIのおまけ#
- コンピュータシェーダで複数のGIセットをブレンドするのは自明
- GIの切替(屋内ライトの切り替え、雷、…)
- GIの遷移(時刻変化、カーテンの開閉、…)
#
GIの遷移#
- Scene Zonesの間の辛いGI遷移を回避する
- 屋内 ↔ 屋外
- ポータル周りの距離を設定する
- 通過する動的オブジェクトは両方のGIをサンプルする
- ポータルへの距離と法線方向に基づく
オフ#
オン#
GIの遷移#
- ほとんどの静的オブジェクトはユニークなScene Zoneの中にある
- 屋内の壁 VS 屋外の壁
- ドア、窓、窓枠はどうなる?
- 1つのScene Zoneに割り当てられるが、ほかから可視にもなる
- 1つのScene Zoneに割り当てない
GIの遷移#
- 両方のGIをサンプルするためにオブジェクトを手動でタグ付けする
おわりに#
おわりに#
- PBRへの道に終わりはない
- ライトやマテリアルに対するより良いエネルギー保存が必要
- マテリアルは十分なほど物理的に正確ではない
- 物理ベースにすることは良いが、アーティストの視点やニーズを忘れないこと
- 測光単位は一貫性のあるアセット制作を保証する良いフレームワークを提供する
- マテリアルを評価するためにリファレンス環境を常に用いる
おわりに --- 次は#
- エリアライトとソフトシャドウをそこかしこに(はあと)
- BRDF積層を改善する
- エネルギー保存のより良い扱い
- GIに動的要素を追加する
- ボリューメトリックライティングの改善
謝辞#
ご質問は?#
Footnotes#
-
訳注:詳細不明。“Irradiance Volumes”というタイトルのみ示されている。 ↩