GICache
Cámaras

Usando el Alumbrado Lineal

Resumen

El alumbrado lineal(linear lighting) se refiere al proceso de iluminar una escena con todos los inputs siendo lineales. Normalmente las texturas existen con gamma pre-aplicadas a ellas, que significa que cuando las texturas son mostradas en un material no son lineales. Si estas texturas son usadas por las ecuaciones estándar de alumbrado, estas darán lugar a que el resultado de la ecuación sea incorrecto ya que esperan que todo el input sea lineado antes de su uso.

El alumbrado lineal se refiere al proceso de asegurar que ambos inputs y outputs de un shader estén en un espacio de color correcto que resulta en una iluminacióm más correcta.

Canalización(Pipeline) existente (Gamma)

En la canalización(Pipeline) existente de renderización, todos los colores y texturas son muestreados en el espacio gamma, ie, la corrección gamma no se quita en imágenes ni colores antes de que sea usada en un shader. Por esto, una situación surge en dónde los inputs a los shaders están en el mismo espacio gamma. Si esto pasa, entonces la ecuación de alumbrado trata estos inputs como si estuvieran en un espacio lineal y finalmente ninguna corrección gamma es aplicada al pixel final. La mayoría de tiempo esto se ve aceptable como si los dos errores fueran a anularse entre ellos mismos. Pero no es correcto.

Canalización(Pipeline) del Alumbrado Lineal

Si el alumbrado lineal está habilitado entonces inputs al shader program son proporcionados sin la corrección de gama. Para los colores, esta conversión es aplicada implícitamente si usted está en espacio lineal. Las texturas son muestreadas usando lecturas del hardware sRGB; la textura fuente se suministra en el espacio gamma y luego muestreada en el hardware de gráficas, el resultado es convertido automáticamente. Estos inputs son proporcionados al shader y la iluminación ocurre como normalmente hubiera sucedido. El valor resultante es luego escrito al framebuffer. Este valor será corregido por gamma y escrito al framebuffer o dejado en espacio lineal para que después sea corregido por gamma; esto depende de la configuración actual de renderización.

Las Diferencias Entre alumbrado Gama y Lineal

Cuando use el alumbrado lineal, los valores input a las ecuaciones de iluminación son diferentes a los que están en gamma space. Esto significa que las luces que impacten superficies van a tener una curva de respuesta diferente a la que tiene el canalizado existente de renderización de Unity.

Light Falloff

El falloff de la distancia y la iluminación base normal es cambiada en dos maneras. Primero cuando se renderice en modo linea, la corrección gamma adicional que es realizada va hacer parecer el radio de la luz mucho más grande. Segundo, los bordes de iluminación también serán más duros. Esto correctamente modela el falloff de la intensidad de la luz en las superficies.

Respuesta de la Intensidad Lineal

Cuando usted esté usando alumbrado de espacio gamma, los colores y texturas que están proporcionadas a un shader tienen la correción gamma aplicada a ellos. Cuando son usados en un shader, los colores de una iluminación alta son en realidad más brillantes de lo que deberían ser en un alumbrado lineal. Esto significa que al aumentar la intensidad de la luz, la superficie va a ponerse más brillantes de una manera no lineal. Esto lleva a un alumbrado que puede ser muy brillante en muchos lugares, y también darle a los modelos y escenas una sensación de limpiarse. Cuando usted esté utilizando un alumbrado lineal, la respuesta de la superficie se mantiene lineal en el momento de que la intensidad de la luz aumente. Esto conduce a un sombreado de superficie más realista y a una respuesta de color mucho más bonita en la superficie.

Infinite 3D Head Scan por Lee Perry-Smith es licenciado bajo una Creative Commons Attribution 3.0 Unported License. Disponible en: http://www.ir-ltd.net/

Mezclado Lineal y Gamma

Cuando se realiza la mezcla al framebuffer, la mezcla ocurre en el espacio de color o el framebuffer. Cuando se utiliza la renderización gamma, esto significa que los colores no lineales quedan mezclados juntos. Esto es incorrecto. Cuando se utiliza la renderización del espacio lineal, la mezcla se produce en el espacio lineal. Esto es correcto y da los resultados esperados.

