trensim.comSimulación Ferroviaria
   

Trensimpedia :: Simulación Ferroviaria.
 
 

:: Entrar

RS:Objetos procedurales - Modelado

De TrenSimpedia

Con el presente artículo se pretende introducir al aficionado en el modelado de objetos procedurales para Rail Simulator.

El editor utilizado en el ejemplo es 3D Canvas, pero podría ser cualquier otro editor 3D con el que el autor se sienta más confortable.

Así mismo se abordarán conceptos de creación de texturas en las que no se entrará al detalle, aunque quien lo desee puede revisar el artículo: Creación de texturas con Gimp.

La creación del Blueprint y la inclusión del modelo en Rail Simulator se abordan en otro artículo.

Contenido

Introducción

Un objeto procedural es un elemento 3D del cual tan solo se informa al simulador de su perfil, procediendo el motor de la simulación a generar el volumen del objeto por extrusión de dicho perfil, ajustando dicho desarrollo a un perfil curvilíneo que se determine.

Un objeto procedural se puede completar con un elemento fijo en cada uno de sus extremos, además de otro objeto fijo que se puede repetir a lo largo del perfil de desarrollo a espacios regulares predeterminados.

Típicamente se construyen con estos elementos: Muros, vallas, andenes, carreteras, caminos, riachuelos, acequias, vías, puentes, etc...

El modelo escogido

Para esta ocasión se ha elegido un muro, con algún elemento decorativo adicional.

El muro, conceptualizado en el dibujo adjunto (no necesariamente a escala), estará formado por una pared de ladrillo, rematada en su parte superior por unas losas de piedra. Estará enmarcado y sustentado por unas columnas de hormigón, rematadas también en hormigón por una pirámide achatada de base cuadrada.

El muro es puramente imaginario, y la mezcla de materiales de construcción: ladrillo, piedra y hormigón, se ha forzado para mostrar las posibilidades de texturado.

No obstante lo anteriormente señalado, este elemento nos permite explorar las diferentes posibilidades de los objetos procedurales, y, por tanto, permitirá entender las claves para la elaboración de cualquier otro elemento similar que se desee recrear.

Las texturas

Para este ejemplo no se ha buscado un muro existente, al cual se podría haber fotografiado para obtener así sus texturas, por preferir mostrar las posibilidades de la web CGTextures. Como dice el manifiesto de intenciones de su autor, Marcel Vijfwinkel:

CGTextures se esfuerza por ser el mejor sitio de texturas. Siendo yo mismo un artista 3D, sé lo difícil que es crear texturas de materiales sin una buena foto. La realización de texturas debe ser una tarea de creatividad, no de pasar horas buscando la imagen apropiada en Internet. Espero que mediante el suministro de texturas de buena calidad de una manera organizada, su trabajo cotidiano será más fácil y más agradable.


Obtención de las texturas

Textura de ladrillo
Textura de bloques de piedra
Textura de cemento
Procederemos a la localización de las texturas que nos parezcan más apropiadas para el caso que nos centra.

Accedemos a la web www.cgtextures.com y observamos que en la página principal ya se nos muestra las diferentes tipologías de texturas que allí se pueden encontrar. La tercera de las tipologías Brick nos llama la atención, pues se trata de texturas de ladrillos. Pulsamos sobre ella y observamos que en la web las texturas de ladrillos están clasificadas en 7 subcategorías, de las cuales nos decantaremos por Modern Small. Esta tipología nuevamente se divide en hasta 13 subcategorías, de ellas nos puede interesar la primera Brown. Aquí encontramos 136 texturas diferentes de Ladrillos modernos pequeños marrones, cualquiera de las cuales nos puede interesar, pero a mi me llama la atención la tercera, sobre la cual procedemos a pulsar con el ratón.

Observamos que esta textura se denomina BrickSmallBrown0064, es una contribución de Jacobo Cortés Ferreira y la tenemos disponible en tres resoluciones posibles. Elegiremos la menor de 1024x518, pues será suficiente para nuestro propósito.

