夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

Unity HDRPでRayTracingを使用する RayTraced Reflection

本日はUnityのグラフィックに関する調査です。

近年では高性能グラボを搭載したPC向けにグラフィックを向上させるソリューションも多く出現しており、むしろコンソールゲーム機などではこのような技術が使用されています。

今回RayTracingを改めて勉強していきます。

〇RayTracingとは?

現実世界の光は光源から様々なオブジェクトに入り散乱し最終的に目に入ります。

 CGでは通常高速化を考慮して光源ーカメラと直で光を落とします。

 RayTracingを使用することでカメラに映るピクセル毎にその光の散乱の挙動をカメラから光源に向けて追跡(Trace)することでより高度な光源処理をおこなうことができます。

NVIDIAのグラフィックボードではRTXシリーズが主流になっていますがこのRTXのRTはレイトレーシングを指し、レイトレーシング演算の専用回路を搭載しているGPUにつけられる名前となっています。

developer.nvidia.com

〇UnityでのRayTracing

 〇環境

こんかいは以下の環境で行います。

・Windows 11

・NVIDIA RTX3080

・Unity 2021.3.5f1

 ・HDRP12.1

なおUnityでRayTracingを使用するためにはHDRPを使用する必要があります。

またRayTracingに対応したグラフィックボードを搭載しているPCを使用している必要があります。

〇RayTracingの設定

今回はすでにHDRPプロジェクトを作成している状態から説明を行います。

Project Settingsを開きQualityからHigh Quality以外のクオリティ設定を削除します。

Unityではプラットフォームによってクオリティ設定を変えることができますが、今回はRayTracingを使用できるPC環境でのみ行うため設定項目がかぶらないように他の設定を削除しました。

②上部ワールドメニューからWindowRenderingHDRP Wizardを開きます。

HDRP WizardとはHDRPの一括設定を行うことができるウィンドウです

HDRP + DXRタブを選択し、すべての項目がグリーンになるように必要な項目をFixボタンを押していきます。

DXRとはDirectX RayTracingを指しています。

DirectXではDrectX12以降でRayTracingをサポートしており、ウィザードのチェック項目を進める中で半自動的にDirectX12をグラフィックスAPIとして設定するようになります。

以上でRayTracingの使用設定は完了です。

〇RayTracingを使用したリフレクションを使用する

こんかいはHDRPのサンプルシーンを例にRayTracingを使用したリフレクションを実装していきます。

サンプルシーンは最初からVolumesが設定されているためリフレクションプローブと合わせ非表示化します。

これによってデフォルトのビジュアルは以下のようになります。

①からゲームオブジェクトを作成しVolumeコンポーネントをアタッチします。

またProfileにはDefaultLookDevProfileを指定します。

VolumeAdd OverrideからScreenSpace Reflectionを追加します。

これは画面に映っているオブジェクトをもとに反射を計算する手法でリアルな反射が実装できます。

ただしこれを使用するためにはHDRP Assetで設定を行う必要があります。

HDRPAssetを開きLightingReflectionsScreen Space ReflectionおよびTransparentをチェックを入れて有効化します。

これによって反射が再現されます。

した画像では水たまりの反射がわかりやすいです。

④VolumeコンポーネントからRayTracing Settingsを追加します。

これがレイトレーシングの強度などを調整するパラメータになります。

⑤Screen Space Reflectionの設定でTracingのパラメータをRay Tracingに設定します。

以上でレイトレーシングを使用した反射が実装できます。

Screen Space Reflectionではあくまで画面に映っているオブジェクトを反射対象にするため画面に映っていない背景や反射対象物に近づいた場合などは反射が消えてしまいます。

ScreenSpace Reflection

しかしながらRayTraced Reflectionではカメラに写っていないオブジェクトの反射も反映できるため処理負荷は高いもののよりリアルな反射を実現することができます。

RayTraced Reflection

以上でRayTracingを使用することができました。