Unityのリアルタイムレイトレーシングを試す
Unityのリアルタイムレイトレーシング機能(DXR)は、2019.3以降、HDRPで使用できます。DXR対応のグラフィックスカードが必要です。
対応カードは以下の通り(公式ドキュメントより):
- NVIDIA Volta (Titan X)
- NVIDIA Turing (2060, 2070, 2080, and their TI variants)
- NVIDIA Pascal (1060, 1070, 1080 and their TI variants)
記事執筆時点で2019.3の最新版はUnity 2019.3.0f5でまだベータなうえ、レイトレーシング機能もまだpreviewなので手順が変化している可能性が大いにあります。要するにいち早く試したい人向けの記事です。
内容は概ね公式のドキュメントにのっとっています。都度参照していただけるとより分かりやすくなると思います。
また、すでに設定されたプロジェクトファイルも公式から配布されているので、動くところを見たい人はそちらをダウンロードするとよいでしょう。本記事では新規プロジェクトのセットアップ方法を書いていきます。
やっていき
まずはUnity 2019.3以降でHDRPテンプレートの新規プロジェクトを作成します。
本記事では2019.3.0f5を使用していきます。
その①: DXR用の諸設定をおこなう
驚くべきことに、HDRPの各種設定をウィザード形式で行えるようになっています。(HDRPの設定むずかしいから大変ありがたい)
Window > Render Pipeline > HD Render Pipeline Wizard
でウィザードを開きます。
すると、「HDRP+DXR」といういかにもなタブが現れますので、選択し、「Fix All」ボタンで自動的に設定を行ってくれます。(ウィザードですらないような簡便さである)
途中、Graphics APIがDirectX 12に変更されるので、エディターの再起動を求められます。再起動後、Fixが途中で止まっていることがあったので、もう一度Wizardを開いて確認しておいた方がいいかもしれません。
その②: シーンをセットアップ
いろいろ設定を自動でやってくれそうな雰囲気でしたが、レイトレーシングはまだ有効になっていません。実際のシーンに対して個別の設定が必要になってきます。
まずはシーンを作ります。レイトレーシングのうまみが出そうな感じのシーンを作ってみましょう。
ちなみに、部屋のライトと、Volumeの設定は次のようになっています。VolumeのデフォルトのプロファイルはPackagesの中にあるのでちゃんとNewしないと設定が差し戻ったりするので注意です(うっかり設定を全部飛ばした顔)。
その③: レイトレーシング設定
レイトレーシングの各種機能を試してみます。
Ray-Traced shadows
Lightが落とす影をレイトレーシングでつくります。デフォルトの影より影の輪郭が自然な感じになります。
設定はLightコンポーネントのShadowセクション内のRay Traced Shadowを有効にして行います。
Denoiseを有効にしないとノイズが出て汚いです。これ以降、各種レイトレーシング機能ではデノイズのオプションがあることが多いので、うまく使っていきましょう(デノイズに関してはこれ以降割愛します)
Ray-Traced Global Illumination
事前計算無し、(ほぼ)完全リアルタイムでGIを利かせられます。
Ray-Traced Global IlluminationはVolumeから設定します。Add Override > Ray Tracing > Global Illuminationで追加します。
Ray-Traced Ambient Occlusion
こちらも同じくVolumeから追加できます。Add Override > Ray Tracing > Ambient Occlusion にあります。
Ray-Traced Contact Shadows
Contact Shadowsは、物体の接地部で影が切れる現象を補正する処理です。
こちらの設定は、VolumeでContact Shadowsを追加したのち、Lightコンポーネントの設定でContact Shadowsを有効にする必要があります。
Ray-Traced Screen Space Reflection
マテリアルの反射表現をレイトレーシングで行うことができます。標準のScreen Space Reflectionでは像が破綻したり、反射されない領域ができたりしていましたが、こちらは整合性のとれた絵が出せるようです。
こちらはVolumeから設定します。 Add Override > Lighting > Screen Space Reflectionで追加できます。
ひとつ注意点として、この設定内のMinimum SmoothnessよりSmoothnessの値が小さいマテリアルに対しては効果が出ません。Volumeかマテリアル、どちらかの値を調整します。(Smoothnessが小さいマテリアルに対しては高負荷になるのでしょうか?)
Path Tracing
Path Tracingを有効にすると、リアルタイムではなく、CGツールのレンダリングのように、じっくり絵を作ることができます。
設定はVolumeから行います。Add Override > Ray Tracing > Path Tracingで追加できます。
追加すると、Gameビューでレンダリングが走り始めます。
おしまい
今回紹介した以外にもいくつか機能があるようですが、使い方が微妙にわからなかったのでひとまずここまでとさせていただきたいと思います。画面の品質はこれまでもベイクすれば高めることができていましたが、注目すべきは今回の絵が(Path Tracingをのぞいて)すべてリアルタイムに出せるという点だと思います。ベイク時間も省けますし、もっと一般的に使えるようになったらうれしいですね!