Mostrando entradas con la etiqueta Render. Mostrar todas las entradas

5/5/14

Modelado de cesped. Texturas.


La vegetación siempre ha sido y es algo complicado. Complicado por lo complejo. Y el problema es que todo render de arquitectura que se precie, en términos generales siempre debería tener presencia de vegetación. Y cuando además este render es de exterior, es muy habitual tener que usar césped.


A grandes rasgos existen 3 formas diferentes de enfrentar el problema del césped, de las cuales dos suelen asustar nada más oírlas:
- Usar texturas de césped
- Sistema de partículas usando objetos premodelados
- Sistema de partículas de simulación de pelo

La primera pregunta que debemos formularnos a la hora de elegir el sistema que vamos a utilizar es referente a una cuestión de escala. Es decir: ¿cómo de lejos está la cámara respecto de nuestro césped?

La primera de las tres opciones probablemente no sea recomendable usarla casi nunca, sin embargo, si nuestro césped se encuentra muy lejos de la cámara, puede que podamos pensar en utilizar esta técnica. En el momento en que la distancia sea tal que la forma de césped pueda llegar a intuirse mínimamente...esta opción deberíamos descartarla de plano. Por supuesto, todo esto siempre y cuando busquemos obtener una imagen lo más realista posible.

Hoy vamos a analizar cómo funciona la primera de estas tres formas y a intentar dar algunas pistas que os ayuden a conseguir mejores resultados.

Texturas de césped
Esta método es muy usado porque es muy fácil de implementar, sin embargo hay una serie de errores que deberíamos tratar de evitar:


Escala: es muy importante que no descuidemos la escala de nuestra textura, sobretodo no tender a escalas muy grandes, porque automáticamente no habrá duda de dos cosas: hemos usado una textura y además no lo hemos hecho bien. Podemos buscar fotografías reales para tratar de acomodar la escala de nuestra imagen hasta obtener el tamaño adecuado por comparación con otros objetos.
Costuras: como consecuencia directa del concepto anterior, la repetición de la textura entra en juego. Es imposible disponer de una textura tan grande y con tanta resolución como para no necesitar repetirla a lo largo de todo nuestro plano de césped. En este caso es importante usar texturas “tileables”, es decir, preparadas para que cuando coloquemos nuestra textura una y otra vez al lado de si misma, los bordes de unión o costuras no sean perceptibles. Hoy en día no suele ser mucho problema, porque en la mayoría de las web de texturas (www.cgtextures.com por ejemplo), encontraremos texturas preparadas para esto. Y de no encontrar, existen plugins para Gimp o Photoshop que nos ayudarán a crear las nuestras propias. Otro día explicaremos cómo hacer nuestras propias texturas “tileables”.
Homogeneidad: una vez conseguida una textura en la que no se aprecien las juntas, es importante centrarnos en evitar la homogeneidad del conjunto, para no tender a un césped demasiado monótono o en el que puedan encontrarse patrones repetidos.

Muy bien, pero... ¿cómo conseguimos todo esto? Vamos a ponernos manos a la obra con un ejemplo.


Para ejemplificar todo lo que viene a continuación hemos modelado lo que aspira a ser un bonito prado con un granero estilo “farmville” y algunos árboles que usaremos para tener una idea de escala de todo el conjunto.


Hemos buscado por internet una textura que ya fuese perfectamente tileable y hemos ajustado su escala hasta el punto en el que consideramos que entona perfectamente con los elementos de la escena. Hemos optado por elegir una textura lo más plana posible para evitar en la medida de la posible que pudiesen encontrarse patrones identificables a lo largo de todas las repeticiones que se dan de la textura. La hemos repetido 6 veces en cada dirección, lo que quiere decir que el mismo cuadrado de textura está colocado 36 veces en nuestro plano. Como podéis comprobar no se aprecian las costuras ni se intuyen repeticiones.

En este punto ya hemos conseguido superar dos de los errores más comunes: escala y costuras. Sin embargo nos queda el más complicado: queremos conseguir un conjunto heterogéneo en el que la formación de césped parezca lo más natural posible. 


Lo primero que vamos a hacer es crear variaciones tonales de nuestra textura original. Apoyándonos en el gestor de materiales que nos proporcione nuestro software favorito, vamos a mezclar las tres tonalidades usando para ello patrones de mezcla creados a partir de texturas procedurales de ruido. La ventaja de usar estas texturas es que ya nos aportan por si mismas cierta heterogeneidad, lo que permitirá que se empiecen a diluir las repeticiones de las texturas.


