Renderizado#

Introducción#

En la fase de Renderizado es cuando se generan las dos imágenes del par estereoscópico (o una imagen compuesta) para ser mostradas en un determinado visor.
Las funciones principales son:

  • Aplicar Prescripciones de Tamaño
  • Aplicar Prescripciones de Disparidad horizontal
  • Generar la imagen de salida en el formato adecuado para el tipo de pantalla.

El renderizado requiere:

  • Un fichero .pair que contiene los parámetros del Alineamiento Angular, y la identificación de los ficheros de imagen originales.
  • Ficheros de imagen originales. Si son del tipo RAW se busca en el directorio un derivado JPEG, que puede ser un JPG revelado o la "preview" interna del RAW (ver "parientes" de RAW)
  • Prescripciones de Renderizado.

Las prescripciones de renderizado se especifican en una línea de comandos, para usarse con el programa de renderización en batch: gen_render.py. También puede efectuarse el renderizado en modo interactivo en la pestaña de "Renderizado", con las prescripciones de tamaño y disparidad definidas con el botón "Previsual.Render". Ver apartado Renderizado Interactivo

Para entender lo que hace la renderización es mejor empezar por unos ejemplos:


Ejemplo - 3DTV 55"#

En este ejemplo queremos mostrar la imagen en una 3DTV de 55". El espectador más próximo se sitúa a una distancia de 2.5m:

La imagen debe encajar en la relación de aspecto 16:9 de la 3DTV. Hay varias opciones que se explican en Prescripciones de Tamaño, pero en este ejemplo generaremos la imagen a su tamaño máximo, haciendo que la anchura sea igual o menor que la relación de aspecto 16:9. Esto se codifica como -rat 16M:9E ("RATio 16Max : 9Exacto")

Por otra parte queremos que el punto más lejano no obligue a diverger la mirada a los espectadores. Considero como caso peor 50mm de distancia ocular (típica en niños). Esto significa que la máxima disparidad debe ser 50mm/1218mm= +4.1%.

Vista Lejos 3DTV

Los límites para la disparidad cercana son más elásticos, pero me voy a basar en la regla de 1/30. Esta regla se aconseja para fotos "orto-estereo" que reproducen la visión natural humana, lo que interpreto como que 1/30 de radian es un ángulo de convergencia cómodo para la mayoría de las personas. Por tanto vamos a limitar la convergencia de los ojos a 1/30 de radian, y vamos a suponer que el espectador está a 2.5m (o más) de la TA. En el siguiente gráfico se muestra que con los mismos 50mm de distancia ocular la disparidad negativa sería -2.7%:

Vista Cerca 3DTV

Pero para la disparidad cercana el caso peor no se da para un IDO mínimo, sino al contrario. Aquí es más seguro considerar el IDO máximo: XML. La fórmula general para la disparidad cercana con el límite de 1/30 de radian es: $$\frac{IDO - \frac{D}{30} }{A} \;\;\;\;\; (1)$$

Para un IDO máximo= XML la disparidad negativa sería -1.5% Por tanto asignamos las prescripciones de disparidad: -dispón 4.CM:-1.CM

Aquí se muestra gráficamente el efecto de las prescripciones anteriores. La imagen izquierda es la que resultaría del Ajuste Angular sin aplicar ninguna restricción, y la derecha la renderizada con las restricciones anteriores. Utilizamos los siguientes términos:

  • Visor Bruto o Pantalla: Es el marco del dispositivo físico en que se presenta la imagen, por ejemplo la pantalla de una 3DTV o de un proyector, el papel en que se imprime el par de fotos, etc. Lo consideramos como el objeto de profundidad cero.

  • Visor Neto : Es el borde del fichero de imagen renderizado, que mostraremos dentro del Visor Bruto. Normalmente será igual o más pequeño que el Visor Bruto, excepto si se renderiza con Incremento de Lienzo (ver apartado). En cualquier caso siempre es un objeto de profundidad cero.

  • Ventana : Es el marco de imagen útil dentro del Visor Neto. Puede estar a una profundidad diferente de los visores, normalmente por delante cuando hay ventana flotante

