CEDEC2020のセッションシリコンスタジオが発表した、リアルタイムレイトレーシング(以下、RTRT)とEnlighten(エンライトゥン)の組み合わせによるHybrid型グローバルイルミネーション(GI)。高品質なGIを少ない計算量で実現できる本手法は、ゲームをはじめとするインタラクティブコンテンツでの実用化が期待されている。本記事では、その詳細を解説する。

※本記事内の画像は全て開発中のものです。
※本記事は月刊『CGWORLD + digital video』vol. 267(2020年11月号)掲載の「リアルタイムレイトレーシングとEnlightenによるHybrid型GI」を再編集したものです。

TEXT_尾形美幸 / Miyuki Ogata(CGWORLD)

  • シリコンスタジオ
    本記事で紹介するEnlightenに加え、ポストエフェクトミドルウェアYEBIS、リアルタイムレンダリングエンジンMizuchiなど、高度なミドルウェアを開発。その提供先はゲーム業界だけに留まらず、CG映像・自動車・建築業界など広範囲にわたる。クリエイター職の派遣・紹介に特化した人材事業も展開。
    www.siliconstudio.co.jp

Enlighten 3.11では次世代コンソール機もサポート

EnlightenはイギリスのGeomericsが開発したリアルタイムGIミドルウェアで、2017年に開発・販売・サポート権などがシリコンスタジオに移管された。2020年9月にはEnlighten 3.11(SDK版・Unreal Engine 4版)がリリースされ、次世代コンソール機の正式サポートも始まった。近年では『State of Decay 2』(2018)、『GOD EATER 3』(2018)、『eFootball ウイニングイレブン 2020』(2019)などの開発に採用され、フォトリアルな間接光表現やライティングワークフローの効率化に貢献している。

▲【左】EnlightenによるGIを適用しない場合。穴から差し込む直接光が当たっている領域以外は、完全に真っ暗になっている/【右】EnlightenによるGIを適用した場合。光源から届く光が物体表面を反射していく様子をシミュレートしており、その結果、直接光が届かない領域にもやわらかい間接光が伝搬している。Enlightenは、このような間接光表現をリアルタイムに実行できる


そんなEnlightenの最新機能とRTRTを組み合わせたHybrid型GIの効果やパフォーマンスについて、CEDEC2020で発表した吉野 潤氏(リードエンジニア)と蘇 紹華氏(エンジニア) に話を聞いた。

▲【左】吉野 潤氏(リードエンジニア)/【右】蘇 紹華氏(エンジニア)


「Enlightenはラジオシティ法に基づいてGIを計算します。しかしラジオシティ法は計算負荷の高い手法なので、静的なジオメトリ情報は事前に計算し、最終的な光の伝搬のみリアルタイムに計算することで動的なGIを実現しています。われわれは前者をプリコンピュート、後者をランタイムと呼んでいます」(吉野氏)。プリコンピュートではCPU群による並列処理も活用しており、ランタイムはCPUで非同期に処理している。「ランタイムではクオリティとレイテンシがトレードオフになっており、パフォーマンス調整を柔軟に行えます。加えて、Enlightenはいかなるゲームエンジンにもインテグレート可能です」(蘇氏)。

インテグレーション時には、まずエディタ側でEnlighten向けのプロパティ設定を行い、ゲームエンジン側と必要情報をやり取りしながらプリコンピュートを実行。その結果をランタイム向けに変換する。ゲーム実行時には、ランタイムの結果がライトマップ・プローブ・環境マップ(以下、キューブマップ)などのテクスチャとして出力され、これらをシェーダからサンプリングすることでGIが適用される。

▲【左】橙色の領域はライトマップ、緑色の領域はプローブを表している。Unreal Engine 4(以下、UE4)版では、視覚的に確認できる上のようなデバッグビューが実装されており、設定内容を容易に検証できるようになっている/【右】ライティング解像度を表しており、緑:高解像度(約4m/px)橙:中解像度(約10m/px)紫:低解像度(約20m/px)となっている。前述のライトマップ、プローブも含め、Enlightenが必要とするプロパティ設定項目の一例だ

フォトリアルな間接光の変化をリアルタイムにアップデート

Hybrid型GIの解説に入る前に、EnlightenによるリアルタイムGIの導入メリットを整理しておこう。第1のメリットは、インゲームの時間や天候をシームレスに変化させつつ、それに伴うフォトリアルな間接光の変化も表現できる点だ。第2のメリットは、ライティングのトライ&エラーを気軽に行えるため、シーンのブラッシュアップのスピードが格段に向上する点だ。Enlightenを使用した場合、シーン作成後に前述のプリコンピュートを実行しておけば、ライトの配置・調整時のGIへの影響がリアルタイムにアップデートされる。一方で、非リアルタイムGI手法のベイク(陰影の焼き付け)を用いた場合には、ライト編集時の影響を確認できるまでに長い待ち時間が発生してしまう。

