GMAX : exportando desde 3D Studio MAX hasta MSTS

 

 En este tutorial trataré de explicar paso a paso como exportar un modelo hecho íntegramente en 3D Studio MAX a GMAX y luego a MSTS, aprovechando las ventajas de exportación de GMAX, las cuales paso a nombrar:

  1. La posibilidad de incorporar brillos.
  2. Correcta exportación de los smoothing groups(SG)
  3. Fácil creación de LOD´s (Niveles de detalle).
  4. Correcta visión a través de las semitransparencias.

 Todo programa tiene su pro y su contra, y GMAX no es la excepción. El método de priorización de mallas con texturas alpha (Semitransparencias) es bastante más complicado que el fácil normado de materiales de 3ds MAX, pero una vez acostumbrados, será casi lo mismo.

Directivas generales:

  1. Las texturas, previamente a iniciar la exportación, deben estar convertidas en .ace, ya que el gamepack de Train Simulator sólo admite este tipo de texturas, devolviendo mensajes de error en la conversión a MSTS si se usaran de otro tipo.
  2. Las zonas del objeto a exportar que contengan texturas alpha, conviene que estén separadas de la MAIN, ya que a esta NO se le puede dar prioridad de alpha. Sin embargo explicaré un método que permite priorizarla.

Comencemos:

Primero, debemos abrir el 3ds MAX y abrir el modelo en el cual hemos estado trabajando.Luego, debemos exportarlo como si lo fuéramos a hacer con el conv3ds.exe (Archivo>exportar>(elegimos tipo de archivo “.3ds” y seleccionamos el nombre y la ubicación)>Aceptar).

Una vez realizado este simple paso, cerramos el 3ds MAX y abrimos el GMAX desde su acceso directo del Train Sim Gamepack (de otra manera se abrirá el GMAX común, y no nos servirá de nada).Terminado de cargar el GMAX, vamos a File>Import. Ahí buscamos el archivo .3ds creado previamente con el 3ds MAX y le damos OK. Aparecerá una ventana titulada “3ds import”. Ahí ponemos las opciones “Completely Replace the current scene” y destildamos la opcion “Convert Units”. Luego nos preguntará si queremos guardar la escena actual, le decimos que no. Aparecerá el modelo en los visores, pero sin texturas.

Explorando el modelo desde el visor “Perspective”, veremos que algunas zonas (generalmente donde se unen caras con diferentes SG) se veran “facetadas”o sea que no se produce el suavizado. Esto es por el formato .3ds obsoleto, que produce estos efectos en la exportación (lo hace por división de puntos). Las caras, al no compartir vértices, no son suavizadas. Esto se nota en la imagen de ejemplo.

 

Primero retoquemos un poco el modelo, para solucionar este problema:
Seleccionamos el objeto donde se presenta el problema, y vamos a la solapa “Modify” y en la persiana “Selection” presionamos el botón (esto equivale a poner sub-object = vertex). Los vértices se demarcan con un circulo de color celeste. Seleccionaremos las zonas de los vértices que causen problemas. Es muy importante que se haga por zonas, ya que, por más que no se vea, en cada círculo celeste hay más de un vértice, producido por la exportación a formato .3ds. Si clickearamos sobre los círculos para seleccionar los vértices, sólo tomaría uno de cada lugar, y eso no nos servirá. 

Una vez seleccionados, volvemos a la persiana, y la bajamos hasta la zona donde dice “Weld”. Al lado del botón “Selected” tenemos una caja de texto para llenar. Este es el umbral de soldadura. Eso quiere decir que todos los vértices seleccionados que estén dentro de ese umbral, serán solados. Como los vértices que queremos unir están muy cerca, lo pondremos en 0.001. 

Luego, debemos presionar “Selected” para que suelde los vértices seleccionados. Una vez terminado este trabajo (que se puede hacer cuantas veces se necesite en cuantas zonas sea necesario), presionamos de nuevo el botón de subobjeto vértice, para que vuelva a la selección por objetos. El resultado final será algo parecido a la imagen de la derecha. 

