HDRPでレイトレーシングを始める
Getting started with ray tracing
HDRPはUnity 2019.3からレイトレーシングサポートのプレビューを含んでいる。レイトレーシングとはスクリーンに表示されていないデータにアクセスできる機能。例えば、座標データや法線データ、またライティングのデータといったものをリクエストするのに利用でき、古典的なラスタライズ技術ではたいへんだった計算に使えるようになる。
映像制作で広くレイトレーシングが使われていた長い間、リソースはオフラインレンダリングでのみ使われてきた。今や、最近のGPUハードウェアの発達により、レイトレーシングエフェクトをリアルタイムで使用できる。
このドキュメントでは、以下に示す範囲をカバーする:
Hardware requirements(要求されるハードウェア)
Integrate ray tracing into your HDRP Project(HDRPプロジェクトにレイトレーシングを統合する方法)
HDRP effects that use ray tracing(レイトレーシングを使うHDRPエフェクト)
トラブった時のための訳者メモ
RTX20x0を積んでるマシンならベストだけどGTX10x0でも良いっぽい
Windows10が最新にアップデートされていれば良さそう。開発者プレビューじゃなくていい
Unity2019.3か2020の最新を入れる
GeForceドライバをアップデートして最新にしておく
Windows SDKの一番上のやつをインストールしておく
ここまでやっておけばウィザードのFix Allでいけるハズ。SDK入れてないとエディタがクラッシュするっぽい
Hardware requirements
レイトレーシングハードウェアアクセラレーションは、特定のグラフィックカードでのみ有効。フルサポートされているグラフィックカードを以下に示す:
NVIDIA Volta (Titan X)
NVIDIA Turing (RTX206、2070、2080とそれらのTiシリーズ)
いくつかの前世代グラフィックカードでNVIDIAはレイトレーシングのフォールバックを提供している:
NVIDIA Pascal (GTX1060、1070、1080とそれらのTiシリーズ)
もしコンピュータにこれらいずれかひとつのグラフィックカードが搭載されているなら、Unityでレイトレーシングが動作する。
Unityを開く前にNVIDIAドライバーが最新バージョンであることを確認し、またWindowsバージョンが1809以降であることを確かめること。
Integrating ray tracing into your HDRP Project
HDRPプロジェクトでレイトレーシング機能を使い始める前に、プロジェクトをレイトレーシングサポートにセットアップする必要がある。HDRPはDirectX12のAPIを使ったレイトレーシングのみサポートし、DirectX12でレンダリングするためUnityエディタかWindows上でのUnityプレイヤーでしか動作しない。HDRPプロジェクトのデフォルトグラフィックAPIをDirectX11からDirectX12に変更する必要がある。
これには2通りのやり方がある:
Render Pipeline Wizard(レンダーパイプラインウィザード)を使う
Manual setup(手動でセットアップする)
Render Pipeline Wizard setup
Render Pipeline Wizard(レンダーパイプラインウィザード)を使って、HDRPプロジェクトでレイトレーシングをセットアップできる。
1.メニューWindow > Render PipelineからHD Render Pipeline Wizardを選択してRender Pipeline Wizard(レンダーパイプラインウィザード)を開く。
2.タブHDRP + DXRを選択する。
3.Fix Allボタンをクリックする。
これでHDRPプロジェクトがレイトレーシングをサポートするようになる。シーンにレイトレーシングをセットアップするより詳しい情報は、Final setupを参照。 Manual setup
レイトレーシングを手動でセットアップするには、以下が必要となる:
1.HDRPプロジェクトの設定をDirectX12に切り替える。
2.HDRPプロジェクトのスタティックバッチングを無効化する。
3.HDRPアセットでレイトレーシングを有効化し設定する。
4.レイトレーシングリソースが正しく割り当てられていることを確認する。
5.レイトレーシングを有効化するローカルのHDRP設定パッケージがあることを確認する。
6.HDPRアセットでスクリーンスペースシャドウとスクリーンスペースリフレクションを有効化する。
Upgrading to DirectX 12
1.メニューEdit > Project SettingsからProject Settingsウィンドウを開き、Playerタブを選ぶ。
2.折り畳みのOther Settingsを選び、RenderingのセクションでAuto Graphics API for Windowsを無効にする(チェックを外す)。これでGraphics APIs for Windowsが活性化される。
3.Graphics APIs for Windowsで「+」ボタンをクリックし、Direct3d12を選択する。
4.UnityはDirect3d11をデフォルトで使用する。UnityでDirect3d12を使うにはDirect3d12 (Experimental)をリストのトップに移動する。
5.変更を適用する。
Unityエディタのタイトルバーにこのタグが含まれるようになる。
Disabling static batching
次に、HDRPレイトレーシングはプレイモードでサポートしていないため、スタティックバッチングを無効化する必要がある。これをやるには以下の手順を行う:
1.メニューEdit > Project SettingsからProject Settingsウィンドウを開き、Playerタブを選ぶ。
2.折り畳みのOther Settingsを選び、RenderingのセクションでStatic Batchingを無効にする(チェックを外す)。
HDRP Asset configuration
これでUnityはDirectX12で動いていて、スタティックバッチングは止まり、HDRPアセットからレイトレーシングを有効にして設定できるようになった。ここまでのステップでUnityをレイトレーシング対応に設定を行った。これ以降のステップではUnityのHDRPプロジェクトで有効化していく。
1.プロジェクトウィンドウでHDRPアセット(HDRenderPipelineAsset)をクリックし、インスペクターで確認する。
2.Renderingのセクションでリアルタイムレイトレーシングを有効にする(Realtime Raytracing (Preview)にチェックをつける)。リコンパイルが走り、HDRPプロジェクトでレイトレーシングが有効になる。
3.これでアプリケーションにレイトレーシングを合わせるように設定できるようになった。Ray Tracing Tierのドロップダウンをクリックし、ユースケースにあわせたタイヤーを選択する。下の表でそれぞれのタイヤーがサポートする内容を参照すること。
HDRP Asset Tier
Tier 1
性能と品質のバランスをとっている。このタイヤーはゲームや高フレームレートのアプリケーションで使用する。このタイヤーではライティングで複数回の反射をサポートせず、再帰的ではないエフェクトのみ使用できる。
Tier 2
タイヤー1よりもかなりリソースが必要なレイトレーシング実装。このタイヤーでは高品質なイメージのエフェクトが使え、再帰的エフェクトもサポートしている。またパストレーサーも有効である。パストレーサーはカメラからレイを飛ばし、反射または屈折のサーフェスに当たるまでトレースする。そしてサーフェスの性質に応じてレイの向きを変え、光源に届くまで再帰的に処理を行う。カメラからライトまでの一連のレイが「パス」を形作る。これはHDRPで最もリソースを消費するレイトレーシング手法である。このタイヤーは自動車産業、製造、グラフィックのデモ用途で使用する。
Ray tracing resources
HDRPのプロパティがレイトレーシングリソース向けに正しくアサインされているかを確認するには以下の手順を行う。
1.メニューEdit > Project SettingsからProject Settingsウィンドウを開き、HDRP Default Settingsタブを選ぶ。
2.Render Pipeline Resources AssetがRender Pipeline Resources欄に割り当てられていることを確認する。
Local HDRP config and ShaderConfig macro validation
HDRPは別々のパッケージでいくつかの機能をコントロールする。HDRPの特定の設定を、HDRPパッケージ自体を変更せずに使うことができる。はじめに、プロジェクトでこのパッケージのローカルコピーを作り、それを示すmanifest.jsonファイルを変更する。これをやる方法については、HDRP Configドキュメントを参照。また、HDRPでレイトレーシングを有効にするには、 ShaderConfig.cs.hlslファイルにあるマクロの値を変更する。 Packages > High Definition RP Config > Runtime > ShaderConfig.cs.hlslを開き、SHADEROPTIONS_RAYTRACINGマクロに1をセットする。
Enable Screen Space Shadows and Screen Space Reflections in your HDRP Asset
HDRPはレイトレーシングを使って、いくつかのラスタライズのエフェクト機能を置き換えている。プロジェクトでレイトレーシングのエフェクトを使うには、最初はラスタライズのバージョンでエフェクトを有効にしなければならない。HDRP Assetで必要となるふたつのエフェクトは、スクリーンスペースシャドウとスクリーンスペースリフレクションである。以下のステップにしたがって、HDRPプロジェクトでこれらを有効化できる。
1.プロジェクトウィンドウでHDRPアセット(HDRenderPipelineAsset)をクリックし、インスペクターで確認する。
2.Lighting > ReflectionsでScreen Space Reflectionを有効化する。
3.Lighting > ReflectionsでScreen Space Shadowsを有効化する。
4.各フレームで評価したいスクリーンスペースシャドウの最大数に最大値をセットする。シーン内にこの数よりも多いライトがある場合、HDRPはシャドウをこの数だけレイキャストし、残りについてはシャドウマップを利用する。
これでHDRPプロジェクトはレイトレーシングをフルサポートするようになった。シーンでレイトレーシングをセットアップする方法については、Final setupを参照。
Final setup
これでHDRPプロジェクトがレイトレーシングをサポートするようになり、あとはシーンで実際に使うためにいくつかのステップを行って完了させるだけとなる。
1.フレームセッティングの変更
Frame Settings
シーンに配置したカメラでHDRPにレイトレーシングを計算させるには、カメラがレイトレーシングで有効なフレームセッティングを使っていることを確認する必要がある。デフォルトですべてのカメラにレイトレーシングを有効にすることもできるし、シーンにある特定のカメラでのみレイトレーシングを有効にすることもできる。
デフォルトでレイトレーシングを有効にする方法を以下に示す:
1.Project Settingsウィンドウを開き(メニュー: Edit > Project Settings)、タブHDRP Default Settingsを選択する。
2.Default Frame SettingsからドロップダウンのCameraを選択する。
3.RenderingのセクションでRay Tracingを有効化する。
特定のカメラでレイトレーシングを有効にする方法を以下に示す:
1.シーン内かヒエラルキーのカメラをクリックし、インスペクターを表示する。
2.GeneralのセクションでCustom Frame Settingsを有効化する。これによりカメラにFrame Settingsがあらわれる。
3.RenderingのセクションでRay Tracingを有効化する。
Ray tracing effects overview
HDRPはいくつかのスクリーンスペースエフェクト、影の技術、メッシュをレンダリングする技術をレイトレーシングで置き換えている。
レイトレーシングによるアンビエントオクルージョンは、スクリーンスペースのアンビエントオクルージョンを置き換えたものとなっている。レイトレーシングのアンビエントオクルージョンはオフスクリーンのデータを使うことができ、より精密になる。
レイトレーシングによるコンタクトシャドウはオフスクリーンのデータを使うことができ、より精密になる。
レイトレーシングによるGIは、HDRPではライトプローブとライトマップの代替となる。Tier1とTier2のレイトレーシング用に、別のプロパティセットを含む。
レイトレーシングによるリフレクションは、スクリーンスペースのリフレクションを置き換えたものとなっており、オフスクリーンのデータを使うことができる。
レイトレーシングによるシャドウは、ディレクショナルライト、ポイントライト、エリアライトでのシャドウマップを置き換えたものとなっている。
再帰的レイトレーシングは、メッシュのレンダリングパイプラインを置き換えている。この機能を使ったメッシュは、屈折と反射のレイを再帰的に投げかける。
Ray tracing project
ここまでで言及された、すべてのエフェクトを含む小さなレイトレーシングプロジェクトをここで見つけることができます:
※2020/2現在、SmallOfficeRayTracingリポジトリは更新が4か月止まっている。
Advice and supported feature of preview ray tracing
DX12とDXRは現在プレビューであり、機能がいくつか不足している。DX12を有効にするとUnityでこのメッセージが表示される: d3d12: generating mipmaps for array textures is not yet supported.
今のところDX12以外のプラットフォームでレイトレーシングはサポートされていない。
Unity2019.3でのHDRPレイトレーシングは、以下に示す制限がある:
デフォーマー(スキン、頂点アニメーション)をサポートしていない。
VFXとテレインをサポートしていない。
いくつかのHDRPマテリアルをサポートしていない。これにはHair、StackLit、Eye、AxFマテリアルといったものが含まれる。
シャドウで正しいカリングがない。かわりに錐体カリングを使う