▲EnlightenによるリアルタイムGIのデモ映像。太陽の位置の変化に伴い、間接光による陰影がリアルタイムに変化している


▲Enlightenを使用した場合、プリコンピュート完了後は、ライト編集時のGIへの影響を即座に確認できる。なお、Enlighten 3.10(2019年11月リリース)では、大規模シーンのプリコンピュート時間を短縮するための最適化が行われた

Topic 1:レイトレーシングリフレクションとEnlightenの組み合わせ

さて、ここからは本題に入る。Enlightenの開発エンジニアは、RTRTに対する3つの取り組みを実施している。以降では、それらを順番に解説する。第1の取り組みは、レイトレーシングリフレクション(以下、RTリフレクション)とEnlightenの組み合わせだ。リフレクションは光源やカメラの向きに応じて反射するレイの方向が変わるため、ライトマップやプローブに結果を保存できない。そこで一番よく使われるのがキューブマップで、ベイクを使わずリアルタイムに更新する場合は、キューブマップのサイズを制限する必要がある。なお、グロッシーリフレクションもミップマップを使えば表現できる。Enlightenでは現在この手法を採用しており、キューブマップの更新をCPU側で行なっている。更新負荷は軽く、GPU側はCPU側で生成されたキューブマップをサンプリングするだけでリフレクションを表現できる。

▲【上】Enlightenによるリフレクション。光源の角度が変わると、【下】キューブマップの直接光と間接光がリアルタイムに更新される。以降で紹介するデモシーンの光源は、ムーバブルなディレクショナルライトとスカイライトのみで、ベイクされた間接光はない。つまり、全ての間接光がリアルタイムに更新される。本シーンはUE4をベースにつくってあるが、同じ技術をほかのゲームエンジンにも応用できる


一方、RTリフレクションはリアルタイムにシーン全体を更新できるため、画面外のジオメトリもリフレクションに反映される。精度の高い結果を生成できる点もメリットだ。ただし、グロッシーリフレクションの場合はレイを複数飛ばす必要があるため、パフォーマンスが低下し、ノイズが増える可能性がある。リフレクションにセカンドバウンスを追加すると処理が重くなるという問題もある。

▲RTリフレクションによる直接光だけを反映させた結果。画面右側の球体ほどグロッシーリフレクションの値が高くなっており、ノイズが目立つ

Enlightenのフォールバック機能によってパフォーマンスが向上

そんなRTリフレクションにEnlightenを組み合わせると、高いパフォーマンスでフォトリアルな結果を生成できるのに加え、前述の問題も解決できる。ラフネスが閾値を超えた場合、またはマックスバウンスを超えた場合に、Enlightenのキューブマップにフォールバックする(入れ替える)機能を追加することで、パフォーマンスを向上させつつ、ノイズを減らすことが可能となる。

▲RTリフレクションによる直接光に、Enlightenによる間接光を追加した結果。セカンドバウンスが計算されておらず、球体の隣接部分は黒くなっている


▲Enlightenのキューブマップにフォールバック機能を追加した結果。ラフネスの閾値を超えた右側の球体とセカンドバウンスの部分がEnlightenのキューブマップに入れ替えられている

パフォーマンスの向上を実現しつつ、ノイズを減らす

▲パフォーマンステストの結果。Enlightenのフォールバック機能によって、パフォーマンスが向上していることがわかる。なお、本テストでは、マックスバウンスを1、サンプリング数も1に設定。GPUはNVIDIAのGeForce RTX 2080 Tiを使用


©Silicon Studio Corp., all rights reserved. 

次ページ:
Topic 2:Ray-traced Enlighten Visibility

[[SplitPage]]

Topic 2:Ray-traced Enlighten Visibility

RTRTに対する第2の取り組みは、ビジビリティ(Visibility)だ。Enlightenのランタイムは、光源情報に加え、そのシャドウ情報も必要とする。Enlightenではあらかじめシーン内に数多くのサンプリングポイントを生成しており、これが影に入っている場合はビジビリティの値が0になる。この値が、シャドウ情報としてランタイムに提供される。正しいビジビリティを用いると、ライティング時のライトリークを防ぎ、自然な間接光を表現できる。

