trensim.comSimulación Ferroviaria
   

TUTORIAL: Avanzando en 3ds Max y RailWorks

Foro para tratar temas relacionados con Autodesk 3ds Max (3D Studio Max) y Autodesk gmax

Moderador: Moderadores

9. Texturas nocturnas

Notapor Pere » Sab Jul 24, 2010 6:06 pm

9. Texturas nocturnas

Cae la noche sobre nuestro mundo virtual, y nuestra casilla se sume en la más oscura "negrura". Ningún signo de vida se desprende de ella: ni luz a través de las ventanas, ni siquiera nadie ha encendido la lámpara sobre la puerta.

rw-cs033.jpg

Claro que quizás es esto lo que queremos. A fin de cuentas se trata de una oficina del factor de mercancías, y puede que por la noche le guste ir a ver a su esposa para que le cuente como le ha ido el día en la peluquería o que la niña le ha tirado de los pelos al vecinito del piso de al lado y ha tenido una bronca con...

Si ya lo digo..., mucho mejor unas horas extras arreglando papeles atrasados. Y así nos da pié a poder explicar como introducir efectos nocturnos a la casilla ;)

9.1. Iluminación de ventanas en los edificios

En primer lugar haremos que a través de una ventana, que mantiene las contraventanas abiertas, se filtre la luz de una mortecina lámpara de escritorio. Tan sólo lo haremos en una de las ventanas, pues no todas tienen porqué estar abiertas.

Empecemos pues por dotarnos de una textura adecuada:

En el editor de imágenes que usemos abriremos la fotografía de la casilla lateral para seleccionar y escoger ajustada una de las ventanas de la casilla:

ps-cs022.jpg

Recortaremos la ventana y crearemos una nueva imagen con ella a la que le daremos las dimensiones 128 píxeles de alto por 64 píxeles de ancho. Crearemos una selección que defina los cristales de la ventana:

ps-cs023.jpg

A la zona exterior a esta selección, el marco de la ventana, le reduciremos la luminosidad un 85%, y a la zona de la selección la rellenaremos con un degradado basado en un color amarillento anaranjado tenue:

ps-cs024.jpg

Realizaremos un degradado "circular" escogiendo para este degradado como color de inicio el amarillento que acabamos de crear y como final una transparencia total. Para la ejecución del degradado partiremos de un punto donde hipotéticamente está situada la luz en el interior de la casilla, para que dé la sensación de una triste lámpara que apenas ilumina toda la estancia:

ps-cs025.jpg

Bueno, cada cual recreará con su talento lo que refleje esa luz a través de la ventana.

ps-cs026.jpg
ps-cs026.jpg (15.65 KiB) Visto 16417 veces

A esta textura la he llamado ES_Casilla_Noche.ace, y podría contener todos los elementos de la casilla que vayan a tener iluminación específica para la noche. Para el presente caso esta textura tan sólo contendrá la ventana.

Ahora iremos al 3ds para crear un polígono sobre la ventana que deseemos que esté iluminada por la noche. Dejaremos visible tan sólo el cuerpo de la casilla "cercano" 1_0256_Casilla, y sobre el Viewport Right crearemos un cubo de las dimensiones aproximadas de la ventana a cubrir, y le daremos suficiente longitud para que, partiendo del eje central de la casilla, llegue a cubrir la cara de la ventana:

3ds-cs111.jpg

Seleccionaremos los vértices "interiores" de este nuevo cubo:

3ds-cs112.jpg

Para proceder a borrarlos. Con esto habremos eliminado todas las caras del cubo menos la que se orienta hacia el exterior de la ventana.

3ds-cs113.jpg

Este es el polígono que nos interesa, y que procederemos a texturar con la nueva textura creada.

Abriremos el editor de materiales y crearemos uno nuevo:

3ds-cs114.jpg

Le he llamado "Casilla_Noche", y he asignado el shader "Tex", al cual le he cargado en el Slot 1 (el único de este shader) la textura "ES_Casilla_Noche.ace". Este shader no necesita que ajustemos ningún parámetro, y es prácticamente idéntico al estándar "TexDiff", con la salvedad de que no está afectado por la luz "difusa", es decir, por la luz ambiente. Dicho en otras palabras, la luminosidad de la textura se preservará con independencia de si es de día o de noche, de si está en la fachada iluminada de la casa o en la fachada en sombra, etc. Por tanto, este shader es ideal para representar por la noche objetos iluminados, interiores de coches de pasajeros, de cabinas de locomotoras, y todo lo que se nos ocurra que deba mantener una cierta "luz propia".

