trensim.comSimulación Ferroviaria
   

Trensimpedia :: Simulación Ferroviaria.
 
 

:: Entrar

D3D:Migración a RS de un edificio sencillo

De TrenSimpedia

(Diferencias entre revisiones)
Pere (Discusión | contribuciones)
(New page: ==Descripción del modelo== thumbPara empezar una primera exportación he escogido la caseta de enclavamientos de Mora la Nova. Es un edificio ferrovia...)
Edición más nueva →

Revisión de 21:15 18 oct 2008

Contenido

Descripción del modelo

Para empezar una primera exportación he escogido la caseta de enclavamientos de Mora la Nova.

Es un edificio ferroviario simple de tres plantas.

El enclavamiento de Mora la Nova era electromecánico de la compañía GRS (General Railway Signal). El piso inferior estaba destinado a almacén. En la planta intermedia residían los conjuntos de relés que componían el enclavamiento. En el superior, con cristalera, estaba situada la mesa de enclavamientos desde donde se operaban las señales y agujas de la estación.

Una escalera exterior, con descansillo, permite el acceso a los dos pisos superiores. El edificio está cubierto por un tejado a cuatro aguas.

Preparación de la migración

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 i Product deberemos crear una carpeta Scenery, que contendrá todos los elementos escénicos que vayamos a construir, y bajo esta carpeta crearemos otra denominada Buildings para los proyectos de todo tipo de edificios. 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 Torre_Enclav, pero puede llamarse como consideremos más oportuno.

Preparación de la malla

Al directorio del proyecto copiaremos el archivo del proyecto TSM en fromato .dst, para tenerlo listo para la migración.

Preparación de las texturas

En el directorio Textures copiaremos todos los archivos de texturas que sean necesarios para el proyecto, en los formatos originales, ya sean .bmp o .tga.

Una vez copiadas las texturas procederemos, en este mismo directorio, a convertirlas en archivos .ace con el mismo nombre de archivo que el original, operación que podemos realizar con la herramienta ToAce.exe, o con el plugin para Photoshop que se encuentra disponible en la web de Rail Simulator. Obtendremos para cada textura dos archivos: el original que usará el programa 3D Canvas, y su imagen en formato .ace que usará el Blueprint para su exportación a Rail Simulator.

Importación en 3D Canvas

Abrimos el programa 3D Canvas v7.1.2.0 (o superior), con los Trainworks activados, e importamos el archivo ya existente, del proyecto de la torre de enclavamientos en TSM, mediante File > Import > Trainworks > Trainsim Modeler (.dst).

Tras seleccionar el archivo .dst a abrir, aparecerá una ventana de opciones de la importación.

Los valores que se proponen son los habituales para una migración normal, por lo que procederemos a aceptar las sugerencias sin alterar ninguno de los campos o valores que se muestran en dicha ventana.

El resultado será una malla en 3D Canvas idéntica al original en TSM que puede presentar algún fallo o problema de texturado, tal como se ha comentado más arriba al señalar las tres reglas de la migración.

En este caso el modelo presenta un evidente problema de texturas (ver imagen adjunta).

Corrección de problemas

En el presente caso el problema queda reflejado por haber incumplido la primera de las reglas: Una pieza en TSM (part) debe estar texturada a partir de una sola hoja de texturas.

Esto lo podemos comprobar al volver al TSM y observar el archivo. Ciertamente, tras haber construido la torre de enclavamientos, y por ser ésta un componente de un conjunto de edificios en un sólo objeto, se procedió a seleccionar todas las partes de que estaba constituida y realizar una operación de join. El resultado fue que toda la torre pasó a ser una única pieza, pero conservando el texturado original a partir de tres hojas de textura diferentes:

  • una para las cuatro paredes del edificio
  • otra para el tejado
  • una última, con transparencias, para la escalera exterior.

La importación ha tomado ésta última textura como única para la pieza, ignorando las demás, con el resultado que se ha observado en el punto anterior.

La corrección en este caso ha sido simple. Con gran previsión, en su momento, conservé una copia del archivo .dst del proyecto con todas las piezas separadas antes de la operación de join. Se ha procedido a importar este último archivo, repitiendo los pasos anteriores, y el resultado ha sido satisfactorio al primer intento.

