このプレゼンテーションは、単にシネマティックを展示するだけではありませんでした。インタラクティブな体験を提供するものでした。ユーザーは、さまざまなライティング設定を変更することによって、自動車の外見に対してリアルタイムに影響をコントロールできたのです。
「このプロジェクトには新基軸が多数投入されています。たとえば、複数のシャドウ エリア ライトとテクスチャ エリア ライトをともなった完全にレイトレーシングによる動的シーン、真のエリア ライト サンプリング、レイトレーシングによる半透明およびクリアコートのシェーディング モデル、リフレクション シャドウのノイズ除去、スクリーン空間におけるリアルタイム レイトレーシングによるグローバル イルミネーションが挙げられます」と François Antoine は言います。(François Antoine は、Epic Games で Director of Embedded Systems を務めています。本プロジェクトでは VFX のスーパーバイザーの役割を果たしました。)
「このプロジェクトは、2 つの要素から構成されています。シネマティックの「アトラクトモード」とインタラクティブなライティング スタジオの 2 つのです。これらは、いずれも、まったく同じ自動車のアセットとレンダリングの機能セットが使われています。実際、シネマティックは、Unreal Engine の Sequencer を利用して、インタラクティブなライティング スタジオ内でリアルタイムで映像化されます。」
この「Speed of Light」デモの基礎は、GDC 2018 で発表された「Reflections」デモ (「Star Wars」に登場する 3 人のキャラクターが高度な反射処理およびレイトレーシング処理されながら、Unreal Engine でリアルタイム レンダリングされている、ストーリー仕立ての動画) にあります。Unreal Engine によって、レイトレーシングのパフォーマンスと速度はそれ以来進歩を遂げています。それが、「Speed of Light」デモによって際立っています。
「Speed of Light」デモでは、「Reflections」デモで使用されていたものに比較して、より包括的な RTX の機能セットが使われています。そればかりでなく、 NVIDIA Quadro RTX のカードは 2 枚しか使われていません。 「Reflections」デモでは 4 枚の Volta GPU が必要だったのですから対照的です。この事実一つとってみても、将来版 Unreal Engine のための機能としてのリアルタイム レイトレーシングが NVIDIA のハードウェアによってどのくらい急速に進歩しているかが伺い知れます。
デモを構想する
「Speed of Light」デモのアイデアは、Antoine が Kim Libreri CTO と話し合っている時に生まれました。Unreal Engine で NVIDIA Quadro RTX カードを最大限活用するにはどうすべきか検討していたのです。「初めて Turing のレイトレーシング機能セットについて耳にしたとき、即座に自動車をフィーチャーしたプロジェクトが私たちの頭をよぎりました。車には、なめらかで、曲線的な反射 ― 業界用語で言うところの「液体ライン」 ― が必ず発生するのですから」(Antoine)
「RTX と Turing によって、ライティングにおける忠実度は極めて大きく進歩することになります。私たちは、リアルタイム業界にもたらされるこの進歩にともなって、ポルシェ Speedster のエッセンスをビジュアル的にどう表現すべきか考え始めました。そのとき、すぐに「スピード」と「ライト」という語が浮かんだのです。」
SIGGRAPH 2018 に集結したチームは、「Speed of Light」デモを構成するシネマティックとインタラクティブ部分を支える革新的なテクノロジーについて講演します。「シネマティックは、シームレスにインタラクティブ部分へと遷移します。エリアライトも自動車のアセットもポリゴン数もまったく変わりません。シネマティックとライティング スタジオにおける忠実度のレベルには特筆すべきものがありました。なぜなら、シーンが完全に動的であり、第一世代のハードウェアで動いていたのですから。」 (Antoine)
すべてを結集して
「Speed of Light」デモを制作するためには、立派なハードウェアを用意するだけで事足りるというわけではありません。チームは、ポルシェのコンセプトカー Speedster のための本物の CATIA CAD 造形ファイルから着手したのです。これらのファイルをまず Datasmith を使用して Unreal Engine に読み込ませます。Datasmith は Unreal Engine バージョン4.24 から Unreal Engine に同梱されているインポートツール スイートです。
最初にインポートしたときのポリゴン数は 4,000 万でした。これをチームは選択的にテッセレートすることによって、わずか 1,000 万以下まで減らしました。しかし、これが必要なステップではなかったことが判明します。ポリゴン数を 4 倍縮小させても、レンダリングのパフォーマンスには最小限の影響しかなかったからです。「NVIDIA RTX のレンダリング パフォーマンスは、ラスタライゼーションによるレンダリングほどにはポリゴン数に影響を受けないことが分かりました。大きなデータセットのビジュアライゼーションには正に好都合です。パフォーマンスへの影響は、ピクセルごとに行うレイキャストの数によってうまく推定できるのです。」 (Antoine)
デモに使われているマテリアルは多岐にわたります。コンセプトカーの内装も外装も完全に表現されており、反射するサーフェスと半透明なサーフェスを可能なかぎり正確に見えるようにするように注力しています。そのためチームは、現実世界を大いに参考にしました。本物のポルシェ車の部品を分解までして、内部構造や、ライトとの相互作用を正確に理解できるように努めたのです。
このアプローチは、Speedster のテールライトを分析するのに特に有効でした。「このようにして可能になった理解に加えて、レイトレーシングの物理的に一層正確な振る舞いにより、以前よりも格段にリアルなテールライトを作成することができました」 (Antoine)
さらにチームは、X-Rite 社のカラーマネージメントの専門家に、ポルシェの素材のサンプル (たとえば、皮革やペンキのサンプル) をスキャンし、そのデータをプロプライエタリな AxF フォーマットに落とし込んでもらいました (AxF フォーマットは、Unreal Engine でサポートされています) 。これらのデータによってハイレゾリューション テクスチャと法線マップが作成され、それらは、車のペンキのクリアコートの層や真っ白なペンキ、皮革のシートのためのテクスチャに利用されました。
「今回始めて AxF を試してみたのですが、マテリアルのルック デベロップメントの検証に役立つことが分かったばかりでなく、最終的なピクセルに直接寄与してくれました」 (Antoine)
「Speed of Light」におけるリアルタイム レンダリング
リアルタイム再生時に、「Speed of Light」デモではラスタライゼーションとレイトレーシングの両方のテクニックが使われます。まず、ラスターベースのパスが計算され、その後にレイトレーシングのパスが開始されます。「このようなアプローチにより、従来のラスター技術では達成が極めて困難である複雑なエフェクトがデモでは計算できます」と Epic Games でレイトレーシングのリード プログラマーを務める Juan Canada は言います。
レイトレーシングでは、有限数のレイが放たれて、それらのレイによって得られる光/色のサンプルがとられます。レイトレーシングしか使わないのであれば、フォトリアルな画像を作るためには、莫大な数のレイとサンプルが必要になり、レンダリングにかかる時間も非常に長くなります。ただし、レンダリング時間を短くするためにサンプル数を少なくし過ぎると、画像は点のようなものが表示されるようになったり、ムラができたりします。
レイとサンプルの数を最低限度に抑えながらもフォトリアルな画像を作成するために、レイトレーシング テクノロジーではデノイジング (ノイズ除去) が用いられています。これは、隣接するピクセルにおける色の不一致を緩和する技術のことなのですが、デノイザーは、ピクセルをブラーさせたり平均をとるだけではありません。多くのファクターを考慮する洗練されたアルゴリズムなのです。実際、速度とクオリティという相反する基準でレンダラーの有用度を判断する場合、それはレイトレーサーのクオリティによって左右されることも考えられるのです。
「Speed of Light」デモのために NVIDIA は、「Reflections」プロジェクトで使用したデノイザーに改良を加えようとしました。「デノイザーは、単一のサンプルを使って、光沢のあるマテリアルと粗いマテリアルの両方を扱えるようになりました。しばしば、数百、数千ものサンプルから得られる参照とかなり合致します」と Ignacio Llamas (NVIDIA でリアルタイム レンダリング ソフトウェアのシニア マネージャー) は言います。Llamas 氏は、このような高度なデノイジング テクノロジーを開発するにあたって、NVIDIA のソフトウェア エンジニアである Edward Liu に助けられたと述べています。
高速で効果的なデノイジングの例としては、自動車に反射している光の筋を挙げることができます。従来の RTX によるレンダリングでは、平面上にあるシンプルなテクスチャを使って、このエフェクトを作成していました。しかし、「Speed of Light」では、このような光の筋は、アニメートするテクスチャ化されたエリア ライトから生成されます。その際、レイトレースによるソフト シャドウが使われます。このようにして、リアルなフォトスタジオ環境で作成されるような光の筋が模倣されます。ライトは、自動車のマテリアルのディフューズ成分とスペキュラ成分両方に影響するため、一層リアルな振る舞いのライトが出来上がります。
「Speed of Light」デモでは、反射するサーフェスをリアルタイムにレンダリングする技術の改善が見られますが、それに加えて、リアルタイムのレイトレーシングによる半透明についても長足の進歩を遂げていることが伺い知れます。「仕組みとしては、カメラからプラマリーレイをトレースして、シーン内で最初の半透明ジオメトリだけが交差するようにし、そこから最初の不透明なジオメトリに行き当たるまでトレースします。これは、GBuffer をラスタライズすることによって計算されます。そしてさらに、レイに沿って見つかったあらゆる半透明のレイヤーそれぞれについて、反射レイとシャドウレイをトレースします。これらの反射レイはそれ自身、付加的な半透明レイヤーにぶつかる場合があり、その場合は付加的なシャドウレイもトレースすることになります」(Llamas 氏) 。現在のレイトレースによる半透明のテクノロジーは、現時点でデノイジングが含まれていませんが、レイトレースによる半透明の将来のイテレーションには計画されていることも Llamas 氏は教えてくれました。
スクリーン空間におけるレイトレースによる動的ディフューズ グローバル イルミネーションによって、より効率的に自動車をライティングできるようになりました。必要なライトの数は以前よりも少なくなり、かつてよりもニュアンスに富んだ振る舞いをライトにもたせることができるようになりました。
トレースのテクノロジーがこのように進歩したことによって、「Speed of Light」デモがリアルタイムに再生できるようになりました。「Quadro RTX 6000 使用時におけるシネマティック シークエンスの平均フレームレートは、1080p で 35~40 fps 程度です。これは、DGX Station 上で実現できるフレームレートよりも高い値を示しています」(Llamas 氏) 。
進歩するテクノロジー
リアルタイム レイトレーシングは、ほんの数年前なら実現不可能なものだと思われていました。しかし今はもう手の届くところにあります。レイトレーシング テクノロジーの進歩とともに、設定や使用方法もユーザーにとって簡単なものになるでしょう。反射プローブや、ライトのベイク、ラスターによるレンダリングを使用したリアリズムをフェイクする複雑なライティング方法などは必要なくなります。ライティングと反射によって、物理的プロパティが減り、回避策の必要もなくなるはずです。
「実は、みなさんが気がつかない革新的なテクノロジーがさらにもっと含まれています。そのテクノロジーが目立ってはいけません。ただただ映像をよりリアルに見せるだけでよいのです。」 (Antoine)
このような技術の進歩には、複数の要因がからんでいます。第一には、NVIDIA が、高速でレイトレーシングを実行できるグラフィックカードを製造したことが挙げられます。それによってハイクオリティな映像をリアルタイムに作成できるようになったのです。
第二には、DXR のテクノロジーと、レイトレーシングのアーキテクチャを素早く開発できる環境を提供してくれる API を挙げることができます。デノイジングのテクノロジーの進歩も見逃すことができません。
Epic Games は、リアルタイム レイトレーシングの未来に大いに期待しています。「この技術は、最高度にリアルな映像とエクスペリエンスを制作する際の経済学を一変させる革命です。物理的な正確さを優先させるべきなのか、極めて美麗なものを取るべきなのか、二者択一する必要はもうなくなります。Unreal Engine で両方とも同時に実現できることになるのですから」(Epic Games でシニア プロダクト マネージャーを務める Ken Pimentel)
リアルタイム レンダリング革命に参加しませんか?今日 Unreal Engine をダウンロードして、さっそくプロジェクトを Unreal Engine にインポートしてみましょう!