Ya tenemos lista la ventana. Podríamos duplicar ésta para ponerla en tantas ventanas como queramos, pero en esta ocasión lo dejaremos así. Tan sólo nos enfrentamos a un problema: El polígono con la iluminación "interior" de la ventana deberá ser visible únicamente por la noche, dado que si de día se viese el efecto sería el contrario al deseado (al menos en este caso). RailWorks viene en nuestra ayuda con un simple procedimiento: vamos a nombrar a este polígono de la ventana como 1_0256_fx_night. El número de LOD y la distancia funcionarán como de costumbre, pero el que el nodo se denomine "fx_night" provocará que durante las horas diurnas no se visualice y que en las nocturnas se renderice correctamente.

Por tanto, cambiaremos el nombre al objeto y podremos exportar la casilla

Hay que señalar que, al igual que podemos usar el nombre de nodo "fx_night" para objetos que tan sólo se visualizan por la noche, también disponemos del nombre de nodo "fx_day" que realiza la acción contraria, es decir, se visualiza únicamente durante el día. Ambos nodos son alternativos y en el preciso momento que uno se desactiva el otro se activa, por lo que combinados podemos representar con ellos elementos que tienen diferente aspecto de día o de noche.

En el Asset Editor podremos comprobar como se verá la casilla tanto de día como de noche:

rw-cs034.jpg

Lo siguiente será proceder a iluminar la lámpara exterior sobre la puerta, pero eso será en otro capítulo...
Avatar de Usuario
Pere
grupo TrenSim
 
Mensajes: 5043
Registrado: Jue Ago 28, 2003 11:44 pm
Ubicación: Barcelona

9.2. Iluminación de puntos de luz en el exterior

Notapor Pere » Dom Jul 25, 2010 11:40 pm

9.2. Iluminación de puntos de luz en el exterior

Vamos a ver como resolver el efecto de un punto de luz exterior (una bombilla desnuda p.e.) en el simulador, pues técnicamente el planteamiento es muy diferente al visto para representar la presencia de luz en un interior.

Básicamente tenemos que resolver dos efectos:
  1. la luz proyectada por el punto de luz sobre las superficies: fachadas y suelo.
  2. el destello y halo producidos por la observación directa del punto de luz.
Buscamos algo parecido a esto:

rw-cs035.jpg

Para empezar nos proveeremos de unas texturas adecuadas, en nuestro caso tres diferentes, que serán suficientes en la mayoría de los casos:
  1. Una textura de un círculo difuso de luz, que representa la luz que recibirá el suelo o en general una superficie perpendicular a la luz. La he llamado "glow_floor_nm.ace"
    ps-cs027.jpg
    ps-cs027.jpg (9.01 KiB) Visto 16360 veces
  2. Una textura similar a la anterior, pero con el círculo deformado (estirado) para representar la luz que recibirán las fachadas o en general una superficie oblícua a la luz. La he llamado "glow_wall_nm.ace":
    ps-cs028.jpg
    ps-cs028.jpg (9.18 KiB) Visto 16360 veces
  3. Una textura con el destello y halo producidos por la bombilla. La he llamado "glow_lens_nm.ace"
    ps-cs029.jpg
    ps-cs029.jpg (9.23 KiB) Visto 16360 veces
Las texturas serán con el fondo en negro puro y la luz en diferentes tonalidades hacia el blanco, según la cantidad de luz que deseemos. También podemos tener color en la luz, para representar la proyección de un foco de color (rojo por ejemplo). En este caso he optado por una cantidad de luz muy moderada pues la bombilla no será de muchos vatios, pero en caso de otros tipos de iluminación variaremos este factor al gusto.

Los nombres de las texturas pueden ser los que deseemos, por supuesto, aunque yo he usado los nombres ingleses de unas texturas que he encontrado en el juego. Pero si os habéis fijado, todas ellas llevan el sufijo _nm, y éste es imprescindible en el caso que nos ocupa. Al igual que el sufijo _wi (para las texturas invernales), el sufijo _nm tiene un significado para el simulador, en particular para el exportador de las texturas, e indica que en el proceso de exportado la textura no se comprima (el formato .ACE usa compresión DXT). De esta forma evitamos que en texturas con degradados suaves de color, como las nuestras, se produzca el efecto "chorreado" de los degradados. En el resto de situaciones la compresión DXT es correcta y hasta necesaria para no cargar la gráfica con texturas de gran tamaño.

Vamos a lo nuestro.