Caso de no haber conservado dicho archivo, el procedimiento de corrección hubiese consistido en, desde el editor de TSM, en modo polígono ir seleccionando los polígonos que compartan una misma hoja de textura e ir separándoles de la pieza base mediante split part, procedimiento que tampoco hubiera sido demasiado dificultoso. Una vez modificado en TSM el archivo original podríamos proceder a su importación sin problemas.

La escena generada en Canvas se verá seguramente oscura, 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 migración a Rail Simulator 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 de LODs

La jerarquía de elementos importada a 3D Canvas se muestra en la siguiente imagen:

(Pulsar para ampliar)

Se observa que se ha generado un grupo denominado Import, del cual depende un segundo grupo con el nombre de la primera pieza en la jerarquía de TSM (el MAIN tradicional) del cual dependen tantos grupos como piezas componían el proyecto original, cada uno con un elemento y con el nombre que tenían en TSM. Que los nombres de las piezas se conserven es una ventaja, sobre todo en elementos con gran número de piezas.

Tanto grupo no suele ser beneficioso para Rail Simulator, por lo que, en la medida de lo posible, deberemos ir moviendo los elementos de la escena para agruparlos en menos grupos:

(Pulsar para ampliar)

La imagen anterior muestra una nueva jerarquía en la que el Tejado (cubo marrón) se ha desplazado (basta con un drag and drop con el ratón) al grupo (cubo amarillo) Caseta, donde ya residía el elemento Caseta (las cuatro paredes del edificio), y el resto de elementos se han movido a un solo grupo que se ha renombrado como Escalera, pues constituyen todos los elementos de dicho componente.

Además, el nuevo grupo Escalera se ha movido a su vez fuera del grupo Caseta para hacerlo depender directamente del grupo raiz Import.

Esta nueva jerarquía tiene muchos menos grupos (son los elementos que más comen recursos en el Rail Simulator), y estos están agrupados segun nuestra conveniencia para establecer los LODs del objeto.

Los LODs nos permitirán definir la carga gráfica del objeto en virtud de la distancia a la que se encuentre respecto del observador en el juego.

Así, si deseamos que el edificio sea visible a unos 1000 metros, bastará con anteponer al nombre del grupo que contiene la caseta y el tejado el orden del LOD y el valor de la distancia: 1_1000_Caseta. El orden del LOD en el presente caso será siempre 1. Podríamos crear un elemento de geometría más simple en un grupo 2_2000_Caseta. El orden del LOD determinará que este grupo estará visible cuando el anterior ya no se vea (son excluyentes los LODs 1 y 2 del grupo Caseta). El valor que sigue al orden de LOD es la distancia hasta la cual será visible este grupo:

(Pulsar para ampliar)

Como podemos observar, la caseta será visible hasta los 1000 metros, pero la escalera tan sólo lo será hasta los 100 metros, a partir de dicha distancia únicamente se representará el edificio y el tejado pero no la escalera.

Al grupo original Import podemos cambiar también el nombre por uno que identifique el objeto, indicando los valores de visión del conjunto.

Exportación a Rail Simulator

El modelo así preparado lo podemos exportar al formato intermedio de Rail Simulator .IGS.

Primero deberemos seleccionar el elemento de la escena que deseamos exportar. Bastará con que seleccionemos con el botón derecho del ratón el nodo raíz de la caseta: el denominado Import inicialmente, o bien 1_1000_Torre una vez recompuesta la jerarquía.

Aunque se despliega el menú contextual en la anterior operación, ignoraremos éste y nos dirigiremos al menú principal para seleccionar: File > Export > Trainworks > Rail Simulator Intermediary Geometry Format (.igs).

Una ventana nos preguntará por la ubicación y el nombre del archivo resultante. Deberemos guardar la exportación en el directorio del proyecto que hemos creado al principio y podemos darle el nombre que deseemos.

Una nueva ventana nos preguntará si deseamos crear LODs (Levels Of Detail) para el modelo. Aunque podemos obviar estos elementos, lo deseable es que el plugin de exportación cree LODs para la Torre de enclavamientos, por lo que contestaremos que sí.

