martes, 22 de febrero de 2022

Modelado de la locomotora - Parte IX: las vías del tren con Geometry Nodes

En esta novena parte de la serie de videos sobre el modelado de una locomotora a vapor, llega el momento de dedicarme a las vías del tren.

Luego de mirar muchos videos y de hacer varias pruebas me decidí a intentarlo utilizando los novedosos Nodos de Geometría (Geometry Nodes).

Los pasos que se ven en este video están realizados con la versión 3.0.1 de Blender.

Nodos de Geometría

  • 00:00:00 - Creación de la curva base a partir de un plano.
  • 00:02:41 - Creación de un grupo de Nodos de Geometría sobre la curva base.
  • 00:07:59 - Asignación del perfil del riel (descargado de Wikipedia y editado en Inkscape) a un cilindro (con el nodo “Transfer Attribute“) en cada vía. Todo el árbol de nodos generado lo encuadro en un marco, que llamo “Rieles”. Por último, hago unas pruebas de edición de la curva base para ver que las nuevas vías se ajustan a la posición que se le dé a los vértices de la curva base.
  • 00:22:50 - Creación de los durmientes a partir de un nodo Mesh Primitives > Cube. A los nodos agregados en este paso los encuadro en otro marco, que llamo “Durmientes”. Para que los durmientes queden debajo de los rieles, multiplico la altura de los durmientes por -0.5 y obtengo la mitad de la altura con signo negativo. Ese valor lo uso en el nodo “Translate Instances”.
  • 00:28:59 - Creo un marco llamado “Sujeciones Rieles-Durmientes” y, dentro de él, creo las placas, tornillos y tuercas que sujetan las vías a los durmientes utilizando 3 Mesh Primitives > Cylinder.
    Luego de creada la forma básica (00:39:21) la duplico y a cada copia le borro la mitad que no necesito para luego instanciarlas sobre la curva resampleada en el marco “Durmientes”. Con “Translate Instances” las muevo a su lugar, junto a cada vía.
  • 00:48:53 - A partir de un círculo bézier genero la forma del perfil para la base de piedras sobre la que se apoyan las vías del tren.
    Luego, dentro de un nuevo marco de nombre “Balastro”, y con un nuevo “Resample Curve”, convierto la curva a malla utilizando el prefil recién creado para generar las caras sobre las que distribuyo los puntos a los que le asigno instancias de la colección "Carbones" (que había creado en la parte 7b de esta serie).
    Con esto, la parte del modelado con GN quedó terminada (00:55:15).
  • 00:55:32 - Un poco de orden en esta sopa de fideos no viene mal.

Todo lo realizado hasta este punto es, básicamente, una adaptación de lo que explica (en inglés) Erindale en el siguiente video:



Materiales

  • 00:57:51 - Para la creación del material de madera de los durmientes, utilizo unas texturas subidas a PolyHaven por Rob Tuytel (https://polyhaven.com/a/rough_wood) y lo aplico a través de un nodo Set Material (00:59:34) en el árbol de los Nodos de Geometría.
    Pero, surge un primer problema y no queda como uno esperaría. Para corregirlo, en el material hay que sustituir el nodo Texture Coordinate por un nodo Attribute al que hay que agregarle el texto uv_map en el campo Name.
    El Mesh Primitives > Cube, dentro de los GN trae de forma predeterminada un atributo llamado uv_map con los valores necesarios para mapearle una textura. Por eso, al hacer esto, la textura se ve correctamente en los durmientes. Pero ¡todos los durmientes se ven iguales! Esto es porque las coordenadas para mapear texturas son las mismas en todos los durmientes.
    Para corregir este segundo problema, como se ven en el video, hay que agregar nodos Realize Instances, Capture Attribute, Position, Random Value y White Noise dentro del marco “Durmientes” del GN y exponer en el Group Output la salida Attribute del nodo Capture Attribute y la salida Color del White Noise.
    Finalmente, y de vuelta en el material hay que agregar dos nodos Attribute (a los que se le asignan los atributos expuestos en el Group Output del GN) y que sumados en un nodo Vector Math se conectan a la entrada Location del nodo Mapping.
    De esta forma, todos los durmientes se ven con partes diferentes de la textura.
    Todo el procedimiento hecho para solucionar este segundo problema está muy bien explicado (¡y en español!) por Sanctus en este video:

  • 01:04:37 - el material de metal oxidado para las vías es sencillo: un color base, un poco de Metallic, quitar Specular, conectar un Noise Texture al Roughness y un Texture Coordintate que se una desde su salida Object al Noise Texture. Luego un duplicado del Noise Texture unido a un nodo Normal Map y éste a la entrada Normal del Principled BSDF.
  • 01:08:22 - para crear el material del balastro, agrego un Slot de materiales y allí lo creo. Básicamente, se trata de un Object Info con su salida Random conectada a un ColorRamp con varios colores definidos. De esta forma, las piedras se colorean de colores distintos.

Ajustes finales

  • 01:12:52 - A todos los objetos que forman la locomotora y el ténder los convierto en malla para aplicar todos los modificadores.
    En el caso de los carbones del ténder, previamente hay que agregar un nodo Realize Instances en el GN que distribuye los carbones. Si no se hace este paso, al convertir a malla desaparecen los carbones.
  • 01:14:17 - Roto 90º en Z a la locomotora y el ténder y los muevo a su ubicación sobre las vías.
  • 01:14:39 - Como las ruedas son muy anchas para el perfil de las vías, en la colección Profiles selecciono el perfil de las vías y le ensancho la parte superior.
  • 01:15:39 - Para ajustar el ancho de trocha a las ruedas del tren, modifico el valor del nodo al que le había puesto ese mismo nombre en el GN.
  • 01:16:16 - Coloco una nueva cámara y hago el encuadre para el render final.

Esta es la imagen resultante:


Debido a la extensión del video, son dos obras musicales la que lo acompañan.
La primera es el Quinteto de cuerda Nº 3 de W. A. Mozart, interpretada por Musicians from Marlboro y descargada de la sección de Música del Isabella Stewart Gardner Museum.
La segunda, a partir de la marca de tiempo 36'33", de los mismos intérpretes y descargada de la misma fuente, es el Divertimento Nº 17 en D mayor de W. Mozart. Ya había utilizado este tema, pero en forma fragmentada y de otros intérpretes y fuente, en el primer video de esta serie.

Para la próxima parte planeo publicar un time-lapse del modelado del vagón de pasajeros...