Unity 2023 におけるクロスプラットフォームの HDR ディスプレイサポート

Unity Graphics チームよりご挨拶申し上げます。Unity 2023.2.0a18(および 2023.2 ベータ版)以降、Unity エディターおよび Unity スタンドアロンプレイヤーでは、HDR 出力がクロスプラットフォームでサポートされ、ユニバーサルレンダーパイプライン(URP)および HD レンダーパイプライン(HDRP)との完全な互換性が提供されます。
ハイダイナミックレンジ(HDR)ディスプレイの普及は以前にも増して進んでいます。これらのディスプレイでは、より高いピーク明度と広い色域の画像を再現することが可能となっており、より高度なコントラスト(ハイライト/シャドウ)とカラー彩度が表現されます。その結果、シーン全体でよりリアルな輝度バリエーションと緻密なサーフェスディテール、および自然な奥行き感が得られます。

プロジェクトで HDR ディスプレイを有効にする方法や、プラットフォームのサポート、有用なガイドラインについて詳しく説明する前に、HDR レンダリングとディスプレイの概念について簡単に確認していきましょう。
HDR レンダリングが有効になっている場合、カメラはシーンを浮動小数点フレームバッファにレンダリングします。これにより、レンダーパイプラインはより広範囲のカラー値を保存し、ディテールをより高度に保持できるようになります。ライティングやポストプロセスなどのシェーダー計算も、(SDR レンダリングと比べて)より正確な値を使って実行されるため、より説得力のあるリアルな結果が得られます。
HDR レンダリングは何年も前からデフォルトのワークフローとなっていますが、HDR 対応ディスプレイがない場合、表示可能な画像のカラー深度はチャンネルあたり最大 8 ビットに制限されます。これにより、1 ピクセルで表現できる色の最大数(16,777,216 通りのカラー値)と最大明度範囲が制限されます。HDR から SDR へのトーンマッピングを使用することで、結果を最終的にスワップチェーン画像に書き込んで表示する前に、カラーバッファの HDR 値がローダイナミックレンジに再マップされ、オプションでガンマ補正が適用されます。
Unity 2022.1 では、HD レンダーパイプライン(HDRP)用に HDR ディスプレイのサポートが導入されました(デスクトップおよびコンソールプラットフォームがターゲットの場合)。これは、スワップチェーンを作成する際にデバイスネイティブの色空間を設定し、カスタムの HDR トーンマッピングを使用してカラーバッファの内容をディスプレイネイティブの HDR 範囲に再マップすることで機能します。その後、HDR スワップチェーン画像に書き込む前の最終ステップとして、HDR エンコーディングが適用されます。
HDR 出力が有効になっている場合は、より高いカラー深度(チャンネルあたり 10 ビットまたは 16 ビット)が有効になるようにスワップチェーン画像のフォーマットが設定されます。これにより、各ピクセルでより広範なカラー値を表現できるようになり(おおよそ 680 億通りの値)、明度の範囲が大幅に増加します。
Unity 2023.2 のリリースにより、Unity エディターと Unity スタンドアロンプレイヤーでは、すべてのレンダーパイプラインと対応プラットフォームで完全な HDR トーンマッピングとディスプレイサポートが提供されるようになりました。
新しい HDR ディスプレイ設定は、プロジェクトのプレイヤー設定内にあります。「Edit」>「Project Settings」>「Player」>「Other Settings」で、次の項目を設定します。
- Allow HDR Display Output
- Use HDR Display Output
これらの設定を有効にすると、サポートされているプラットフォームで実行される場合に、Unity スタンドアロンプレイヤーおよび Unity エディターで HDR 出力が有効になります。

HDR 出力が有効になっている場合は、必要に応じてスワップチェーンビット深度を設定して、表示される画像のカラー深度を低い値(チャンネルあたり 10 ビット)または高い値(チャンネルあたり 16 ビット)に設定することもできます。注:すべてのデバイスが 16 ビットのバッファフォーマットをサポートしているわけではありません。10 ビットにフォールバックすることもあります。
ユニバーサルレンダーパイプライン(URP)を使用している場合は、使用しているレンダーパイプラインアセットで HDR レンダリングが有効に設定されていることを確認してください。プロジェクトに含まれている RP アセット(通常は「Assets」>「Settings」フォルダー内にあります)を選択し、プロジェクトのインスペクターに移動して、「Quality」>「HDR」を有効にしてください。

