Lumen により、フォートナイト バトルロイヤル チャプター 4 でリアルタイム グローバル イルミネーションを実現

Daniel Wright (グラフィック担当エンジニアリング フェロー) および Krzysztof Narkowicz (テクニカル ディレクター、グラフィック担当) |
2023年1月27日
こんにちは。Lumen のエンジニアである Daniel Wright と Krzysztof Narkowicz です。「Lumen」は Unreal Engine 5 の完全に動的なグローバル イルミネーションおよび反射のシステムです。この機能は導入後すぐに利用できます。このブログ投稿では、フォートナイト バトルロイヤル チャプター 4 で Lumen がどのように使用されているのか、そしてチャプター 4 のシッピング中にチームが Lumen に加えた改善点をご紹介します (これら改善点は、Unreal Engine 5.1 からすべての開発者が利用できます)。また、以前の 技術ブログ では Lumen 自体について説明しています。システムの概要については、そちらをご覧ください。

Lumen を使用している フォートナイト バトルロイヤル チャプター 4は、プレイステーション 5、Xbox シリーズ X、および Xbox シリーズ S でシッピングされています。「グローバル イルミネーション」の品質設定が「高」または「エピック」に設定されている場合、いつでも PC とクラウド ゲームで Lumen を有効にでき、ビデオカードでサポートされているハードウェア レイ トレーシングを使用するオプションも選択可能となります。
 

フォートナイト バトルロイヤル チャプター 4 での Lumen

チャプター 4 より前は、フォートナイト は次世代コンソールでも Unreal Engine 4 の動的ライティング技術しか使用できませんでした。そのため、環境光には距離フィールド アンビエント オクルージョンのみが使用されており、青いスカイライト漏れによってインテリアが青白く表示されていました。チャプター 4 では、Lumen がグローバル イルミネーションを高品質で計算しており、暖かな太陽光のバウンスときめ細やかな間接シャドウが表示されるようになりました。
距離フィールド アンビエント オクルージョンと Lumen のグローバル イルミネーションの比較。自動露出は、Lumen GI とともに有効になります。
スカイライトが正しくブロックされているため、正確なグローバル イルミネーションを使用すると、屋内エリアは屋外よりも大幅に暗くなります。これを改善するには、「自動露出」を有効にする必要があります。

フォートナイト の以前のバージョンでは、次世代コンソールで反射を行う場合、「スクリーン空間反射 (SSR)」に限定されていました。このエフェクトは画面に表示されているものしか反映できないため、建物内でのスカイライト漏れを防ぐには不十分でした。SSR も鏡面でしか良い結果は得られず、粗い反射は実用的ではありませんでした。フォートナイト のアーティストは、屋内で使用されるマテリアルのスペキュラをほぼ使用しないことで、このような制限に対処していました。しかし、Lumen 反射は光沢のあるサーフェス上で正確なレイトレース反射を生成するので、屋内にある場合でも金属や滑らかなサーフェスのマテリアルを正しくレンダリングできます。それにより、ライティングに対する完全なマテリアルの反応をリアルタイムで確認できるようになりました。
氷上におけるスクリーン空間反射と Lumen 反射の比較。
Lumen 反射は水面でもよく使用されます。SSR よりもはるかに鮮明で、画面に表示されているもの以外も反射できます。
水面でのスクリーン空間反射と Lumen 反射の比較。
フォートナイト バトルロイヤル には、時間帯の変化、プレイヤーによる建造物の建設や破壊、ドアのオープンといったような、動的ライティングが必要となるゲーム イベントが多数あります。Lumen は完全に動的なので、これらの変化にリアルタイムで対応できます。Lumen はコストを削減するために複数のフレームにわたって計算を償却しますが、フォートナイト では高いフレームレート ターゲットが設定されているため、一時的な蓄積アーティファクトは最小限に抑えられます。

チャプター 4 への道のり

