Para las matemáticas del sombreador, ¿por qué el RGB lineal debe mantener la gama de sRGB?

13

sRGB a menudo se contrasta con "RGB lineal".

  • Las imágenes se almacenan en el disco y se pasan a pantallas en sRGB, que tiene una intensidad aproximadamente perceptivamente uniforme.
  • La matemática del sombreador se realiza en RGB lineal, que es físicamente uniforme en intensidad.
  • La corrección gamma se puede aplicar para convertir entre los dos.

Ahora, sRGB tiene un estándar que especifica colorimétricamente su gama, indicando exactamente dónde se encuentran el rojo puro, el verde, el azul y el blanco. Pero no existe un estándar correspondiente para solo "RGB lineal". Se puede decir que cualquier triángulo en un diagrama de cromaticidad es lineal y, de hecho, hay varias gamas conocidas para elegir:

Gama RGB

En la práctica, cuando decimos "RGB lineal", queremos decir "sRGB sin la corrección gamma". (Esto es implícitamente lo que estamos haciendo cuando aplicamos la corrección gamma sRGB como un paso final de procesamiento posterior, pero ignoramos los espacios de color para el resto de la canalización de renderizado).

Pero por qué es eso gama RGB es la correcta para los cálculos de interpolación e iluminación? Parece arbitrario En todo caso, ¿no querríamos usar la gama más grande posible para cálculos internos, y luego recortar o escalar los colores a la gama del dispositivo de salida al final?

¿Es que la iluminación RGB será aproximada pase lo que pase, por lo que no importa qué gama elijamos, y también podríamos elegir la más cercana a la que la pantalla admite de forma nativa? ¿Es solo negligencia? ¿O los cálculos en estas diferentes gamas en realidad producen exactamente los mismos resultados, de alguna manera?

Maxpm
fuente

Respuestas:

13

Debe evitarse hablar de RGB lineal porque no le dice nada sobre los intrínsecos del espacio de color RGB, es decir, las funciones de transferencia de componentes primarios, de punto blanco y de color. Hace unos años, suponiendo que era sRGB era mediocre, pero hoy en día con DCI-P3 y BT.2020 es muy común, debe descartarse.

La gama ideal para el renderizado es la que minimizará los errores con respecto a una referencia del mundo real o, más convenientemente, un renderizado espectral de verdad fundamental. La primera conclusión de esta oración es que los diversos espacios de color RGB no son equivalentes y no producirán resultados similares.

Uno podría pensar que realizar dos renders con los mismos colores base pero uno donde están codificados con sRGB / BT.709 y el otro donde están codificados con DCI-P3 y luego convertir las dos imágenes resultantes a, por ejemplo, ACES2065-1 producen las mismas imágenes pero no es el caso. Algunas operaciones matemáticas debido a la naturaleza del álgebra lineal y las matrices dependen de los primarios de espacio de color RGB dados, es decir, en función de los espacios de color. Las mismas operaciones realizadas en diferentes espacios de color RGB producirán diferentes valores de triestímulo una vez convertidos de nuevo al espacio de color CIE XYZ. Por ejemplo, las operaciones de multiplicación, división y potencia dependen primarias del espacio de color RGB, mientras que la suma y la resta no lo son.

Espacios de color RGB y exponenciación

Esta imagen ilustra el efecto de multiplicar varios colores por sí mismos en diferentes espacios de color RGB: los colores resultantes son diferentes. Las diversas muestras se generan de la siguiente manera: se seleccionan 3 valores aleatorios de espacio de color sRGB y se convierten en los tres espacios de color RGB estudiados, se exponencian, se vuelven a convertir en espacio de color sRGB, se representan en el Diagrama de cromaticidad CIE 1931 a la izquierda y se muestran como muestras en el Correcto.

