ハイダイナミックレンジ (HDR) コンテンツは、標準定義のコンテンツよりも広色域で輝度範囲が広くなります。
URP は、HDR 機能をサポートするディスプレイに HDR コンテンツを出力できます。
ノート: HDR 出力に使用できるのはリニア色空間のみです。Unity の色空間の詳細については、色空間 を参照してください。
Unity の HDR 出力は以下のステップに分けられており、常にこの順序で行われます。
HDR 出力処理の最初のステップはトーンマッピングです。このステップでは、ターゲットディスプレイのダイナミックレンジに応じて、シーンの露出と色相のバランスをとります。ダイナミックレンジは以下のプロパティによって決まります。
これらのプロパティの詳細については、トーンマッピングにおける重要な値 を参照してください。
同時に、Unity は色空間の変換を実行します。色はデフォルトの Rec. 709 色空間からターゲットディスプレイの色空間に変換されます。これにより、シーン内の色がターゲットディスプレイのより広色域にマップされ、ディスプレイで利用可能なすべての色域を利用できるようになります。
詳細については、URP の HDR トーンマッピング と HDR トーンマッピング設定 を参照してください。
HDR 出力の 2 つ目のステップは伝達関数です。伝達関数はレンダリングプロセスの出力を特定のディスプレイの明度レベルに変換します。Unity はディスプレイに適した伝達関数を決定し、それを使用してディスプレイが求める基準に合わせて出力をエンコードします。これにより、ガンマに正しいレベルの精度を使用し、ターゲットディスプレイ上で正確な露出レベルを作成できます。
Allow HDR Display Output を有効にしたら、HDR 入力の トーンマッピング 設定を行う必要があります。
これらの設定を効果的に行うには、トーンマッピングに関連する特定の値によって HDR 出力の視覚的特徴がどのように決定されるかを理解する必要があります。
HDR ディスプレイの機能を適切に利用するには、Tonemapping 設定でターゲットディスプレイの機能、特に以下の 3 つの値 (ニット単位) を考慮する必要があります。
ノート: ディスプレイの Paper White 値が同じでも、ローダイナミックレンジ (LDR) とハイダイナミックレンジ (HDR) のコンテンツは同じ明るさで表示されません。これは、ディスプレイが明度レベルを上げるために LDR コンテンツに余分な処理を適用するためです。このため、アプリケーションにキャリブレーションメニューを実装することが推奨されます。
Unlit マテリアルはライティングの変更に反応しないため、ユーザーインターフェースには Unlit マテリアルを使用するのが一般的です。Unlit マテリアルのレンダリング計算では、HDR ディスプレイを特にターゲットとしていない場合、0 から 1 の間の値で明度を定義します。この場合、値 1 は白、値 0 は黒を表します。
ただし、HDR モードでは、URP は Paper White 値を使用して Unlit マテリアルの明度を決定します。これは、HDR 値が 0 から 1 の範囲を超える可能性があるためです。
そのため、HDR モードでは Paper White の値によって UI 要素の明度が決まります。特に、白い要素の場合は明度が Paper White 値と一致します。
トーンマッピングモードは、Tonemapping Volume コンポーネント 設定で選択して調整できます。HDR トーンマッピング設定の一部はスクリプトを使用して調整することもできます。詳細については、HDROutputSettings API を参照してください。
Allow HDR Display Output を有効にすると、HDR トーンマッピングオプションが Volume コンポーネントに表示されます。
URP には 2 つの Tonemapping モードがあります。Neutral と ACES です。各トーンマッピングモードには固有のプロパティがいくつかあります。
各モードの詳細は、トーンマッピングボリュームオーバーライドのリファレンスの HDR 出力セクション を参照してください。
HDROutputSettings API を使用して、HDR モードの有効/無効の切り替えと、特定の値 (Paper White など) のクエリを行うことができます。
これらの値は、レンダリングデバッガーの HDR 出力ディスプレイ表にも表示されます。この表にアクセスするには、Window > Analysis > Render Pipeline Debugger > Rendering > HDR Output の順に移動します。
オフスクリーンレンダリング技術を使用する場合、シーン内のすべてのカメラが直接ディスプレイに出力するわけではありません。例えば、出力をレンダーテクスチャにレンダリングする場合などです。このような場合、ポストプロセスをレンダリングする前にカメラの出力を使用します。
Unity はオフスクリーンレンダリング技術を使用するカメラの出力に HDR 出力処理を適用しません。これにより、HDR 出力処理がカメラの出力に 2 度適用されるのを防ぎます。
HDR 出力は、トーンマッピングと色エンコードに正しい形式のピクセル値を提供するために HDR レンダリングに依存します。HDR トーンマッピング後の値はニット単位で、1 を超えます。これは、ピクセル値が 0 から 1 の範囲に収まる SDR レンダリングとは異なります。そのため、HDR 出力で SDR レンダリングを使用すると、レンダリングされた画像の外観が露出不足または彩度過多になる可能性があります。
HDR 出力を有効にした状態で、カメラごとに SDR レンダリングを使用できます。これは、例えばミニマップのレンダリングなど、ライティングを使用しないマテリアルのみをレンダリングするカメラに役立ちます。ただし、HDR 出力で SDR レンダリングを使用するにはいくつかの制限があります。
HDR 出力 で SDR レンダリングを使用する場合に正しいレンダリングを行うには、ポストプロセス後にレンダーパスが発生しないようにする必要があります。これには、ポストプロセス後にレンダーパスを挿入する URP のビルトインエフェクトが含まれます。そのため、HDR 出力の SDR レンダリングは以下の機能との互換性がありません。
2D Renderer に HDR 出力の SDR レンダリングを使用する場合、ポストプロセスがオフなっていることを確認してください。
URP は以下のプラットフォームでのみ HDR 出力をサポートします。
ノート: DirectX 11 はプレイヤーでの HDR 出力のみをサポートします。エディターでの HDR 出力はサポートしません。