Unityで特定の色空間を設定する 更新日時: 2024/12/06
色は主要な構成要素のひとつであり、Meta Questヘッドセットのアプリを生き生きとしたものにすることができます。色を扱う上で課題となるのが、LCDモニターとOLED Meta Questヘッドセットなど、ディスプレイや技術が違うと、色の値が同じでも違う色に見えてしまうことがあるという点です。違いには、低レベルのバンディング、色相のシフト、色の過度な飽和や不足などが含まれる場合があります。アプリ開発中にモニターに表示される色が、ターゲットヘッドセットに表示されるものと一致しない場合があります。ディスプレイが違うと使う色空間が異なる場合があり、色の値の解釈の仕方が変わるためです。
以下の図は、Rec 2020とRec 709の色のレンダリングの違いを示しています。
色空間は、色の範囲の定義であり、色を管理しやすくするものです。これにより、特定の色情報に基づいて色を再現するための表示デバイスの機能が定義されます。理解しやすいように、表示デバイスの機能は通常、業界標準の色度図に基づくグラフで表現されます。そのグラフでは、人間の目が認識できるあらゆる色値をx座標およびy座標に対応付けています。この図では、三角形が特定の色空間を表しており、その頂点は赤、緑、青の基本原色を表しています。白色点はD65で表されています。色の管理については、
色と明るさのマスターガイド をご覧ください。
色空間の違いによって生じる色のバリエーションを解決するため、ヘッドセットの実行時に特定の色空間を設定すると、アプリをリマスターすることができます。デフォルトの色空間は、次のとおりです。
Oculus Rift : Adobe RGBとDCI-P3の間Oculus Rift S、Meta Quest 2 : Rec 709Meta Quest : Rec 2020標準の色空間に加えて、Meta固有のカスタム色空間を選択し、LCDとOLEDなどのディスプレイ技術の異なるアセットに合わせてアプリをマスターすることができます。
以下の表は、利用可能な色空間とその原色のリストです。
標準色空間 :
色空間
赤
緑
青
白
Rec_2020
(0.708, 0.292)
(0.17, 0.797)
(0.131, 0.046)
D65 (0.313, 0.329)
Rec_709
(0.640, 0.330)
(0.292, 0.586)
(0.156, 0.058)
D65 (0.313, 0.329)
P3
(0.680, 0.320)
(0.265, 0.690)
(0.150, 0.060)
D65 (0.313, 0.329)
Adobe_RGB
(0.640, 0.330)
(0.210, 0.710)
(0.150, 0.060)
D65 (0.313, 0.329)
カスタム色空間 :
色空間
赤
緑
青
白
Rift_CV1
(0.666, 0.334)
(0.238, 0.714)
(0.139, 0.053)
D75 (0.298, 0.318)
Rift_S (およびQuest 2)
(0.640, 0.330)
(0.300, 0.600)
(0.150, 0.060)
D75 (0.298, 0.318)
Quest (1)
(0.6610, 0.3382)
(0.2281, 0.7178)
(0.1416, 0.0419)
D75 (0.2956, 0.3168)
注 : これは任意の設定です。デフォルトの色空間で出力に問題がなければ、この設定は使用しないでください。ヘッドセットのデフォルトの色空間を使用する場合は、この設定を無効のままにします。
[Hierarchy (階層)] ビューで、[OVRCameraRig] を選択します。[Inspector (インスペクター)] ビューで、[OVRManager] > [Display (ディスプレイ)] > [Color Gamut (色域)] の順に進み、実行時にヘッドセットで使いたい色空間を選びます。オプションは次のとおりです。
Unknown (不明) : SetClientColorDesc()が呼び出されない限り、GetHmdolorSpace()からデフォルト値が返されます。Unmanaged (管理しない) : このオプションでは実行時に色補正が強制的にスキップされるため、色補正は適用されません。これは主として調査や実験に役立ちますが、ソフトウェア配信では使用しないでください。Rec_2020 : Recと比較した場合、こちらのほうが色域が広くなっています。709色空間。Rec_709 : Oculus Rift Sのデフォルトの色空間。これは、狭い色空間であり、LCDパネルで広く使用されています。原色はsRGB色空間と同じです。Rift_CV1 : カスタム色空間。P3とAdobe RGBの色空間の間に位置する基本原色。Rift_S : カスタム色空間。Recと同じ原色。709色空間、ただしD75の白色点を使用。Quest 1 : カスタム色空間。P3とAdobe RGBの色空間の間に位置する原色。P3 : DCI-P3標準色空間 。Adobe_RGB : 色域が広く、D65白色点を使用。注 : この機能では、色空間の再マッピングのみ処理されます。すべての色空間は、指定がなければD65白色点を使用します。明るさ、コントラスト、ガンマ曲線には影響しません。ガンマなど、これらの要素の一部は使用されているテクスチャー形式によって処理されます。GPUサンプラーの観点からは、各テクスチャーは引き続き線形輝度(テクスチャーサンプラーによって線形に変換されるsRGBを含む)として扱われます。
特定のシーンに色空間を設定するには、OVRManagerの設定を使う代わりに、スクリプトで色空間APIを呼び出します。OVRManagerから色空間を設定すると、アプリ全体に設定されることになるからです。
デフォルトカラースペースまたは現在のカラースペースを取得する: OVRManagerには、ヘッドセットのデフォルトと現在の色空間をそれぞれ保管するnativeColorGamutとcolorGamutの変数があります。どちらかの変数を使用してヘッドセットの色空間を取得します。
// Retrieves the current color space
OVRManager.ColorSpace CurrentColorSpace = OVRManager.colorGamut;
// Retrieves the default color space
OVRManager.ColorSpace HmdColorSpace = OVRManager.nativeColorGamut;
自分が選んだ色空間を設定するには、新しい値をOVRPlugin.colorGamut変数に割り当てます。
OVRPlugin.colorGamut = OVRManager.ColorSpace.Rec_2020;
利用可能な色空間の値は次のとおりです。
OVRManager.ColorSpace.UnknownOVRManager.ColorSpace.UnmanagedOVRManager.ColorSpace.Rec_2020OVRManager.ColorSpace.Rec_709OVRManager.ColorSpace.Rift_CV1OVRManager.ColorSpace.Rift_SOVRManager.ColorSpace.QuestOVRManager.ColorSpace.P3OVRManager.ColorSpace.Adobe_RGB