本日はUnityのグラフィックに関する調査です。
近年では高性能グラボを搭載したPC向けにグラフィックを向上させるソリューションも多く出現しており、むしろコンソールゲーム機などではこのような技術が使用されています。
今回RayTracingを改めて勉強していきます。
〇RayTracingとは?
現実世界の光は光源から様々なオブジェクトに入り散乱し最終的に目に入ります。
CGでは通常高速化を考慮して光源ーカメラと直で光を落とします。
RayTracingを使用することでカメラに映るピクセル毎にその光の散乱の挙動をカメラから光源に向けて追跡(Trace)することでより高度な光源処理をおこなうことができます。
NVIDIAのグラフィックボードではRTXシリーズが主流になっていますがこのRTXのRTはレイトレーシングを指し、レイトレーシング演算の専用回路を搭載しているGPUにつけられる名前となっています。
〇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環境でのみ行うため設定項目がかぶらないように他の設定を削除しました。
②上部ワールドメニューからWindow→Rendering→HDRP Wizardを開きます。
HDRP WizardとはHDRPの一括設定を行うことができるウィンドウです
③HDRP + DXRタブを選択し、すべての項目がグリーンになるように必要な項目をFixボタンを押していきます。
DXRとはDirectX RayTracingを指しています。
DirectXではDrectX12以降でRayTracingをサポートしており、ウィザードのチェック項目を進める中で半自動的にDirectX12をグラフィックスAPIとして設定するようになります。
以上でRayTracingの使用設定は完了です。
〇RayTracingを使用したリフレクションを使用する
こんかいはHDRPのサンプルシーンを例にRayTracingを使用したリフレクションを実装していきます。
サンプルシーンは最初からVolumesが設定されているためリフレクションプローブと合わせ非表示化します。
これによってデフォルトのビジュアルは以下のようになります。
①からゲームオブジェクトを作成しVolumeコンポーネントをアタッチします。
またProfileにはDefaultLookDevProfileを指定します。
②VolumeにAdd OverrideからScreenSpace Reflectionを追加します。
これは画面に映っているオブジェクトをもとに反射を計算する手法でリアルな反射が実装できます。
ただしこれを使用するためにはHDRP Assetで設定を行う必要があります。
③HDRPAssetを開きLighting→Reflections→Screen Space ReflectionおよびTransparentをチェックを入れて有効化します。
これによって反射が再現されます。
した画像では水たまりの反射がわかりやすいです。
④VolumeコンポーネントからRayTracing Settingsを追加します。
これがレイトレーシングの強度などを調整するパラメータになります。
⑤Screen Space Reflectionの設定でTracingのパラメータをRay Tracingに設定します。
以上でレイトレーシングを使用した反射が実装できます。
Screen Space Reflectionではあくまで画面に映っているオブジェクトを反射対象にするため画面に映っていない背景や反射対象物に近づいた場合などは反射が消えてしまいます。
しかしながらRayTraced Reflectionではカメラに写っていないオブジェクトの反射も反映できるため処理負荷は高いもののよりリアルな反射を実現することができます。
以上でRayTracingを使用することができました。