Seastack Bay デモにみるオーサリング

2016年4月21日

※一部の動画およびリンクコンテンツが閲覧できない可能性がございます。詳細はページ下部をご覧ください。

Seastack Bay デモ

Seastack Bay デモは、Unreal Engine 4とEnlightenで、PCおよびPlayStation4向けに制作されました。英ARM社 の一部門であるGeomericsと、「Hellblade」の開発スタジオであるNinja Theory社と共同で開発されました。Ninja Theory社には、環境、音声、キャラクターのアセットを提供していただきました。

このデモは、25平方キロメートルの世界に多様な環境が展開し、視野は6キロメートルに及びます。シーン内の高低差は100メートルを超え、これがレベルの表面積を大いに増加させます。1日の太陽の動きや天候を克明に表現したかったので、グローバルイルミネーションのあらゆる側面がダイナミックである必要がありました。対象プラットフォームで、リアルさを追求しつつ滑らかなライティングを実現するというのが一番大変でした。以下に、どのように実現したかを示します。

こちらのシーンは、ダイナミックな直接光と環境光で照らされており、サーフェス間で光がバウンスされません。渓谷の上部と底で光に差がないため、奥行きが不足していることに注目してください。また、影の色と温かい太陽光の色がバラバラになっています。

こちらは、ランタイム時にEnlightenで生成した間接反射光で同じシーンを照らしたものです。グローバルイルミネーションがあると、ライトは直接太陽光の一部から反対側の断崖に跳ね返り、底に向かってエネルギーが吸収されるにしたがって徐々に暗くなっていきます。Enlightenのように反射光を複数回計算すると、太陽光の一部とスカイライトだけでも非常に自然な感じで渓谷全体に光を当てられます。これらのライトは配置やプロパティを変えることができ、その影響はゲーム内でもライティングワークフローの一部としてでも、即座に確認することができます。

Enlightenは高品質とパフォーマンスの両方を叶えるライティングツールです。ライティングのパフォーマンスと必要なリソースについて議論する際には、Enlightenの“更新”時間について話す傾向があります。上質なユーザーエクスペリエンスを可能にするためには、ライティング品質とEnlightenの更新時間でバランスをとる必要があります。Enlightenはメインのレンダリングやゲームの更新とは関係なくCPUで実行される点は覚えておいてください。フレームレートに影響することはありません。

末筆の補遺でSeastack Bayの完全なパフォーマンスデータが見ていただけます。まずはすばらしいビジュアルをPCで22.8ミリ秒、PS4で67.1ミリ秒という更新時間で達成することを可能にした、Enlightenの機能の使い方について見ていきましょう。

ライティングモード

ライティングモードは、ライティングをシーンのジオメトリにどのように適用するかであり、コンテンツの制作者によって定義されます。画像4のデバッグビジュアリゼーションは、Enlightenが関与するすべてのジオメトリをオレンジで、プローブで照らされる小さなシーンの詳細は緑で示します。EnlightenをUE4で使用すると、どのアセットをどのモードで照らすかを簡単にマークするだけで設定することができます。レベル内のスタティックメッシュアクターのインスタンスをタグづけするか、もっと一般には合理的なデフォルトを直接アセットに設定するだけです。

ライトマップかプローブかなど、どのEnlightenライティングモードにするかを合理的に判断しなければなりません。あらゆるレベルで使うもので、間接ライティングにはどの解像度を使うか、も決めなくてはなりません。フルのプレコンピューティングは関係のあるレベル部分についてのみ実行します。ユーザーがEnlightenライティングモードを設定することで、何が間接ライティングに影響するかを選択できます。Seastack Bayデモの場合、パフォーマンスと品質のバランスをとることが重要でした。そのため規模の大きいレベルの要素のみ(画像5)、間接ライティングをフルで計算しました。その後Enlightenのピクセルごとのプローブライティングを使って小さなディテールにライトをあて直すことで(画像4)、品質を損なうことなく高いパフォーマンスを実現しました。

ライティングの品質

Enlightenの品質レベルは、アセットの規模やパフォーマンスに合わせて定義できます。Seastack Bayの場合、出力のピクセルサイズ(間接ライティングの解像度)を最適化して、アセットの規模にあった品質とパフォーマンスになるようバランスを取りました。格子柄部分は、プレコンピューティングされたジオメトリ上での間接ライティングの解像度を示します。プレイヤーに近いジオメトリには4メートル/ピクセルを使いました。これは中程度の品質です。より忠実に、より高いパフォーマンスを求めるのであれば、そのレベルにある関連スタティックメッシュのインスタンスを切り替えるだけです。紫の「背景」設定を使っている山や、プレイヤーから離れたレベルのパーツはオレンジ色の「低」レベルになっています。

ライティングモードとライティング品質の設定は、滑らかな間接ライティングを実現するためにとても重要です。これらを設定する際は、シーンの中でライトをどれくらい速く動かしたいかを念頭においてください。ライトがスタティックであると、間接ライティングのCPUコストは最小限で済みます。シーンの大きな部分に影響するライトを素早く動かしたいとなると、スムーズに更新させるにはCPUバジェットをかなり用意しなければなりません。昼と夜がゆるやかに切り替わる場合は小さいバジェットで収まります。Enlightenを使えば、シーンの中で動く部分のライトだけに集中できます。