Unreal Engine 5.0 リリースの作業を終えたとき、焦点は フォートナイト バトルロイヤル チャプター 4 とその問題に向けられました。フォートナイト は、コンソールで最小 60 fps をターゲットにしていますが、これはフレームあたりわずか 16.67 ミリ秒となります。しかし、激しい戦闘中で動的解像度とゲームプレイ コストの余裕がある場合、ターゲットはさらに低くなります。必要なすべてのレンダリング機能を考慮すると、動的グローバル イルミネーションと反射を合わせた時間はわずか 4 ミリ秒でした。トリプル A ゲームでは、レイ トレーシングによる反射だけで 4 ミリ秒を費やすのが一般的であるため、このバジェットは非常に小さいことがわかります。チャプター 4 では、次世代のライティング品質を損なうことなく、あらゆる最適化を行おうと思っていました。

最初に決定すべき事項は、「フォートナイト バトル ロワイヤル チャプター 4 でどのレイ トレーシング方法を使用するか」ということでした。コンソールでは、ハードウェア レイトレーシングを用いた LumenThe Matrix Awakens: Unreal Engine 5 のエクスペンス をシッピングしており、その際は 非常に多くの最適化を行いましたが、その技術デモのバジェットは 30 fps でした。初期テストをいくつか行った結果、Lumen のソフトウェア レイ トレーシングはトレース コストが低いため、60 fps のバジェットを達成する必要があると判断しました。しかし、ソフトウェア レイ トレーシングは大まかな結果を出力するという性質により、とりわけフォリッジと水の反射に関して、いくつかの問題が生じました。

フォートナイト バトルロイヤル チャプター 4 には、草で覆われた森となだらかな丘があります。Lumen をシッピングした以前のプロジェクトには目立つようなフォリッジがなかったので、その際はまだ問題にはなりませんでした。大きな問題の 1 つは、フォリッジのオーバーオクルージョンでした。

Lumen のソフトウェア レイ トレーシングは、グローバル符号付き距離フィールドを使用してシーンのサーフェスを表します。符号付き距離フィールドは不透明なサーフェスのみを表せます。そして、それらをレイ マーチングすると、ヒットまたはミスというバイナリ結果が出力されます。これにより、集約としてモデル化されたフォリッジ メッシュで深刻なオーバー オクルージョンが発生してしまいます。この問題に対処するため、符号付き距離フィールドを交差させるための新しい方法を開発しました。この方法では、レイ マーチングの各ステップで交差するかどうかを選択します。これにより、確率的な手法となり、シーンの残りの部分で適切に機能する符号付き距離フィールドの表現を維持しながら、集約ジオメトリをより正確にモデル化できるようになりました。
フォリッジのオーバーオクルージョンは、半透明の確率論的距離フィールドを交差させることで解決しました。
問題の中には、解決が簡単なものもいくつかありました。Lumen はソフトウェア レイ トレーシングが不足している部分ではスクリーン トレースで詳細を追加します。しかし、草には非常に多くの詳細が求められることから、こうしたスクリーン トレースによって大きなエイリアシングが発生していました。これは、単純にフォリッジのスクリーン トレース ヒットをスキップすることで解決できました。
フォリッジのヒットをスキップすることで、草の上のスクリーン トレースからの極端なノイズを解決。
ソフトウェア レイ トレーシングのもう 1 つの大きな問題は、反射中のサーフェスにキャッシュされるライティングの解像度が低いことでした。Lumen は、各メッシュに対してかなり高い解像度のサーフェス キャッシュを維持することで、光線のヒットに対してライティングを効率的に生成します。しかし、それらをボクセライズされた表現にマージすることから、ぼやけがより強くなっていました。したがって、メッシュごとのサーフェス キャッシュを光線のヒットで直接サンプリングできる逆ルックアップ構造を開発し、より正確なエミッシブ ライティングとシャープな水の反射を実現しました。
光線が Lumen のサーフェス キャッシュを直接サンプリングするときのソフトウェア レイ トレーシングによって実現した、より鮮明な反射 (視覚化のためにスクリーン トレースが無効になっています)。
水の反射に関して、Lumen のスクリーン トレースが前景のオブジェクトによって遮られるたびに、垂直方向の縞模様のアーティファクトが発生していました。キャラクターを動かしている際、このアーティファクトが非常に目立っていました。Lumen のスクリーン トレースでは、オブジェクトの厚みがわからないため、残りの光線についてはソフトウェア レイ トレーシングに切り替える必要があります。そして多くの場合、それにより別の色が生成されます。そのため、はるかにコストが低く精度の低い方法を用いている、スクリーン空間反射よりも古い技術により光線を交差させることになりましたが、これにより、前景のオブジェクトの後ろにも光線を表示することができるようになりました。ソフトウェア レイ トレーシングのヒットでも、画面の色をサンプリングすることで縦縞を解決できました。これにより、不一致を減少させることができました。この解決策は UE 5.1 のリリース直前で導入したため、同バージョンのリリースには含まれていません。
スクリーン トレースとソフトウェア レイ トレースの間の不一致によって生じる縦縞は、光線のヒットでスクリーン カラーをサンプリングすることによって最小限に抑えられます。
その他の品質向上は予想外のものでした。Lumen GI は、4 ミリ秒のバジェットに収まるように大幅にダウンサンプリングします。これにより、ノイズがより目立つようになり、ゲーム体験の質が低下します。しかし、複数のフレームにわたってノイズが累積されたときに、そのノイズパターンを事前に最適化してすばやく除去する技術である NVIDIA の時空間ブルー ノイズ を統合することで、ノイズの大幅な削減に成功しました。これにより、光線をトレースする必要がなくなり、よりクリーンな間接ライティングを得られました。
ドアに差し込むスカイ ライトは、時空間ブルー ノイズでノイズが少なくなります。