Algo que puede acelerar el trabajo, es realizar el proceso anteriormente descripto, teniendo todos los vertices  del objeto seleccionados, pero debemos tener cuidado: si no hemos vigilado bien los Smoothing Groups del modelo pueden crearse efectos indeseados.

El facetado ha desaparecido, y durante la exportación a MSTS, el modelo se conservará así, mejorando la calidad de exportación en este aspecto.

 

Ahora seguiremos trabajando, pero en los materiales:
Para poder asignare los respectivos mapas a los sub-materiales debemos seleccionar una pieza, y presionar el botón  para que se abra el editor de materiales. Notarán su importante diferencia con el de 3DS MAX, esto es porque está realizado especialmente para MSTS. Una vez abierto, presionamos el botón “Get!”, para que nos muestre los materiales de dicho objeto. Si quieres puedes usar como guía esta Tabla de conversión de materiales

Veamos para que sirven cada una de sus opciones:

Multi-Material: Es el nombre del multi-material cuyos sub-materiales estamos visualizando. GMAX creará uno de estos por objeto.

Sub-Materials:  Es el índice, seguido del nombre del sub-material que se visualiza en ese momento.

Name: permite cambiar el nombre del sub-material seleccionado. Aquí vale aclarar que el nombrado de materiales que se usa normalmente en 3ds MAX no tendrá ningún efecto visual en MSTS, por lo tanto se puede usar cualquier nombre.

Color: esta opción, nos permite seleccionar con qué color se mostrará el material (siempre que no tenga mapa seleccionado o los visores estén configurados para no mostrar mapas).

Texture: aquí se encuentran las opciones de selección de mapas. En “open” nos mostrará el diálogo para seleccionar un archivo .ace, el que se convertirá en la textura del material.

La opción “clear” deja en blanco la opción anterior. En cuento a la opción “level” todavía no se sabe su función, ya que no se aclara en ningún archivo de ayuda, y aparentemente no produce cambios visibles en el material.

Train Sim Material Settings:

Shader: esta opción es la que define como se texturará el material (una vez aplicado a  la geometría) en el MSTS.

Las opciones son:

Diffuse: dejando esta opción, el material se dibujará con el color que esté asociado a éste.

Tex: textura sin iluminación.

TexDiff: iluminación normal, textura sólida sin alpha. (esto sería el material SolidNorm del 3dsMAX)

BlendATex:

AddATex:

BlendATexDiff: textura con semitransparencias. Como el Alph**** (donde **** son las opciones de iluminación) en el 3ds MAX.

AddATexDif:

 Mip LOD Bias: esta es la opción que permite reducir el número de MipMaps que se generan cuando la cámara se aleja del objeto. Conviene ponerla en –3, para que no se difumine a la distancia.(esto comúnmente con 3dsMAX se hacía directamente abriendo el .s sin comprimir y cambiando la opción con el editor de texto).

Ligting Pallete:

Aquí elegiremos como se iluminará el material en el juego, las opciones posibles son:

OptSpecular0: Material normal de MSTS, se ilumina dependiendo de las condiciones de luz del ambiente.

OptSpecular25: idem anterior, pero incorpora un leve brillo especular.

OptSpecular750: idem anterior, pero incorpora un brillo especular mucho mayor(es el brillo que todos conocemos de, p.e.: la 340 de Josep)

OptFullBright: es el usado en interiores de coches. Personalmente prefiero el OptHalfBright

Cruciform: se usa en árboles, ya que es mas eficiente porque obvia ciertas luces.

CruciformLong: similar al anterior.

OptHalfBright: el usado normalmente para interiores de coches y cabinas de locomotoras.

DarkShade: para áreas que no tengan mucha luz, p.e.: los bajos de las locomotoras.

 

Filter Mode:

La forma en que se procesará la textura en el juego:

Point: sin filtrado.

Linear: filtrado bi-linea, sin MIP´s

MipPoint: sin filtrado, pero con Mip mapping.

MipLinear: filtrado bi lineal con MIP´s.(es lo estándar, lo asigna automáticamente el conv3ds.exe al convertir una malla .3ds)

LinearMipNearest: sin filtrado, con filtrado sólo en los MIP´s.

LinearMipLinear: filtrado bi lineal, con MIP´s filtrados.

Z-Buffer Mode: esta opción permite manipular el orden en que se dibujará el material con respecto al resto de la geometría. Se usa en casos muy particulares así que no la tocaremos.

Alpha Test Mode: Esta opción sirve para especificar si el material tiene semitransparencias o transparencias “booleanas” (totalmente opaco – totalmente transparente). De esta manera, seleccionando “BlendATexDiff” en Shader, y esta opción en Trans, tendremos un material Trans**** (donde **** es la opción de iluminación).

Una vez definidas todas estas opciones, pasamos al siguiente material, desde la opción “Sub-Materials”.Veremos que a medida que vamos asignando las texturas a los materiales, irán apareciendo en el visor “Perspective”.

Todo este proceso, debe hacerse material por material, objeto por objeto si es que queremos que no haya mensajes de error durante la conversión a MSTS. Si nos hemos olvidado de algún material, aparecerá un mensaje durante la conversión diciendo “export aborted: non-ace file texture <XXXXX.tga> found” (dónde XXXXX es el nombre del archivo).Al final la conversión se hará, pero al correrla en MSTS dará el error de que no encuentra la textura XXXX.tga.

 

Una vez terminados el retoque y la asignación de materiales, podemos pasar a tal vez lo más difícil: la priorización de alpha:

 

Suponiendo que el modelo en el que estamos trabajando, está hecho con 3dsMAX, tendrá priorización de alpha con nombrado de materiales, algo que en GMAX es inútil. La priorización en GMAX se hace por objetos. En 3dsMAX, al hacerse por nombrado de materiales, seguramente habrá en la MAIN del modelo algún material semitransparente. Esto presenta un problema: no se le puede dar prioridad a la MAIN, si lo hacemos, al correr el modelo el MSTS dará error. Por eso les presento un método que he usado para poder priorizar lo que originalmente fuera el objeto MAIN.

Es importante que si han estado experimentando anteriormente con la misma escena y el LOD manager, abran el LOD manager y en “Operations” pongan la opción “Remove LOD Data from MAX scene” ya que si cambiamos la jerarquía y luego abrimos el LOD manager (que todavía posee la jerarquía anterior) se colgará el train sim gamepack.

Siguiendo con el proceso:

Si tenemos los interiores del modelo en varias partes, conviene que estén asociados entre si, formando un objeto separado de la MAIN, sin importancia en el nombre que le den(en mi caso "interiores"). Una vez aclarado esto, vamos a poner “manos en la masa”.

Primero renombramos la MAIN con algún otro nombre, yo le he puesto "Exterior". Luego (con lo que era el objeto main seleccionado) vamos a la solapa modify, y clickeamos en el botón   para la selección por objetos. Aquí debemos seleccionar una parte de la mesh, en mi caso el tanque de gas-oil. Esta parte que seleccionemos, pasará a ser la "Main" del modelo.

Luego elegimos la herramienta  . Mientras presionamos “Shift” hacemos un click con esta herramienta sobre la parte seleccionada. Automáticamente se abrirá una ventana preguntándonos si queremos clonar la parte seleccionada al mismo elemento, o si queremos hacer un objeto nuevo. Ponemos “Clone to object” y de nombre le ponemos MAIN.

