RGB 和 sRGB 的主要区别在于它们的颜色空间编码方式:
RGB(线性 RGB)
- 使用线性的颜色空间
- 颜色值和实际亮度成正比关系
- 适合进行颜色计算和处理
- 数学公式:输出亮度 = 输入值
sRGB(标准 RGB)
-
使用非线性的颜色空间(gamma 约为 2.2)
-
更接近人眼感知的方式
-
是显示器的标准颜色空间
-
数学转换公式(简化版):
if (linear <= 0.0031308) sRGB = 12.92 * linear else sRGB = 1.055 * pow(linear, 1/2.4) - 0.055
主要差异点
Gamma 校正
- sRGB 包含 gamma 校正
- RGB 是线性的,没有 gamma 校正
- gamma 校正让暗部细节更丰富
使用场景
-
渲染计算:使用线性 RGB
- 光照计算
- 颜色混合
- HDR 渲染
-
最终显示:使用 sRGB
- 输出到显示器
- 保存图片
- 用户界面
在图形编程中的应用
// Vulkan中指定sRGB格式
VkFormat colorFormat = VK_FORMAT_B8G8R8A8_SRGB;
// OpenGL中启用sRGB
glEnable(GL_FRAMEBUFFER_SRGB);正确处理 RGB 和 sRGB 的转换对于获得准确的颜色显示非常重要,特别是在进行物理基础渲染(PBR)时。不正确的处理会导致颜色看起来过亮或过暗。