From BlenderWiki

Jump to: navigation, search
Blender3D FreeTip.gif
IMPORTANT! Do not update this page!
We have moved the Blender User Manual to a new location. Please do not update this page, as it will be locked soon.


Renderizado de Radiosidad

El método Radiosidad de Blender

Primero, ¡un poco de teoría! Puede saltar a la siguiente sección si lo desea, y volver aquí si surgen dudas. A finales de los ochenta y principios de los noventa, la Radiosidad era un tema candente en el mundo de los gráficos 3D por ordenador. Se desarrollaron métodos diversos; la más exitosa de esas soluciones estaba basada en el método del "refinamiento progresivo" con una esquema de "subdivisión adaptativa". Y esto es lo que Blender utiliza. Para poder sacar el máximo partido del método de Radiosidad de Blender, es importante comprender los siguientes principios:

  • Método de Elemento Finito
Muchos métodos de simulación o de gráficos por ordenador asumen una simplificación de la realidad con "elementos finitos". Para una solución visualmente atractiva (e incluso científicamente válida), no es siempre necesario zambullirse hasta un nivel de detalle molecular. En su lugar, puede reducirse el problema a un número finito de elementos representativos y bien descritos. Es un hecho común el que tales sistemas convergen rápidamente en una solución estable y fiable. El método de Radiosidad es un ejemplo de método de elemento finito, puesto que cada cara está considerada un "elemento finito", y su emisión de luz está considerada como un todo.
  • Parches y Elementos
En el universo de la Radiosidad, distinguimos entre dos tipos de caras 3D:
Parches.
Son triángulos o cuadrángulos capaces de emitir energía. Para una solución rápida es importante tener cuantos menos de estos Parches como sea posible. Pero para acelerar las cosas, la energía es modelada como si la energía se emitiera desde el centro del Parche; el tamaño de los Parches debería, por lo tanto, ser lo suficientemente pequeño para que hubiera una distribución realista de energía. Por ejemplo, cuando un pequeño objeto está situado encima del centro del Parche, toda la energía que el Parche envía es oscurecida por este objeto, ¡incluso si el Parche es grande! Este Parche debería ser subdividido en Parches más pequeños.
Elementos.
Estos son los triángulos o cuadrángulos que reciben energía. Cada Elemento está asociado a un Parche. En realidad, los Parches están subdivididos en pequeños Elementos. Cuando un Elemento recibe energía, absorbe parte de la misma (dependiendo de su color) y pasa el remanente al Parche, para su posterior radiación. Puesto que los Elementos son también las caras que se muestran, es importante mantenerlas cuanto más pequeñas posible, para producir bordes de sombras y gradientes de luz sutiles.
  • Refinamiento Progresivo
Este método empieza examinando todos los Parches disponibles. El Parche con más cantidad de energía "no disparada" es seleccionado para disparar toda su energía al entorno. Los Elementos del entorno reciben esta energía, y la añaden a la energía "no disparada" de los Parches que tienen asociados. Luego, el proceso se inicia una vez más para el Parche que tiene ahora más energía por disparar. Esto se sucede para todos los Parches hasta que no se recibe más energía, o hasta que la cantidad de energía "no disparada" converge por debajo de cierto valor.
  • El método del hemicubo
El cálculo de cuánta energía da cada Parche a un Elemento se realiza mediante el uso de "hemicubos". Exactamente situado en el centro del Parche, un hemicubo (literalmente "medio cubo") consiste en 5 pequeñas imágenes del entorno. Para cada píxel en estas imágenes, cierto Elemento visible es codificado mediante color, y la cantidad de energía transmitida puede calcularse. Especialmente con el uso de hardware especializado, el método del hemicubo puede acelerarse significativamente. En Blender, sin embargo, los cálculos del hemicubo se realizan por software. Este método es, de hecho, una simplificación y optimización de la fórmula "real" de la Radiosidad (diferenciación del factor forma). Por esta razón, la resolución del hemicubo (el número de píxeles de sus imágenes) es aproximado, y su cuidadosa configuración es importante para prevenir defectos de aliasing.
  • Subdivisión adaptativa
