HDRP を 6.x から Unity 7.x にアップグレードする
HD レンダーパイプライン (High Definition Render Pipeline、HDRP) では、主要バージョン間で作用が異なる機能がいくつかあります。このドキュメントは、HDRP を Unity 6.x から 7.x にアップグレードする際に役立ちます。
新規シーン
HDRP の新規シーンシステムは、プロジェクト内のプレハブに依存しています。また Volumes のデフォルト設定にも依存しています。ウィザードで既に設定してある場合は、Default Volume Profile Asset (Edit > Project Settings > HDRP Default Settings 内) を更新する必要があります。
デフォルトプレハブ (ウィザードで作成したもの) を使っていて、デフォルトの Default Volume Profile Asset に頼っている場合は、プレハブはもうデフォルトボリュームプロファイルと同期しませんので、更新しなければなりません。
ウィザードに新しく再作成させる最も簡単な方法は以下の通りです。
- Wizard を開きます (Window > Render Pipeline > HD Render Pipeline Wizard)。
- Default Scene Prefab でプレハブセットを削除します。
- [任意] カスタマイズした以前のプレハブは、失くさないようにコピーを保存してください。これは、プレハブの名前を変更するだけでできます。オーバーライドされるのを防ぎます。
- Default Scene Prefab ラインの下にある Configuration Checking を探し、Fix ボタンをクリックします。
- [任意] 新たに作成されたプレハブ内のカスタム変更を報告します。
DXR も使っている場合は、Default DXR Scene Prefab に同様に繰り返します。
HDRP の新規シーンシステムは、プロジェクト内のプレハブに依存しています。ウィザードで既に設定してある場合は、更新する必要があります。
プロシージャルスカイ
プロシージャルスカイ overrideは 7.x では非推奨になっています。プロジェクトがプロシージャルスカイを使う場合は、サンプルからオーバーライドをインストールするか、または新しい物理ベーススカイに切り替える必要があります。
プロシージャルスカイオーバーライドを 7.x プロジェクトにインストールするには、
- Unity Editor でプロジェクトを開きます。
- Package Manager を開き (Window > Package Manager)、High Definition RP をクリックします。
- Samples セクションで Procedural Sky エントリーの Import in project ボタンをクリックします。プロシージャルスカイを使うシーンが開いている場合は、空は再表示されますが、設定はデフォルト値にリセットされます。
- スカイ設定を回復するには、保存せずに Unity を終了してから、再度プロジェクトを開きます。
サンプルをインストールしておらず、プロシージャルスカイを使うシーンを読み込むと、Volume 内のプロシージャルスカイデータが失われるため、最後のステップは重要です。Unity はこれをシリアル化しないため、Unity を閉じてから再度開くことで、設定を回復することができます。
スカイ強度モード
7.x 仕様の HDRP では、スカイ強度の対応方法が変更されました。変更以前は、2 つのパラメーター、Exposure および Multiplier の両方をスカイ強度の変更に適用していました。現在は新たなコンボボックスからどちらかを選択するようになっています。既存のスカイコンポーネントをアップグレードするために、更新スクリプトは Edit > Render Pipeline > Upgrade Sky Intensity Mode で提供されます。
フォグ
HDRP は 7.x で、Linear Fog、Exponential Fog、Volumetric Fog、および Volumetric Fog Quality オーバーライドを非推奨とし、単一の フォグ オーバーライドに置き換えました。このオーバーライドはデフォルトにより、ハイトコンポーネントを持つ指数関数フォグとして機能し、追加のボリュメトリックを足すことができます。従来のフォグオーバーライドを新しいシステムに自動更新するには、Edit > Render Pipeline > Upgrade Fog Volume Components を選択します。すべてのケースを安全に変換できない場合があるため、手動でアップグレードが必要になるものもあります。
シャドウマップ
7.x 以前は、HDRP の各ライトはシャドウマップバイアスにいくつかのオプションを展開していました。7.x から Normal Bias を除くすべてのオプションが Slope-Scale Depth Bias に置き換えられました。このプロパティーの導入により、シャドウマップバイアスの設定が依然とはかなり異なります。つまり、デフォルト値が予測外の結果を生じた場合に、各ライトでバイアスに新しい設定が必要になる可能性があるということです。
また 7.x 以前は PCSS は異なるパラメータ化がありました。7.x 以降、シャドウの柔らかさはディレクショナルライトの角直径とポイントおよびスポットライトの形状半径によって制御されます。以前のシャドウの柔らかさを形状半径に変換する、近似関数は 0.333 * oldSoftness * (shadowResolution / 512)
です。
さらに、Minimum filter size オプションは Minimum Blur Intensity と呼ばれるようになりました。これは機能的には変わりませんが、単純に以前の範囲 [0 ... 0.0001] を [0 ... 1] にリマップします。
ライト
7.x から、利用可能なライトタイプは、Directional、Point、Spot、Area (ディレクショナル、ポイント、スポット、エリアライト) になり、ビルトインレンダラーのタイプと一致します。エリアライトをライトタイプに選択したのちに、エリアライトの形状を (矩形、チューブ、およびディスクから) 選択することができます。
エリアライト
7.x 以前、HDRP はエリア ライト の Emissive Mesh の幅および高さを、トランスフォームの ローカルスケール と同期していました。7.x からは、HDRP は lossyScale を使って、親トランスフォームのスケールに Emissive Mesh を割り当てます。つまり、Unity プロジェクト内のすべてのエリアライトは、親のスケールに合わせてサイズ変更しなければなりません。
クッキーテクスチャ (スポット/エリア/ディレクショナルライト) と平面リフレクションプローブ
7.x 以前は、スポットライト、エリアライト、ディレクショナルライト、そして平面のクッキーをテクスチャ配列に格納していました。これらの配列の利用により、1 つの配列にすべての要素に対して同じサイズを使わざるを得ませんでした。クッキーテクスチャに関しては、変換コードでテクスチャサイズが (HDRP アセットで定義される) テクスチャ配列のサイズとまったく同じではないことを確認してから、配列のサイズに合わせて調整されていました。 現在はアトラスを使うようになり、この制限がなくなりました。つまり、テクスチャの実寸を使うようになり、テクスチャが大きすぎる、または小さすぎる場合にはより多くの形状やピクセル化されたクッキーが生じる可能性があるため、使用するクッキーサイズが異なる場合があるということです。この種の問題に遭遇した場合は、画像を直接修正することをお勧めします。平面リフレクションプローブに関しても、プローブごとに異なる解像度を使うことになります。
また、コンソール内でも以下のエラーが表示される場合があります。No more space in the 2D Cookie Texture Atlas. To solve this issue, increase the resolution of the cookie atlas in the HDRP settings.
(2D クッキーテクスチャアトラスにスペースがありません。これは HDRP 設定でクッキーアトラスの解像度を上げることで解決します。) これはつまり、ビュー内のクッキーアトラスが多すぎる、またはクッキーテクスチャが大きすぎるために、クッキーアトラスにスペースが残っていないことを意味します。この問題は、クッキーテクスチャの解像度を下げるか、HDRP 設定内でアトラス解像度を上げて解決します。
Max Smoothness、Emission Radius、Bake Shadows Radius、Bake Shadows Angle
7.x 以前、Max Smoothness、Emission Radius、および Bake Shadows Radius は、Point および Spot Lights に対する別々のコントロールでした。7.x からは、上記のプロパティーをすべて制御する Radius と呼ばれる単一プロパティーを UI が表示します。 また、Max Smoothness、Angular Diameter、および Bake Shadows Angle は、Directional Lights に対する別々のコントロールでした。現在 UI は、上記すべてを制御する Angular Diameter と呼ばれる単一プロパティーを表示します。
アップグレードする際に、ハイライト形状またはシャドウ半影サイズが若干シフトする場合があります。これは元のプロパティーを "Radius" または "Angular Diameter" からの自動変換と一致しない値に設定した場合に起こります。
リアルタイム GI Enlighten
7.x から HDRP は新しいプロジェクトにリアルタイム GI をサポートしません。ただし、HDRP は以前作成されたプロジェクトにたいしては、7.x LTS 限定でリアルタイム GI を引き続きサポートします。
カスタムシェーダー
7.x では Reflection Probes に変更が導入され、プローブのコンテンツをレンダリングする際に Unity が使う範囲を圧縮できるようになりました。これにより Shader フレームワークにも若干の変更があり、関数 SampleEnv()
に追加パラメーターが必要になり、プローブデータに適用し、プローブレンダリング時に範囲圧縮を補填する要因となりました。この値は rangeCompressionFactorCompensation
という名前でデータ構造体 EnvLightData
にあります。
HDRP アセットとデフォルト設定
7.x から、HDRP の設定の多くが移動しました。具体的には、以前 HDRP アセット内にあった情報のほとんどが、現在 Project Settings に反映されています。 カテゴリーは以下の 2 つに分かれています。
- Default Settings (Project Settings > HDRP Default Settings)。デフォルトフレームおよび Volume 設定を供給します。
- Quality Settings (Project Settings > Quality > HDRP)。ここでは複数のレンダーパイプラインアセットの設定を管理できます。
7.x から、Baking sky / Static lighting Sky コンポーネントは非推奨となりました。現在設定は (Lighting Window > Environment lighting) 内にあり、Volume Profile Asset とドロップダウンから、ベイキングに使用するスカイを選択します。なおシーンから Static Lighting Sky コンポーネントを削除することができます。
Volume 設定のショートカット
7.x から、コンテキストメニューにプリセット Volumes 設定を作成する、Render Settings ショートカットがなくなりました。HDRP は代わりに Default Settings (Project Settings > HDRP Default Settings) を使います。現在 HDRP には異なる形状のローカル Volumes 用のショートカットが含まれ、Volumes 設定プロセスが簡単になりました。さらに HDRP には Volume タイプとして一般的に使われる、Sky および Fog オーバーライドの付いた Volume を作成する、ショートカットも含まれています。
HDRP 設定パッケージ
7.x から、HDRP に依存関係として追加の小さなパッケージが加わりました。これは HDRP 設定パッケージです。このパッケージ内のプロパティーを変更して、HDRP の UI では動的に制御できない機能を無効にしたり、調整することができます。
- Deferred Mode の際に Shadow Filtering 品質を選択する。
- カメラ相対レンダリング。
- レイトレーシング。
- XR 最大ビュー。
- エリアライト。
マテリアルアップグレーダー
High Definition RP パッケージをアップグレードする際、現在 Unity は Materials をそれぞれアップグレードします。つまり初めてアップグレードする際にバージョン番号が追加され、HDRP Shader に変更があると、Unity が Material を修正することができ、新しい変更に対応できるということです。
これを実行するために、アップグレードを開始すると Unity はプロンプトを開いて、プロジェクトを保存したいか尋ねます。プロジェクトを保存することに同意するまで、アップグレードを試行し続けます。
ゲームオブジェクト SceneIDMap に対するスクリプトがありません
7.x 以前に制作されたベイクされた Probes を持つシーン内で Play Mode に入ると、SceneIDMap と名付けられたゲームオブジェクトに対してスクリプトがない (Missing Script) という警告が出る場合があります。 これを修正するには、Unity Editor にシーンを読み込んでから Edit > Render Pipeline > Fix Warning 'referenced script in (Game Object 'SceneIDMap') is missing' in loaded scenes を選択します。
Light Intensity、Sky Exposure 対 HDRP デフォルト設定
デフォルトで、HDRP はライトに対し物理的に正しい強度を使います。このため、HDRP におけるデフォルト HDRI スカイの露出 (Exposure) は、Directional Light (ディレクショナルライト) 強度 10000 に一致するよう、11 に設定されています。テンプレートプロジェクトに同様の値が使われていますので、参考にしてください。 HDRP ウィザードが正しく設定されていて、新しいシーンを作成する場合、Unity は自動的に正しい強度でゲームオブジェクトを作成するため、すべて一貫しています。ただし、HDRP ウィザードが正しく設定されていない場合、もしくはゼロから ディレクショナルライトを作成した場合、強度は物理的に正しくありません。その結果、ライトがデフォルトの空の露出と一致せず、自動露出が極端に明るい空を相殺するため、シーン内のゲームオブジェクトはいずれも黒く見えてしまいます。 これを回避するために、現在の空の露出と比較し、一貫性のあるライト強度値をつかうようにしてください。
遊色空間
HDRP は以前、誤った色空間を使って遊色を計算していました。7.x からは、HDRP は正しい色空間を使います。この結果、遊色効果を使う際に、より力強い飽和色が得られます。