Imagen de Ajuste Angular Imagen Renderizada

Estas representaciones muestran arriba la imagen en Anaglifo con los puntos homólogos, y en la parte de abajo la imagen "vista desde arriba" mostrando la profundidad de los puntos homólogos y de la Ventana respecto de la Pantalla que consideramos como profundidad cero.

En la imagen de Ajuste Angular la Pantalla es la misma imagen. En esta foto en concreto el Datum está a profundidad cero, es decir la misma que la pantalla. Por otra parte no se ha definido Ventana Flotante, por lo que la profundidad de la Ventana es también cero.

En la imagen renderizada se observan dos cambios respecto la que solo tiene Ajuste Angular:

  • La imagen renderizada (se indica con un recuadro blanco) es más estrecha que el formato 16/9 de la pantalla. Mostramos el Visor Neto (la imagen renderizada) con un recuadro blanco, y la Pantalla con un recuadro amarillo. Ambos visores tienen siempre profundidad cero. La imagen renderizada no llena todo el ancho de 16/9 de la Pantalla porque la prescripción era -rat 16M:9E. Si hubiera sido -rat 16F:9E llenaría todo el ancho con zonas oscuras de relleno.

  • La imagen original tenía una disparidad lejana de 181px y como el ancho de la Pantalla es de 3577px, resultaría una disparidad positiva de 5.1% lo cual es mayor que la prescripción de disparidad lejana del +4.1%. Esto se ha corregido acercando las imágenes un 5.1%-4.1%=1.0%, con lo que la disparidad del punto lejano ha quedado en +4.1% exactamente. Pero a la vez se ha hecho más negativa la disparidad de los puntos cercanos, situándolos -1.0% delante de la Ventana. No supera la prescripción de -disp 4.1M:-1.5M, pero puede producir una violación de Ventana. Esto evita creando automáticamente una Ventana Flotante exactamente con 1.0% de profundidad negativa. La Ventana Flotante consiste en ocultar una banda de 36px de anchura (equivalente al -1.0% del ancho del Visor Bruto) a la derecha de la foto derecha, y otra igual a la izquierda de la foto izquierda.


Ejemplo - Pantalla Grande#

En este ejemplo queremos usar un proyector de formato HD 16:9 para proyectar en una pantalla de 4m. El espectador más próximo se sitúa a una distancia de 5m:

La imagen debe encajar en la relación de aspecto 16:9 del proyector. El proyector no tiene facilidades de Zoom por lo que no vale la pena generar imágenes al tamaño máximo, y tampoco estamos seguros si tratará correctamente las que no tengan exactamente el tamaño recomendado. Por lo tanto las generaremos con el tamaño exacto aceptado por el proyector: 1920x1080pix. Esto se codifica como -pix 1920F:1080E ("PIXels 1920 Fijo : 1080 Exacto")

Para la disparidad aplicamos las mismos criterios que en el ejemplo de la 3DTV de 55", pero aquí al ser la pantalla más ancha cambian las restricciones: Para la disparidad lejana seguimos suponiendo como caso peor IOD= 50mm, lo que supone una disparidad máxima de 50mm/4000mm= +1.3%.

Para la disparidad cercana el angulo de convergencia de 1/30 radian y el IOD= 65mm suponen -2.5% ver fórmula (1) en el Ejemplo 3DTV.

Se codifican como: -disp 1.3M:-2.5M. Resulta la siguiente renderización:

Imagen Renderizada

Se observa que la renderización ha cumplido rigurosamente los límites +1.3% -2.5%, PERO ha sido a costa de reducir la escala de la imagen, que no llena la altura de 1080pix. Es lógico si observamos que la imagen previa tiene una disparidad total de +4.6% -0.0%, por lo que no es posible convertir a +1.3% -2.4% acercando las imágenes solamente.