Puesto que el tamaño de los parches y los elementos en una malla define la calidad de la solución de la Radiosidad, se han desarrollado esquemas de subdivisión automática para definir el tamaño óptimo de Parches y Elementos. Blender posee dos métodos de subdivisión automática:
1. Parches Subdivisión-disparo.
Disparando energía al entorno, y comparando los valores del hemicubo con el "factor forma" matemático actual, pueden detectarse errores que indican la necesidad de una nueva subdivisión del Parche. El resultado son Parches menores y un mayor tiempo de resolución, pero un realismo de la solución más alto.
2. Elementos Subdivisión-disparo.
Disparando energía al entorno, y detectando cambios altos de energía (gradientes) dentro de un Parche, los Elementos de este Parche son subdivididos un nivel extra. El resultado son Elementos menores y un mayor tiempo de resolución, y quizá más aliasing, pero un nivel de detalle más alto.
  • Visualización y Post-procesado
La subdivisión de Elementos en Blender está "equilibrada"; ello significa que cada elemento difiere un máximo de 1 nivel de subdivisión respecto a sus vecinos. Esto es importante para una visualización agradable y correcta de la solución de Radiosidad con caras sombreadas mediante Gouraud. Normalmente después de la resolución, la solución consiste en miles de pequeños Elementos. Filtrándolos y eliminando "dobles", el número de Elementos puede reducirse significativamente sin destruir la calidad de la solución de Radiosidad. Blender guarda los valores de energía en números de punto flotante. Ello hace posible la configuración de situaciones de iluminación dramática, cambiando los valores estándar de multiplicación y gamma.
  • Radiosidad para modelado
El último paso puede ser sustituir las mallas de entrada con la solución de Radiosidad (botón Replace Meshes - Sustituir Mallas). En ese momento los colores de los vértices se convierten de un valor de punto flotante a un valor RGB de 24 bits. Los Objetos de Malla antiguos son eliminados y reemplazados por uno o más Objetos de Malla nuevos. Se pueden eliminar los datos de Radiosidad con Free Data (Liberar Datos). Los nuevos objetos reciben un material por defecto que permite un renderizado inmediato. Hay dos parámetros importantes en un Material para trabajar con colores de vértice:
VColPaint.
Esta opción trata los colores de los vértices como un reemplazo para el valor RGB normal en el Material. Deben añadirse Lamps para poder ver los colores de Radiosidad. De hecho, se puede usar la iluminación y sombreado de Blender como de costumbre, y conservar todavía una apariencia neta de Radiosidad en el render.
VColLight.
Los colores de los vértices se añaden a la luz al renderizar. Puede verse el resultado incluso sin Lamps. Con esta opción, los colores de los vértices son pre-multiplicados por el color RGB del Material. Esto permite un ajuste fino de la cantidad de "luz de Radiosidad" en el render final.

Como todo en Blender, la configuración de Radiosidad se almacena en un bloque de datos. Queda adjuntado a la escena, y cada escena de Blender puede tener un "bloque" de Radiosidad diferente. Puede usarse esta característica para dividir entornos complejos en escenas con solucionadores de Radiosidad independientes.

Renderizado de Radiosidad

Asumamos que tenemos una escena lista, y que queremos renderizarla con Renderizado de Radiosidad. Lo primero que debe comprenderse al usar Radiosidad es que no es necesaria ninguna Lamp, aunque se requieren algunas mallas con la propiedad de material Emit mayor que cero, pues serán las fuentes luminosas. Puede construirse la escena de prueba mostrada en Ejemplo de radiosidad.; es bastante sencillo. Simplemente debe crearse un cubo grande para la habitación, darle materiales diferentes a las paredes laterales, añadir un cubo y un cubo estirado en su interior, y añadir un plano con un valor Emit diferente de cero junto al techo para simular la luz de área (Decorado para la prueba de Radiosidad.). Se asignan materiales como de costumbre a los modelos de entrada. El valor RGB del Material define el color del Parche. El valor 'Emit' de un Material define si un Parche es cargado con energía al principio de la simulación de Radiosidad. El valor 'Emit' es multiplicado por el área de un Parche para calcular la cantidad inicial de energía no disparada.

