HDRP を 8.x から Unity 10.x にアップグレードする
HD レンダーパイプライン (High Definition Render Pipeline、HDRP) では、主要バージョン間で作用が異なる機能がいくつかあります。このドキュメントは、HDRP を Unity 8.x から 10.x にアップグレードする際に役立ちます。 パッケージバージョン 9.x プレビューは公開されていません。そちらは Unity 2020.1 と互換性があり、 10.x と同様の機能がいくつか含まれています。ただし、このぱけーじはフィードバック目的のみに作られたもので、今後維持されるものではありません。
コンスタントバッファ API
10.x から、HDRP はフレーム中に特徴を設定し、複数ではなく一度の転送でそれらをシェーダーに送ることができる、新しいコンスタントバッファ API を使います。これを実行するため、個別に更新されていたグローバル変数は現在すべて、ShaderVariablesGlobal
構造体内にあります。その結果、CommandBuffer.SetVectorXXX()
や関連する関数を用いてグローバル変数を個別に設定することができなくなりました。代わりに、構造体全体をアップデートしてグローバル変数を変更する必要があります。
現在 ShaderVariablesGlobal
構造体内でアクセスできる変数は、カメラ関連のみとなっており、カスタムパス 内で以下の関数を介してのみ利用できます。
RenderFromCamera()
RenderDepthFromCamera()
RenderNormalFromCamera()
RenderTangentFromCamera()
フレーム設定
10.x から、新しい HDRP アセット を作成すると、デフォルトで MSAA Within Forward フレーム設定が有効になります。
メニュー
10.x から、Assets > Create > Shader 内の様々な HDRP メニューアイテムは、一貫性を保つために HD Render Pipeline に名前が変更されました。
デカール
10.x から、デカールにフルの深度プレパスは必要なくなります。HDRP は深度プレパス中に Receive Decals が有効なマテリアルのみをレンダリングします。ただし、その他のオプションが強制する場合は例外です。
10.x から、Decal Layers システムを使って、メッシュレンダラーおよび Terrain (地形) から Rendering Layer Mask プロパティーを利用できるようになりました。2020.2 以前のこのプロパティーのデフォルト値には、Decal Layer フラグが含まれていません。つまりこの機能を有効にした際、デカールが正しく設定されるまでメッシュはデカールを受信しません。すでに作成されたメッシュを変換するためのスクリプト、Edit > Render Pipeline/HD Render Pipeline > Upgrade from Previous Version > Add Decal Layer Default to Loaded Mesh Renderers and Terrains および選択されたときのみに適用するバージョンが提供されています。新たに作成された Mesh Renderer または Terrain には、デフォルトで Decal Layer Default が有効になっています。
ライティング
10.x から、Editor メニューからスポットライトを作成する際に、HDRP はデフォルトで Reflector プロパティーを有効にします。なお C# スクリプトからスポットライトを作成した場合には、このプロパティーは無効になりますので、注意してください。
10.x から、HDRP は互換性のないライティングキューブマップに対する バックプレート レンダリングを無効にします。
10.x から、スクリーンスペースアンビエントオクルージョン、スクリーンスペースグローバルイルミネーション、スクリーンスペースリフレクション、レイトレーシングエフェクト、そして ボリュメトリック再投影 はリフレクションプローブと正常に機能しないため、相互作用しません。
10.x から、Lighting ウィンドウで Static Lighting Sky として使われるスカイオーバーライドを無効にすると、空はベイクされたライティングに影響を与えません。以前は無効になっていた場合でも、空はベイクされたライティングに影響を与えていました。
10.x から、HDRP に Point ライト クッキーに Cubemap Array が導入され、通常の 2D-Cookie アトラスで八面体投影法を使用します。これにより、ライトクッキーおよび IES に単一パスを許可できますが、低解像度のキューブクッキーを使う際にビジュアルアーティファクトを生じる場合があります。例えば、ピクセルアートデータの投影などです。
キューブマップクッキーアトラス はもう存在しないため、HDRP で現在のクッキーの 2D アトラス上に十分なスペースがない可能性があります。その場合は、HDRP は Console ウィンドウでエラーを表示します。この問題は、2D クッキーアトラスのサイズを大きくして修正します。その手順は次の通りです。HDRP アセット を選択します。 Inspector で Lighting > Cookies に移動します。 2D Atlas Size ドロップダウンから、より高いクッキー解像度を選択します。
10.x から、HDRP アセット内のカラーバッファのテクスチャフォーマットも 平面リフレクションプローブ に適用します。以前は Planar Reflection Probes は常に float16 rendertarget を使っていました。
10.x から、ライトレイヤープロパティーは HDRP 設定から HDRP Default 設定パネルに移動しました。
10.x から、物理ベーススカイにおける太陽円盤強度はサイズに比例します。以前は太陽円盤が円盤のサイズに比例せず、正しく表現されていませんでした。
10.x から、以前デカール、Lit、LayeredLit、または Unlit マテリアルの UseEmissiveIntensity プロパティーのいずれかを使った場合には、EmissiveColorLDR プロパティーは sRGB 色空間にありますので、注意してください。HDRP は以前、EmissiveColor をリニア RGB 色空間として扱っていたため、バージョン間でビジュアルが一致しない場合があります。この不一致を解消するために、HDRP には自動的に変換に対応する移行スクリプトが含まれています。
従来の 9.x.x-プレビューパッケージから移行するプロジェクトについて。Exposure の enum 順序に変更があり、現在の露出モードから Exposure Volume 内の別のモードへシフトする場合があります。これは正しい Exposure モードを手動で再度選択して、修正する必要があります。
10.x からデバッグレンズ減衰は削除されましたが、レンズ減衰は今後、完璧なレンズまたは不完全なレンズのいずれかのモデルとして、HDRP デフォルト設定パネルで設定できます。
10.x から、スクリーンスペースリフレクション エフェクトは常に、HDRP が Before Refraction 透明パスの後に生成するカラーピラミッドを使います。つまりカラーバッファは、BeforeRefraction レンダリングパス を使う透明ゲームオブジェクトのみを含めるということです。以前は、歪みエフェクトが有効かどうかにコンテンツは依存していました。
ボリュメトリックフォグ
プロジェクトを 10.2 にアップグレードする際、シーンのボリュメトリックの質が落ちる場合があります。これは新しいボリュメトリックフォグの制御モードが原因です。ボリュメトリックフォグの外観を 8.x と同様にするためには、以下の手順に従ってください。
- Fog Volume Override で、Fog Control Mode を Manual に設定します。
- このモードが展開するプロパティーに、8.x と同じ値を入力します。
代わりに Fog Control Mode を Balance に設定して新しいパフォーマンス指向のプロパティーを使い、ボリュメトリックフォグの品質を定義することもできます。
シャドウ
10.x から、ディファードレンダリングに シャドウフィルタリング品質 を設定するために、HDRP 設定パッケージ を変更する必要がなくなりました。その代わりに、HDRP アセット で直接フィルタリング品質を変更できます。HDRP Asset で以前、シャドウフィルタリング品質を Medium に設定していない場合、自動プロジェクト更新プロセスがシャドウ品質を変更するため、手動で元の値へ戻す必要があるかもしれません。
HDRP は OnEnable および OnDemand シャドウを別のアトラスに格納し、それらを扱うために利用できる API もより多くなりました。詳細は、HDRP のシャドウ を参照してください。
シェーダー関数 SampleShadow_PCSS
は、X にシャドウアトラス解像度を、Y にアトラス解像度の逆を含む、追加の float2 パラメーターでパスしなければいけません。
レイバイアスと厚みパラメーターがコンタクトシャドウに追加されました。これにより、デフォルトパラメーターを持つコンタクトシャドウに、ビジュアル面で影響を与える小さな変化がみられるかもしれません。これらの値をプロジェクトのニーズに合わせて調整してください。
シェーダー設定ファイル
10.x から、シャドウマップの変更により、HDRP は HDShadowFilteringQuality enum を HDShadowManager.cs へ移動しました。HDRP はまた、 ShaderConfig.s_DeferredShadowFiltering および ShaderOptions.DeferredShadowFiltering に効果がなくなったため、ソースコードから削除しました。
10.x から、ColoredShadow という名の新しいオプションが利用できます。これを使うと、シャドウが色付きかモノクロかを制御できます。ColoredShadow はデフォルトで有効にされ、現在は レイトレースによるシャドウ とのみ作用します。色の付いたシャドウは、標準シャドウよりもリソース負荷がかかりますので、注意してください。
10.x から、Raytracing オプションと同等の生成されたシェーダーマクロ、SHADEROPTIONS_RAYTRACING が削除されました。今後は HDRP でレイトレースによるエフェクトを使う際にシェーダー設定ファイルを編集する必要はありません。
シェーダーコード
10.x から、HDRP は新しい構造体を使って LightLoop から情報を出力します。float3 diffuseLighting
float3 specularLighting
ペアの代わりに、カスタム LightLoop 構造体を使うようになりました。これは今後、HDRP が API を壊さずに LightLoop からより多くの情報をエクスポートできるようにします。
以下の関数は現在、ペアではなくこの構造体をパスします。
- LightLoop() - ラスタライゼーションとレイトレーシング両方に対応します
- PostEvaluateBSDF()
- ApplyDebug()
- PostEvaluateBSDFDebugDisplay()
上記すべての関数に既存シェーダーをアップグレードするには、以下の手順に従います。
- LightLoop 呼び出しの前に、宣言
float3 diffuseLighting; float3 specularLighting;
をLightLoopOutput lightLoopOutput;
に置き換えます。 - 引数のペア
out float3 diffuseLighting, out float3 specularLighting
をout LightLoopOutput lightLoopOutput
に置き換えます。
様々なマテリアル内の関数 ModifyBakedDiffuseLighting()
のプロトタイプは、
void ModifyBakedDiffuseLighting(float3 V, PositionInputs posInput, SurfaceData surfaceData, inout BuiltinData builtinData)
から
void ModifyBakedDiffuseLighting(float3 V, PositionInputs posInput, PreLightData preLightData, BSDFData bsdfData, inout BuiltinData builtinData)
に変更されました。
また以前のプロトタイプ定義を使い、正しい引数を持つ新しい関数プロトタイプを呼び出す ModifyBakedDiffuseLighting()
に、新しい定義があります。この目的は、今後のライティング機能に備えるためです。プロトタイプ更新に加えてカスタムシェーダーを更新するためには、以下のラインを削除しなければなりません。
BSDFData bsdfData = ConvertSurfaceDataToBSDFData(posInput.positionSS, surfaceData);
PreLightData preLightData = GetPreLightData(V, posInput, bsdfData);
10.x から、HDRP には新しい矩形エリアシャドウ評価関数、EvaluateShadow_RectArea が含まれます。GetAreaLightAttenuation() 関数は GetRectAreaShadowAttenuation() に名前が変更されました。また DirectionalShadowType は SHADOW_TYPE に名前変更されました。
10.x から、マクロ ENABLE_RAYTRACING, SHADEROPTIONS_RAYTRACING、および RAYTRACING_ENABLED は削除されました。新しいマルチコンパイル、SCREEN_SPACE_SHADOWS_OFF SCREEN_SPACE_SHADOWS_ON がフォワードパスに導入されています。これによりシェーダー設定ファイルの編集をすることなく、レイトレーシング効果が有効化できます。
10.x から、TransparentDepthPrepass と TransparentDepthPostpass ID の SHADERPASS はそれぞれ、SHADERPASS_TRANSPARENT_DEPTH_PREPASS と SHADERPASS_TRANSPARENT_DEPTH_POSTPASS を使用しています。以前は SHADERPASS_DEPTH_ONLY でした。Define CUTOFF_TRANSPARENT_DEPTH_PREPASS と CUTOFF_TRANSPARENT_DEPTH_POSTPASS は、新たなパスマクロが利用できるようになったため、削除されました。
10.x は Decal Layers のサポートができるように、Depth Prepass と Motion ベクトルパスに新たなマルチコンパイルを導入しました。これらのパスには、#pragma multi_compile _ WRITE_DECAL_BUFFER を追加する必要があります。
10.x から Decal.shader のシェーダーコードが変更されました。以前、コードは約 16 のパスを使って異なるデカール属性のレンダリングに対応していました。現在は 4 つのパス、DBufferProjector, DecalProjectorForwardEmissive, DBufferMesh, DecalMeshForwardEmissive のみを使います。パス名が変更になったものもあります。DBufferProjector と DBufferMesh は現在、multi_compile DECALS_3RT DECALS_4RT を使ってさまざまなバリアントに対応し、またシェーダーストリッパーも更新されました。様々な Shader Decal プロパティーが、新しい AffectXXX プロパティーと合致するように、名前変更または変更されました (_AlbedoMode, _MaskBlendMode, _MaskmapMetal, _MaskmapAO, _MaskmapSmoothness, _Emissive have been changed to _AffectAlbedo, _AffectNormal, _AffectAO, _AffectMetal, _AffectSmoothness, _AffectEmission - Keyword _ALBEDOCONTRIBUTION は現在 _MATERIAL_AFFECTS_ALBEDO となり、新たに 2 つのキーワード、_MATERIAL_AFFECTS_NORMAL, _MATERIAL_AFFECTS_MASKMAP が追加されました)。これらの新しいプロパティーは、マテリアルで展開されるデカールシェーダーグラフのプロパティーと一致します。マテリアルアップグレードプロセスは、すべてのデカールマテリアルを自動的にアップグレードします。ただし、プロジェクトにデカールマテリアルを作成、または処理する C# スクリプトのいずれかが含まれている場合は、スクリプトを更新して新しいプロパティーとキーワードを使う必要があります。移行は継続的に生成されたデカールマテリアルには作用しません。
10.x から、HDRP はマテリアル内のデカールアプリケーションに使うシェーダーコードを変更しました。以前のバージョンでは、HDRP は HTileMask に依存する "HTile" と呼ばれる最適化を実行していました。調査を進めた結果、この最適化は適切でないと判断されたため、HDRP は関連するすべてのコードを削除しました。これには DecalSurfaceData 内の HTileMask メンバーと DBufferHTileBit 構造体、そして関連フラグが含まれます。カスタムシェーダーを更新するには、もう存在しない DBUFFERHTILEBIT_DIFFUSE, DBUFFERHTILEBIT_NORMAL および DBUFFERHTILEBIT_MASK 定義を削除して、代わりに個々の属性のウェイトが非ニュートラルかを確認します。例えば ApplyDecalToSurfaceData() 関数では、以下のラインを置き換えます。
if (decalSurfaceData.HTileMask & DBUFFERHTILEBIT_DIFFUSE)
{
(...)
}
if (decalSurfaceData.HTileMask & DBUFFERHTILEBIT_NORMAL)
{
(...)
}
if (decalSurfaceData.HTileMask & DBUFFERHTILEBIT_MASK)
{
(...) ComputeFresnel0((decalSurfaceData.HTileMask & DBUFFERHTILEBIT_DIFFUSE) ? (...));
}
上記はそれぞれ以下に置き換えます。
if (decalSurfaceData.baseColor.w < 1.0)
{
(...)
}
if (decalSurfaceData.normalWS.w < 1.0)
{
(...)
}
if (decalSurfaceData.MAOSBlend.x < 1.0 || decalSurfaceData.MAOSBlend.y < 1.0 || decalSurfaceData.mask.w)
{
(...) ComputeFresnel0((decalSurfaceData.baseColor.w < 1.0) ? (...));
}
デカールをマテリアルに適用するベストプラクティス例は、LitDecalData.hlsl ファイル内の ApplyDecalToSurfaceData()
関数を参照してください。
10.x から、シェーダーコード内のデカール関数プロトタイプが変更されました。角度ベースのフェードに対応できるよう、新しい頂点法線パラメーターが追加されました。
関数 GetDecalSurfaceData()
のパラメーターは、
DecalSurfaceData GetDecalSurfaceData(PositionInputs posInput, inout float alpha)
から
DecalSurfaceData GetDecalSurfaceData(PositionInputs posInput, float3 vtxNormal, inout float alpha)
に変わりました。
様々なマテリアル内の関数 ApplyDecalToSurfaceData()
は、
void ApplyDecalToSurfaceData(DecalSurfaceData decalSurfaceData, inout SurfaceData surfaceData)
から
void ApplyDecalToSurfaceData(DecalSurfaceData decalSurfaceData, float3 vtxNormal, inout SurfaceData surfaceData)
に変わりました。
10.x から、HDRP は FullScreenDebug
と呼ばれる新しいフルスクリーンデバッグパスを追加しました。このパスを含まないシェーダーに基づくマテリアルを使うオブジェクトはいずれも、フルスクリーンデバッグパス中にレンダリングされません。
Unity 2020.2 から、シェーダーグラフ内のレイトレーシングキーワードは、Raytracing Quality に名前が変更されました。RAYTRACING_SHADER_GRAPH_LOW および RAYTRACING_SHADER_GRAPH_HIGH 定義は、RAYTRACING_SHADER_GRAPH_DEFAULT および RAYTRACING_SHADER_GRAPH_RAYTRACED にそれぞれ名前が変更されました。これらの定義をカスタムシェーダーコードで使わない限り、プロジェクトを読み込む際にシェーダグラフが自動的に正しい定義を持つシェーダーを自動的に再生成するため、何もする必要はありません。
Unity 2020.2 から、パラメーター positionNDC
が関数 SampleEnv
に追加されました。プロトタイプは
float4 SampleEnv(LightLoopContext lightLoopContext, int index, float3 texCoord, float lod, float rangeCompressionFactorCompensation, int sliceIdx = 0)
から
float4 SampleEnv(LightLoopContext lightLoopContext, int index, float3 texCoord, float lod, float rangeCompressionFactorCompensation, float2 positionNDC, int sliceIdx = 0)
に変更されました。
例えば、Lit シェーダー内の呼び出しは以下に更新されました。
float4 preLD = SampleEnv(lightLoopContext, lightData.envIndex, R, PerceptualRoughnessToMipmapLevel(preLightData.iblPerceptualRoughness), lightData.rangeCompressionFactorCompensation, posInput.positionNDC);
10.x から、シェーダーキーワード _BLENDMODE_ALPHA _BLENDMODE_ADD および _BLENDMODE_PRE_MULTIPLY が削除されました。これらは現在使われておらず、_Blendmode プロパティーが代わりに使われています。 同様に、シェーダーキーワード _BLENDMODE_PRESERVE_SPECULAR_LIGHTING は削除され、代わりに _EnableBlendModePreserveSpecularLighting プロパティーがシェーダーコードで使われています。
例えば Material.hlsl で以下のラインは、
#if defined(_BLENDMODE_ADD) || defined(_BLENDMODE_ALPHA)
return float4(diffuseLighting * opacity + specularLighting, opacity);
次のように置き換えられます。
if (_BlendMode == BLENDMODE_ALPHA || _BlendMode == BLENDMODE_ADDITIVE)
return float4(diffuseLighting * opacity + specularLighting * (
# ifdef SUPPORT_BLENDMODE_PRESERVE_SPECULAR_LIGHTING
_EnableBlendModePreserveSpecularLighting ? 1.0f :
# endif
opacity), opacity);
これはシェーダーバリアントの数を減少させます。カスタムシェーダーの場合、_Blendmode プロパティーの宣言後に include of Material.hlsl を移動させる必要があるかもしれません。またカスタムシェーダーにブレンドモードがスペキュラーを保持するオプションをサポートさせたい場合には、_EnableBlendModePreserveSpecularLighting プロパティーが定義されていると同時に、コンパイル時間定数 SUPPORT_BLENDMODE_PRESERVE_SPECULAR_LIGHTING も定義されていることを確認してください。
10.x から、HDRP には 平面リフレクションプローブ に対する新たな最適化が含まれています。これで、シェーダーがプローブの環境マップをサンプルする際に、LightData.roughReflections パラメーターが有効になっている場合は (値が 1.0)、ミップレベル 0 からサンプルします。この動作を考慮するために、カスタムシェーダーを更新しなければなりません。
例えば Lit シェーダー内の呼び出しは以下に更新されました。
float4 preLD = SampleEnv(lightLoopContext, lightData.envIndex, R, PerceptualRoughnessToMipmapLevel(preLightData.iblPerceptualRoughness) * lightData.roughReflections, lightData.rangeCompressionFactorCompensation, posInput.positionNDC);
リフレクションプローブに to fake distance based roughness に対する新たな機能が追加された上に、新しいヘルパー関数が導入されました。先のコードは最終的に
float4 preLD = SampleEnvWithDistanceBaseRoughness(lightLoopContext, posInput, lightData, R, preLightData.iblPerceptualRoughness, intersectionDistance);
として Lit シェーダーで書き換えられます。intersectionDistance
は EvaluateLight_EnvIntersection() 関数の戻りパラメーターです。
10.x から、HDRP はマスクマップを使う際に、メタリックプロパティーに範囲リマッピングを使います。
Lit, LitTessellation, LayeredLit および LayeredLitTesselation シェーダーでは、新しく 2 つのプロパティー、_MetallicRemapMin
と _MetallicRemapMax
が追加されました。
Decal シェーダーでは _MetallicRemapMin
プロパティーが追加され、_MetallicScale
は _MetallicRemapMax
に名前変更されました。
10.x から、新しいパス、ScenePickingPass がすべてのシェーダーとマスターノードに追加され、エディターは分割されたオブジェクトとバックフェイスのオブジェクトの選択に、正確に対応することができます。
10.x から、シェーダーコード内のデカール関数が追加されました。両面マテリアルに法線反転を適用するため、GetDecalSurfaceData()
の呼び出しは、関数
DecalSurfaceData GetDecalSurfaceData(PositionInputs posInput, float3 vtxNormal, inout float alpha)
から
DecalSurfaceData GetDecalSurfaceData(PositionInputs posInput, FragInputs input, inout float alpha)
に更新してください。
レイトレーシング
Unity 2020.2 から、シェーダーグラフ内の Raytracing Node は raytraced パス (以前はローパス) を、パストレーシングを除くすべてのレイトレースによるエフェクトに適用します。
カスタムパス API
実行関数の署名は、パラメーターの簡素化のために変更され、CustomPassContext のみを入力
void Execute(CustomPassContext ctx)
として受け付けます。
CustomPassContext は従来の 実行
関数のすべてのパラメーターを含みますが、利用可能なすべての Render Textures と、カスタムパスインスタンスに一意的な MaterialPropertyBlock も含みます。
このコンテキストでは、カスタムパスの開発速度を上げる機能を含む、新しい CustomPassUtils クラスを使うことができます。
カスタムパスツールに関する情報は、カスタムパスマニュアル または CustomPassUtils API ドキュメント を参照してください。
カスタムパスをアップグレードするには、元の実行関数プロパティーを新しいものと置き換えます。これを実行するには、
protected override void Execute(ScriptableRenderContext renderContext, CommandBuffer cmd, HDCamera hdCamera, CullingResults cullingResult) { ... }
を以下に置き換えます。
protected override void Execute(CustomPassContext ctx) { ... }
密度 Volume マスクテクスチャ
以前は、2D フリップブックテクスチャを 3D フォーマット Density Mask Textureに変換するには、 Density Volume Texture Tool in the Window > Rendering メニューを使う必要がありました。 Unity 2020.2 から、Texture Importer から直接変換できるようになりました。インポーターを使ってフリップブックテクスチャを変換する方法については、Density Volume ドキュメント を参照してください。
拡散プロファイル
拡散プロファイルリストは HDRP アセットインスペクター UI から Default HDRP Settings (プロジェクト設定ウィンドウ内) に移動しました。
この変更は、複数の HDRP アセット設定を Quality Settings としてある場合に影響を及ぼします。このケースにおいて、Quality Settings にある 1 つ以上の HDRP アセットが Graphics Settings で割り当てられたものとは異なる拡散プロファイルを持つ場合、HDRP アセット上のリストが失われます。ここで関連のある唯一のリストは、Default HDRP Settings 内のもののみです。
アップグレードする前に、HDRP Asset 内のプロジェクトで使ったすべての拡散プロファイルを Graphics Settings に移動することをお勧めします。この操作を行うことで、プロジェクト内の拡散プロファイルが失われるという問題を回避することができます。
ポストプロセス
以前、Motion Blur Volume コンポーネント内でカメラ回転固定は常に有効であり、デフォルトでカメラ回転由来のモーションベクトル部分は異なる形で固定されていました。これは、カメラと比例するモーションベクトルの変更のせいで、混乱を招く可能性があります。
2020.2 から、カメラ回転固定オプションはデフォルトではなくなり、Camera Clamp Mode 設定の下にあるオプションとして選択しなければなりません。さらに、モーションブラーに影響するその他のカメラの固定コントロールも、同じ設定の下から利用できます。