HD レンダーパイプライン(HDRP)のバージョン 7.2.0 のパッケージとともに、リアルタイムレイトレーシングのプレビュー版をお届けします。
HDRP は、高精細でフォトリアリスティックなビジュアルを作成するために使用されます。HDRP は、2019.3 のパッケージバージョン 7.2.0 と Unity バージョン 2019.3.2f1(リアルタイムレイトレーシングに必要)からプレビュー版ではなくなります。HDRP についての詳細はこちらの記事で確認できますが、本記事では特に HDRP が提供するレイトレーシング機能に焦点を当てていきます。
HDRP は物理ベースのレンダリングルールに従いますが、ラスタライズパイプラインの性質上、ライティング処理には限界があります。リアルタイムのレイトレーシングは、HDRP で使用されているスクリーンスペース近似に関連した可視性の問題がないため、より高い視覚的忠実度を実現することができます。また、ライティングのための事前ベイキング手順への依存を避けることができるので、アーティストのワークフローが改善します。
HDRP では、レイトレーシングには 2 つの異なる用途があります。
ハイブリッドパイプラインはリアルタイムアプリケーションをターゲットにしています。これは標準的なラスタライズ技術、特に HDRP パイプラインに依存していますが、様々なエフェクトをレイトレーシングバージョンに置き換えることができます。レイトレーシングは、ラスタライズアプローチに伴うスクリーンスペースの近似問題やその他の解決が困難な問題に悩まされることがないため、最終的な画像品質が向上します。
レイトレーシングをサポートするエフェクトには、HDRP で対応するレイトレーシングエフェクトの設定があります。これは、既存のエフェクトのレイトレーシングフラグを使って制御するか、または専用の新しいボリューム設定を使って制御します。以下のセクションでは、HDRP で利用可能なレイトレーシングエフェクトの概要を説明します。これらのエフェクトは、Lit.shader、Unlit.shader、LayeredLit.shader、および Unlit、Lit、Fabric の Shader Graph バージョンと互換性があります。
HDRP は反射のためのいくつかのオプションを提供しています。スクリーン空間反射、リフレクションプローブ、平面反射、空の反射です。レイトレースによる反射は、より高いビジュアル忠実度を持つ新しい選択肢をこのリストに追加しました。これは、スクリーンスペース反射ボリュームコンポーネントからアクセスできます。
Unity のライトマッパーを使用すると、ライトマップまたはライトプローブを作成して、シーンがオブジェクトに作成した間接的な拡散照明を保存することができます。これにより生成されるビジュアルは非常に魅力的ですが、ベイキングステップが必要となり、静的な照明の作成にしか使用できません。レイトレースによるグローバルイルミネーションでは、グローバルイルミネーションのボリュームコンポーネントと一緒に使用することで、ベイクされたライティングを置き換える新しいオプションを提供しています。
スクリーンスペースアンビエントオクルージョン(SSAO)は、シーン内の間接照明の複雑さをシミュレートするための素晴らしいトリックです。SSAO は強力な結果をもたらしますが、スクリーン上で利用可能なデータに完全に依存しているため、視覚的な制限があります。しかしそれは、レイトレーシングを導入したバージョン、すなわちレイトレースによるアンビエントオクルージョン(Ray Traced Ambient Occlusion)を使うことで改善することが可能です。この機能は、Ambient Occlusion ボリュームコンポーネントで利用できます。
レイトレースによるシャドウは、HDRP で通常のシャドウを置き換えることができます。この設定にはいくつかの利点があります:シャドウマップの解像度やバイアスに関連する問題を回避できることに加えて、レイトレースによるシャドウではシャドウの半影(ポイント、スポット、ディレクショナル)をコントロールでき、色付き(ディレクショナル)や半透明のシャドウ(ポイントとスポット)をサポートすることもできます。また、長方形のライトによるビューに依存したシャドウもサポートされています。これらのオプションはライト自体で利用できます。
シャドウマップでは、低解像度のレンダリングターゲットや様々なバイアスの問題により、オブジェクトと遮蔽物の接触などの詳細を捉えることが難しい場合があります。HDRP は、シャドウマップの解像度を上げずにこの状況を改善するオプションとして、コンタクトシャドウを提供しています。コンタクトシャドウは、デプスバッファのレイマーチングに依存しているため、スクリーンスペースのアーティファクトが表示されることがあります。代わりにレイトレースによるコンタクトシャドウを使用することで、これらのアーティファクトの出現を回避することができます。このオプションはライト自体で利用できます。
何層にも重なった屈折性のある透明なマテリアルのレンダリングは、ラスタライズパイプラインで行うにはトリッキーです。HDRP は、単一の屈折インターフェースのオプションしか提供しておらず、レイトレーシングはそれを行う正確な方法を提供しています。再帰レンダリングボリュームコンポーネントは、透明なオブジェクトに対して複数の反射と屈折を実行することを可能にします。これには、オブジェクトのマテリアルがレンダリングパスの レイトレーシング設定を使用している必要があります。
半透明のサーフェスレンダリングは非常に複雑な問題ですが、HDRP では部分的にしか解決されていません。ボリュームコンポーネントのサブサーフェススキャッタリングでは、この効果をシミュレートするためにレイトレーシングを有効にすることができます。
リアルタイムのレイトレーシングでは GPU の使用量が非常に多くなります。各レイには、アプリケーションの最終的なフレームレートへの影響を考慮すべきレベルのコストがかかります。現在のハードウェアの状態では、これらすべてのレイトレーシング効果を同時に有効にすると、フレームレートが遅くなります。どのエフェクトを有効にするかは慎重に選択することをお勧めします。特にゲームでは、極端に長いフレーム時間を避けるために、一度に 1 つまたは 2 つのエフェクトのみを有効にすることをお勧めします。
HDRP では、多くのレイトレーシングエフェクトに 2 つのモードがあります。Quality と Performance です。
選択したモードに応じて、追加のオプションがあります。Quality は通常、照明効果(反射やグローバルイルミネーションなど)のための複数のバウンスオプションを可能にし、シェーディングモデルでの近似の使用も控えます。これらの理由から、この設定はゲームにはお勧めできません。Performance は、ゲームのフレームレートをターゲットにして、複雑な最適化を目に見えない形で適用する場合に使用するモードです。パフォーマンス最適化の詳細については、SIGGRAPH 2019 での講演「Leveraging Real-time Ray Tracing To Build A Hybrid Game Engine」を参照してください。エフェクトの中には、再帰レンダリングエフェクトのように Quality モードしかサポートしていないため、モード設定の選択肢がないものもあります。
レイトレースによるグローバルイルミネーションや再帰レンダリングはかなり処理が重いので、高フレームレートをターゲットにする場合にはお勧めできません。リファレンスのためのスクリーンショットを生成するのに向いています。また、レイトレースによるサブサーフェススキャッタリング機能はコストがすぐに上昇するので、無駄の無いように使用する必要があります。
ゲームでは、Performance モードを使い、レイトレースによるエフェクトをシャドウ、コンタクトシャドウ、アンビエントオクルージョン、反射に限定することをお勧めします。その他のエフェクトは、使用可能な場合、Performance モードでゲーム以外のインタラクティブなアプリケー ションに使用できますが、パフォーマンスモードの設定がないエフェクトは、リアルタイム性を維持するために、 控えめに使用するべきでしょう。
パフォーマンスを向上させるためのもう 1 つのオプションは、レイトレーシングエフェクトの実行中に発生する作業量を減らすことです。シェーダーグラフには、レイトレーシング専用のノードが用意されており、レイトレーシングでレンダリングする際にマテリアルのコストを下げることができます。
プログレッシブパストレーサーパイプラインは、高品質の画像レンダリングをターゲットにしており、多くの場合、インタラクティブなアプリケーションで使用されます。ハイブリッドパイプラインとは異なり、シェーディングのためにラスタライズパイプラインに依存しませんが、ポストプロセッシングではラスタライズパイプラインに依存します。このモードでのライティングは非常に正確で、映画業界で製作される水準に近い絵を作ることができますが、処理にはある程度の時間が必要です。そのため、この方法では、画像が最終的な結果に収束するまでの数フレームの間、ノイズの多い画像を生成します。
パストレーシングボリュームコンポーネントが利用可能で、有効にすると、HDRP 内の他のレイトレーシングや通常のパイプライン効果を置き換えることができます。これは、比較用のリファレンスを作成するのにも便利です。
パストレーシングを使ったフレームのプログレッシブレンダリング
画像が完全に収束した後の最終結果
HDRP 7.2.0 のレイトレーシングはプレビュー版です。これは、Unity 2019.3.2f1 のプレビュー版にある DX12 と DXR の低レベル API に依存しているため、いくつかの機能が欠けています。プレビュー版のレイトレーシングは、一部の機能、ユーザーインターフェース、パフォーマンス、ツール、データフォーマットが新しいバージョンで変更される可能性があり、データの移行が保証されていないことを意味します。本番環境でプレビュー機能を使用することはお勧めできません。
Unity 2019.3 の HDRP レイトレーシングには以下の制限があります。
完全なレイトレーシングハードウェアアクセラレーションは、以下のGPUで利用可能です。
NVIDIA は、一部の前世代のグラフィックスカードにもレイトレーシングフォールバックを提供しています。
お使いのコンピューターが上記のグラフィックカードを搭載している場合、Unity でレイトレーシングを実行することができます。Unity を開く前に、NVIDIA ドライバを最新バージョンにアップデートしてください。最適な作成体験のためにNVIDIA Quadro または Studio ドライバーを使用し、Windows のバージョンが 1809 以上であることを確認してください。
HDRPレイトレーシングを始めるにあたっては、こちらの入門用ドキュメンテーションをご覧ください。このドキュメントには、この記事で触れたすべてのレイトレーシング機能の詳細な説明が含まれています。
HDRP でレイトレーシングを始めるには、SmallOfficeRayTracing というサンプルプロジェクトに触れてみるのが一番簡単で良い方法です。レイトレーシング向けの設定がすでに完了しており、エフェクトも適切に設定された状態で有効化されています。プロジェクトはこのレポジトリで入手できます。
サンプルプロジェクトには 3 つのシーンがあり、これらのシーンはリアルタイムレイトレーシングの 3 つの異なるユースケースを示しています。
RayTracingPerformance シーン
このシーンでは、パフォーマンスの良さ(Nvidia 2080 で約 60fps)を念頭に置いて、数個のレイトレーシングエフェクトが有効にされています。以下のエフェクトが有効になっています。
RayTracingQuality シーン
このシーンには、RayTracingPerformance シーンと同じエフェクトに、1 つだけ追加のエフェクトとして、再帰レンダリングが含まれています。これらのエフェクトは Quality モード(このモードが使用可能な場合)で設定されており、これにより反射のためのバウンス数が増加します。
RayTracingPathTracing シーン
このシーンは、プログレッシブパストレーサーを使ってレンダリングされるように設定されています。
新しいプロジェクトをゼロから始める手助けとなるよう、レイトレーシングの設定を正しく行うためのHDRP ウィザードを提供しています。このウィザードは、HDRP + DXRタブの設定を検証し、正しくない場合は修正することができます。
ウィザードを使わず、レイトレーシングプロジェクトを手動で設定する場合は、Unity のドキュメンテーションを参照してください。
リアルタイムレイトレーシングについては、以下の機能をサポートするための開発を進めています。
Unity 2020.1 では、スキニング、ブレンドシェイプ、Alembic 変形がサポートされる予定です。
今日からプロジェクトで HDRP レイトレーシングを利用することができます。しかし、この機能はまだ本番環境での利用には対応していないことを覚えておいてください。また、Unite、SIGGRAPH、GDC などのイベントでの Unity チームによるプレゼンテーションや、Unity ブログの記事「現実 vs イリュージョン」や、「 レイトレーシングがユーザーにもたらす価値」からも有益な情報が得られます。SIGGRAPH で発表された初心者向けのプレゼンテーションも利用できますし、もっと深く掘り下げて HDRP レイトレーシングのアーキテクチャについて学びたい場合は、講演「Leveraging Ray Tracing Hardware Acceleration In The Unity Game Engine」が良い情報源となると思います。
私たちのチームはまだ立ち上がったばかりで、開発はこれからも続いていきます。HDRP RayTracing フォーラムで、あなたの経験についてフィードバックを共有してください!
Is this article helpful for you?
Thank you for your feedback!