芸術的な表現のコントロール

指向性ライトの「間接ライティングの強度」など、直接または間接ライティングを芸術的に使用するためのツールは、すでにいくつかは利用可能です。フォートナイト のアーティストは、値を「2.0」にすることで反射光を増幅してゲームに暖かみを与えています。ただし、屋内のエリアで近くに窓や光源がない場合、正確なグローバル イルミネーションでは非常に暗くなってしまうという問題がありました。これが原因で、屋内から屋外に移動するときに露出が大きく変動していました。この問題は、より多くの光源を配置することで解決可能ですが、その場合、シャドウイングのコストが増加します。

そのため、Lumen の間接ライティング向けに新しいコントロールを開発しました。ポスト プロセス ボリュームの「スカイライト漏れ」と「ディフューズ カラー ブースト」です。「スカイライト漏れ」を使用すると、屋内に少量の環境光を差し込むようにして露出が変化する範囲を制限できます。「ディフューズ カラー ブースト」は、複数回バウンスする間接ライティングの量を増幅できます。これらのオプションはいずれも、ライトを追加する場合と異なり GPU コストが大幅に上がりません。フォートナイト のアーティストは、屋内のエリアがゲームプレイによって暗くなりすぎるのを防ぐために、最終的にはスカイライト漏れを使用することを決定しました。
スカイライト漏れで領域が完全に黒くなるのを防ぐ。
グローバル イルミネーションが正確な場合、ライティングのコントラストが高くなってしまい、露出値が単一の場合は適切に機能しません。画像の明るい部分、特に空と太陽に照らされたサーフェスは白飛びし、暗い部分は露出不足になってしまいます。しかし、Unreal Engine 5.0 では、ローカル露出という新しい機能が導入されました。フォートナイト のアーティストはこの機能を活用することで、このような広い露出レンジが求められる状況でもハイライトとシャドウを維持できるようになりました。
UE 5.0 の新機能であるローカル露出により、ハイライトとシャドウの詳細も保持されています。Lumen を使用しているときは常にローカル露出を設定する必要があります。

パフォーマンス

Lumen は、「テンポラル アップサンプリング」と、Unreal Engine 5 の 4K 出力用のテンポラル スーパー解像度 (TSR) を活用しています。極端に低い品質設定を使用して Lumen を 4K のネイティブで実行するのではなく、内部で TSR を使用して 1080p でレンダリングすることで、最善の映像品質が確保されます。