¿Podríamos forzar una cierta divergencia para la disparidad lejana? Algunos trabajos dicen que 1° de divergencia es aceptable (1/57 radian). Otros que la divergencia máxima aceptable es . Me inclino por esto último, calculado además para IOD 50mm porque siempre puede haber niños por ahí.

Una forma de ampliar el margen aceptable de disparidad es aumentar la distancia mínima a la pantalla.

Una conclusión de esto es que las imágenes con disparidades totales superiores al 3.7% no son muy adecuadas para la pantalla de 4m de este ejemplo. En general cuanto mayor sea la pantalla peor se tolera la disparidad excesiva.

En la renderización se observan estos efectos:

  • Reducción de tamaño, como se explicó antes, para cumplir los límites de disparidad
  • Se ha rellenado el marco del Visor de 1920x1080, por efecto de la prescripción de anchura de 1920 Fija: -pix 1920F:1080E
  • Las imágenes se han desplazado 48pix hacia dentro, y se ha puesto la Ventana Flotante a los mismos -48pix de profundidad para evitar violaciones de Ventana. La mayor parte de la imagen está por tanto "delante" del Visor.

Ejemplo - Auto-Stereo 5.5"#

Este es el caso de la pequeña pantalla de un teléfono auto-stereo que se sostiene en la mano, y por tanto se mira desde muy corta distancia ~300mm. Consideramos el caso del Elephone P8 3D cuya pantalla tiene ~121.6mm de ancho.

Por lo mismo que en caso de la 3DTV, la imagen debe encajar en una relacción de aspecto de 16:9. Tambien queremos el máximo tamaño posible porque usaremos el excelente visor sView que permite hacer zoom muy bien. Por tanto usaremos las mismas prescripciones de tamaño que en la 3DTV: -rat 16M:9E ("-RATio 16Maximum : 9Exact")

Para la disparidad nos basamos también en la regla de 1/30. Pero teniendo en cuenta en este caso que la mirada ya converge un ángulo mucho mayor solo para ver el propio teléfono, que por definición tiene disparidad cero: para una distancia ocular de 50mm la convergencia de profundidad cero es 0mm/300mm= 1/6 radian, mucho mayor que 1/30 radian:

Zero

Esto implica que NO se debe situar el punto lejano con mirada paralela (ángulo de convergencia cero), porque entonces la diferencia de convergencia con la pantalla sería de 1/6 radian lo que produciría incomodidad de visión.
En este caso aplicaremos el margen permitido de 1/30 radian ALREDEDOR del ángulo de convergencia de 1/6 rad de profundidad cero. Conviene situar la mayor parte de la escena detrás de la pantalla, sobre todo porque al ser grande la convergencia inicial, no conviene aumentarla más todavía poniendo la escena por delante. Elegimos limitar el punto lejano a 0.028rad, que es la mayor parte del total 1/30rad, y permitiremos una pequeña disparidad cercana de -0.005rad para no impedir algún efecto de "salir de pantalla" si hiciera falta (si el efecto viene definido en el Alineamiento Angular).
Los siguientes gráficos muestran las convergencias y disparidades para los puntos Lejano y Cercano:
Far Near
De estos gráficos obtenemos la prescripción de disparidad: -disp 7.1M:-1.1M. Obtenemos el siguiente renderizado:
Imagen de Ajuste Angular Imagen Renderizada

Observar que en este caso los límites prescritos +7.1% -1.1% son mucho más amplios que las disparidades de la imagen, por lo tanto no habido necesidad de encoger ni de desplazar las imágenes. La ventana permanece a profundidad cero, como en el Ajuste Angular.
Aquí se comprueba que estas pequeñas pantallas auto-stereo son ideales para visualizar pares estéreo con disparidades grandes.


Ejemplo - Tarjetas "OWL"#

El "OWL" es un visor con lentes para tarjetas estereoscópicas, similar al antiguo "Holmes". Ver "OWL"