▲Ray-traced Enlighten Visibilityの図解。シーン内のサンプリングポイントから光源にシャドウレイを飛ばし、その結果をビジビリティに記録する

RT Enlighten Visibilityは全てのタイプの光源に対応

従来のEnlighten(SDK版)では、シャドウ情報はゲームエンジンの実装に任せ、レイキャスティング、シャドウマップのサンプリングなどを用いるのが一般的だった。新たに追加されるRay-traced Enlighten Visibilityでは、サンプリングポイントから光源にシャドウレイを飛ばし、その結果をビジビリティに記録する。本機能は理論上レイトレーシングをサポートした全てのゲームエンジンに適用でき、さらに全てのタイプの光源に対応できる。飛ばすレイはシャドウレイのみでデノイザーも必要ないため、かなり軽量で高いパフォーマンスの機能となっている。

▲Ray-traced Enlighten Visibilityのデモ映像。天井の窓の開閉によって光源の一部が遮断され、トンネルの奥に光が届きにくくなる様子が自然な間接光によって表現されている。本デモのサンプリングポイント数は最大4万で、GeForce RTX 2060を用いた場合の処理時間は0.04ms程度だった

Topic 3:レイトレーシングファイナルギャザーとEnlightenの組み合わせ

RTRTに対する第3の取り組みは、レイトレーシングファイナルギャザー(以下、RTファイナルギャザー)とEnlightenの組み合わせだ。一般的に間接光のレンダリングでは、スペキュラやリフレクションと、ディフューズを分けて処理する。後者はカメラの向きを変えても見た目が変わらないため、ライトマップやプローブに結果を保存することが多い。Enlightenでディフューズを処理する場合は、事前計算されたデータをベースに、シーン全体における光源からの光のバウンスをシミュレートし、バウンスした面にその結果を記録する。この結果がライトマップやプローブに保存され、レンダリング時にサンプリングすることで間接光が生成される。Enlightenによるライティングの主なメリットは、無限バウンスが得られること、安定した結果が得られること、GPU負荷が軽いことの3点だ。その反面、ディテールはライトマップピクセルの大きさに制限され、移動物体は事前計算に含まれないため、バウンスは計算できない。

▲Enlightenでのディフューズの処理方法の図解。【上】シーン全体におけるスポットライトによる直接光からの光のバウンスをシミュレートし、【下】バウンスした面にその結果を記録している


▲Enlightenによるディフューズ処理のデモ映像(ディフューズ以外も計算)


▲Enlightenによるディフューズ処理のデモ映像(ディフューズのみ計算)。間接光がリアルタイムに更新されているが、移動物体である青色の列車からのバウンスは計算されていない


一方で、RTファイナルギャザーでは画面上のピクセル(スクリーンピクセル)からレイを飛ばし、ヒットしたポイント(ギャザーポイント)のライティング情報をまとめる。実質はファーストバウンスのシミュレーションとも言える手法で、リアルタイムでのレンダリングが可能だ。ほかのGI手法と併用することで自然な間接光を表現できるため、シリコンスタジオでは、手始めにUnreal Engine 4(以下、UE4)のRTファイナルギャザーとEnlightenを組み合わせる手法を検証した。

▲RTファイナルギャザーでのディフューズの処理方法の図解。【上】スクリーンピクセルからギャザーポイントにレイを飛ばし、【中】そのギャザーポイントから光源にシャドウレイを飛ばしている。【中】では左上のポイントのみがレイのトレースに成功している。【下】最後に、ギャザーポイントで得られたライティング情報をスクリーンピクセルにまとめることで間接光の計算結果を得る


▲レイトレーシングファイナルギャザーによるディフューズ処理のデモ映像(ディフューズのみ計算)。青色の列車からのライトバウンスも計算されているが、ややノイジーな結果となっている


©Silicon Studio Corp., all rights reserved. 

次ページ:
RTファイナルギャザーとEnlightenの制限を相互補完し、パフォーマンスを最大化

[[SplitPage]]

RTファイナルギャザーとEnlightenの制限を相互補完し、パフォーマンスを最大化

前述したようにRTファイナルギャザーではスクリーンピクセルからギャザーポイントにレイを飛ばし、さらにそのギャザーポイントから光源にシャドウレイを飛ばす。この手法は光源に直接レイを飛ばすため、ランダムにレイを飛ばすよりも結果が収束しやすいというメリットがある。パストレーシングでは、よくNext Event Estimationと呼ばれている工程だ。その後は、ギャザーポイントで得られたライティング情報がスクリーンピクセルにまとめられる。RTファイナルギャザーによるライティングの主なメリットは、綺麗なファーストバウンスが得られること、移動物体にもバウンスすることの2点だ。その反面、レイの数は制限されているため、得られるのはファーストバウンスのみで、計算結果はノイジーだ。