最後に、カメラに影響を及ぼすポストプロセスボリュームにトーンマッピングコンポーネントを追加して、HDR トーンマッピングが有効になっていることを確認してください。HDR 出力が有効になっている場合、以下のトーンマッピング設定はディスプレイの HDR 機能によって制御される必要があります。
- サポートされる最小明度
- サポートされる最大明度
- ペーパーホワイト値:この値は、ディスプレイ上で表現される白い紙の面の明度を表すものです。これによってディスプレイ全体の明度が決まります。
ディスプレイの HDR 範囲とペーパーホワイト値には、C# API を使用してアクセスできます。

最適なビューアー体験を提供するために、特定の HDR キャリブレーションインターフェースを介して、これらのパラメーターに対するランタイムコントロールを提供することをお勧めします。近日中に新しい HDR キャリブレーションのサンプルプロジェクトを共有する予定です。利用開始にあたっては、そちらをリファレンス実装としてご使用いただけます。
HDR のトーンマッピングと出力に関する詳細については、URP での HDR 出力と HDRP での HDR 出力に関する最新のドキュメントをご覧ください。
HDR 出力をランタイム時に利用するには、デバイスが HDR 対応のディスプレイに接続されていて、HDR のスワップチェーンとプレゼンテーションを有効にするための必要なサポートが GPU に備わっている必要があります。
互換性のないデバイスで実行されている場合、HDR 出力はランタイム時に自動的に無効になります。メインディスプレイで HDR 表示がサポートされているどうかや、HDR 出力が有効になっているかどうかは、HDROutputSettings.available を使用して照会できます。
Unity 2023.2 では、Unity 2022 での既存のデスクトップサポートとコンソールサポートに加えて、以下のプラットフォームに対するモバイルサポートが導入されています。
- iOS プレイヤー(iOS 16 以降、iPadOS 16 以降)
- Vulkan および GLES を使用している Android プレイヤー(Android 9 以降、デバイスの機能によって異なる)
一般的なモバイルデバイスで、HDR ディスプレイのサポートを提供しているものとしては、iPhone X 以降、Samsung Galaxy S10 以降、Galaxy Note 10 以降、Galaxy Tab S6 以降などがあります。
今回のリリースでは、対応可能なプラットフォーム向けに XR サポートも導入されています。HDR ディスプレイのサポートを確認するには、XR プラットフォームのドキュメントをご覧ください。
HDR 処理は 2 つのステップで適用されます。HDR トーンマッピングと HDR エンコーディングです。これらのステップは通常、最後のポストプロセスのレンダーパス中に適用されます。
唯一の例外は、URP で追加のパスが挿入され、ポストプロセスの後に実行される場合です。これらの場合、HDR エンコーディングは「final blit」パスで個別に適用されます。これは常にレンダーパイプラインの最後に呼び出されます。
RenderPassEvent.AfterRenderingPostProcessing イベントで挿入されるカスタムオーバーレイパスでは、HDR 出力のために特別な処理が必要となります。HDR 出力がアクティブでポストプロセスが有効な場合は、以前のパスでトーンマッピングと色空間の変換が適用されていると考えられます。そのため、予期されるダイナミックレンジと色空間で動作するように、カスタムエフェクトを作成する必要があります。
HDR 出力を使用する場合は、表示可能なすべてのカメラで HDR レンダリングを有効にすることをお勧めします。カメラ単位で HDR レンダリングを無効にすることもできますが、ポストプロセス後に実行されるレンダーパスや、ポストプロセスの後に挿入されるエフェクトがないことを確認する必要があります。SDR レンダリングを HDR 出力で使用する場合、以下の機能はサポートされません。
- アップスケーリング
- FXAA
- HDR デバッグモード
- ポストプロセス後のカスタムパス
2D Renderer の場合、SDR レンダリングを HDR 出力で使用する場合は、ポストプロセスがオフになっていることを確認してください。
上記の制限事項やガイドラインに関する詳細については、公式ドキュメントを参照してください。
新しい HDR ディスプレイサポートをぜひご自分のプロジェクトで試してみて、ご意見をお聞かせください。
皆様のフィードバックは Unity にとって重要であり、有意義な解決策を特定するのに役立っています。公開されているロードマップをご覧いただき、ご自身のニーズに最も適した機能に投票してください。さらなる機能変更をご希望の場合は、機能リクエストを送信するか、直接チームまでお問い合わせください。お気軽にどうぞ。
今回の記事が有益と感じた方は、Tech from the Trenches シリーズで、Unity 開発者による今後の技術解説もぜひチェックしてください。