viernes, 21 de diciembre de 2007

Cómo hacer un pase de reflexión / How to make a reflection pass

-ESPAÑOL-


Estimados todos:

He visto en un foro que un usuario preguntaba si había alguna forma de hacer un pase de reflexión. La verdad es que no había hecho nunca uno, ya que mis trabajos suelen salir más o menos terminados del render 3D, pero me he puesto y he llegado a una forma bastante sencilla de hacer el pase de reflexión. He aquí cómo hacerlo en MAYA, he usado para este tutorial el motor Mental Ray, pero se puede usar con cualquier motor, incluso con el nativo de MAYA (si excluímos el uso de Final Gather, claro).

Vamos a usar una técnica que consiste en tener, por un lado, un pase de "Beauty", otro de "Reflection Raw" y otro más de "Reflection Offset".

Veamos, todos conocemos el pase de "Beauty", que es el de color general de la escena. El pase de "Reflection Raw" contiene el reflejo "total", es decir, como si todos los objetos de la escena reflejaran como un espejo. Luego tenemos el pase de "Reflection Offset", que nos servirá para poder controlar la cantidad de reflejo para cada objeto (si fuera necesario).

La teoría es ésta, para el pase de reflexión, los objetos que tienen los materiales "reales" tienen que ser invisibles a la cámara pero visibles para los reflejos. Sin embargo, los objetos totalmente reflectantes, serán visibles a la cámara pero invisibles a todo lo demás, de tal manera que veremos los objetos que reflejan, pero en el reflejo veremos los objetos reales.

Bien, vamos a usar una escena muy sencilla, no son más que unas esferas y unos cubos puestos en un suelo. Les hemos aplicado unos materiales diferentes para poder ver mejor las diferencias.

La iluminación es muy simple también, tan sólo una luz direccional con sombras raytrace (tenemos que recordar el ponerle dos rebotes de raytrace, ya que queremos que las sombras que arroja se vean en los reflejos) de color anaranjado y un color de "background" de la cámara tirando a un gris azulado. Si le añadimos un poco de Final Gather la imagen podría quedar más o menos así.

Ahora cogemos todos los elementos de la escena y los agrupamos bajo un nodo al que llamaremos algo parecido a "beautyPass_grp", por aquello de que éste será el pase "bonito", o como se le suele conocer "Beauty pass".

Una vez agrupado lo duplicamos y llamamos a este grupo algo así como "ReflRawPass_grp".

Una vez hecho esto, asignamos un material tipo "blinn" a todos los objetos hijos del "ReflRawPass_grp" con los valores de la imagen siguiente.

Ahora tenemos que decirle a los objetos del pase "ReflRaw" que

sean visibles a la cámara pero ocultos a todo lo demás. (Esto es más fácil hacerlo con la ventana "AttributeSpreadSheet", poniendo todos los atributos de render a OFF menos la "Primary visibility", que se quedará a ON.

Luego tenemos que hacer lo contrario con los objetos hijos del pase de "Beauty". Es decir, todo a ON menos la "Primary visibility" a OFF.

Sólo queda renderizar y obtener una imagen como la que sigue.

Ya tenemos los dos pases creados (el Beauty lo hemos hecho al principio del tutorial). Con lo que nos queda por hacer el pase de "ReflectionOffset". Este pase sirve para poder controlar la cantidad de reflejo de cada objeto, pero yo me he conformado con hacer un degradado "fresnel" (quien no sepa lo que es eso no debería de estar haciendo este tutorial) que irá de blanco a negro (según la perpendicularidad de la normal de la superficie con respecto al ángulo de visión de la cámara).

Para esto duplicamos otra vez el grupo original y lo llamamos algo así como "ReflOffset_grp" y aplicamos un "surfaceShader" a sus hijos. Tenemos que dejar todos los atributos de render en ON, ya que en este pase todo tiene que estar visible.

Si hacemos un render nos saldrá algo así.

Bien, ahora sólo queda componer las capas en photoshop.

La fórmula es más o menos ésta, al pase de ReflRaw tenemos que sustraerle el ReflOffset, esto se consigue con el modo multiplicar del photoshop. Agrupamos estos dos pases y el grupo tiene que sumarse a la capa de Beauty, que se consigue con el modo Screen del photoshop.

Más o menos como en la siguiente imagen.

Esto se puede compliar tanto como queramos, pero para empezar, os puede servir.

¡Saludos cordiales!

-ENGLISH-

Dear friends:

I’ve seen a forum user asking for a “How to make a proper reflection pass” tutorial. I’ve never done such a thing, because my jobs usually come almost finished from the rendering process. So I’ve tried and I’ve come up with a decent solution and pretty straight forward. This is how I make it in MAYA, I’ve used Mental Ray for the rendering but you can use whatever you want, even MAYA’s own renderer (if you don’t use Final Gather of course).

We’ll use a technique made with a Beauty pass, a Reflection Raw pass and a Reflection Offset pass.

Everybody knows what a Beauty pass is…, is the general color of the scene. The Reflection Raw pass is the “total” reflection…, like every object in the scene is reflecting like a perfect mirror. Then there comes the Reflection Offset, wich is like a control of the amount of reflection for every object in the scene if you needed such feature).

So this is the theory, for the Reflection pass, the “real” objects must be invisibles to the camera but visibles to reflections. But the reflective objects must be visibles to the camera but invisibles to everything else, so we will see the reflection objects but in their reflection we will see the actual objects.

Cool, now we are going to use a very simple scene made with some cubes and some spheres place allover the ground. The objects have different shaders to better see the effect.

It has a very simple illumination too. Just a directional light with raytrace shadows (we must enable the second raytrace bounce for the light in order to see the shadows in the reflections) with an orange color and bluish grey in the camera’s background color. With some Final Gather touch you can get something like this.

Now we must group all the objects and name that group as "beautyPass_grp".

Good, now we duplicate this group and name it "ReflRawPass_grp".

For the total reflections we must assign a blinn type shader to this group and change its attributes to this.

Cool, so we need to tell these objects not to be seen in the reflections but to the Primary visibility.

Now we must do the opposite with the Beauty group, telling it not to be seen to the Primary visibility but to the reflections. This can be better done with the AttributeSpreadSheet window.

Now we perform a render and see something like this.

So we have two pass render (the beauty pass was render at the very start of this tutorial). So we must do the ReflectionOffset pass. You can control the amount of reflection with this pass, but I’ve done a fresnel ramp in order to control the color in the facing direction to the camera, from black to white.

So we take the initial group and we duplicate it again and we name it somewhat like “ReflOffset_grp” and asign a SurfaceShader to it. Now we must turn the Primary visibility to ON because we need this group to appear in the render (we can hide the other groups). Now we render and see something like this.

Now we only must compose the result in phoshop.

We need to substract the ReflOffset from the ReflRaw, group them and add the group to the Beauty pass, just like in the next image.

Now you can apply this technique to your very own renders!, Cool!

Stay tuned!

2 comentarios:

Anónimo dijo...

Muy buen tutorial.
Tenia una china en el zapato con el tema de "reflection pass".
Esto me abre bastantes posibilidades.

Saludos y gracias por el tuto.

Bachimala

Andrew Glazebrook dijo...

Very cool work !