Las pruebas e investigaciones realizadas por Ward y Eydelberg-Vileshin (2002) , Langlands y Mansencal (2014) y Mansencal (2014) mostraron que las gamas con primarias más cercanas al lugar espectral, es decir, primarias espectralmente afiladas, tienden a minimizar los errores en comparación con el terreno espectral La verdad rinde.

Aquí hay una imagen que rendericé recientemente con Mitsuba para volver a validar nuestros hallazgos con Anders:

Renderizar espacios de color

Esos son renders de la misma escena usando primarios BT.709 (primera fila), 47 contenedores espectrales (segunda fila), primarios BT.2020 (tercera fila), espectral menos BT.709 primarios renders residuales (cuarta fila), espectral menos BT .2020 primarios representa residuos (quinta fila). La última fila muestra imágenes compuestas ensambladas con tres franjas verticales de los renderizados primarios BT.709 primarios, espectrales y primarios BT.2020. La iluminación directa tiende a coincidir entre los renders. Las áreas que muestran el efecto de múltiples rebotes de luz, es decir, el techo, en los renders primarios BT.709 y BT.2020 tienden a exhibir una mayor saturación, especialmente en los renders primarios BT.709 o una ligera pérdida de energía, especialmente en el BT .2020 render. Excluyendo valores atípicos, por ejemplo, la fuente de luz visible, el RMSE con el renderizado espectral es 0.0083y 0.0116 para las representaciones primarias BT.2020 primarias y BT.709 primarias.

Ahora no significa que siempre tendrán un mejor rendimiento, y uno podría ser capaz de producir ejemplos que exhiban un sesgo hacia BT.709 / sRGB. La conclusión principal es que los renderizados RGB no pueden coincidir con los renderizados espectrales y las gamas anchas y afiladas tienden a funcionar mejor. En cuanto a elegir un espacio de color de representación, elegiría uno con una amplia gama que abarque Pointer's Gamut y DCI-P3, BT.2020 o ACEScg son excelentes candidatos para eso.

Kel Solaar
fuente
5

En la práctica, cuando decimos "RGB lineal", queremos decir "sRGB sin la corrección gamma".

Sería más correcto decir que existe el "espacio de color sRGB" y el "espacio de color sRGB linealizado", con la definición de especificación sRGB la conversión de uno a otro.

Sí, hay infinitos espacios de color "RGB lineal". Pero lo que todos estos espacios de color "RGB lineales" tienen en común es que son lineales . Esto significa que, si duplica el valor de cualquier componente, duplica la intensidad de la luz que representa el componente. Eso es esencialmente lo que significa ser "lineal": hay un mapeo lineal entre los valores de color y la intensidad resultante de ese color de luz.

Esto es importante porque las ecuaciones de iluminación no funcionan si los valores de color no se asignan linealmente a las intensidades de luz. Pero a las ecuaciones no les importa qué espacio de color lineal utilices; solo tienes que elegir uno.

Por lo tanto, el espacio de color sRGB linealizado no es más correcto que un espacio de color Adobe RGB linealizado o un espacio de color SWOP CMYK linealizado. Lo que importa son precisamente dos cosas:

  1. El espacio de color representa un mapeo lineal de valores a intensidades de luz.
  2. El espacio de color elegido se usa constantemente en la ecuación de iluminación. Es decir, todos los colores utilizados en la ecuación de iluminación provienen del mismo espacio de color (lineal).

¿Es que la iluminación RGB será aproximada pase lo que pase, por lo que no importa qué gama elijamos, y también podríamos elegir la más cercana a la que la pantalla admite de forma nativa?

Eso, y el hecho de que la conversión sRGB está integrada en el hardware en estos días, mientras que la conversión de otros espacios de color con frecuencia no lo está. Entonces, si desea utilizar el espacio de color linealizado Adobe RGB, debe hacer mucho trabajo en sus sombreadores para linealizar los valores de texel y realizar la interpolación bilineal / trilineal en ellos correctamente (lo que debe hacerse después de la linealización) antes de que pueda aplicar ellos a la ecuación de iluminación. Y luego tiene que hacer la conversión de Adobe RGB linealizado a sRGB linealizado, para que pueda escribir en una imagen de framebuffer sRGB para su visualización.