つまり、EnlightenとRTファイナルギャザーには、それぞれ異なるメリットと制限があり、併用することで相互の制限を補完できるというわけだ。具体的に言うと、Enlightenの無限バウンスと、RTファイナルギャザーの綺麗なファーストバウンスや移動物体からのバウンスを組み合わせることで、より綺麗な間接光を生成できる。

▲EnlightenとRTファイナルギャザーの比較

Enlightenの間接光をギャザーポイントに追加

EnlightenとRTファイナルギャザーの併用時の方法は、Enlightenによる間接光の計算結果をスクリーンピクセルに追加する方法と、ギャザーポイントに追加する方法の2つがある。前者を用いる場合、Enlightenの結果には直接光のファーストバウンスが含まれているため、ギャザーポイントからのファーストバウンスと重複する。一方で前述したRTリフレクションの計算時にはEnlightenのファーストバウンスが必要なので、2つの結果(ファーストバウンスを含む結果と含まない結果)を用意しなければならない。今回はこの方法の採用は見送り、Enlightenの結果をギャザーポイントに追加する方法を採用した。こちらの場合は、Enlightenの結果をもう1回バウンスさせることになり、移動物体からのセカンドバウンスも得られる。ギャザーポイントで得られる結果が明るくなり、ノイズの減少も期待できる。その反面、追加によるパフォーマンスのダウンは軽微なものに抑えられている。

▲EnlightenとRTファイナルギャザーの併用方法の図解。Enlightenの結果をスクリーンピクセルに追加する方法と、ギャザーポイントに追加する方法の2つがあり、今回は後者を採用した


  • ◀Enlightenの結果をギャザーポイントに追加する場合、Enlightenの結果をさらにもう1回バウンスさせることになる

より明るい結果を得ることで、ノイズを減少

▲Enlightenの結果をレイトレーシングファイナルギャザーのスクリーンピクセルに追加した場合のデモ映像


▲Enlightenの結果をレイトレーシングファイナルギャザーのギャザーポイントに追加した場合のデモ映像。移動物体からのセカンドバウンスも取得できている。また、より明るい結果が得られており、ノイズが減少している


▲UE4 RTファイナルギャザーを用いたデモ画像


▲先のシーンのギャザーポイントにEnlightenの結果を追加したデモ画像


▲先のシーンにEnlightenのリフレクション(キューブマップ)を追加したデモ画像

Enlightenを追加しても、パフォーマンスのダウンは軽微

▲パフォーマンステストの結果。Enlightenを追加しても、パフォーマンスのダウンは軽微だとわかる。本デモのRTファイナルギャザーはハーフスクリーンサイズで、サンプリング数を4に設定。GPUはNVIDIAのGeForce RTX 2080 Tiを使用


本記事で紹介したRTRTに対する3つの取り組みはEnlighten 3.12に追加される予定だ。RTリフレクションとEnlightenの組み合わせ、並びにRay-traced Enlighten VisibilityはEarly accessとして、RTファイナルギャザーとEnlightenの組み合わせはExperimentとして提供されるとのことなので、ひき続きEnlightenのリリース動向に注目してほしい。

また、Enlightenの使用方法や技術詳細を解説したブログ、ならびにチュートリアル/ドキュメントも活用してほしい。

▲Enlighten ビギナー向けチュートリアル


©Silicon Studio Corp., all rights reserved. 

info.

  • Enlighten
    対応プラットフォーム
    ・Enlighten SDK
    Nintendo Switch™、PlayStation®4、Xbox One、Xbox Series X、Stadia™、Microsoft Windows、Android™、iOS

    ・Enlighten for Unreal Engine 4
    Nintendo Switch™、PlayStation®4、Xbox One、Xbox Series X、Stadia™、Microsoft Windows

    問:シリコンスタジオ(そのほかの次世代機への対応などについては、別途お問い合わせください)
    価格:要見積もり
    www.siliconstudio.co.jp/enlighten



  • 月刊CGWORLD + digital video vol.267(2020年11月号)
    第1特集:バーチャルヒューマン・エッセンシャルズ
    第2特集:ニュースタンダード特化型ツールの現在地
    定価:1,540円(税込)
    判型:A4ワイド
    総ページ数:128
    発売日:2020年10月10日
    cgworld.jp/magazine/cgw267.html