Caras emisoras: ¡Compruebe el número de 'emisores' en la consola de Blender! Si es cero, no puede suceder nada interesante. Es necesario como mínimo un Parche emisor para obtener luz, y en consecuencia, una solución.
Decorado para la prueba de Radiosidad.

Al asignar materiales debemos asegurarnos de que todos tienen el conmutador Radio activado, para habilitar el Panel Shaders de los botones del subcontexto Material (Material con la Radiosidad habilitada.).

Material con la Radiosidad habilitada.

Nótese que la emisión de luz está gobernada por la dirección de las normales de una malla, por lo que el plano emisor de luz debería tener una normal apuntando hacia abajo, y el cubo exterior (la habitación) debería tener las normales apuntando hacia adentro (¡inviértalas!). Seleccione el subcontexto Radiosidad Manual-Part-XII-RadButton.png del Contexto Shading. Los Paneles, mostrados en Figure 18-4, son dos: Radio Rendering (renderizado de radiosidad) el cual gobierna la Radiosidad cuando es usado como herramienta de renderizado (caso presente), y Radio Tool (herramienta de radiosidad), el cual gobierna la Radiosidad como una herramienta de modelado (próxima sección).

Botones Radiosidad para renderizado de radiosidad.

Los botones definen:

  • Hemires: - La resolución del hemicubo, es decir, de las imágenes codificadas con color, utilizadas para encontrar los Elementos que son visibles desde un "Parche de disparo", y así recibir energía. Los Hemicubos no son almacenados, sino recalculados cada vez para cada Parche que dispara energía. El valor 'Hemires' determina la calidad de la Radiosidad e influye significativamente en el tiempo de resolución.
  • Max Iterations: - El número máximo de iteraciones de Radiosidad. Si se pone a cero, la Radiosidad seguirá hasta que se cumpla el criterio de convergencia. Se recomienda fuertemente asignarle un número diferente de cero, normalmente mayor que 100.
  • Mult:, Gamma: - El espacio de color de la solución de Radiosidad, es muchísimo más detallado de lo que puede expresarse con simples valores RGB de 24 bits. Cuando los Elementos se convierten en caras, sus valores de energía son convertidos a un color RGB usando los valores Mult y Gamma. Con el valor Mult puede multiplicarse el valor de la energía; con Gamma puede ajustarse el contraste de los valores de la energía.
  • Convergence: - Cuando la cantidad de energía no disparada en un entorno es inferior a este valor, la resolución de Radiosidad se detiene. La energía inicial no disparada en un entorno se multiplica con el área de los Parches. Durante cada iteración, parte de la energía es absorbida, o desaparece cuando el entorno no es un volumen cerrado. En el sistema de coordenadas estándar de Blender, un emisor típico (como en los archivos de ejemplo) tiene un área relativamente pequeña. Por esta razón, el valor de convergencia es dividido por un factor de 1000 antes de la prueba.

Ponga Max Iterations a 100 y seleccione el Contexto Scene y el Subcontexto Render (F10). Localice el botón conmutador Radio (Habilitando la Radiosidad en los botones de Render.) en el Panel Render y póngalo a 'on' para habilitar la Radiosidad, y luego ¡Render! (F12).

Habilitando la Radiosidad en los botones de Render.

El render tardará más que de costumbre; en la consola apreciará un contador subiendo. El resultado será bastante pobre (Render de Radiosidad para mallas rudas (izquierda) y mallas refinadas (derecha)., izquierda) porque el render automático de radiosidad ¡no realiza un refinado adaptativo! Seleccione todas las mallas, una tras otra, y en EditMode subdivídalas al menos tres veces. La habitación, que es mucho mayor que las otras mallas, puede ser subdividida incluso cuatro veces. Aumente Max Iterations un poco, 300 o más. Intente renderizar una vez más (F12). Esta vez el renderizado tardará incluso más, pero los resultados serán mucho mejores, con sombras suaves y derrame de colores. (Render de Radiosidad para mallas rudas (izquierda) y mallas refinadas (derecha)., derecha).

Render de Radiosidad para mallas rudas (izquierda) y mallas refinadas (derecha).
Nota: En el renderizado de Radiosidad, Blender actúa como en un renderizado normal; esto significa que las texturas, curvas, superficies e incluso Objetos Dupliframe son correctamente tratados.