Seastack Bayでは、昼と夜がゆるやかに切り替わる部分と、プレイヤーのフラッシュライトや山火事など光が速く変わる場合の両方を見せています。Enlightenバジェットを超えると、ゲームの主要レンダリングの裏側で間接ライティングの動きがぎこちなくなります。これを解決するには、品質とライティングモードの設定を見なおすか、CPUバジェットを増やすしかありません。

ライトトランスポートのプレコンピュート

次のステップでは、規模の大きなレベルのアーキテクチャをオフラインで計算します。Seastack Bayデモは25平方キロメートルの広さがあり、すべての関係するシーンのジオメトリに10を越える数のノードが分散処理して40分かかりました。

画像8では、バウンスしたライティングをブロックや透過させる際に重要なレベルにおける、大規模な要素を示しています。これは画像5におけるオレンジのジオメトリに対応します。これらのメッシュの形状や配置を変更するには、正しいライティング結果を得るために再度プレコンピュートを実行する必要があります。

ここで、Enlightenライティングを画像4におけるディテールの緑色オブジェクトに追加しています。プレコンピューティングへの寄与はそれほど大きくありませんが、Enlightenの間接ライティングを受け取り、シームレスに統合します。こうしたプレコンピューティングされないオブジェクトのパラメーターを配置、削除または繰り返し、最終的なライティングがどのようになるのかを即座に確認することができます。Enlightenは、DFAOやSSAOなどの既存のシャドウイング技術を取り入れています。これらの技術を活用してシャドウイングを向上させていくことができます。

Enlightenのプレコンピューティング処理により3つの出力が得られます。ダイナミックライトマップは、上記で説明しました。次は球面調和ライトプローブと動的にリフレクションがキャプチャーされるキューブマップです。これらにより、ライトのパラメーターを変更し、あらゆる動的なライトのタイプを変え、マテリアルの色を微調整することができます。

ライトプローブ

ライトプローブはライト伝送のプレコンピューティングに含まれます。この技術は、キャラクター、乗り物、その他すべての動くもののダイナミックなジオメトリに光を当てるために使います。静的なジオメトリの最適化にも使われます。

ユーザーは、動くオブジェクトが存在する任意のエリアを示します。すると最適なパフォーマンスを得られるようプローブサンプルのポイントが適切に配置されます。

キューブマップ

キューブマップは、物理ベースシェーディングモデルにマテリアルを正しく応答させるために重要です。これらはUE4の既存のワークフローでユーザーによりレベル内に配置され、Enlightenがプレコンピュートデータを使用してリアルタイムに更新します。

リフレクションの見た目の一貫性を保つため、ライティング条件が変わったときに更新する必要があります。バウンスのライティング情報をプレコンピューティングジオメトリからリアルタイムに獲得し、設定に従ってそのデータをシーンのマテリアルに再適用します。

これにより、リアリティのあるマテリアルのリフレクションを維持しつつ、スクリーン内外の両方においてダイナミックライティングの変化を作り出すことができます。Seastack Bayのキューブマップの解像度は32x32ピクセルで、最適なパフォーマンスを得られ、マテリアルのほとんどは粗さが中程度から高いものだったために見た目も問題なく機能します。

まとめ

グローバルイルミネーションが屋外の大きなシーンにどのような恩恵をもたらすのか、それをUnreal Engine 4とEnlightenで、シーンの品質とパフォーマンスを正確に制御しつつどのように実現するのかをみてみました。

Seastack Bayデモのダイナミックグローバルイルミネーションを例に、ユーザーが入力しなければならない内容、プレコンピューティング処理、および実行時にEnlightenにより使用される出力の概要をおさらいしました。

Enlightenがゲーム開発にどのように貢献できるのかについての詳細は、Enlightenのウェブサイトを参照されるか評価版をお問い合わせください。

ライトプローブやダイナミックリフレクション技術についてもっと知りたい方は、引き続きブログをご覧ください。

補遺: Seastack Bayパフォーマンスデータ

  • インテグレータは、特定のEnlighten出力が更新されるレートを選択します。距離のあるジオメトリは頻度を低くすることができます。Seastack Bayデモの制作チームは通常、レンダリングフレームごとに1回Enlighten出力データを更新しますが、これは非同期タスクであり、ビジュアル品質に影響することなく複数のフレーム間に広げることも可能です。
  • 更新のコストは、どのライティングが変化するかによります。
  • これらのデータは1スレッドでの実行中にキャプチャーされました。

シーンの複雑さ:

  • 各面32x32ピクセルの解像度のリフレクションキャプチャーが82個(全部で16K)
  • およそ1立方メートルにつき1つ、合計で125Kのプローブ
  • ライトマップのピクセルは合計で300K、ライトマップの解像度は最高で1平方メートルあたり4ピクセル

パフォーマンスデータ:

ハードウェア:

i7-4720HQ 2.6 GHz

プレコンピューティング時間:

40 minutes distributed (on 10 machines)
3 hours undistributed (on a single laptop)

by Geomerics, an ARM company

※ この記事は英語から翻訳されました。

※Geomerics社および関連ウェブサイトの閉鎖により、2017年5月以前の投稿の動画およびリンクコンテンツが閲覧できない可能性がございます。内容についてご質問などございましたら、お問合せフォームよりお気軽にお問い合わせください。

Enlightenのお問い合わせについて

メールでのお問い合わせ

お問い合わせフォームへ

お電話でのお問い合わせ

TEL 03-5488-7481(営業直通)

平日 9:30~17:30

go to top Enlighten