Una vez en 3ds, prepararemos tres materiales con las tres texturas que acabamos de crear.

Al primero lo he denominado "Luz_Suelo":

3ds-cs115.jpg

Escogeremos el shader "AddATex". Este shader usa la textura suministrada para adicionar luz sobre los objetos que se sitúen detrás mediante "additive alpha", y le asignaremos la textura "glow_floor_nm.ace".

Para este shader deberemos modificar un parámetro: En "Material Options" cambiaremos "Z-Buffer Mode" por "TEST ONLY" para asegurar que la renderización sea correcta, pues recordemos que este shader usará el método "alpha", que toma el valor del brillo de los pixels de la textura para determinar a partir de éste una transparencia: con el brillo igual a cero (negro) la transparencia es total, y con el brillo máximo (255) la opacidad es absoluta del color del píxel.

Un segundo material lo denominaremos "Luz_Pared" y lo configuraremos igual al anterior, pero con la textura "glow_wall_nm.ace", claro.

Por último con el tercer material, el que usaremos para el halo de la bombilla, actuaremos de igual forma, llamándole "Luz_Halo" y con la textura "glow_lens_nm.ace". Pero en este caso necesitamos algo más, que no es preciso en los anteriores materiales: El polígono que contenga el halo de la bombilla deberá orientarse siempre en la dirección de la cámara del simulador. O sea, se debe ver igual desde cualquier ángulo de la escena, puesto que el halo no debe parecer una superficie plana estática en el espacio, si no más bien pretendemos un efecto luminoso incorpóreo.

Para ello descenderemos un poco más hasta el grupo "Material Properties", donde encontramos el subgrupo "View Facing Options", donde escogeremos "View Facing". Por supuesto que también cambiaremos "Z-Buffer Mode" por "TEST ONLY", pues en este caso usaremos igualmente el método "alpha"

3ds-cs116.jpg

Con los materiales listos y preparados procederemos a crear los efectos de luz sobre la casilla.

Necesitamos un polígono para la proyección de luz contra el suelo. Para ello crearemos un cubo al cual, como en el caso de la ventana, después le eliminaremos los vértices para quedarnos con una cara únicamente. Le daremos una dimensión de 4x4 a lo largo y a lo ancho, y 1 metro de altura. La altura en realidad no importa mucho. Luego, convertido en "Editable Poly", le seleccionaremos los vértices inferiores:

3ds-cs117.jpg

Para a continuación eliminarlos y quedarnos con el polígono superior.

Ahora centraremos pivote (gizzmo) del polígono en la cara superior. Para ello, con el polígono seleccionado:

3ds-cs118.jpg

  1. Seleccionaremos la pestaña "Hierarchy" (Jerarquía) del Control Panel.
  2. Verificaremos que las acciones serán sobre el Pivote del objeto.
  3. Solicitaremos que la acción afecte únicamente al pivote, y no al objeto.
  4. Ejecutaremos que el pivote se sitúe en el centro geométrico del objeto, en este caso en el centro del polígono.
Abandonaremos el modo de trabajo en el Pivote pinchando en la solapa "Modify" del Control Panel, por ejemplo.

Ahora desplazaremos el polígono a su sitio, es decir:
X = 0m, centrado en el eje longitudinal de la casilla.
Y = 3,7m, centrado bajo la bombilla de la lámpara.
Z = 0,025m, es decir a 2,5 centímetros del suelo. Esta altura es para evitar el efecto de flickering (parpadeo) por superposición de dos polígonos con diferentes texturas. Hay que tener en cuenta que esta distancia no es un valor absoluto, y que dependerá del modelo en cuestión, pero con la casilla he comprobado que esos dos centímetros y medio son suficientes.

Y le aplicaremos el material "Luz_Suelo":

3ds-cs119.jpg

Con el mismo procedimiento crearemos un polígono para cubrir la fachada frontal del edificio. El cubo será esta vez de 4x4x4 metros, y los vértices a eliminar lo serán los "posteriores" del cubo:

3ds-cs120.jpg

Centraremos también el Pivote (igual que en el caso anterior) y lo moveremos a:
X = 0m, centrado en el eje longitudinal de la casilla.
Y = 3,025m, es decir, a 2,5 centímetros de la fachada anterior. Esta distancia es para evitar el efecto flicker antes comentado ;)
Z = 2,025m, es decir que el borde inferior esté a 2,5 centímetros del suelo, por lo mismo.

Y le aplicaremos el material "Luz_Pared":

3ds-cs121.jpg

