Version: 2019.1
Linear rendering overview
Gamma Textures with linear rendering

Flujo de trabajo lineal o gamma

El Editor de Unity ofrece flujos de trabajo tanto lineales como gamma. El flujo de trabajo lineal tiene un cruce de espacios de color donde Texturas que se crearon en el espacio de color gamma se pueden representar de forma correcta y precisa en un espacio de color lineal. Consulte la documentación en Descripción general del renderizado lineal para obtener más información sobre gamma y el espacio de color lineal.

Para una lectura adicional, mire la documentación acerca de:

Las texturas tienden a guardarse en el espacio de color gamma, mientras que los shaders esperan un espacio de color lineal. Como tal, cuando las Texturas se muestrean en Shaders, los valores basados en gamma conducen a resultados inexactos. Para superar esto, puede configurar Unity para usar una muestra RGB para cruzar de gamma a muestreo lineal. Esto asegura un flujo de trabajo lineal con todas las entradas y salidas de un Shader en el espacio de color correcto, lo que resulta en un resultado correcto.

To specify a gamma or linear workflow, go to Edit > Project Settings, then select the Player category, navigate to the Other Settings, open the Rendering section, and change the Color Space to Linear or Gamma, depending on your preference.

Player settings showing the Color Space setting
Player settings showing the Color Space setting

Flujo de trabajo en el espacio de color gamma

Si bien un flujo de trabajo lineal garantiza una representación más precisa, a veces puede desear un flujo de trabajo gamma (por ejemplo, en algunas plataformas, el hardware solo admite el formato gamma).

To do this, set Color Space to Gamma in the Player settings (menu: Edit > Project Settings, then select the Player category). With this option selected, the rendering pipeline uses all colors and textures in the gamma color space in which they are stored - textures do not have gamma correction removed from them when they are used in a Shader.

Tenga en cuenta que puede optar por omitir el muestreo sRGB en el modo Color Space: Gamma desmarcando la casilla __sRGB (Color Texture) __ en la Ventana del Inspector para la textura.

** Nota **: Aunque estos valores están en el espacio gamma, todos los cálculos Shader del Editor de Unity aún tratan sus entradas como si estuvieran en espacio lineal. Para garantizar un resultado final aceptable, el Editor realiza un ajuste para tratar los formatos no coincidentes cuando escribe las salidas de Shader en un framebuffer y no aplica la corrección de gamma al resultado final.

Flujo de trabajo en el espacio de color lineal

Trabajando en el espacio de color linea da un renderizado más preciso que trabajar en el espacio de color gamma.

To do this, set Color Space to Linear in the Player settings (menu: Edit > Project Settings, then select the Player category).

Puede trabajar en un espacio de color lineal si sus Texturas se crearon en un espacio de color lineal o gamma. En el espacio de color gamma, las entradas de textura al espacio de color lineal, el programa shader se suministra al shader con la corrección de gamma eliminada de ellas.

Texturas lineales

Seleccionando Color Space: __ Linear__ asume que las texturas están en el espacio de color gamma. Unity usa el muestreo de sRGB de su GPU de manera predeterminada para pasar de gamma a espacio de color lineal. Si las texturas se crean en el espacio de color lineal, debe omitir el muestreo sRGB. Consulte la documentación en Trabajando con texturas lineales para obtener más información.

Texturas Gamma

  • Cruzar desde el espacio de color gamma al espacio de color lineal requiere algunos ajustes. Consulte la documentación sobre Texturas Gamma con renderizado lineal para más información.

Notas

Para los colores, esta conversión se aplica implícitamente, ya que el Editor de Unity ya convierte los valores en puntos flotantes antes de pasarlos a la GPU como constantes. Al muestrear Texturas, la GPU elimina automáticamente la corrección gamma, convirtiendo el resultado en espacio lineal.

Estas entradas se pasan al Shader, y los cálculos de iluminación tienen lugar en el espacio lineal como lo hacen normalmente. Cuando se escribe el valor resultante en un framebuffer, se corrige en gamma directamente o se deja en el espacio lineal para una corrección de gamma posterior, esto depende de la configuración de rendering actual. Por ejemplo, en el rango dinámico alto (HDR), los resultados de representación se dejan en el espacio lineal y se corrige la gamma más tarde.

Diferencias entre el espacio de color gamma y lineal

Cuando se utiliza el renderizado lineal, los valores de entrada a las ecuaciones de iluminación son diferentes a los del espacio gamma. Esto significa resultados diferentes según el espacio de color. Por ejemplo, las superficies de impacto ligero tienen diferentes curvas de respuesta, y los efectos de imagen se comportan de manera diferente.

Light fall-off (Caída de la luz)

El fall-off (caída) desde la distancia y la iluminación de base normal difiere de dos maneras:

  • Cuando se renderiza en modo lineal, la corrección de gamma adicional que se realiza hace que el radio de una luz parezca más grande.

  • Los bordes de iluminación también aparecen con mayor claridad. Esto modela de manera más correcta la caída de la intensidad de iluminación en las superficies.

Izquierda: iluminando una esfera en el espacio lineal. Derecha: iluminando una esfera en el espacio gamma
Izquierda: iluminando una esfera en el espacio lineal. Derecha: iluminando una esfera en el espacio gamma

Respuesta de intensidad lineal

Cuando está utilizando el rendering gamma, los colores y las texturas que se suministran a un shader ya tienen aplicada la corrección gamma. Cuando se usan en un Shader, los colores de alta luminancia son en realidad más brillantes de lo que deberían compararse con la iluminación lineal. Esto significa que a medida que aumenta la intensidad de la luz, la superficie se vuelve más brillante de forma no lineal. Esto conduce a una iluminación que puede ser demasiado brillante en muchos lugares. También puede dar a los modelos y escenas una sensación de desvanecimiento. Cuando está utilizando el rendering lineal, la respuesta de la superficie permanece lineal a medida que aumenta la intensidad de la luz. Esto conduce a un sombreado de superficie mucho más realista y una respuesta de color mucho más agradable desde la superficie.

La siguiente imagen Infinite 3D Head Scan demuestra diferentes intensidades de luz en un modelo de cabeza humana bajo iluminación lineal e iluminación gamma.

Infinite 3D Head Scan de Lee Perry-Smith, con licencia Creative Commons Attribution 3.0 Unported License (disponible en www.ir-ltd.net)
Infinite 3D Head Scan de Lee Perry-Smith, con licencia Creative Commons Attribution 3.0 Unported License (disponible en www.ir-ltd.net)

Mezcla lineal y gamma

Cuando se mezcla en un framebuffer, la mezcla ocurre en el espacio de color del framebuffer.

Cuando utiliza el renderizado del espacio gamma, los colores no lineales se mezclan. Esta no es la forma matemáticamente correcta de mezclar colores y puede dar resultados inesperados, pero es la única forma de mezclar hardware de gráficos.

Cuando utiliza el renderizado de espacio lineal, la mezcla se produce en el espacio de color lineal: Esto es matemáticamente correcto y proporciona resultados precisos.

La imagen de abajo demuestra los diferentes tipos de mezcla:

Arriba: la mezcla en el espacio de color lineal produce los resultados esperados de mezcla <br/> Abajo: la mezcla en el espacio de color gamma produce mezclas sobre saturadas y excesivamente brillantes
Arriba: la mezcla en el espacio de color lineal produce los resultados esperados de mezcla
Abajo: la mezcla en el espacio de color gamma produce mezclas sobre saturadas y excesivamente brillantes
Linear rendering overview
Gamma Textures with linear rendering