Finalmente una nueva ventana nos solicita si los LODs los queremos generar a partir de los niveles que hayamos introducido en los nombres de las piezas. En el presente caso, en que hemos llevado a cabo dicha creación de nombres, contestaremos que sí. Pero si no lo hubiéramos realizado, podemos contestar que no tenemos definidos LODs en el modelo, en cuyo caso la creación de los mismos la llevará a cabo el propio plugin basándose en unas sencillas reglas:

  • se creará un LOD hasta los 100 metros con todos los elementos del modelo.
  • se creará un segundo LOD entre los 100 y los 400 metros en el que se eliminarán todas aquellas piezas que tengan por lo menos dos de sus dimensiones inferiores a 0,5 metros.
  • se creará un último LOD a partir de los 400 metros en el que se eliminarán todas aquellas piezas que tengan por lo menos dos de sus dimensiones inferiores a 2 metros.

Esta generación automática puede ser suficiente para una primera aproximación al concepto de LODs, y es tan sencilla como no hacer nada, dejando al exportador que realice el trabajo de forma automática.

El procedimiento que hemos descrito para definir los LODs es muy simple, pero es sólo válido para modelos que se exportarán a Rail Simulator, puesto que dicha manera de indicar las distancias es exclusiva de dicho simulador. Existe otra forma de realizar esta operación, algo más costosa, pero válida para exportaciones a MSTS, Trainz y RS, pero creo que es mejor explicarla en otro momento.

Creación del Blueprint

Una vez creado el archivo IGS ya podemos dejar el Canvas por el momento y pasar al Blueprint Editor de Rail Simulator que a partir de unas definiciones (los ficheros blueprint) generará los archivos necesarios para el simulador.

Aunque para la generación de los blueprint RS recomienda el Asset Editor, creo que el uso de éste debe reducirse al mínimo imprescindible o incluso olvidarse de él. Se ha generalizado entre los usuarios la recomendación de usar el Blueprint Editor, que puede encontrarse en la ruta: Archivos de Programa\Rail Simulator\BlueprintEditor.exe. Esta utilidad es mucho más estable que el Asset Editor, y permite tener abierto el juego simultáneamente si lo deseamos.

Una vez arrancado el Blueprint Editor, observaremos que nos muestra un arbol jerárquico con los diferentes Providers que tengamos definidos, desplegaremos la jerarquía de nuestro código de Provider hasta llegar al directorio del proyecto, donde con el botón derecho del ratón desplegaremos el menú contextual para seleccionar la opción New Blueprint. Se nos preguntará por el tipo de blueprint que deseamos generar, y deberemos elegir Scenery blueprint dado que vamos a crear un elemento estático del escenario. Daremos nombre al blueprint creado y procederemos a cumplimentar aquellos campos que sean relevantes para nuestro proyecto (que no serán todos ni mucho menos).

Una vez terminada esta operación salvaremos el blueprint. Los valores más relevantes del blueprint para elementos escénicos son los siguientes:

Display Name

En esta sección podemos informar el nombre del objeto y su descripción en un conjunto amplio y variado de idiomas.

El dominio de las diferentes lenguas será imprescindible si queremos personalizar la presentación del objeto, tal como se muestra en la imagen. En caso contrario, podemos repetir la misma descripción para todos los idiomas, preferiblemente en inglés, personalizando en castellano el campo dedicado al Español.

Cabe observar que si no se introduce ninguna descripción en un idioma determinado el objeto no estará disponible en el editor si el juego se inicia para ese idioma, por lo que es recomendable introducir algún texto en todos ellos caso de querer la publicación internacional del mismo. Desconozco si este error se corrige mediante algún parche de los existentes, o será corregido en un futuro.

Category

Esta es la categoría bajo la cual aparecerá el objeto en el editor del RS. Para el presente caso escogeremos Component stations. Si no sabemos localizar una categoría adecuada para nuestro elemento escénico siempre podemos elegir Misc (Miscelánea).

Valid in scenarios

Este campo tendrá siempre el valor False excepto para el material móvil que deseemos hacer accesible en los escenarios.

Geometry ID

Aquí deberemos indicar la ruta, bajo Provider y Product donde se encuentra el archivo IGS de nuestro modelo que va a ser convertido a archivo accesible en el juego.

En este caso: Scenery\Buildings\Torre_Enclav\Torre_Enclav.IGS

Shadow Type

Sólo hay dos valores posibles:

  • Blobby, si queremos que el juego genere una sombra circular difusa bajo nuestro objeto.
  • None, si no queremos la sombra anterior (p.e. porque el objeto ya posee sombras propias).

Detail level generation range