Las características de este visor:

  • Tamaño de tarjeta: 178x95mm
  • Distancia focal (ajustable) 125mm - 160mm
  • Distancia entre centros de lente: 78mm
  • Altura del centro de lente respecto la tarjeta: 40mm (un poco por debajo del centro de la tarjeta que sería 95/2= 42.5mm)
  • Parte de tarjeta no visible: 2mm en la parte inferior
  • Diámetro de lentes: 33mm

La anchura máxima de cada imagen está definida por la distancia entre lentes: 78mm. La altura sería teóricamente el doble de la altura de la lente sobre la tarjeta menos el borde no visible: 2*40-2= 78mm. Es una relación de aspecto perfectamente cuadrada, por lo que podríamos definir la prescripción de tamaño como -rat 1F:1E, pero como veremos cuando tratemos el Incremento de Lienzo y Líneas de Corte es más conveniente definir la ratio con valores en mm: rat 78F:78E

Esta prescripción ajusta la imagen en altura, y la recorta o rellena en anchura.

Las prescripciones de Disparidad se calculan con este gráfico de visualización del OWL. Al ser un visor de lentes la disparidad no depende de la distancia ocular del usuario sino de la distancia entre lentes. El punto infinito debe tener disparidad +0.0%, y el punto cercano se deduce de permitir una convergencia de 1/30 radian:

Gráfico de disparidad del OWL

La prescripción de Disparidad es por lo tanto: -disp 0.0M:-6.0M La imagen resultante sería:

Gráfico de disparidad del OWL

Si no hubiera limitación de disparidad la imagen habría llenado la altura de la Pantalla, y quedaría recortada en anchura porque su relación de aspecto es más ancha que la prescripción de tamaño. Pero la limitación -disp 0.0M:-6.0M ha obligado a encogerla para conseguir que el punto lejano esté a profundidad 0% y el Datum al -6.0%.

Incremento de Lienzo y Líneas de Corte#

Para imprimir una tarjeta estéreo en papel hay que generar la imagen anterior con la opción de salida -SBS (Lado a Lado) (ver Opciones de Salida). Sale esta imagen:

Renderizado OWL Sin incremento de lienzo

Podemos llevarla a imprimir a un servicio de fotografía de buena calidad, donde hay que elegir un tamaño disponible que puede ser en este caso 150x200 mm, para posteriormente recortar la parte sobrante. Pero si imprimimos directamente este fichero en un tamaño de 150x200 mm las imágenes útiles no quedarían de 78x78mm.

Para solucionar esto tenemos la opción de renderizado -incr (Incremento de Lienzo) que permite aumentar el tamaño del lienzo (sin modificar el tamaño de imagen), de forma que se adapte al tamaño del papel de impresión, en este caso de 200x150mm.
Otra opción complementaria de esta es -lines para facilitar el corte de la imagen, en este caso al tamaño requerido por el OWL de 178x95mm.
El siguiente gráfico muestra las dimensiones del lienzo destinado a imprimir en un papel de 200x150mm, con los bordes del papel en azul y las líneas de corte en rojo:

Renderizado OWL Dimensiones de Incremento de Lienzo

` Las dimensiones externas se definen con la opción -incr <izquierdo>:<derecho>:<interior>:<exterior>:<superior>:<inferior> donde los parámetros están en las mismas unidades que la definición de tamaño. En este caso: -incr 0:0:0:22:42.5:29.5

Las líneas de corte se definen de forma parecida con la opción -lines <izquierdo>:<derecho>:<interior>:<exterior>:<superior>:<inferior> donde los parámetros tienen también las mismas unidades. Si no se desea dibujar determinadas líneas se sustituyen por "X". En este caso: -lines X:X:X:11:15:2
Con estas opciones se genera un fichero de imagen de 5158x3869 pixels, que tiene justamente la relación de aspecto del papel fotográfico de 200x150, con lo cual debería llenar exactamente ese tamaño, y por otra parte tiene pintadas las líneas de corte adecuadas para obtener una tarjeta del OWL:

Renderizado OWL Con incremento de lienzo