在 Unity 中设置特定的颜色空间 更新时间: 2024年12月6日
颜色是让您的应用在 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)
注意 :这是可选设置。如果您没看到默认颜色空间的输出有任何问题,请不要使用此设置。让它保持禁用状态,以使用头戴设备的默认颜色空间。
在架构 视图中,选择 OVRCameraRig 。 在 Inspector 视图中的 OVRManager > 显示 > 色域 下,选择您想要头戴设备在运行时使用的色彩空间。选项包括:
未知 :从 GetHmdolorSpace() 返回默认值,直到系统调用 SetClientColorDesc() 为止。未管理 :没有颜色校正生效,因为此选项会迫使运行时跳过颜色校正。它主要用于研究和实验,应避免用于软件分发。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 格式。
要为特定场景设置颜色空间,请调用脚本中的颜色空间 API,而不是使用 OVRManager 中的设置。这是因为通过 OVRManager 设置颜色空间时,Meta 会将其应用于整个应用。
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