En este caso, y para que exista una continuidad entre la iluminación de la pared y la del suelo, deberemos modificar ligeramente las coordenadas de mapeo del polígono. Le añadiremos un Modificador Unwarp UVW, elegiremos el modo Vertex, y pulsaremos el botón "Edit":

3ds-cs122.jpg

Seleccionaremos los dos vértices inferiores, y con la selección realizada los elevaremos sobre la textura, modificando la coordenada V (altura) hasta 0,3 (este valor representa el 30% del tamaño de la textura, sea esta de los píxeles que sea). Con esto mapeamos la mancha de luz de forma que tenga continuidad con la del suelo. Podéis probar como se ve con este cambio y sin él para apreciar el efecto buscado.

Crearemos un último polígono para el halo de la bombilla. El cubo será esta vez de 3x4x1,5 metros, siendo en este caso las medida importantes el ancho de 3 metros y la altura de 1,5 metros. Los vértices a eliminar lo serán los "posteriores" del cubo:

3ds-cs123.jpg

Centraremos también el Pivote (igual que en los casos anteriores) y lo moveremos a:
X = 0m, centrado en el eje longitudinal de la casilla.
Y = 3,7m, centrado bajo la bombilla de la lámpara.
Z = 3m, enrasado con la pantalla de la lámpara.

Y le aplicaremos el material "Luz_Halo":

3ds-cs124.jpg

Nuevamente, en este caso modificaremos las coordenadas de mapeo del polígono, pues únicamente nos interesa del halo la mitad inferior de éste, dado que la pantalla de la lámpara nos protege de la luz superior de la bombilla. Le añadiremos un Modificador Unwarp UVW, elegiremos el modo Vertex, y pulsaremos el botón "Edit". Seleccionaremos los dos vértices superiores, y con la selección realizada los desplazaremos sobre la textura, modificando la coordenada V (altura) hasta 0,5 (este valor representa el 50% del tamaño de la textura, sea esta de los píxeles que sea). Veremos que el polígono se mapea ahora en la mitad inferior de la textura.

Ya tenemos los tres polígonos deseados, con sus respectivos materiales. Un último paso consistirá en seleccionar el polígono de la iluminación nocturna de la ventana (recordemos que se llama "1_0256_fx_night"), y a este elemento deberemos "atachar" los tres nuevos polígonos nocturnos, dado que al igual que en el caso de la ventana, tan sólo queremos que sean visibles por la noche, no debiéndose renderizar por el día.

Para rematar el trabajo, al objeto resultante "1_0256_fx_night" le aplicaremos una reorientación de su eje en relación al eje de la escena:

3ds-cs125.jpg

Esta operación es necesaria porque este objeto es la suma (Attach) de varios de ellos, cada uno creado en Viewports diferentes, y con orientaciones por tanto diferentes. Y para que el polígono del halo de la bombilla se oriente correctamente respecto de la cámara el eje del objeto debe estar en "sintonía" con el de la escena.

Exportaremos la casilla y observaremos en el Asset Editor el comportamiento entre la noche y el día:

rw-cs036.jpg

Prestaremos especial atención al halo de la bombilla, y nos moveremos alrededor de la casilla para ver que éste se nos presenta igual en todo momento a la cámara.

Si todo está correcto podemos exportar el blueprint al simulador y ver en nuestra ruta el resultado final

rw-cs037.jpg

Ahora nuestra casilla está llena de vida, su estufa funciona emitiendo un suave humo, por la noche su inquilino enciende las luces, los inviernos la cubren de nieve y en los días soleados proyecta su sombra sobre el terreno y los objetos que la rodean...

Y en este punto daremos por finalizada la casilla, que bastante ha sido.

Hemos realizado un largo viaje desde aquella primera casilla que exportamos en su día, pero hemos sido capaces. ¡No era tan díficil! :D ... A lo largo de estos capítulos hemos visto prácticamente todo aquello que deberemos aplicar en las creaciones para el simulador. Aún nos queda más por aprender y practicar, pero eso ya lo reservaremos para casos especiales, que pueden formar parte de una tercera entrega para quienes quieran aún más. :wink:

De momento podemos empezar a producir creaciones para el simulador, con un resultado más que aceptable.

Ánimo y suerte.
Avatar de Usuario
Pere
grupo TrenSim
 
Mensajes: 5043
Registrado: Jue Ago 28, 2003 11:44 pm
Ubicación: Barcelona

Anterior

Volver a 3D Studio Max / gmax

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 11 invitados