Retrocedemos hasta el menú de la categoría Briks para esta vez acceder a la subcategoría Modern Large donde elegiremos el tipo Blocks y nos fijaremos en la tercera de las texturas que aparecen, que bien pudiera servirnos, una de las hileras de bloques, para texturar las losas de piedra que rematarán el muro de ladrillos. En esta ocasión la textura está marcada con la palabra SET, ello indica que no se trata de una textura aislada, si no de un conjunto de texturas (dos o más) sobre un mismo tema u objeto. Al acceder a la textura observamos que se denomina BrickLargeBlocks0007, es una contribución del autor de la página web, se trata de un conjunto de dos fotografías del mismo muro y están disponibles en tres resoluciones. Nos interesará la primera de las texturas del conjunto, puesto que deseamos dar un acabado más sucio al muro, y nos bastará con la resolución más baja.

Por último buscaremos una textura de hormigón para las columnas. Regresaremos a la página principal de la web y seleccionaremos la categoría Concrete y la subcategoría Bare. La tercera textura de la segunda fila nos parece que bien pudiera adecuarse a nuestro modelo, más en esta ocasión la textura, además de estar marcada con la palabra SET, también está marcada con la palabra TILED, ello indica que el autor de la textura la ha adecuado para que esta pueda ser acoplada en mosaico con el fin de recubir un área mayor, si es necesario, si que se produzcan l'ineas de unión entre repeticiones de la textura. Accedemos a ella y observamos que se denomina ConcreteBare0022 y que la tercera del conjunto es la que nos parece más apropiada. Por tanto la descargaremos como las anteriores.

Preparación de los archivos de textura

TxMuroTut01
TxMuroTut02

Crearemos dos archivos de textura:

  • Uno para la columna
  • Y otro para el muro de ladrillo y el remate de piedra

Para el primero usaremos la textura de cemento, que no necesita demasiada preparación. Bastará escalar dicha textura a un tamaño de 512x512, pues el original quizás es excesivo, y la guardaremos en formato .bmp con un nombre que nos sea significativo. Podemos nombrarla según su contenido (p.e. TxCemento01.bmp) o bien según su uso (p.e. TxMuroTut01.bmp).

Para el segundo crearemos un archivo de 512x256 píxeles (512 de ancho y 256 de alto). En él copiaremos en la parte alta una hilera de bloques de la textura de bloques de piedra, que deberá ocupar el 10% de la hoja de textura en altura (26 píxeles) y todo el ancho. El resto, la zona inferior de 512x230, la ocupará la textura de ladrillos.

Imagen:Aviso.gif Importante

El conjunto lo deberemos rotar 90º, pues los objetos procedurales toman la repetición de la textura, a lo largo del elemento generado, en el eje Y de la misma (norte-sur).

El resultado será similar a la imagen adjunta y la denominaremos TxMuroTut02, en formato .bmp.

Modelado

Para el modelado del muro se utilizará, como se ha comentado, 3D Canvas. No es pretensión de este artículo mostrar en detalle el funcionamiento de dicho programa, no obstante, los pasos a seguir se mostrarán con el detalle suficiente.

El artículo Descripción de la interfase en 3D Canvas explica en mayor profundidad el uso de este programa.

Preparación de la estructura de directorios

Comenzaremos por crear una estructura de directorios de trabajo en la carpeta Source del directorio donde tengamos instalado el simulador, habitualmente C:\Archivos de Programa\Rail Simulator.

En la carpeta Source debemos crear un directorio que determine el código de Provider bajo el cual actuaremos. Podemos tener tantos Providers como queramos, pero es una buena práctica identificar nuestras creaciones bajo un único Provider. Para determinar el código de Provider, si bien éste es totalmente libre, pudiera darse el caso de colisión entre dos creadores que hayan escogido el mismo código. Por tanto, como recomendación y buena práctica, desde Trensim solicitamos que el código de provider de un autor coincida con el código de usuario con el cual se ha debido dar de alta en el foro de la web Rail Simulator para poder proceder a descargarse el paquete de las Developers Tools, paquete sin el cual no tienen sentido los pasos que vamos a dar a continuación.

En la imagen asociada se puede comprobar que el Provider escogido en este caso ha sido Pere.

