レイトレーシング使用の前に
HD レンダーパイプライン (High Definition Render Pipeline、HDRP) には、Unity 2019.3 からのプレビューレイトレーシングサポートが含まれています。レイトレーシングを使うと、画面上にないデータにアクセスできます。例えば、位置データ、法線データ、またはライティングデータをリクエストして、このデータを使って従来のラスタライゼーション技法では概算が難しい演算を行います。
このドキュメントでは、以下について解説します。
ハードウェア要件
完全レイトレーシングハードウェアアクセラレーションは、以下の GPU で利用できます。
- NVIDIA GeForce 20 series:
- RTX 2060
- RTX 2060 Super
- RTX 2070
- RTX 2070 Super
- RTX 2080
- RTX 2080 Super
- RTX 2080 Ti
- NVIDIA TITAN RTX
- NVIDIA GeForce 30 series:
- RTX 3060
- RTX 3060Ti
- RTX 3070
- RTX 3080
- RTX 3090
- NVIDIA Quadro:
- RTX 3000 (laptop only)
- RTX 4000
- RTX 5000
- RTX 6000
- RTX 8000
NVIDIA は、前世代のグラフィックカードのいくつかにも、レイトレーシングフォールバックを提供します。
- NVIDIA GeForce GTX
- Turing generation: GTX 1660 Super, GTX 1660 Ti
- Pascal generation: GTX 1060 6GB, GTX 1070, GTX 1080, GTX 1080 Ti
- NVIDIA TITAN V
- NVIDIA Quadro: P4000, P5000, P6000, V100
コンピューターにこれらのグラフィックカードが含まれている場合は、Unity でレイトレーシングを実行できます。
Unity を開く前に、NVIDIA ドライバーを最新バージョンに更新し、Windows がバージョン 1809 以降であることを確認してください。
レイトレーシングを HDRP プロジェクトに統合する
HDRP プロジェクトでレイトレーシング機能を使う前に、HDRP プロジェクトがレイトレーシングをサポートするように設定する必要があります。HDRP は DirectX 12 API のみでレイトレーシングをサポートするため、DirectX 12 API でレンダリングしたときのみに、レイトレーシングは Unity Editor または Windows Unity Player で機能します。HDRP プロジェクトのデフォルトグラフィックス API を、DirectX 11 から DirectX 12 に変更する必要があります。
この方法は 2 つあります。
これらのいずれかを完了したら、最終設定 を行います。
Render Pipeline Wizard 設定
Render Pipeline Wizard を使って、HDRP プロジェクトのレイトレーシングの設定を行うことができます。
- Render Pipeline Wizard を開くには、Window > Render Pipeline へ移動し、HD Render Pipeline Wizard を選択します。
- HDRP + DXR タブを選択します。
- Fix All ボタンをクリックします。
- (任意) レイトレーシングエフェクトに必要な HDRP アセット機能を有効にします。
これで HDRP プロジェクトはレイトレーシングをサポートします。シーンにレイトレーシングを設定する方法については、最終設定 を参照してください。
手動設定
レイトレーシングを手動で設定するには、以下を実行する必要があります。
- HDRP プロジェクトが DirectX 12 を使うようにします。
- HDRP プロジェクトで静的バッチを無効にします。
- HDRP Asset でレイトレーシングを有効にし設定します。
- レイトレーシングのリソースが適切に割り当てられていることを確認します。
- (任意) HDRP Asset でレイトレーシングによるエフェクトを有効にします。
DirectX 12 へのアップグレード
- Project Settings ウィンドウを開き (メニュー: Edit > Project Settings)、Player タブを選択します。
- Other Settings を開き、Rendering セクションで Auto Graphics API for Windows を無効にします。これで Graphics APIs for Windows セクションが展開されます。
- Graphics APIs for Windows セクションで、プラス (+) ボタンをクリックし、Direct3d12 を選択します。
- Unity はデフォルトで Direct3d11 を使います。Unity が Direct3d12 を使うようにするには、Direct3d12 (実験的) をリストの一番上に移動します。
- 変更を適用するために、Unity Editor を再起動する必要がある場合があります。Editor の再起動を促すプロンプトが表示されたら、ウィンドウで Restart Editor をクリックします。
これで Unity Editor ウィンドウのタイトルバーに、このような <DX12> タグが含まれるはずです。
静的バッチの無効化
次に、静的バッチを無効にする必要があります。これは HDRP が Play Mode でレイトレーシングを使ったこの機能をサポートしないためです。この手順は以下の通りです。
- Project Settings ウィンドウを開き (メニュー: Edit > Project Settings)、Player タブを選択します。
- Other Settings を開き、Rendering セクションで Static Batching を無効にします。
HDRP Asset 設定
これで Unity は DirectX 12 で作動し、静的バッチ が無効になり、HDRP アセット でレイトレーシングが有効および設定されました。前のステップでは Unity がレイトレーシングをサポートするように設定しました。次のステップでは、HDRP Unity プロジェクトでレイトレーシングを有効にします。
- HDRP Asset を Project ウィンドウでクリックし、Inspector で表示します。
- Rendering セクションで Realtime Ray Tracing を有効にします。これは再コンパイルを作動させ、HDRP プロジェクトでレイトレーシングを利用できるようにします。
レイトレーシングリソース
HDRP にレイトレーシングリソースが適切に割り当てられているかを確認します。
- Project Settings ウィンドウを開き (メニュー: Edit > Project Settings)、HDRP Default Settings タブを選択します。
- Render Pipeline Resources Asset が Render Pipeline Resources フィールドに割り当てられていることを確認します。
(任意) HDRP Asset にレイトレーシングによるエフェクトを有効にする
HDRP はレイトレーシングを使って、特定のラスタライズされたエフェクトを置き換えます。プロジェクトでレイトレーシングエフェクトを使うためには、まずエフェクトのラスタライズされたバージョンを有効にしなければなりません。HDRP Asset を変更する必要のある 4 つのエフェクトは以下の通りです。
- Screen Space Shadows
- Screen Space Reflections
- Transparent Screen Space Reflections
- Screen Space Global Illumination
HDRP Unity プロジェクトで上記のエフェクトを有効にするには、
- HDRP Asset を Project ウィンドウでクリックし、Inspector で表示します。
- Lighting > Reflections へ移動し、Screen Space Reflection を有効にします。
- Screen Space Reflections を有効にしたら、Lighting > Reflections へ移動し Transparent Screen Space Reflection を有効にします。
- Lighting > Shadows へ移動し、Screen Space Shadows を有効にします。
- Lighting > Lighting へ移動し、Screen Space Global Illumination を有効にします。
これで HDRP プロジェクトは完全にレイトレーシングをサポートします。シーンにレイトレーシングを設定する方法については、最終設定 を参照してください。
最終設定
HDRP プロジェクトがレイトレーシングをサポートするようになったので、今度はシーン内で実際に使うための設定を行います。
フレーム設定
HDRP がシーン内の カメラ にレイトレーシングエフェクトを演算するためには、カメラがレイトレーシングが有効になっている フレーム設定 を使っていなければなりません。デフォルトですべてのカメラにレイトレーシングを有効するか、またはシーン何の特定のカメラにレイトレーシングを有効にできます。
デフォルトでレイトレーシングを有効にするには、
- Project Settings ウィンドウを開き (メニュー: Edit > Project Settings)、HDRP Default Settings タブを選択します。
- Default Frame Settings For ドロップダウンから Camera を選択します。
- Rendering セクションで Ray Tracing を有効にします。
特定のカメラにレイトレーシングを有効にするには、
- シーンまたはヒエラルキーでカメラをクリックし、Inspector で表示します。
- General セクションで Custom Frame Settings を有効にします。これでこの Camera 専用の Frame Settings が展開されます。
- Rendering セクションで Ray Tracing を有効にします。
ビルド設定
Unity Player でプロジェクトを制作するには、64 ビットアーキテクチャを使うビルドが必要になります。64 ビットを使うビルドの設定手順は以下の通りです。
- Build Settings ウィンドウを開きます (メニュー: File > Build Settings)。
- Architecture ドロップダウンで x86_64 を選択します。
シーン 検証
シーン内でレイトレーシングを使えるかを確認するために、HDRP にはシーンの各オブジェクトを検証するメニューオプションが含まれています。ゲームオブジェクトを正しく設定しないと、このプロセスが Console ウィンドウに警告を出します。使用するには、
- Edit > Rendering > Check Scene Content for HDRP Ray Tracing をクリックします。
- Console ウィンドウで (メニュー: Window > General > Console)、警告が出ていないかを確認します。
レイトレーシングとメッシュ
HDRP はレイトレーシングによるエフェクトをプロジェクトに統合する際に、シーン内の Meshes の扱い方を変変更します。
レイトレーシングを有効にすると、HDRP は自動的にレイトレーシング加速構造を作成します。この構造体は、Unity がシーン内の Meshes にレイトレーシングをリアルタイムで効率的に計算できるようにします。
その結果、レイトレーシングは以下の方法で、シーン内で Meshes がどのように表示されるかを変更できます。
- Mesh に HDRenderPipeline tag を持たないマテリアルが割り当てられている場合、HDRP は加速構造に追加せず、その結果メッシュにレイトレーシングによるエフェクトを適用しません。
- Mesh に Decal Material が割り当てられている場合、HDRP は加速構造に追加せず、Mesh はシーンに表示されません。
- Mesh に片面と両面のマテリアルが混ざっている場合、HDRP はこのメッシュに割り当てられたすべてのマテリアルを、両面としてフラグを立てます。
レイトレーシングエフェクトの概要
HDRP はレイトレーシングを使って、スクリーンスペースエフェクト、シャドウイング技法、および Mesh レンダリング技法のいくつかを置き換えます。
- レイトレーシングによるアンビエントオクルージョン は スクリーンスペースアンビエントオクルージョン をオフスクリーンデータを使える、より正確にレイトレーシングによるアンビエントオクルージョン技法に置き換えます。
- レイトレーシングによるコンタクトシャドウ は コンタクトシャドウ をオフスクリーンデータを使える、より正確にレイトレーシングによるコンタクトシャドウ技法に置き換えます。
- レイトレーシングによるグローバルイルミネーション は HDRP のライトプローブおよびライトマップにとって代わるものです。
- レイトレーシングによるリフレクション は、スクリーンスペースリフレクション をフスクリーンデータを使える、より正確にレイトレーシングによるリフレクションに置き換えます。
- レイトレーシングによるシャドウ は、ディレクショナル、ポイント、およびエリア ライト のシャドウマップを置き換えます。
- 再帰的レイトレーシング はメッシュのレンダリングパイプラインを置き換えます。この機能を使うメッシュは、リフレクションと屈折を再帰的に投影します。
- レイトレーシングによるサブサーフェス散乱 は サブサーフェス散乱 を、オフスクリーンデータを利用できる、より正確なレイトレーシングによるサブサーフェス散乱技法に置き換えます。
レイトレーシングモード
HDRP には特定のレイトレーシングによるエフェクトをどのように評価するかを定義する、レイトレーシングモードが 2 つあります。それらのモードは以下の通りです。
- Performance: このモードはリアルタイムアプリケーションをターゲットとします。このモードを選択する場合、レイトレーシングによるエフェクトには、パフォーマンスと品質のバランスを変更するプリセットが含まれます。
- Quality: このモードは、最高の品質を重視する技術デモとアプリケーションをターゲットとします。
選択するレイトレーシングモードによって、HDRP はレイトレーシングによるエフェクトに異なるプロパティーを展開する場合があります。
HDRP が使うレイトレーシングモードは、プロジェクトレベルまたはエフェクトレベルで変更することができます。プロジェクト全体に変更する場合は、
- HDRP Asset を Project ウィンドウでクリックし、Inspector で表示します。
- Rendering セクションで、Supported Ray Tracing Mode ドロップダウンからレイトレーシングモードを選択します。
Both を選択すると、レイトレーシングによるエフェクトそれぞれに、レイトレーシングモードを変更することができます。この手順は以下の通りです。
- シーンまたはヒエラルキービューで、レイトレーシングによるエフェクトを含む Volume コンポーネントを含むゲームオブジェクトを選択します。
- レイトレーシングによるエフェクトの Inspector で、Mode プロパティーを変更しエフェクトに使わせたいレイトレーシングモードを使うようにします。これは Inspector で利用可能なプロパティーを変更します。
レイトレーシングプロジェクト
上記のエフェクトすべてをふくむ小規模のレイトレーシングプロジェクトは、こちらにあります。 https://github.com/Unity-Technologies/SmallOfficeRayTracing このプロジェクトはレイトレーシングサポートを設定済みです。
制限
このセクションには、HDRP のレイトレーシング実装の制限に関する情報が含まれています。主にレイトレーシングによるレンダーパイプラインではサポートされず、ラスタライズされたレンダーパイプラインで HDRP がサポートする機能のリストになります。
レイトレーシングのサポートされない機能
現在、DX12 以外のプラットフォームにおけるレイトレーシングのサポートはありません。
Unity 2020.2 の HDRP レイトレーシングには、以下の制限があります。
- 頂点アニメーションはサポートしません。
- デカールはサポートしません。
- テッセレーションはサポートしません。
- ピクセルディスプレイスメントはサポートしません (パララックスオクルージョンマッピング、ハイトマップ、深度オフセット)。
- VFX および Terrain (地形) はサポートしません。 シャドウに正確なカリングを実行しません。レイトレーシングによるエフェクトでシャドウの欠損が見られる場合があります。
- MSAA はサポートしません。
- LODs のあるレンダラーに関しては、レイトレーシング加速構造には、ハイトレベル LOD のみを含み、LOD の低いものは無視します。
- Graphics.DrawMesh はサポートしません。
- リフレクションプローブ をレンダリングする際に、レイトレーシングはサポートされません。
- HDRP は 平行投影 をサポートしません。平行投影モードを有効にすると、Transparent Materials、ボリュメトリック、および平面リフレクションのレンダリングに問題が生じる場合があります。
サポートされないレイトレーシングのシェーダグラフノード
シェーダーグラフを使ってカスタムシェーダーを構築する際に、レイトレーシングと互換性のないノードがあります。そのため、それらは使用しないようにするか、またはレイトレーシングシェーダーノードを使って、代替動作を供給してください。以下は互換性のないノードのリストです。
- DDX, DDY および DDXY ノード
- View Space モード内の Inputs > Geometry にある、すべてのノード (Position、View Direction、Normal など)
- チェッカーボードノード
サポートされないパストレーシングの機能
サポートされないパストレーシングの機能に関する情報は、Path tracing limitations を参照してください。