Lumen は、プラットフォームのデバイス プロファイルで「グローバル イルミネーション」および「反射」品質グループを「高」に設定することにより、次世代コンソールで 60 fps にターゲットするように構成できます。

; Lumen GI と反射品質を高に設定し、60 fps をターゲット
+CVars=sg.GlobalIlluminationQuality=2
+CVars=sg.ReflectionQuality=2

Lumen GI は、通常よりも大幅にダウンサンプリングすることでスケールダウンしており、それによりピクセルあたりの光線を 1/16 まで下げています。トレースする光線が非常に少ない場合、間接ライティングは一時的に不安定になってしまい、暗い領域ではノイズが目立つようになります。このようなノイズの増加は、スカイライト漏れでうまく隠すことができます。
Lumen を 60 fps に設定した場合と 30 fps に設定した場合の比較。Lumen は、30 fps の方が細部をよりよく捉え、一時的に安定します。この様子については、スクリーンショットの比較ではわかりません。
フォートナイト バトルロイヤル チャプター 4 の作業中は、Lumen GI に対して細かい最適化を多く施しました。そのうち、最も大きく高速化に寄与したのは、メソッド全体の非同期計算パイプラインへの移動です。これにより、0.8 ミリ秒節約できました。Lumen には、さまざまなアルゴリズム向けにコンピュート ディスパッチが多数用意されています。これを使用する間、GPU は短時間アイドル状態になりますが、それらはすべて加算されます。

さらに、レイ トレーシング ディスパッチは、いくつかの光線がそれ以外の光線よりも長い時間をかけて完了する、ロング テールを持つ傾向があります。この作業を非同期計算パイプラインに移動することで GPU はフレームの残りの作業でギャップを埋められるので、GPU の処理能力をより有効に活用できます。UE 5.1 ではいくつかの修正が間に合わなかったため、Lumen の非同期的計算がコンソールでデフォルトで有効になるのは UE 5.2 からです。
Lumen は現在、非同期計算パイプラインで実行されており、GPU の計算能力をより有効に活用できるようになっています。
Lumen 反射は、水面を除いて半分の解像度でレンダリングすることにより、60 fps バジェットに縮小されました。Lumen GI はすでに粗い反射を生成できますが、Lumen 反射の場合、鮮明な反射を生成するには追加の光線を追跡する必要があります。反射コストは、光線が問題なく反射できる滑らかなサーフェスを持つマテリアルが、画面上のどこにあるのかによって大きく異なります。最も最適化できたことの 1 つ (1-2 ミリ秒) に、フォリッジによる頻繁な反射の光線のスキップがあります。これにより、ベース パスとシャドウ深度のコストがすでに高くなっていても、顕著な品質低下が発生しなくなりました。

Xbox シリーズ S への対応は、骨が折れました。Xbox シリーズ X には 12 テラフロップの GPU が搭載されていますが、シリーズ S には 4 テラフロップしか搭載されていないためです。したがって、より低い内部解像度を設定する必要がありましたが、それだけでは十分ではありませんでした。外観が大きく変わってしまう距離フィールド アンビエント オクルージョンにフォールバックしたくなかったからです。代わりに、Lumen GI が粗い反射を提供するモードと、ミラー反射用のスクリーン空間反射モードを開発しました。これにより、Lumen 反射が無効になって約 1 ミリ秒節約できる上、スクリーン空間反射だけで作成したものより見栄えがよくなります。
Lumen グローバル イルミネーションは、スケーラビリティを維持するために Lumen 反射が無効になっている場合でも粗い反射を提供します。
最終的には、Lumen GI と反射を、次世代コンソールで 60 fps の 4 ミリ秒の平均コスト バジェットに収めることに成功しました。フォートナイト バトルロイヤル チャプター 4 では、次世代コンソールで内部解像度を 4k の 55-60% かつ 60 fps を安定的に達成できるようになりました。

スケールダウン