En primer lugar mezclaremos la textura original con la primera variación tonal usando una textura de ruido de escala pequeña.


El resultado de lo anterior lo mezclaremos con la segunda variación tonal, utilizando también una textura de ruido, pero a una escala diferente, para que en el resultado final aparezcan mezcladas las tres tonalidades diferentes.


Para el siguiente paso vamos a usar una textura distinta. Vamos a simular esas pequeñas partes donde el césped suele perderse, por pisarlo o por cualquier otro motivo, y se empieza a ver la tierra que hay debajo. El modo de mezcla va a ser el mismo que para las texturas anteriores, sin embargo utilizaremos una textura procedural más agresiva para que lleguen a mostrarse por completo partes de la nueva textura.


Por último pero no menos importante, vamos a usar de nuevo una textura de ruido procedural para aplicar un pequeño “bump” a todo el plano. De este modo conseguiremos que el conjunto quede lo más heterogéneo posible, dando por resuelto así el tercer error más común de este tipo de césped.


Este tipo de césped aplicado junto a una escena de cierta complejidad nos dará más o menos buenos resultados. Será recomendable usarlo en escenas de este tipo, donde debido a la lejanía de la cámara la cantidad de césped es enorme y usar otros métodos podría suponer una cantidad de cálculo enorme para el ordenador.

Lo descrito en este post es sólo un ejemplo, pero dependiendo del tipo de texturas iniciales o del objetivo que queramos conseguir podrá utilizarse un tipo de mezclas u otras. Otra forma de hacerlo podría ser “unwrapear” nuestro plano y exportarlo a nuestro programa de edición favorito (Photoshop, Gimp, Krita, etc.) y crear una serie de pinceles con las texturas originales que usaríamos para pintar nuestro plano de textura, que luego simplemente tendríamos que introducir en nuestro 3D. Sea como fuere lo importante es tratar de no caer en errores demasiado evidentes que hagan que nuestra escena sufra por falta de realismo.

En futuros artículos entraremos a explicar los otros dos métodos para crear césped. Stay tunned!
Leer más

19/11/13

Ambient Occlusion

Unas semanas atrás hicimos una pequeña introducción a los diferentes pases de render. Hoy vamos a empezar a verlos particularizados y a profundizar un poco sobre ellos. Empezamos con uno de los más conocidos.

Ambient Occlusion (AO) es un concepto ampliamente nombrado en el mundillo de las imágenes generadas por ordenador (CGI por sus siglas en inglés). La traducción literal sería “oclusión ambiental”, aunque rara vez lo he encontrado nombrado así, inclusive en medios de habla hispana. Sin embargo dicha traducción nos da una aproximación bastante acertada a la definición del mismo.

Se trata de un método usado por gran cantidad de software mediante el cual se acentúa cierto realismo en las imágenes. Es una forma rápida y ecónomica en cuanto a recursos, de simular una iluminación global de nuestra escena.


Y como la mejor forma de entenderlo es verlo, aquí un ejemplo:



Esto que mostramos aquí es un pase de ambient occlusion de una escena relativamente compleja. Como vemos se trata de una imagen en escala de grises, y como vemos, es una imagen en la que se puede entender perfectamente toda la geometría. ¿Cómo se genera dicha imagen? Pues básicamente lo que hace el ordenador es estudiar cada uno de los puntos de nuestra geometría y evaluar como de “escondido” está dicho punto respecto del cielo. Desde cada uno de esos puntos se lanzan una cantidad de rayos proporcional a una opción llamada “samples” (no siempre presente). De cada uno de esos rayos se evaluará si golpea con otros objetos de nuestra escena antes de alcanzar el cielo. La cantidad de rayos que se ven interrumpidos frente a aquellos que logran alcanzar su objetivo, mediante una relación matemática, terminará dando un valor entre 0 y 1, correspondiendo el 0 al color negro y el 1 al color blanco.

Para entender como el ordenador asigna finalmente este valor a cada pixel, hay que mencionar el modo de color HSV (Hue, Saturation, Value). A la hora de asignar dicho modo a nuestro mapa de ambient occlusión, Hue (matíz) y Saturation (Saturación) serán siempre 0, mientras que a Value se le asignará el valor obtenido mediante el método descrito.