Usando el Alumbrado Lineal

El alumbrado lineal da un diferente aspecto a la escena renderizada. Cuando ha sido un autor para un proyecto con alumbrado lineal, es muy probable que no se vea correctamente si cambia a la iluminación gamma. Debido a esto, si se muda al alumbrado lineal desde la iluminación gamma, puede tomar algún tiempo actualizar el proyecto para que se vea tan bien como antes del cambio. Dicho esto, habilitando el alumbrado lineal en Unity es bastante sencillo. La característica es implementada en una base por proyecto y se expone en la configuración del reproductor que puede hallarse en Edit -> Project Settings -> Player -> Other Settings

Lightmapping

Cuando usted esté utilizando el linear lighting (alumbrado lineal), toda la iluminación y texturas son linealizadas, que significa que los valores pasados al lightmapper también necesitan ser modificados. Cuando usted cambia entre linear lighting (alumbrado lineal) e gamma lighting (iluminación gamma), usted va a tener que volver a bake los lightmaps. La interfaz lightmapping de Unity va a advertirle cuándo los lightmaps estén en un espacio de color equivocado.

Plataformas Soportadas

La renderización lineal no es soportada para todas las plataformas. Los tipos de construcción que actualmente soportan la característica son:

  • Windows & Mac (editor, standalone(independiente), reproductor web)
  • Xbox 360, Xbox One
  • PlayStation 3 and 4

Así sea que estos objetivos soporten el alumbrado linea, no es garantizable que el hardware de gráficas en el dispositivo sea capaz de renderizar la escena apropiadamente. Usted puede revisar el espacio de color deseado y el espacio activo de color soportado mirando QualitySettings.desiredColorSpace y QualitySettings.activeColorSpace. Si el espacio de color deseado es lineal pero el espacio activo de color es gamma, entonces esto significa que el reproductor ha caído de nuevo al espacio gamma. Esto puede ser usado para mostrar una casilla de advertencia diciéndole al usuario que la aplicación no se verá correctamente para ellos, o forzar una salida del reproductor.

HDR Lineal y Sin

Cuando usted no esté usando HDR, un frambuffer de tipo especial es usado para soportar lecturas sRGB y escritura sRGB (Degamma en leer, Gamma en escribir). Esto significa que tal como una textura, los valores en el framebuffer son gamma corregidos. Cuando este frambuffer es usado para mezclar o unir como una textura, los valores tienen el gamma eliminado antes de que que sea usado. Cuando estos valores se escriben, el valor que está siendo escrito es convertido de un espacio lineal a un espacio gamma. Si usted está renderizando en modo lineal, luego todos los efectos post-proceso van a tener su buffer fuente y objeto creado con una lectura sRGB y la escritura habilitada para que la mezcla del post-procesamiento y post-proceso ocurra en espacio lineal.

Lineal y HDR

Cuando utilice HDR, la rendereziación es realizada en buffers puntos flotantes. Estos buffers tienen la suficiente resolución para no requerir conversión de y a un espacio gamma cuando el buffer es accedido. Esto significa que cuando renderice en modo lineal, los objetos renderizados que usted utilice van a almacenar los colores en espacio lineal. Por lo tanto, toda la mezcla y efectos post-proceso van a implícitamente ser realizados en un espacio lineal. Cuando se escribe en el backbuffer, la corrección gamma es aplicada.

Texturas de Autoría GUI y Lineales

Cuando renderice el GUI de Unity, nosotros no realizamos la renderización en espacio lineal. Esto significa que las texturas GUI no deberían tener su gamma eliminado en la lectura. Esto se puede lograr de dos maneras:

  • Establezca el tipo de textura a GUI en el importador de texturas
  • Haga check en la casilla de verificación ‘Bypass sRGB Sampling’ en el importador avanzado de texturas

It is also important that lookup textures, masks, and other textures whose RGB values mean something specific and have no gamma correction applied to them should bypass sRGB sampling. This will cause the sampled texture not to remove gamma before it is used in the shader, and calculations will be done with the same value as is stored on disk.

GICache
Cámaras