Una vez que le damos OK, seguiremos con el objeto -en mi caso- "exterior". Ahí volvemos a seleccionar la parte que anteriormente clonamos, y la eliminamos con la tecla “supr”. Ahora seleccionamos el objeto MAIN, vamos a la solapa “Tools” y le aplicamos un “ResetXForm”. Hacemos lo mismo con el objeto "exterior".Una vez terminado esto, haremos que la jerarquía quede de la manera que muestro aquí en la derecha. 

Otra posible jerarquía es mantener a "exterior" e "interior" como hijos de la MAIN, pero a lo largo de las exportaciones, he descubierto que esta jerarquía produce problemas con la priorización. Su reemplazo por la que aquí muestro, elimina por completo esos problemas.

MAIN  > exterior > interior
> BOGIE1 > WHEEL11
> WHEEL12
> WHEEL13
> BOGIE2 > WHEEL21
> WHEEL22
> WHEEL23

 

La jerarquía de las ruedas hacia abajo, se ha conservado del 3dsMAX, pero el resto tendremos que rehacerlo, con la herramienta , al igual que se hace en el 3dsMAX: seleccionamos el objeto que será el child, y manteniendo el botón izquierdo del mouse presionado, lo arrastramos hasta el objeto que será el parent.

Ahora ya podemos priorizar la carrocería de la locomotora.

 

El LOD manager:
Primero les contaré, para los que no lo saben, que es un LOD. La sigla significa Level Of Detail, es decir, niveles de detalle. El uso de esta función del MSTS, aumenta el rendimiento de los objetos a grandes distancias. Lo que hace, es “juntar” varios shapes dentro de uno, y especificar a que distancia se debe mostrar cada uno. De esta manera, el shape que se verá a 2000 metros de distancia (la máxima) tendrá menos polígonos (por lo tanto menos detalle) que la que se verá a, p.e.: 75 metros. Hasta ahora –creo que el 90% de los diseñadores- creábamos un solo shape, el cual se ve a cualquier distancia entre 0 y 2000.

El GMAX facilita la creación de LOD´s, con esta - al principio complicada - utilidad. Queramos o no hacer LOD´s tendremos que usarla de todas maneras para exportar nuestro modelo, así que NO salteen esta parte. Sin embargo, haré un paso a paso, para los que no les interesa la creación de LODs, y sólo quieren exportar el modelo:

Primero seleccionamos todos los objetos en uno de los visores, y abrimos el LOD manager desde:  “Train Simulator>LOD manager and shape export”. Presionamos el botón  para agregar todos los objetos al primer LOD, aparecerá toda la jerarquía en el cuadro del centro. Luego ponemos en la caja “LOD distance”= 2000.  Debería quedar como se ve en la imagen.

En al parte inferior, nos muestra la cantidad de polígonos que posee el LOD que acabamos de crear. Ahora viene lo más dificil: la priorización de alpha. Abrimos la jerarquía con el botón “+” que está al lado de MAIN. Ahí veremos nuestra jeraquía completa. Seleccionamos el objeto que es en realidad la carrocería del modelo (en mi caso "exterior"), tildamos la opción “Collapse node” y en “Sub Object ID” ponemos 1.

Hacemos lo mismo con "interiores" (en mi caso las cabinas) pero le ponemos “Sub Object ID” 2.

Ahora seleccionamos la carrocería ("exterior"), y ponemos “Sort this sub-object” y en la caja de “Sort Priority” ponemos 15.

Luego seleccionamos los interiores, hacemos lo mismo que con la carrocería, pero en “Sort Priority” ponemos 5.

Una vez que esto está todo listo, ya podemos exportar nuestro modelo como .s: dentro del LOD manager vamos a File>Export to .S. Se abrirá un diálogo para que pongamos la ruta y el nombre del archivo y luego de unos segundos (podemos ver el progreso de la exportación en la parte inferior de la ventana del GMAX), ya tendremos nuestro modelo exportado en .s, ya comprimido.

 

Ahora, si queremos crear diferentes LOD´s, tendremos que trabajar un poco más:

Deberemos repetir los primeros pasos que aquí explico sobre el LOD Manager, pero poniendo en la caja “LOD Distance”, p.e.: 75. Con el LOD manager abierto, volvemos a seleccionar todos los objetos en un visor,  y presionamos de nuevo el botón  para que cree un nuevo LOD, con todos los objetos.  La barra de estado de la parte inferior del LOD manager debería verse algo así:  Esto significa que estamos posicionados en el segundo LOD de un total de 2, con una cantidad de polígonos de 8462 y un total de 11 objetos. En la caja “LOD Distance” (que debería estar en 0) ponemos 2000. Ahora tenemos 2 niveles, uno que se verá de 0 a 75 metros, y otro que se verá de 76 a 2000 metros. Ya podemos cerrar el LOD manager, y empezar a borrar detalles (no objetos, la jeraquía debe conservarse en todos los LOD´s). El primer LOD que creamos, estará intacto, para volver a él, sólo debemos abrir el LOD manager, y presionar el botón, y veremos que todos los objetos están ahí. Para volver a LOD de 2000 metros, presionamos el botón .

Con este método, se pueden hacer cuantos LODs se desee, siempre recordando que debe haber uno que llegue a los 2000 metros. Conviene ir creándolos a medida que se van terminado: p.e.: creo el de 75 metros, luego hago uno con los mismos objetos pero que se vea hasta los 300 metros. Se le borran los detalles y demás. Después, posicionados en ese LOD, seleccionamos todos los objetos y presiono  para crear uno nuevo con los objetos de bajos polis, los retocamos para el nuevo LOD, y así sucesivamente.

Una vez terminados todos los LODs, ya se puede ir a “File>Export to .S” dentro del LOD manager y exportar el modelo, el cual ya saldrá comprimido.

Y aquí tenemos el modelo debidamente exportado:

En caso de que algún objeto del interior no se vea, recordemos que los materiales que se encuentren mapeados con TexDiff no pueden ser dibujados por el juego detrás de un material con ALPHA. Esto tiene una fácil solución: se cambia el Shader del material que causa el problema, de TexDiff a BlendATexDiff. Con esto debería funcionar adecuadamente.

 Problemas conocidos:

1) "Microsoft es capaz de colgar cualquier cosa" :Debe tenerse mucho cuidado mientras se trabaja con GMAX: los scripts del Train Sim Gamepack no tienen en cuenta algunas condiciones, lo que hace que el GMAX se transforme en una gelatina en cuanto a estabilidad. Tal vez uno presiona un botón (generalmente en alguna herramienta para exportación a MSTS), y sale una ventana de error vaya uno a saber porqué, y el programa se cuelga. De todas maneras, el programa tratará de guardar la escena antes de cerrarse a causa del error, pero no siempre las guarda satisfactoriamente. Debe tratarse de reducir el uso de las herramientas del Gamepack al mínimo.

2)"¿Los programadores de Microsoft escriben en chino?": Al presionar el botón derecho sobre un objeto, puede aparecer un submenú muy extraño, que parece escrito en chino. Esto es un problema de fuentes: el add-on para MSTS hace referencia a una fuente no standart. Para solucionar esto, debemos ir a "Customize>Customize User Interface". En esta ventana, debemos dirigirnos a la solapa "Quads", y presionar el botón "Advanced Options". En el cuadro "Fonts" de la vantana "Advanced Quad Menu options" que acaba de aparecer, seleccionaremos en "Title Font" y en "Menu Font", alguna fuente que nos agrade. En mi caso puse Arial. Luego presionamos "Save" en al misma ventana, y vamos a la carpeta "ui" del gamepack de MSTS, en mi caso "C:\gmax\gamepacks\trainsim\ui". Seleccionamos el único archivo con extensión .qmo que hay ahí: "Trainsim.qmo". Presionamos Guardar, y cuando nos pegunte si queremos sobrescribir el archivo, le damos OK. Problema solucionado.