O simplemente puede usar sRGB linealizado en todas partes y tener rendimiento. Este último tiende a ganar.

Nicol Bolas
fuente
¿Qué opinas de este artículo? Si estoy leyendo bien, demuestra que los cálculos en diferentes espacios de color lineales hacen conducen a diferentes resultados.
Maxpm
@ Maxpm: Eso es interesante. Lo que leí de ese documento es que el problema se reduce al hecho de que la luz no se ajusta realmente a nuestro modelo de espacio de color RGB. Esto causa resultados visuales divergentes en lo que matemáticamente debería ser lo mismo. Allí, la única solución parece ser dejar de usar RGB y comenzar a usar la representación espectral.
Nicol Bolas
@Maxpm pero, por supuesto, lo hacen después de que todos los otros espacios son diferentes. Pero entonces RGB no es color, así que está eso. Pero luego está la pregunta qué correcto quieres ser. Las ganancias se hacen cada vez más pequeñas,
joojaa
0

Hay dos lados de por qué sRGB en particular. Para las imágenes de entrada que no son HDR, se afirma que se debe suponer que están comprimidas a sRGB (si esta afirmación es precisa es una historia diferente). Por lo tanto, antes de que pueda realizar cualquier operación matemática lineal en ellos, debe descomprimirlos de sRGB. También es posible que una imagen se haya capturado y comprimido a una representación diferente que no sea sRGB, en cuyo caso debe descomprimir esa representación específica. En cualquier caso, la codificación implica una cierta gama de la que la imagen de entrada nunca escapará (porque las imágenes almacenadas en sRGB generalmente se truncan a 8 bits por canal), pero las matemáticas del sombreador no tienen que permanecer en esa gama después de la entrada La imagen se descomprime. Pero al final tienes que considerar la pantalla.

Si tiene una imagen y es hora de mostrarla, la codifica en una representación que requiere el dispositivo de visualización. Los CRT eligieron sRGB, luego las pantallas LCD emularon eso, por lo que la compresión sRGB para la pantalla del monitor ha sido la opción común durante las últimas décadas, y eso restringió la salida para quedarse dentro de la gama sRGB, o de lo contrario se producirá un recorte. Las pantallas de rango más amplio no tienen que ajustarse a esa gama exacta.

(Creo que la base para la afirmación de que las imágenes hechas por el hombre están codificadas con sRGB es porque se suponía que esas imágenes habían sido creadas en pantallas sRGB)

Entonces, ahora probablemente pueda ver mejor por qué sRGB en particular fue compatible con el hardware para la entrada matemática del sombreador y la visualización de imágenes. Es el caso comun. Además, tiene buenos méritos para reducir los artefactos perceptuales de las bandas de color, por lo que es una buena forma de comprimir los colores en 8 bits y hacer que se vean plausibles para los humanos.

wbahnassi
fuente
0

Si permite valores fuera del rango 0..1, incluso con los primarios bastante limitados de sRGB, aún puede abordar toda la gama visual humana. Por lo tanto, para almacenar valores de color de luz de coma flotante, no debería importar demasiado qué primarios use. Sin embargo, hacer cualquier tipo de matemática multiplicativa se vuelve un poco extraño, ya que las coordenadas arbitrarias de las primarias actúan como el 'pivote' de escala. Las primarias sRGB se usan generalmente porque tradicionalmente sus datos de entrada están codificados con sRGB y la pantalla de salida es sRGB o rec709 ... Con rec2020, la mitad de eso ha cambiado, pero por ahora, la mayoría de sus datos de entrada probablemente todavía estén codificados con sRGB, por lo que usar Las mismas primarias que su almacenamiento es la opción más fácil.

Hodgman
fuente