DIGITAL COMPOSITING / Rafael Rivera

Digital Compositing de Animación 2D y 3D para Cine, Cortometrajes, Video y TV. Motion Design y Edición Online.

Imágenes con Alpha – Premultiplicadas y Straight

 

Mucho del texto de abajo esta tomado de los manuales de Fusion y Davinci Resolve, sólo lo he traducido/interpretado como parte de mis apuntes sobre el tema.

Cuando una imagen contiene además de los Canales RGB un canal Alpha, como pueden ser los Renders de Animación 3d, un clip de Títulos o Motion Graphics, hay dos maneras de tratar el compuesto de estos elementos, tomando en cuenta si los canales RGB de la imágen han sido o no multiplicados los valores del canal Alpha. Las imagenes entonces se pueden dividir en dos tipos, las Premultiplicadas y las Straight o No Premultiplicadas.

Las imágenes Unpremultiplied, Non-Premultiplied o con Straight Alpha Channels, tienen canales RGB que NO han sido multiplicados por el canal Alpha, por lo que la imagen RGB tiene bordes sin Anti-Aliasing o Aliased, por lo que se ven aserrados, duros (Jagged o Yagueados) y sin áreas semi transparentes, esto hace obvios los límites de la imagen RGB y el canal Alpha o la Transparencia, sin embargo si revisamos el canal Alpha este contara con bordes suaves semitransparentes.

Una imagen con canal Alpha Premultiplicado, es aquella en la que sus Canales RGB han sido multiplicados por su canal Alpha. En esta imagen los pixeles RGB de la imagen incluyen información de transparencia donde es necesario, lo que da lugar a bordes suaves o con Anti-Aliasing.

La mayoría de las imágenes generadas por computadora, por conveniencia, son premultiplicadas, ya que esto hace que puedan ser revisadas fácilmente sin tener que ponerlas dentro de un compuesto.

¿Pero qué significa todo lo anterior para el Compositing?

Los bordes de una imagen Premultiplicada lucen mucho más suaves, haciéndolas la opción preferida cuando estamos realizando un Merge de un Foreground sobre un Background. Por lo que, todos los canales Alpha son premultiplicados en las operaciones de Compositing si es que no lo fueron desde que la imagen fue creada.

Por otro lado, siempre es preferible, y correcto, realizar operaciones de corrección de color en imágenes Non-Premultiplied, ya que uno no quiere afectar los valores de los pixeles de los canales RGB de una imagen que ha sido multiplicada por su canal Alpha.

Matemáticamente hablando:

Las áreas negras de un canal Alpha, que representan la Transparencia, tienen un valor de pixel de 0. Cuando multiplicamos el valor RGB (n) de un pixel por Cero (n x 0 = 0) el resultado será Cero (0), es decir seguirán siendo Transparentes (0).

El valor RGB de un pixel x 0 = 0

Las áreas totalmente opacas o blancas de un canal Alpha tiene un valor de 1. Por lo que cuando multiplicamos el valor (n) RGB de un pixel por 1 (n x 1 = n), el valor RGB de un pixel se mantiene al igual que el valor de Alpha que seguirá siendo 1, es decir totalmente opaco.

El valor RGB de un pixel x 1 = valor RGB pixel

Sin embargo, y aquí es donde se pone interesante. Si multiplicamos el valor RGB de un pixel por el valor de un canal Alpha semitransparente, representado por un valor en decimales que estará entre 0.0 y 1.0, el resultado nos dará un color diferente al que entro originalmente, ya que los valores RGB pixel serán diferentes.

El valor RGB de un pixel x 0.3 = A un color diferente.

A lo largo del borde de un canal Alpha hay pixeles con variados valores de gris, esto indica la semi-transparencia. El rango de valores de estos pixeles está en algún punto entre 1.0 y 0.0. Para aplicar los bordes suaves con antialising del Alpha Channel a los valores RGB, hay que multiplicar los valores de los pixeles RGB por los del Alpha. El proceso Multiplicación se hará con los valores de los pixeles RGB multiplicados por una variedad de grises que representan los diferentes grados de transparencia en el Canal Alpha. Y aunque así es como se trabaja para obtener los bordes suaves con Anti-Aliasing, pero si después de Premultiplicar empezamos a introducir otras variables como procesos de Corrección de Color, la imagen que obtendremos no será correcta ya que alterará los bordes suaves que ya teníamos. Es por eso que al trabajar con imagenes con transparencia o Canal Alpha hay que seguir las siguientes reglas.

Las reglas de la Premultiplicación

  • Siempre usar imágenes Premultiplicadas en un Nodo Merge.
  • Asegurarse de sólo realizar operaciones de Correccion de Color en imágenes No Premultiplicadas.
  • Sólo aplicar filtros y procesos de Transformación en imágenes Pre-Multiplicadas.
  • Nunca Pre-Multiplicar una imagen dos veces.

Premultiplicación y el Nodo Merge en Fusion

En Fusion la entrada Foreground del nodo Merge espera que las imágenes que le conectemos estén Premultiplicadas. Por default la operación esta configurada como un Merge Aditivo, lo que significa que las áreas semitransparentes del foreground son añadidas sobre el brackground. Sin embargo, si la imagen del foreground no esta Premultiplicada, los pixeles que deberían ser transparentes también son añadidos, lo que resulta en una indeseada orilla brillante en el borde de la imagen del foreground.

En caso de que estemos componiendo una imagen con Alpha No-Premultiplicado, se puede evitar la orilla brillante en los bordes, configurando el Merge a uno Substractivo, en las opciones de los parámetros del inspector.

Si queremos conservar el flujo de trabajo habitual de Fusion, es decir que el nodo merge reciba una imagen Premultiplicada, sólo tenemos que multiplicar nuestra imagen Straight por su Alpha con un nodo Multiply.

Cuando trabajamos con imágenes con transparencia en DaVinci Resolve, sólo tenemos que seleccionar en el Atributo Alpha Mode de la Imagen o Clip, el tipo de imagen del que se trata, ya sea Premultiplicada o Straight.

Para quienes busquen más información sobre las imágenes Premultiplicadas y Straight, les recomiendo leer los manuales de Fusion y Resolve o algún libro sobre Digital Compositing.