ハイダイナミックレンジ (HDR) は、標準ダイナミックレンジ (SDR) 画像よりも大きなダイナミックレンジの光度を持つ画像を生成する技術で、色と明るさを現実的に表現できます。
標準のレンダリングでは、ピクセルの赤、緑、青の値は 0 と 1 の間の 8 ビット値を使用して格納されます。0 は強度がないことを表し、1 はディスプレイデバイスの最大強度を表します。この制限された範囲の値は、現実の生活で光を知覚する方法を正確に反映しているわけではないため、非常に明るい要素や非常に暗い要素が存在する場合、非現実的な画像になります。
HDR レンダリングでは、ピクセル値は浮動小数点数を使用して格納されます。これにより、はるかに広い範囲の値が可能になり、人間の目が色と明るさを認識する方法をより正確に表します。
Unity では、内部レンダリング計算に HDR 画像を使用できます。この機能は HDR レンダリングと呼ばれます。HDR レンダリングを有効にすると、Unity はシーンを HDR 画像バッファにレンダリングし、その HDR 画像を使用してポストプロセスエフェクトなどのレンダリング操作を実行します。これは、計算がより現実的な値を使用して実行されることを意味し、より現実的な結果が得られます。
特定の互換性のあるプラットフォームでは、Unity はその HDR 画像のディスプレイデバイスへの送信をサポートします。この機能は HDR 出力と呼ばれます。
HDR を使用する利点
HDR を使用する不利な点
レンダーパイプライン | HDR レンダリング | HDR 出力 |
---|---|---|
ビルトインレンダーパイプライン | 互換性あり Inspector で、または Camera.allowHDR API を使って、カメラごとの HDR レンダリングを有効にします。 Graphics 設定 ウィンドウで、HDR レンダリングを有効にし、各 Tier のHDR バッファの形式を設定します。 |
互換性あり HDROutputSettings API を使用して、HDR 出力オプションを設定します。 詳細は、プラットフォーム個別のドキュメントを参照してください。 |
ユニバーサルレンダーパイプライン (URP) | 互換性あり Inspector で、または Camera.allowHDR API を使用して、カメラごとに HDR レンダリングを有効にします。 ユニバーサルレンダーパイプラインアセットを使って、すべてのカメラに対する HDR レンダリングを有効にします。 |
調査中 開発チームはこの機能の実装方法を調査しています。まだリリース予定日はありません。 |
HD レンダーパイプライン (HDRP) | 互換性あり HDR レンダリングは、すべてのカメラでデフォルトで有効になっています。無効にすることはできません。 |
調査中 開発チームはこの機能の実装方法を調査しています。まだリリース予定日はありません。 |
トーンマッピングは、ある範囲から別の範囲に色値をマッピングする処理です。HDR を使用する場合は、トーンマッピングを使用して HDR 画像バッファの色を変換し、値がディスプレイデバイスが処理できる範囲内に収まるようにする必要があります。トーンマッピングを使用しない場合、特に非常に明るい領域で、画像のディテールと色情報の多くが失われる可能性があります。
SDR 出力で HDR レンダリングを使用する場合は、トーンマッピングを使用してHDR 画像バッファを表示用の SDR 画像に変換する必要があります。Unity はこれを可能にするトーンマッピングのポストプロセスエフェクトを提供します。Post-Processing Stack V2 パッケージ、URP 統合されたポストプロセスソリューション、HDRP 統合されたポストプロセスソリューション のすべてにトーンマッピングエフェクトが含まれています。
HDR 出力で HDR レンダリングを使用する場合、以下のいずれかの方法があります。
フォワードレンダリングパスでは、カメラは、カメラにポストプロセスエフェクトがある場合にのみ HDR をサポートします。これはパフォーマンス上の理由によるものです。カメラでポストプロセスエフェクトが行われない場合、シーンは HDR がサポートされていないバックバッファに直接レンダリングされます。
ディファードシェーディングレンダリングパスでは、カメラに対して HDR が有効になっている場合、ライティングバッファも浮動小数点バッファとして割り当てられます。これにより、ライティングバッファのバンディングが減少します。