フォートナイト はさまざまなプラットフォームでシッピングされていますが、Lumen をサポートしているのは最上位のプラットフォームのみです。しかし、ゲーム エクスペリエンスは、プラットフォームごとにアーティストが再ライティングする必要がないように可能な限り似せる必要があります。そうした事情から、「グローバル イルミネーション」の品質設定に従って環境光をスケーリングを行っています。

エピックと高
  • Lumen が有効。それにより、完全なグローバル イルミネーションを実現
  • Lumen スカイライト漏れが使用されていることから、暗い領域が真っ暗にはなっていない
  • 自動露出が有効になっており、室内でも適正露出
  • ローカル露出が有効

中程度
  • 大規模な AO では、Lumen ではなく距離フィールド アンビエント オクルージョンが有効
  • 小規模な AO では、スクリーン空間アンビエント オクルージョンが有効
  • 自動露出が無効

  • シャドウなしのスカイライト
  • スカイライトの強度は、「中」でより良く一致するように、r.SkylightIntensityMultiplier=0.7 で減少します。これは、スカイライトのシャドウイングの形式がないためです。

この記事で、フォートナイト バトルロイヤル チャプター 4 における Lumen の改善点と、Lumen を使用したクロスプラットフォーム ゲームでのシッピング方法に関する疑問点についてきちんとお答えできていれば幸いです。Unreal Engine を開発されている方なら、Unreal Engine 5.1 ですでにこれらの改善点の大部分にアクセス可能です。詳細については、「Lumen のドキュメント」をご覧ください。

    今すぐ Unreal Engine を入手しましょう!

    Unreal Engine は、世界で最もオープンで高度な制作ツールです。
    あらゆる機能とソース コード アクセスを完備している Unreal Engine を使用すれば、すぐに制作を開始できます。
    Unreal Engine 5.2 がリリースされました!
    ニュース
    5月11日

    Unreal Engine 5.2 がリリースされました!

    今回のリリースには、最もオープンで高度なリアルタイム 3D 制作ツールである UE5 の画期的なツールセットをさらに拡張する新機能と追加機能が備わっています。新機能についてご覧ください。 
    Unreal Engine 5.2 がリリースされました!
    ニュース

    Unreal Engine 5.2 がリリースされました!

    今回のリリースには、最もオープンで高度なリアルタイム 3D 制作ツールである UE5 の画期的なツールセットをさらに拡張する新機能と追加機能が備わっています。新機能についてご覧ください。 
    Unreal Engine 初心者向け学習イベント アンリアルクエスト ポータルページ公開!
    ニュース
    4月7日

    Unreal Engine 初心者向け学習イベント アンリアルクエスト ポータルページ公開!

    Unreal Engine 初心者向け学習イベント「アンリアルクエスト」にいつでも挑戦できちゃう!
    本ページでは歴代のクエスト振り返り記事をまとめています。アンリアルクエストに挑戦してUnreal Engineを学ぼう!
    Unreal Engine 初心者向け学習イベント アンリアルクエスト ポータルページ公開!
    ニュース

    Unreal Engine 初心者向け学習イベント アンリアルクエスト ポータルページ公開!

    Unreal Engine 初心者向け学習イベント「アンリアルクエスト」にいつでも挑戦できちゃう!
    本ページでは歴代のクエスト振り返り記事をまとめています。アンリアルクエストに挑戦してUnreal Engineを学ぼう!
    Unreal Engine 5 の仕事を探していますか?UE5 開発コミュニティでの採用情報をご覧ください!
    ニュース
    5月6日

    Unreal Engine 5 の仕事を探していますか?UE5 開発コミュニティでの採用情報をご覧ください!

    Unreal Engine 5 を使用しているスタジオと、募集中の採用情報をまとめました。
    Unreal Engine 5 の仕事を探していますか?UE5 開発コミュニティでの採用情報をご覧ください!
    ニュース

    Unreal Engine 5 の仕事を探していますか?UE5 開発コミュニティでの採用情報をご覧ください!

    Unreal Engine 5 を使用しているスタジオと、募集中の採用情報をまとめました。