Es importante mencionar que estos rayos no sólo tienen en cuenta los objetos contra los que impactan, sino que también tienen en cuenta si los materiales asignados a dichos objetos tienen transparencia. En este sentido, si un objeto es un 50% transparente, un punto cualquiera no estará completamente oculto respecto a dicho objeto, estará sencillamente semioculto...como siempre, lo mejor para entenderlo, una imagen:


Lo que hemos hecho en esta imagen ha sido crear un plano de suelo y otro de pared, aplicando a este último un gradiente de materiales aumentando progresivamente la transparencia del mismo. Para entender mejor como esta transparencia afecta a nuestro mapa de ambient occlusion hemos ido rebajando poco a poco el valor del mismo, de modo, que como puede observarse, la oscuridad aumenta siempre mucho mas desde la esquina con la pared completamente opaca, hasta el extremo contrario donde tiene un comportamiento igual a aquellos puntos menos ocluidos del suelo.

Llegados a este punto ya tenemos una percepción mucho más clara de qué es un mapa de ambient occlusion, cómo se crea y como se comporta ante la transparencia de los materiales. Perfecto, pero estamos viendo que los mapas de AO son siempre una escala de grises, mientras que nosotros trabajamos generalmente con imágenes a color, así que, ¿cómo lo usamos?.
Lo más habitual es que nuestro software preferido directamente nos de opciones para ensamblarlo todo juntito y que nosotros sólo veamos el resultado final, sin embargo, para poder tener un control mucho más exhaustivo sobre las imágenes que generamos, es recomendable aprender a tratar estos mapas por separado, pudiendo controlar muy fácilmente a posteriori la intensidad con la que aplicamos dicho mapa, en caso de que no quedar contentos con las opciones elegidas antes del render. Y aquí es donde entran los famosos “modos de fusión”, presentes en prácticamente cualquier software de edición de imágenes y sobre los que hablaremos en detalle en otra ocasión.


El modo aceptado generalmente para la unión de nuestra imagen con un pase de AO es el “multiplicar”. Sin embargo en mi experiencia y según lo que andemos buscado, puede ser interesante probar otros diferentes.

Es importante mencionar que lo realmente correcto es multiplicar el AO por la capa de color del diffuse, no por el diffuse completo ni por supuesto por la combinación con mapas especulares o de transmisión.

Veamos un ejemplo de como controlar dicho pase de AO al aplicarlo sobre nuestra imagen:


Para explicarlo hemos creado una pequeña escena con algunos objetos. Hemos usados materiales simples y no hemos usado ningún punto de luz, sólo algo de luz ambiental. En la imagen más a la izquierda podemos observar el resultado de dicha escena. Siguiendo el esquema anterior hemos hecho varias pruebas. Como puede observarse podemos usar nuestro mapa de ambient occlusion para cambiar completamente la iluminación de nuestra escena; si previamente a multiplicarlo por la capa de color diffuse aprovechamos para aumentar o dismunuir el valor de sus píxeles, podemos aclarar u oscurecer la imagen respectivamente.

En esa escena tan sencilla es obvio que comparando cualquiera de las 5 pruebas con AO frente a la primera que no lo tiene, la percepción del espacio se hace mucho más evidente con el uso de este, dotando a la escena de un realismo que no tenía.

Por último os dejamos con un pequeño vídeo en el que podéis ver cómo el mapa de AO del principio puede usarse para retocar por completo la iluminación de esa escena.


En siguientes post seguiremos aprendiendo más acerca de otros pases de render. Stay tunned!
Leer más

16/10/13

Color bleeding

En este artículo vamos a explicar un pequeño tip o truquito para solucionar un problema, que de no entenderlo, puede llegar a resultar muy molesto.

La traducción directa de "color bleeding" al español, "sangrado de color", a priori no parece darnos muchas pistas sobre su significado. Sin embargo veremos que en realidad este problema si que tiene algo que ver con "sangrar" color. Es un problema que cuando hacemos infografías de arquitectura tiende a destacar mucho debido a las superficies tan impolutas que a veces proyectamos. Y la iluminación de nuestros renders es la causante de ello.

Para ilustrar el problema vamos a usar la conocida Cornell Box, que nos viene de perlas para reproducir la cuestión:


Cuando tenemos dos superficies cercanas de diferente color y la luz incide sobre ellas, el color de una se ve reflejado en el otra y viceversa. Si os fijáis en este primer render, tanto el color rojo como el verde se ven reflejados en los objetos que se encuentran más próximos.

Este efecto de transferencia de color entre superficies no ocurre siempre y depende del tipo de iluminación que estemos usando. Sin embargo, en las configuraciones de iluminación que tienden a buscar el realismo, siempre estará presente. Es más, en muchas ocasiones esto ni siquiera supondrá un problema, porque a fin de cuentas es un detalle que dota de realismo a nuestra escena. No obstante, es muy importante entenderlo para que llegado el caso seamos capaces de poder controlarlo a nuestro antojo, bien para eliminarlo, bien para atenuarlo, o incluso para jugar con él como veremos después.

Para entenderlo es clave comprender la realidad que lo causa: los rayos de luz reflejados. Cuando los rayos provenientes de nuestra fuente de luz impactan sobre una superficie, dejan parte de sus propiedades en esta, toman parte de las propiedades del material contra el que impactan y siguen su camino, en este caso habiendo coloreado su luz, que impactará sobre el siguiente objeto, transmitiéndole dicho color. La clave en todo esto son dos palabras: luz reflejada.


Como veis en este segundo render no hay rastro de color bleeding. Lo que hemos hecho ha sido tratar los materiales de esas dos paredes para decirles que cuando sobre ellas impacte un rayo de luz, el reflejo de ese rayo lleve consigo el mismo color amarillento del resto de objetos, en vez del rojo o verde de las paredes laterales.

Esto se consigue de un modo u otro en función del software que empleéis, pero hoy en día, con materiales basados en nodos siendo cada vez más populares, esto que os mostramos aquí puede ser un ejemplo de composición para estos materiales.


Básicamente necesitamos dos materiales, el básico de nuestra superficie, sea el que sea, y otro que configuraremos para que sea el que se use cuando un rayo de luz incida sobre nuestra superficie y sea reflejado.

En el ejemplo anterior, lo que hemos hecho ha sido aplicar a ese “material reflejado” el mismo color que poseen el resto de objetos. Pero llegado a este punto, podríamos usar esta técnica para modificar la escena absolutamente a nuestro antojo. Por ejemplo así:


Como veis aquí hemos conseguido que nuestro material rojo refleje verde, y el verde refleje rojo. ¿Qué conseguimos con eso? Pues en este caso nada en particular, excepto obtener mayor control sobre los materiales con los que trabajamos.

Y como siempre decimos, el conocimiento teórico es clave, mucho más allá de las herramientas que usemos, que de una forma u otra siempre nos permitirán solucionar los problemas que nos encontremos en nuestro diseño, siempre y cuando seamos capaces de entender qué es lo que está pasando.
Leer más

3/10/13

Pases de render

Habitualmente cuando lanzamos un render con la pretensión de ser definitivo, bien por la máquina que tenemos, por la cantidad de píxeles, por los samples en caso de usar motores umbiased, suele requerir una cantidad de tiempo considerable. Por ese motivo, lo normal es repasar y volver a repasar todos los aspectos que consideramos que pudieran fallar o no quedar como esperamos, para no sentir más tarde que hemos perdido el tiempo al tener que volver a renderizar, bien porque descubramos fallos que no vimos con anterioridad, bien porque el cliente solicita algún cambio.

También suele ser complicado que, aun con todas las configuraciones que nos ofrezca nuestro software favorito, consigamos estar plenamente satisfechos con la imagen final que resulte de nuestro render: la postproducción, mucha o poca, siempre estará presente.


A fin de cuentas todo gira en torno a lo mismo: tener un mayor control sobre nuestra imagen final. Y por todo ello, llega un momento en el que es casi imprescindible empezar a trabajar con los famosos pases de render, porque nos facilitan el retoque, porque nos pueden ahorrar un nuevo renderizado y, en definitiva, porque a la larga nos ahorrarán tiempo.

Existen una gran cantidad de pases de render diferentes, no existe una cantidad determinada ni una formula universal para todo ellos y al final vas a tener que trabajar en función de lo que te ofrezca tu motor de render favorito. Sin embargo, aunque la cantidad, los nombres y las características difieran ligeramente de unos motores a otros, vamos a tratar de mostraros los más comunes y algunos de los usos que pueden tener.