Este apartado incluye dos campos: Highest level 1 is highest, y Lowest level 10 is lowest. Ambos, en conjunción, indican los límites entre los cuales el juego generará un número de Detail level que se asociará al objeto al incorporarlo a una ruta. Siendo Highest level 1 is highest el valor inferior y Lowest level 10 is lowest el valor superior (si, está bien indicado aunque pueda parecer que no).

Una vez asociado el nivel de detalle al elemento, cuando el usuario del juego seleccione su nivel de detalle (según sea su ordenador) verá únicamente aquellos objetos que superen dicho nivel. Es decir, en lenguaje llano, que si el objeto tiene por límites 10 y 10 siempre se le generará el valor 10 como nivel de detalle y siempre será visible, o si por contra tiene por límites 1 y 5 se le generará un valor entre 1 y 5 como nivel de detalle y únicamente será visible cuando el usuario elija un valor de detalle entre medio y máximo.

Personalmente considero que los edificios que forman parte de las estructuras ferroviarias siempre han de ser visibles y les asigno los valores 10 y 10, mientras que a edificios de viviendas les suelo asignar los valores 1 y 10.

Visualización en el RS

Desde el Blueprint Editor procederemos a exportar el objeto, observando que no se produzcan errores (no deberían producirse).

Para ver el resultado de la exportación, iniciaremos el Rail Simulator y nos dirigiremos a editar una ruta, o en su defecto crearemos una para nuestras pruebas.

Una vez estemos en la edición de la ruta, en la ventana superior de Caja de herramientas seleccionar Herramientas de objetos. Luego en la ventana de Explorador de objetos seleccionar Estaciones, y en la lista de elementos deberá aparecer nuestra Torre de enclavamientos. Una vez seleccionado, el objeto lo podremos situar sobre el terreno mediante el cursor.

En el caso de que no apareciese en la lista, deberemos asegurarnos, mediante el botón Filtro de conjunto de datos que nos desplegará la ventana del mismo nombre a la derecha, de que el Provider y el Product donde se encuadra nustro objeto están seleccionados, con el fin de permitir su uso.

Creación de sombra

Hasta aquí el proceso mostrado es bastante simple y sencillo, y nos permite migrar con facilidad un objeto creado en TSM a RS. Pero para aprovechar mejor las capacidades del nuevo simulador podemos llevar a cabo unas sencillas operaciones que mejorarán en conjunto nuestro proyecto, como la creación de una sombra propia proyectable para la caseta de enclavamientos.

Para la sombra hará falta un modelo similar en tamaño y posición a la caseta, pero de complejidad inferior según las necesidades, que reproduzca aquellas partes del modelo que deseemos que produzcan sombras proyectadas, tanto sobre otrros objetos y terreno, como sobre el propio objeto del proyecto.

Como en el presente tutorial no se pretende formar sobre la creación de objetos en 3D Canvas (quizás en otro momento), la recomendación es: si desearemos incluir sombra en nuestro edificio, crear la pieza que representará la sombra en TSM "antes del proceso de exportación que hemos explicado, para no tener que repetir el procedimiento completo de migración.

La imagen anterior muestra dicha sombra, encuadrada en un nuevo grupo denominado 1_0200_shadow (será visible sólo hasta los 200 metros, desapareciendo más allá de esta distancia). El grupo lo componen dos elementos, la sombra de la caseta y la de la escalera, cada uno de ellos formado por una pieza más o menos compleja pero en cualquier caso totalmente cerrada por todos sus lados. Además, a estos elementos se les tendrá que asignar un material con una textura dummy (no importa como sea pues el elemento no será visible), que en este caso es de un gris medio y de 128x128 píxels, y con el shader especial StencilShadow.fx.

La textura la asignaremos al material en la solapa Primary Texture (segúnda solapa de la Material Palette), mientras que los shaders se les asignan a los materiales en el campo Rail Sim que encontraremos en la solapa Custom fields (última solapa de la Material Palette).

Bastará con volver a exportar el blueprint (no es necesario añadir ninguna información nueva) e ir al juego a observar el aspecto actual de la caseta.

Creación de texturas de invierno

El dotar de texturas estacionales a nuestro modelo es sumamente sencillo, si ya habíamos realizado esta operación para MSTS anteriormente.