A continuación, en el directorio designado para el Provider que acabamos de mencionar deberemos crear un subdirectorio que determine el código de Product en el que vamos a encuadrar nuestra creación. Un Product es un conjunto de elementos, ya sean elementos estáticos, vehículos, vegetación, etc, que tienen una relación entre ellos. Este concepto se puede orientar al conjunto de elementos necesarios para una ruta completa, como en las originales que vienen con el juego, o cualquier otro concepto o agrupación que deseemos para nuestras creaciones. De esta forma podemos crear Products para las diferentes compañías de ferrocarril de las cuales vayamos a crear vehículos, o para el conjunto de elementos que elaboremos para una ruta concreta, o para todos los vehículos de una composición o tren concreto que deseemos publicar, etc. Cierto es que a la hora de generar un paquete de distribución de nuestras creaciones éste puede ser un elemento que determine la agrupación a crear, pero también se pueden crear paquetes distribuibles con objetos de diferentes Products, o incluso de diferentes Providers, si es necesario.

En la imagen asociada se puede comprobar que el Product definido en este caso ha sido RenfeIII.

Bajo las carpetas Provider y Product deberemos crear una carpeta Scenery, que contendrá todos los elementos escénicos que vayamos a construir, y bajo esta carpeta crearemos otra denominada Procedural para los proyectos de todo tipo de elementos escénicos procedurales. Hasta aquí la estructura es la estándar que determina Rail Simulator, y que podemos observar en el Provider Developer que se crea por defecto y que contiene ejemplos de diferentes tipos de Assets.

Por último, y bajo esta jerarquía predefinida, crearemos un directorio para los archivos de nuestro proyecto, con un subdirectorio denominado Textures que contendrá las texturas del proyecto.

En este caso se ha denominado MuroTut, pero puede llamarse como consideremos más oportuno.

El elemento procedural

Empezaremos construyendo el muro en sí, que es el elemento procedural.

Una vez iniciado el programa 3D Canvas obtenemos una escena vacía.

Preparando 3D Canvas para exportar a Rail Sim

Como vamos a trabajar con vistas a una migración a RS, debemos preparar un par de aspectos para adecuar el editor de 3D Canvas a Rail Simulator, en particular vamos a crear dos campos personalizados para introducir valores que nos servirán para la exportación al formato .IGS, o formato intermedio de RS.

Iremos al menú File > Properties.... Se abrirá una ventana en la cual seleccionaremos la solapa Custom Fields (Campos Personalizados) y allí teclearemos Rail Sim en el primer espacio vacío del grupo Group Custom Fields. También escribiremos Rail Sim en el primer espacio disponible del grupo Material Custom Fields. Con esta acción hemos creado dos campos especiales para Rail simulator, de los cuales del segundo vamos a hacer buen uso en este trabajo. Finalizaremos esta definición presionando el botón OK y podremos proceder a iniciar el muro.

Corrección de la visualización en Canvas

La escena generada en Canvas se verá oscura, aunque ahora no lo notemos, pues la iluminación es una propiedad de la misma y por defecto ésta es mínima. Alterar esto es sencillo:

Localicemos en el árbol de jerarquías de la escena el grupo Point Light. Al desplegarlo aparecerá un único elemento denominado también Point Light. Este elemento determina la iluminación proyectada desde un determinado punto de luz. Su posición suele ser suficiente para nuestras necesidades.

Apuntemos con el ratón sobre el Point Light clicando con el botón derecho para desplegar el menú contextual, y seleccionemos de dicho menú la opción Properties.

Se abrirá la ventana de Propiedades del punto de luz, de las cuales bastará seleccionar el color del mismo. Por defecto estará establecido en el color negro, con lo que el punto de luz no emite luz alguna. Al pinchar sobre él se desplegará la ventana de selección de color de la cual bastará con elegir un gris medio (50%) para una suave iluminación. Evidentemente podemos seleccionar una luz más intensa o de un color determinado, aunque para los propósitos de creación del muro el tono de la luz es totalmente intrascendente.

La escena resultante la deberemos guardar en formato 3D Canvas para futuros usos. El mismo directorio del proyecto creado puede ser una buena opción para guardarlo.

Creación del cuerpo del muro

