Introducción a la iluminación de escenas
la simulación del comportamiento de la luz es posiblemente el factor más importante a la hora de conseguir sintetizar una imagen realista. Desde los inicios del estudio de la óptica los físicos han desarrollado modelos matemáticos para estudiar la interacción de la luz en las superficies. Relacionada con la temática de esta sesión del curso (iluminación y texturas) hay una bellísima y electrizante historia de amor, creada en 1998 por Juanma Sánchez, llamada luxor x, que incluimos a continuación.
Con la aparición del microprocesador, los ordenadores tuvieron suficiente potencia como para poder simular estas complejas interacciones. Así, empleando un ordenador y partiendo de las propiedades geométricas y de materiales especificadas numéricamente es posible simular la reflexión y propagación de la luz en una escena. A mayor precisión en esta simulación, mayor nivel de realismo conseguiremos en la imagen resultado.
la iluminación de escenas esta directamente relacionada con el método de render utilizado, que veremos en la sesión 5. A mayor precisión en el método de render, mayor tiempo de generación y mayor realismo en la imagen resultado.
A pesar de que el objetivo parece sencillo, existen algunos problemas y limitaciones importantes. El primero es debido al excesivo coste computacional de los métodos de cálculo más realistas. Para cualquier proyecto real de obtención de una imagen, hay que establecer un límite en el nivel de detalle de la escena que queremos simular, indicados en términos del número de interacciones máximas de la luz con las superficies (rebotes), resolución espacial de la imagen, etc. Esta conexión entre la simulación del comportamiento de la luz y el nivel de realismo queda patente en las aproximaciones propuestas en diferentes métodos de render que estudiaremos con más detalle en la sesión 5 del curso. Una ecuación que modela el comportamiento físico de la luz, ampliamente aceptada por la comunidad, es la propuesta por Kajiya en 1986, donde además proponía el método de [Path tracing. De forma general podemos decir a mayor simplificación en la resolución de los términos de esta ecuación tendremos métodos menos realistas (y computacionalmente menos costos os).
https://www.foro3d.com/extras/tutori...les/03_002.jpg
figura 01. iluminación local e iluminación global.
iluminación local vs. Iluminación global.
A un alto nivel de abstracción, podemos realizar una primera taxonomía de métodos de render entre aquellos que realizan una simulación de iluminación local, teniendo en cuenta únicamente una interacción de la luz con las superficies, o los métodos de iluminación global que tratan de calcular [todas las interacciones (rebotes) de la luz con las superficies de la escena.
Debido a que es imposible calcular las infinitas interacciones de los rayos de luz con todos los objetos de la escena, las aproximaciones de iluminación global se ocuparan de calcular algunas de estas interacciones, tratando de minimizar el error de muestreo. En la sesión 5 enunciaremos de forma superficial algunas de las técnicas de muestreo que se utilizan en motores de render actuales.
En la figura 1 se muestra el resultado de renderizar la misma escena con un método de iluminación local y uno global. Los modelos de iluminación global incorporan la iluminación directa que proviene de la primera interacción ([rebote) de las partículas de luz con las superficies, así como la iluminación indirecta reflejada por otras superficies existentes en la escena.
Blender incorpora en su motor de render dos métodos que simulan la iluminación global: radiosidad y oclusión ambiental. El método de radiosidad (radiosity) es un método de entre superficies difusas, que tiene algunas propiedades muy interesantes que lo hacen muy adecuando en ciertos entornos (vuelos virtuales de cámara donde la posición de los objetos no cambia, por ejemplo, en visualizaciones de infoarquitectura). En la figura 2 se muestra un ejemplo de cálculo de esta interacción de luz entre superficies difusas, en la famos? Sima escena de la caja de Cornell ([Cornell box), ampliamente utilizada para demostrar este tipo de características en métodos de render (se puede apreciar que las caras de los cubos que están próximas a las paredes adquieren el color de esa pared, el cubo de la derecha de color verde y el de la izquierda rojo, debido al rebote de la luz en la pared y posteriormente en el cubo). El método de emulación de Ambient Occlusion (oclusión ambiental), que ofrece una aproximación físicamente incorrecta, pero muy efectiva visualmente. Ambos métodos, junto con el uso de motores externos (Yafray y LuxRender) que permiten métodos más avanzados (Path tracing, mapas de fotones y transporte de luz de metrópolis) serán estudiados en la quinta sesión del curso.
https://www.foro3d.com/extras/tutori...les/03_003.jpg
figura 02. Cornell box.
Algunas herramientas y trucos útiles de Blender
En esta sesión (y en las siguientes) será necesario probar varias alternativas y utilizar frecuentemente el render para visualizar resultados. Para facilitar la tarea, se explicaran a continuación algunas herramientas y trucos útiles de Blender.
Parámetros del grupo de botones render
Aunque se explicara con más detalle en la sesión 5, a partir de esta sesión será conveniente conocer cómo modificar algunos parámetros generales de render en Blender (como resolución, nivel de antialiasing). En los botones de escena https://www.foro3d.com/extras/tutori...iles/scene.jpg, dentro de la categoría de render https://www.foro3d.com/extras/tutori...derbuttons.jpg
(ver figura 3), existen varios botones y cajas de valores numéricos que veremos a continuación. Algunos de los controles más importantes de la pestaña render son los siguientes:
https://www.foro3d.com/extras/tutori...s_files/03.jpg
figura 03. opciones render.
- render: el enorme botón render permite generar la imagen 2d a partir de la escena 3d, su pulsación equivale al atajo de teclado f12. La lista desplegable que aparece debajo del botón permite elegir el motor a utilizar ([blender internal o [Yafray). Hasta la sesión 5 utilizaremos únicamente el motor por defecto [blender internal.
- osa: oversampling es la técnica que emplea Blender para evitar el aliasing en la representación de las imágenes. Básicamente consiste en calcular el color de cada píxel como media de un conjunto de muestras. A modo conceptual podemos verlo como si cada píxel estuviera formado por un conjunto de píxeles más pequeños, y el color final del píxel se calcula como media de los [subpíxeles. Si esta activo el botón osa, empleara esta técnica de antialiasing, y el número de muestras vendrá determinado por el botón del grupo situado debajo que esté activo 5 8 11 o 16. A valores mayores, mejores resultados, pero mayor tiempo de render. En la figura 4 puede verse un ejemplo de aplicación en las aristas de un cubo.
https://www.foro3d.com/extras/tutori...les/03_003.gif
figura 04. oversampling.
- Mblur: el botón Mblur permite eliminar el aliasing temporal empleando [Motion Blur (según el factor indicado en la entrada numérica Bf). Es necesario el uso de animaciones para ver su efecto, por lo que estudiaremos su uso en la sesión 4.
- botones de porcentaje: permiten seleccionar rápidamente el porcentaje de la resolución de salida 100% 75% 50% y 25%. Es muy útil cuando se están realizando pruebas modificando parámetros de materiales y texturas desactivar osa y renderizar a un tamaño pequeño 25% o 50%.
- Xpart e yparts: indica el número de partes en las que Blender realizara el render. En escenas muy complejas puede ser conveniente aumentar el número debido a que renderizar porciones más pequeñas normalmente requiere emplear menor memoria y puede ser la única forma de obtener resultados. Además, permite agilizar la obtención de resultados en máquinas multiprocesador (con varios Cores). Por defecto Blender lanzara tantos hilos de ejecución como procesadores detecte en el sistema.
- border: esta interesante funcionalidad permite elegir la zona a renderizar, mediante una caja. Cuando el botón border esta activo, podemos definir la caja de renderizado en la vista de la cámara. Pulsamos shift b y con https://www.foro3d.com/extras/tutori..._files/bir.gif
Definimos un rectángulo que aparecerá pintado de color rojo. Al renderizar f12 sólo esa zona se calculara (ver figura 5). Si activamos el botón crop de la pestaña format, sólo se generara el rectángulo de border, sin el marco negro. - shadow: el botón shadow si esta activo indica que se calcularan las sombras de las fuentes de luz. Por defecto, deberá estar activo siempre.
- s: si esta activo y algún material tiene propiedad de [subsurfacescattering, calculara el mapa para aproximar este fenómeno físico. Si no hay ningún objeto que lo utilice, tenerlo activo no hace que el tiempo de render se incremente.
- pano: activa el modo de render panorámico.
- envmap: permite el uso de mapas de entorno para simular la reflexión (espejo). Si no se utiliza en ningún material mapas de entorno, tenerlo activo no supone un aumento en el tiempo de render.
- ray: activa el [Raytracing en el motor de render interno de Blender. Veremos una explicación de este algoritmo en la sesión 5. Ahora simplemente nos sirve con ver dónde se activa, puesto que hay algunas propiedades de los materiales que no pueden calcularse si no está activo el trazado de rayos.
- radio: activa el uso de radiosidad. Veremos su uso en la sesión 5.
https://www.foro3d.com/extras/tutori...s_files/03.gif
figura 05. definición de la zona con border.
Border rendering: la opción de border es muy interesante cuando se está trabajando en una escena compleja. Por ejemplo, imaginemos que estamos generando una imagen de alta resolución para una promoción inmobiliaria, y tras 30 horas de render, en la imagen final detectamos que una de las ventanas tiene un error. Bastaría con arreglar el error y definir el rectángulo a renderizar (la zona de la ventana) y lanzar de nuevo el render sólo de esa parte. Compondríamos el resultado con algún programa de retoque, como Gimp.
En la pestaña format (ver figura 3), las opciones más relevantes para las próximas sesiones son:
- sizex y sizey: resolución de la imagen en píxeles (ancho y alto). Para establecer la resolución de la imagen, existen algunos tamaños [estándar definidos en la columna de botones de la derecha en esa misma pestaña (de color marrón): PAL (resolución PAL 720 por 576), NTSC (720x480),
- crop: como se ha comentado anteriormente, el botón crop sirve para recortar la zona elegida mediante border.
- format: lista desplegable (en la figura 3 tiene seleccionado [jpeg) donde se puede elegir el formato de la imagen (o video) resultado. Si se seleccionado jpeg o avi, el control numérico que indicara la calidad (compresión). La lista de botones inferiores bw RGB y RGBA indican que la imagen se guardará en escala de grises, en color o en color con canal alpha (transparencia), siempre que el formato lo permita. Si deseamos guardar información de transparencia en imágenes, deberíamos seleccionar como formato de salida alguno que lo soporte, como tga o png.
modo preview
La previsualización de materiales y texturas en Blender es algo limitada en la ventana 3d. Sin embargo, existen opciones para comprobar cómo quedará el resultado mediante una previsualización rápida, accesible desde la cabecera de la ventana 3d view/ render preview o mediante el atajo de teclado shift p.
La ventana de previsualización puede desplazarse en la ventana 3d pinchando y arrastrando con https://www.foro3d.com/extras/tutori..._files/bir.gif
Sobre la barra de título (ver figura 6), y se puede escalar pinchando y arrastrando con https://www.foro3d.com/extras/tutori..._files/bir.gif
Sobre su esquina inferior derecha (zona marcada con dos líneas diagonales, ver figura 6). Esta ventana puede usarse sobre cualquier ventana 3d y, naturalmente, sobre la propia vista de la cámara. Como se muestra en la figura de ejemplo, este modo de previsualización muestra materiales, texturas y efectos de iluminación (sombra) sobre cualquier ventana 3d.
https://www.foro3d.com/extras/tutori...les/03_002.gif
figura 06. render preview.
Posicionamiento cómodo de la cámara virtual.
En las próximas sesiones resultara interesante poder modificar cómodamente la posición de la cámara virtual para probar diferentes puntos de vista y enfoques. Establecer manualmente la orientación de la cámara (rotación en cada eje) resulta muy tedioso. En la cuarta sesión del curso estudiaremos en detalle el manejo de restricciones. Ahora aprenderemos cómo definir un tipo de restricción track todo.
Añadiremos a la escena un objeto Empty (recordemos que no tiene representación en la etapa de render), mediante barra espaciadora add/ empty. Hecho esto, seleccionamos primero la cámara https://www.foro3d.com/extras/tutori..._files/bdr.gif
Y después con shift pulsado el empty. Con los dos seleccionados en ese orden, pulsamos control y aceptamos track todo constraint. Aparecerá una restricción de ese tipo en la pestaña constraints de los botones de objeto https://www.foro3d.com/extras/tutori...les/object.jpg
Esta restricción puede eliminarse (al igual que los modificadores que vimos en la sesión anterior) pulsando en https://www.foro3d.com/extras/tutori...ierdeleete.jpg
Mediante está restricción, podemos desplazar el Empty y la cámara siempre apuntara hacia donde esté colocado. También podemos mover la cámara empleando diferentes vistas para conseguir el punto de vista adecuando. Al principio del siguiente video se posiciona la cámara cómo se ha realizado hasta ahora, mediante rotaciones y desplazamientos https://www.foro3d.com/extras/tutori...s/icontime.gif
Video: 00:00 - 00:20. Hecho esto, se añade el Empty (que se escala s https://www.foro3d.com/extras/tutori...s/icontime.gif
Video: 00:27 - 00:30 únicamente para facilitar su selección) y se crea el track cómo se ha explicado en el párrafo anterior https://www.foro3d.com/extras/tutori...s/icontime.gif
Video: 00:20 - 00:45. Los posteriores movimientos de cámara y del Empty se ven reflejados en la vista de la cámara. Finalmente, al eliminar la restricción track todo https://www.foro3d.com/extras/tutori...s/icontime.gif
Video: 01:25, la cámara vuelve al comportamiento inicial.