Bastará con copiar las texturas de nieve en el mismo directorio Textures donde residen las texturas principales, pero con el sufijo "_wi" añadido al final del nombre del fichero (sin la extensión) para evitar reemplazar las originales. Las texturas así copiadas las deberemos convertir a archivos .ACE, como ya hiciéramos con las originales de nuestro modelo, y exportar nuevamente el blueprint del proyecto. No es necesario el uso de 3D Canvas ni la reexportación del fichero a .IGS.

A título de ejemplo, si el modelo base tenía una textura llamada Torre_Tejado.tga, la textura de invierno correspondiente se denominará Torre_Tejado_wi.tga.

Cabe observar que no es en absoluto necesario generar un juego completo de texturas de invierno. Es decir, podemos tener textura nevada para el tejado, pero no para las paredes del edificio. Si el RS no encuentra una textura de invierno usará la original en su lugar.

Por otro lado, no solamente podemos personalizar las texturas para cada estación del año mediante los sufijos correspondientes:

  • primavera con el sufijo _sp
  • verano con el sufijo _su
  • otoño con el sufijo _au
  • invierno con el sufijo _wi

En ausencia de alguna de estas texturas el RS usará la textura sin sufijo (default).

Esto es válido para todo tipo de implementación en RS: edificios, vegetación, personajes, locomotoras, vagones, vías, señales, etc.

Creación de texturas nocturnas

El dotar de texturas nocturnas a nuestro modelo es, contrariamente a lo que se ha visto para las texturas estacionales, algo más complicado, pues el mecanismo es totalmente diferente al que se emplea en MSTS.

Básicamente consiste en reproducir los interiores de las viviendas (o al menos las ventanas) y asignarle a estos elementos un material que no se vea influenciado por la luminosidad exterior (algo semejante al material SolidBrigth del MSTS). Esto se complementa con la posibilidad de crear polígonos que se superpongan a los existentes y que son capaces de "añadir" luz a los materiales que recubren. Esta última opción es la que podemos usar para "simular" el modo de trabajar del MSTS y aprovechar las texturas nocturnas que tuviéramos.

Es decir, vamos a proponer recubrir las cuatro paredes del edificio mediante cuatro polígonos a los que les vamos a aplicar las texturas nocturnas que ya teníamos para MSTS y también vamos a hacer que estos polígonos sólo sean visibles por la noche.

Para ello bastará con duplicar el cubo que conforma el cuerpo de la caseta y escalarlo ligeramente a lo ancho y a lo largo (ejes X y Z) para obtener una pieza que exceda en un centímetro por cada lado a la original. En este caso el cuerpo original era un cubo de 7 metros de ancho, 11 metros de largo y 9 metros de alto. El nuevo revestimiento será de 7,02 metros de ancho, 11,02 metros de largo y 9 metros de alto. Esta operación la podemos efectuar en 3D Canvas, o, previsoramente, en TSM antes de iniciar la migración del modelo, al igual que hacíamos con la sombra. La textura nocturna original la renombraremos, por ejemplo añadiéndole el sufijo "_ni", y mapearemos con esta textura la nueva pieza de revestimiento.

Una vez tengamos migrada la caseta en 3D Canvas, nos aseguraremos de que la pieza de revestimiento, que en la figura adjunta he denominado Caseta_noche, esté en un grupo independiente al que daremos por nombre 1_1000_fx_night. La distancia de visión (1000) puede ser cualquiera que deseemos, pero le hemos asignado la misma que al cuerpo principal de la caseta, por contra el sufijo fx_night determina que este grupo será visible únicamente por la noche, no mostrándose durante el día. Existe también como nombre de grupo especial el sufijo fx_day que determina a su vez que un grupo así nombrado sólo es visible durante el día, no mostrándose por la noche. Estos nombres de grupo los podemos usar con cualquier propósito dentro del modelo.

Por último tenemos que asignar el shader AddATex al objeto Caseta_noche, pues este shader determina que la textura asignada al objeto no se muestra directamente si no que se usa para incrementar la luz de todos aquellos objetos situados tras él en una gama que va desde el negro, para no incrementar la luz, hasta el blanco, para incrementar totalmente la luz, admitiéndose toda una escala de colores para incrementar con luz "teñida". Esto en 3D Canvas lo realizaremos accediendo a las propiedades del objeto (en el menú contextual del objeto) y cumplimentando el campo Rail Sim.

Por último exportaremos el modelo a formato .IGS, y desde el blueprint procederemos a exportar a su vez a Rail Simulator para a continuación pasar a contemplar el resultado en el simulador.