Seleccionamos el Component Panel para a continuación pinchar y arrastrar la primitiva "Cube" hasta algún lugar de la escena. Nos aparece un cubo en el sitio donde hemos arrastrado la primitiva. Este cubo tiene como dimensiones 1 metro tanto en alto, ancho y largo.
A continuación seleccionamos el Scene Hierarchy Panel que nos mostrará la jerarquía de elementos que componen nuestra escena. En esta jerarquía podemos observar la presencia de un punto de luz, una cámara y tres focos, uno de ambiente y dos direccionales, todos ellos elementos comunes a cualquier escena Canvas. Pero además de estos, ha aparecido un grupo denominado "Group" que contiene un elemento denominado "Cube". Éste último es la primitiva que acabamos de añadir a la escena. Como que toda primitiva debe estar asociada a un grupo, también se nos ha generado en la jerarquía el grupo necesario.

Si pinchamos en el grupo "Group" de la jerarquía podremos editar su nombre, cosa que haremos para pasar a denominarle "1_1000_Muro". La nomenclatura de los grupos en RS se describe en el artículo Consideraciones generales de creación en RS. También podemos pinchar en el elemento "Cube" y cambiarle el nombre por "Ladrillos".

Podemos dirigirnos a la Herramienta Visible Objects, en la barra de herramientas superior, que determina de que forma se representan los objetos visibles en la escena. Se desplegará un menú contextual en el cual podemos elegir "Wireframe" para ver el cubo compuesto únicamente por sus aristas. De esta forma vemos en el centro del mismo un Gizzmo que representa el eje de la pieza, y que no debemos confundir con el centro de la escena, que también está representado por un Gizzmo en el centro del damero de la base de la escena.

Seleccionaremos el cubo introducido en la escena y desplegaremos el menú contextual del grupo pulsando el botón derecho del ratón. Del menú que aparece seleccionaremos la última opción: "Properties". Se nos abrirá una ventana con las propiedades del grupo del cubo (recordemos que en Canvas los elementos no tienen propiedades, sólo las tienen el grupo del que dependen en la jerarquía). Nos interesa modificar la posición del grupo dando a los tres parámetros "X", "Y" y "Z" el valor cero. De esta forma situaremos el eje del grupo en el centro de la escena, condición necesaria para una vez generado el objeto éste se sitúe correctamente en la simulación de RS (Orientación y origen). Una vez confirmados los nuevos valores de posición del grupo observamos que el cubo aparece semienterrado en el suelo de la escena. No debemos alarmarnos pues a su debido tiempo lo remediaremos.

Pasaremos a dar las dimensiones deseadas a la pared de ladrillos. Una longitud de 5 metros (entre columnas), una altura de 2,5 metros y un grosor de 20 centímetos nos parecerán suficientes. Para ello abriremos el Object Operation Panel, que nos mostrará todas las herramientas que tenemos para modificación de objetos, y seleccionaremos la herramienta Scale Selection, que nos permite especificar las nuevas dimensiones del objeto. Aplicaremos los valores a los tres ejes:
  • X = 0,2
  • Y = 2,5
  • Z = 5,0

Como el elemento está centrado en el escenario, lo deberemos elevar hasta el nivel del suelo, pero sin alterar la posición de su eje, que debe permanecer al nivel 0. Para ello usaremos la herramienta de seleccionar Group Selection Tool, del menú de herramientas lateral, con el fin de seleccionar todos los puntas del muro y proceder a desplazarlos al punto adecuado, pero como sólo desplazaremos los puntos del objeto su eje permanecerá en el centro de la escena que es lo que deseamos.

Para garantizar que seleccionamos todos los puntos del objeto cambiaremos perspectiva de la vista pulsando con el botón derecho del ratón en cualquier punto de la escena para mostrar el menú contextual, del que seleccionaremos View > Orthographic > Top para tener una vista cenital del objeto. A continuación activamos la herramienta Group Selection Tool y pincharemos y arrastraremos en la escena con el fin de crear un área de selección que rodee completamente el muro. Se remarcarán los puntos del objeto indicando que están seleccionados.
Con todos los puntos del muro seleccionados abriremos el Object Operation Panel y seleccionaremos la herramienta Shift Selection, que nos permite desplazar y/o rotar en cualquiera de los tres ejes una cantidad deseada, en metros para los desplazamientos y en grados para las rotaciones. Desplazaremos el muro en el eje Y 1,25 metros, la mitad de su altura, para ubicarlo justo sobre el nivel del suelo (Valor 0 en el eje Y), y desplazaremos el eje Z 2,5 metros, la mitad de su longitud, para que el frontal del objeto se sitúe también en el valor 0 del eje Z.
Imagen:Aviso.gif Importante

