Pregunta

Espacio de color. Bueno, todos conocen RGB: tres valores normalizados en el rango [0.0,1.0], que tienen el significado de la intensidad de los componentes de color azul rojo verde; Esta intensidad se entiende como lineal, ¿no?

Gama. Hasta donde puedo entender, Gamma es una función que mapea los componentes de color RGB a otro valor. Buscando en Google esto, he visto funciones lineales y funciones no lineales ... las funciones lineales parecen escalar los componentes RGB, por lo que parece sintonizar el brillo de la imagen; Las funciones no lineales parecen "descomprimir" los componentes más oscuros/más claros.

Ahora, estoy empezando a implementar un visor de imágenes, que mostrará diferentes formatos de imagen como textura. Me gustaría modificar el gamma de estas imágenes, por lo que debería construir un sombreador de fragmentos y ejecutar el quad texturizado. Bien, pero ¿cómo determino la corrección de gamma correcta?

OpenGL funciona con espacio de color RGB lineal, utilizando componentes de punto flotante. De hecho, podría calcular los valores corregidos por gamma a partir de esos valores (con precisión de punto flotante especial), por lo que se muestran después de haber sujetado el valor corregido por gamma.

Primero, determinaré la rampa gamma. ¿Cómo podría determinarlo? (analitamente o usando tablas de búsqueda)

Luego, vine para investigar en la extensión OpenGL EXT_FRAMEBUFFER_SRGB, que parece muy relacionado con la extensión Ext_texture_srgb.

Ext_texture_srgb Introducir un nuevo formato de textura que se utiliza para linealizar los valores de texel en el espacio lineal RGB. (Nota 1) De esta manera, soy consciente del espacio de color SRGB y lo uso como espacio de color RGB lineal.

En su lugar, Ext_FrameBuffer_SRGB Extension me permite codificar los valores lineales de RGB en el SRGB FrameBuffer, sin preocuparme por ello.

...

Espera, ¿toda esta información para qué? Si puedo usar SRGB FrameBuffer y cargar texturas SRGB, procese que las texturas sin conversiones SRGB ... ¿por qué debería corregir gamma?

¿Quizás pueda corregir el gamma de todos modos, incluso en un búfer SRGB? ¿O mejor no? Y brillo y contraste: ¿deben aplicar antes o después de la corrección gamma?

Esa es mucha información, me estoy confundiendo ahora. ¡Espero que alguien de ustedes pueda explicarme más todos estos conceptos! Gracias.

...

Hay otra pregunta. En caso de que el dispositivo gamma sea diferente del "estándar" 2.2, ¿cómo "acumulo" diferentes correcciones gamma? No sé si está claro: en la imagen de caso, los valores de RGB ya están corregidos para un monitor con un valor gamma de 2.2, pero el monitor tiene un gamma de valor 2.8, ¿cómo corregro la gamma?


(1) Aquí hay algún extracto para resaltar lo que quiero decir:

El espacio de color SRGB se basa en las características de monitor típicas (no lineales) esperadas en una oficina con poca luz. Ha sido estandarizado por la Comisión Electrotécnica Internacional (IEC) como IEC 61966-2-1. El espacio de color SRGB corresponde aproximadamente a 2.2 corrección gamma.


¿Esta extensión proporciona algún tipo de formato SRGB FrameBuffer o las imágenes de garantía de que las texturas SRGB se "verán bien" cuando salga a un dispositivo que admite un espacio de color SRGB?

   RESOLVED:  No.

  Whether the displayed framebuffer is displayed to a monitor that
    faithfully reproduces the sRGB color space is beyond the scope
    of this extension.  This involves the gamma correction and color
    calibration of the physical display device.

    With this extension, artists can author content in an sRGB color
    space and provide that sRGB content for use as texture imagery
    that can be properly converted to linear RGB and filtered as part
    of texturing in a way that preserves the sRGB distribution of
    precision, but that does NOT mean sRGB pixels are output
    to the framebuffer.  Indeed, this extension provides texture
    formats that convert sRGB to linear RGB as part of filtering.

    With programmable shading, an application could perform a
    linear RGB to sRGB conversion just prior to emitting color
    values from the shader.  Even so, OpenGL blending (other than
    simple modulation) will perform linear math operations on values
    stored in a non-linear space which is technically incorrect for
    sRGB-encoded colors.

    One way to think about these sRGB texture formats is that they
    simply provide color components with a distribution of values
    distributed to favor precision towards 0 rather than evenly
    distributing the precision with conventional non-sRGB formats
    such as GL_RGB8.

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top