Difuso/especular/transmisión:
Estos 3 pases son los más habituales. Son los 3 básicos que componen el render final. Dependiendo del motor de render, sobretodo si es de tipo unbiased, es posible que cada uno de esos tres pueda descomponerse a su vez en otros tres: color, directo e indirecto. En estos casos, por la forma en que funcionan estos motores, es posible que se genere mucho ruido si no aumentamos mucho la cantidad de “samples” y, en consecuencia, el tiempo de render. Si trabajamos con un motor unbiased y disponemos de los pases mencionados, podríamos mantener una cantidad de “samples” aceptable, hacer una búsqueda a través de nuestros pases para encontrar cual es el causante de generar el ruido (normalmente los indirectos) y difuminarlo antes de combinarlos con el resto.
La forma de combinar los 3 principales (difuso, especular y transmisión) será con el modo de composición “añadir”.



Sombra
Este pase es bastante sencillo de entender. Sencillamente es un mapa en escala de grises de las sombras de nuestra escena, propias y proyectadas, que podemos usar para jugar con todas las propiedades de la misma. Podríamos atenuarla, oscurecerla o incluso hacerle algún tratamiento de color.



Z (profundidad)
Es otro de los pases más comunes en cualquier motor de render. Es habitual que para poder verlo como un mapa de bits normal y corriente, antes debamos normalizarlo, es decir, convertir todos los valores del mismo a un rango entre 0 y 1. Para aclararnos, es un mapa en escala de grises que nos da información sobre la distancia a la cámara de todos los objetos de nuestra escena. Este pase es utilizado para simular la profundidad de campo que suele darnos una cámara de fotos, de modo que podremos desenfocar nuestra imagen a partir de una cierta distancia, o enfocar un determinado punto y desde ahí desenfocar todo lo que se acerque o aleje de la cámara respecto de ese punto.



AO (ambient occlusion)
Muy habitual también, se trata de un pase que sirve para simular cierta iluminación global. Es un mapa en escala de grises que representa cada punto en función de la cantidad de rayos directos que lo iluminan. Usado en pequeñas cantidades puede resultar beneficioso para nuestras imágenes al acentuar el volumen de los objetos.



Normal
Este es sin duda uno de los pases más atípicos, porque es muy difícil interpretar su significado. Es un mapa que almacena las normales de los objetos en cada punto. Las normales son vectores de 3 componentes, a cada una de las cuales se asigna un color RGB, resultando al final un mapa tan colorido como el que os mostramos. Se suele usar para tratar la iluminación, pudiendo incluso llegar a falsear la dirección de la que procede la luz, o acentuar la luz en ciertos puntos.




UV
Puede llegar a ser extremadamente útil disponer de este pase de render. Se trata simplemente de una representación de todos los objetos de nuestra escena que están “unwrapeados” (si es que esa palabra pudiera existir en español). Es muy habitual usar imágenes para texturizar los objetos de nuestra escena y en este pase podemos ver todos ellos. Podría usarse, por ejemplo, para cambiar la portada de un libro en nuestra escena que hemos detectado que está mal escrita, sin necesidad de volver a renderizar la escena entera.

Vector
En este caso también se trata de un pase algo más raro y se obtiene normalmene cuando estamos trabajando con animaciones. Nos da información sobre la dirección en la que los objetos se están moviendo y puede ser usada, por ejemplo, para desenfocar ciertas partes y acentuar la sensación de movimiento.

Índices de objetos o materiales
Por último, este pase también puede ser muy útil y lo habitual es usarlo en combinación con alguno de los anteriores. Previo render, si hemos asignado a cierto material o a cierta serie de objetos un índice concreto y diferente a los del resto de la escena, este pase nos permite aislar dichos objetos o materiales en postproducción para efectuar sobre ellos efectos concretos que no queremos que afecten al resto de la escena. Podríamos por ejemplo oscurecer o aclarar muy fácilmente un material concreto, aunque esté aplicado en objetos diferentes y en posiciones diferentes. Es una forma muy rápida de enmascarar objetos.


A partir de aquí y en futuros post, iremos desentrañando poco a poco cada uno de estos pases, conociendo en detalle las particularidades de cada uno. Stay tuned!!
Leer más