Este ajuste al plano definido por la coordenada 0 en el eje Z es preciso pues, para un objeto procedural, RS sólo tendrá en cuenta la sección que formarán aquellos puntos y vértices que se hallen en dicho plano. El resto del objeto será ignorado para la generación de la malla en el simulador, usándose solamente la longitud que demos en el editor para ajustar la textura al nuevo objeto que se renderice en el juego.

Aplicaremos los valores a los dos ejes:

  • Y = 1,25
  • Z = 2,50

Texturado del cuerpo

Una vez situado y escalado el muro procederemos a texturarlo.
Empezaremos por crear un material con el que texturar la pieza creada. Para ello deberemos abrir el Material Panel. De la Material Palette seleccionaremos la solapa Primary Texture y pulsaremos en el recuadro que se mostrará (que visualiza la textura actual asignada al material) para cargar una nueva textura en el material. Navegaremos mediante la ventana Abrir archivo... hasta el directorio Textures, de donde seleccionaremos el archivo "TxMuroTut02.bmp" con las texturas de ladrillos e hilera de piedra. Añadiremos al material el Shader (Ver Consideraciones generales de creación en RS: Shaders) que debemos usar para elementos procedurales pinchando en la solapa Custom Fields, y en el campo Rail Sim escribiremos "LoftTexDiff.fx".
Imagen:Aviso.gif Importante

Todo el elemento procedural debe estar texturado usando exclusivamente los shaders "LoftTexDiff.fx" y "LoftTexDiffTrans.fx", en caso contrario el objeto procedural no será representado por el motor de la simulación.

Una vez definido el material en la Material Palette, seleccionaremos de la Edit Toolbar la herramienta Paint Tool, que nos permitirá aplicar el material a uno o más polígonos, y con dicha herramienta seleccionada pulsaremos sobre el lateral del muro. Obtendremos un texturado de dicho lateral, aunque la posición de la textura no es la que quisiéramos, fruto de lo comentado anteriormente en este mismo artículo en Preparación de los archivos de textura, por lo que procederemos a girarla 90 grados.

Seleccionaremos de la Edit Toolbar la herramienta Point and Face Selection Tool, que nos permitirá seleccionar el polígono que acabamos de texturar, y con dicha herramienta seleccionada pincharemos sobre el polígono que pasará a mostrarse en color azul confirmando el elemento que está seleccionado.

Aprovecharemos para seleccionar de la Primary Toolbar el modo Edit using Face Coordinates, que nos facilita el trabajo de edición del polígono para la operación de remapeo que vamos a abordar. A continuación, en el Object Operation Panel seleccionaremos la herramienta UV Re-Map Selection, que nos permitirá modificar las coordenadas de mapeo del polígono seleccionado.

Esta acción nos ha abierto una nueva ventana, desde la cual podemos proceder a variar las coordenadas del maoeo de la textura.

Podemos pulsar en el botón Rotate Clockwise para proceder a una rotación en el sentido de las agujas del reloj, que es el que necesitamos. Desgraciadamente, esta herramienta produce un giro pequeño, en un número de grados no documentado, pero en todo caso no es divisor de 90. Por tanto, iremos apretando este botón hasta más o menos llegar a los 90 grados de giro.

.

.

.

.

.

Icono de en curso

Este artículo o sección se encuentra en fase de desarrollo por parte de un contribuidor. Es posible que la información suministrada aquí no sea completa. Ampliándolo ayudarás a mejorar la TrenSimpedia, pero recuerda que alguien posiblemente ya tiene en mente completarlo.


El elemento repetitivo

Icono de en curso

Este artículo o sección se encuentra en fase de desarrollo por parte de un contribuidor. Es posible que la información suministrada aquí no sea completa. Ampliándolo ayudarás a mejorar la TrenSimpedia, pero recuerda que alguien posiblemente ya tiene en mente completarlo.