るっちょ らいつ

るっちょ ぷれぜんつ 開発の日々。

Unityのリアルタイムレイトレーシングを試す

f:id:ruccho:20200121231449p:plain


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なので手順が変化している可能性が大いにあります。要するにいち早く試したい人向けの記事です。

 

内容は概ね公式のドキュメントにのっとっています。都度参照していただけるとより分かりやすくなると思います。

docs.unity3d.com

 

また、すでに設定されたプロジェクトファイルも公式から配布されているので、動くところを見たい人はそちらをダウンロードするとよいでしょう。本記事では新規プロジェクトのセットアップ方法を書いていきます。

 

 

やっていき

まずはUnity 2019.3以降でHDRPテンプレートの新規プロジェクトを作成します。

 本記事では2019.3.0f5を使用していきます。

その①: DXR用の諸設定をおこなう

驚くべきことに、HDRPの各種設定をウィザード形式で行えるようになっています。(HDRPの設定むずかしいから大変ありがたい)

Window > Render Pipeline > HD Render Pipeline Wizard

でウィザードを開きます。

 

f:id:ruccho:20200121003052p:plain

 

すると、「HDRP+DXR」といういかにもなタブが現れますので、選択し、「Fix All」ボタンで自動的に設定を行ってくれます。(ウィザードですらないような簡便さである)

 

f:id:ruccho:20200121003329p:plain

 

途中、Graphics APIDirectX 12に変更されるので、エディターの再起動を求められます。再起動後、Fixが途中で止まっていることがあったので、もう一度Wizardを開いて確認しておいた方がいいかもしれません。

 

その②: シーンをセットアップ

いろいろ設定を自動でやってくれそうな雰囲気でしたが、レイトレーシングはまだ有効になっていません。実際のシーンに対して個別の設定が必要になってきます。

 

まずはシーンを作ります。レイトレーシングのうまみが出そうな感じのシーンを作ってみましょう。

f:id:ruccho:20200121224230p:plain

とりあえずコーネルボックス

 

ちなみに、部屋のライトと、Volumeの設定は次のようになっています。VolumeのデフォルトのプロファイルはPackagesの中にあるのでちゃんとNewしないと設定が差し戻ったりするので注意です(うっかり設定を全部飛ばした顔)。

 

f:id:ruccho:20200121224525p:plain

 

その③: レイトレーシング設定

レイトレーシングの各種機能を試してみます。

Ray-Traced shadows

f:id:ruccho:20200121225614p:plain

Lightが落とす影をレイトレーシングでつくります。デフォルトの影より影の輪郭が自然な感じになります。

設定はLightコンポーネントのShadowセクション内のRay Traced Shadowを有効にして行います。

f:id:ruccho:20200121225302p:plain

Denoiseを有効にしないとノイズが出て汚いです。これ以降、各種レイトレーシング機能ではデノイズのオプションがあることが多いので、うまく使っていきましょう(デノイズに関してはこれ以降割愛します)

 

Ray-Traced Global Illumination

f:id:ruccho:20200121230442p:plain

事前計算無し、(ほぼ)完全リアルタイムでGIを利かせられます。

 

Ray-Traced Global IlluminationはVolumeから設定します。Add Override > Ray Tracing > Global Illuminationで追加します。

f:id:ruccho:20200121230225p:plain

 

Ray-Traced Ambient Occlusion

f:id:ruccho:20200121231449p:plain

レイトレーシングを有効にした状態

 

f:id:ruccho:20200121231837p:plain

レイトレーシングを無効にした状態。もうちょっと複雑な形状の方が違いが分かりやすいかも

 

こちらも同じくVolumeから追加できます。Add Override > Ray Tracing > Ambient Occlusion にあります。

f:id:ruccho:20200121231334p:plain

 

 

Ray-Traced Contact Shadows

Contact Shadowsは、物体の接地部で影が切れる現象を補正する処理です。

f:id:ruccho:20200121233606p:plain

左: 無効時 右: 有効時

こちらの設定は、VolumeでContact Shadowsを追加したのち、Lightコンポーネントの設定でContact Shadowsを有効にする必要があります。

 

f:id:ruccho:20200121234026p:plain

Volumeの設定。



f:id:ruccho:20200121234141p:plain

Lightの設定。

 

Ray-Traced Screen Space Reflection

f:id:ruccho:20200121234434p:plain

Screen Space Reflectionを有効にして、マテリアルをいじった状態。

マテリアルの反射表現をレイトレーシングで行うことができます。標準のScreen Space Reflectionでは像が破綻したり、反射されない領域ができたりしていましたが、こちらは整合性のとれた絵が出せるようです。

 

こちらはVolumeから設定します。 Add Override > Lighting > Screen Space Reflectionで追加できます。

f:id:ruccho:20200121235041p:plain

 

ひとつ注意点として、この設定内のMinimum SmoothnessよりSmoothnessの値が小さいマテリアルに対しては効果が出ません。Volumeかマテリアル、どちらかの値を調整します。(Smoothnessが小さいマテリアルに対しては高負荷になるのでしょうか?)

 

Path Tracing

f:id:ruccho:20200121235627p:plain

Path Tracingを有効にすると、リアルタイムではなく、CGツールのレンダリングのように、じっくり絵を作ることができます。

 

f:id:ruccho:20200122000853p:plain

リアルタイムじゃないので屈折処理とかも正しく行える


設定はVolumeから行います。Add Override > Ray Tracing > Path Tracingで追加できます。

f:id:ruccho:20200122001008p:plain

 

追加すると、Gameビューでレンダリングが走り始めます。

 

おしまい

今回紹介した以外にもいくつか機能があるようですが、使い方が微妙にわからなかったのでひとまずここまでとさせていただきたいと思います。画面の品質はこれまでもベイクすれば高めることができていましたが、注目すべきは今回の絵が(Path Tracingをのぞいて)すべてリアルタイムに出せるという点だと思います。ベイク時間も省けますし、もっと一般的に使えるようになったらうれしいですね!