Qué es la gamma y por qué existe
Las dos razones históricas de la codificación gamma, la función exacta de sRGB con su tramo lineal, y los números que conviene tener en la cabeza.
La codificación gamma tiene mala prensa entre programadores porque casi siempre se la conoce por sus efectos secundarios. Merece mejor trato: es una decisión de ingeniería excelente que resolvió dos problemas a la vez, uno de hardware y otro de teoría de la información, y que sigue siendo la razón por la que ocho bits por canal bastan para una imagen sin bandas. El error nunca fue codificar; el error es hacer aritmética sobre el valor codificado.
- Explicar las dos razones que justificaron la codificación gamma.
- Escribir la función de transferencia de sRGB en sus dos sentidos.
- Justificar la existencia del tramo lineal cerca del negro.
- Recordar de memoria los valores de referencia de la curva.
El recorrido completo
flowchart TB A[Luz real de la escena en unidades lineales] --> B[Codificacion de sRGB que reparte los codigos por percepcion] B --> C[Ocho bits por canal y el numero que escribes en CSS] C --> D[Decodificacion de la pantalla] D --> E[Luz emitida por el panel] E --> F[Vision humana con respuesta parecida a la raiz cubica] C --> G[Aritmetica del navegador sobre el valor codificado] G --> H[Mezclas y degradados que no corresponden a la suma de luz] style A fill:#cba6f7,color:#11111b style B fill:#89b4fa,color:#11111b style C fill:#94e2d5,color:#11111b style D fill:#89b4fa,color:#11111b style E fill:#cba6f7,color:#11111b style F fill:#a6e3a1,color:#11111b style G fill:#f9e2af,color:#11111b style H fill:#f38ba8,color:#11111b
La rama de la izquierda es el recorrido para el que se diseñó todo, y funciona: la codificación y la decodificación se cancelan y el ojo recibe la luz correcta. La rama de la derecha es donde entra CSS, y es la que produce los resultados de la lección anterior.
Las dos razones por las que existe
La razón del hardware. Un tubo de rayos catódicos no responde de forma lineal: la luminancia emitida es aproximadamente proporcional al voltaje elevado a una potencia de entre 2.3 y 2.6. Si se le enviaba una señal proporcional a la luz de la escena, la imagen salía con las sombras aplastadas.
La solución de los ingenieros de televisión en los años treinta fue precompensar en el emisor: codificar la señal con el exponente inverso, cerca de 1/2.2, de forma que la no linealidad del tubo la deshiciera. Con eso se ahorraba un circuito corrector en cada televisor a cambio de uno en cada estudio, que era un intercambio evidente cuando había un emisor y millones de receptores.
La razón perceptual, que es la que ha sobrevivido. La sensibilidad del ojo al brillo no es lineal: sigue aproximadamente una raíz cúbica. Distinguimos muchísimo mejor entre dos negros parecidos que entre dos blancos parecidos.
Eso tiene una consecuencia directa sobre la cuantización. Si repartes 256 códigos de forma lineal sobre la luz, gastas la mayoría en la zona alta, donde el ojo no distingue, y dejas la zona baja tan mal cubierta que aparecen bandas en cualquier sombra. Con la codificación gamma, los 256 códigos quedan repartidos de forma aproximadamente uniforme en percepción, con unos 0.4 puntos de claridad perceptual entre códigos consecutivos.
La cifra que lo resume: para conseguir la misma calidad visual con codificación lineal harían falta unos doce bits por canal en lugar de ocho. La gamma es, en la práctica, un compresor perceptual que ahorra la mitad del almacenamiento y del ancho de banda de cualquier imagen.
La función exacta y sus números
La curva se describe con dos tramos y se recorre en los dos sentidos, y de ella salen cuatro números que explican casi todo lo que sorprende en color.
La forma de la curva
sRGB no usa una potencia pura sino una función por tramos. De luz lineal a valor codificado:
si L <= 0.0031308: V = 12.92 x L
si no: V = 1.055 x L^(1/2.4) - 0.055
Y en sentido inverso, de valor codificado a luz lineal:
si V <= 0.04045: L = V / 12.92
si no: L = ((V + 0.055) / 1.055)^2.4
Los dos valores están normalizados entre 0 y 1; para pasar de un byte a V se divide entre 255.
Dos detalles que la gente confunde.
El exponente de la fórmula es 2.4, pero la curva completa equivale a un 2.2. El tramo lineal cerca del cero y el desplazamiento de 0.055 hacen que la función total se aproxime mucho a una potencia de 2.2. Por eso se habla de “gamma 2.2” y en la fórmula aparece un 2.4: no es una contradicción, son dos formas de describir la misma curva.
El tramo lineal existe por condicionamiento numérico. Una potencia pura tiene pendiente infinita en el origen, lo cual amplifica el ruido de los valores más oscuros de forma desmesurada y complica la implementación en enteros. El segmento recto cerca del negro acota esa pendiente en 12.92 y hace la función invertible sin patologías.
Los valores de referencia
Estos cinco valores explican casi todo lo que sorprende en color, y merece la pena memorizarlos:
| valor codificado | byte | luz lineal |
|---|---|---|
| 0.25 | 64 | 5.1% |
| 0.50 | 128 | 21.4% |
| 0.75 | 191 | 52.3% |
| 1.00 | 255 | 100% |
El gris del 50% tiene el 21% de la luz. Esa es la frase que hay que llevarse. El “gris medio” que todo el mundo escribe como #808080 no es medio en luz: es medio en percepción, que es precisamente para lo que se diseñó la codificación. Está exactamente donde tiene que estar; lo que no está donde debería es el resultado de promediar dos de esos números.
Y en la otra dirección, el dato complementario: la mitad de la luz se codifica como el byte 188, no como el 128.
El extremo de la pantalla
Un último matiz que aparece al comparar colores entre dispositivos. sRGB define la curva de codificación, pero la curva que aplica un monitor real no es exactamente su inversa: la referencia habitual es una potencia de 2.2, y en entornos de visualización oscuros se usa 2.4.
Esa pequeña discrepancia es deliberada. Se llama gamma del sistema y suele valer alrededor de 1.1: la imagen se muestra con algo más de contraste del que tenía la escena original, porque una imagen vista en una habitación con luz ambiente parece más plana de lo que es y ese realce lo compensa. Es una decisión de percepción, no un error de calibración, y explica por qué una foto se ve distinta en un móvil al sol que en un monitor en penumbra.
La forma más común de contar esto es “la gamma existe por culpa de los monitores antiguos y arrastramos ese error”, y esa versión, además de falsa, lleva a la conclusión equivocada. Los tubos de rayos catódicos desaparecieron hace veinte años y la codificación sigue viva, no por inercia sino porque resuelve un problema que no ha desaparecido: repartir un número limitado de códigos por un rango de luminancias de forma que el ojo no vea escalones. Que la curva de compensación del tubo coincidiera casi exactamente con la respuesta inversa del sistema visual humano fue una coincidencia extraordinaria de la historia de la tecnología, y es la razón por la que el formato de imagen que inventaron para la televisión de los años treinta sigue siendo la elección correcta para una pantalla OLED de 2026. Si la gamma se eliminara mañana, habría que reinventarla, y saldría prácticamente igual. La conclusión operativa cambia por completo con este encuadre: el objetivo nunca es “trabajar en lineal” ni “corregir la gamma”, sino saber en qué dominio está cada número que tocas —codificado para almacenar y transmitir, lineal para sumar luz, perceptual para juzgar diferencias— y convertir explícitamente en las fronteras. Ese es exactamente el modelo mental que hay detrás de que CSS te pida hoy el espacio de interpolación como argumento.