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:
- La
posibilidad de incorporar brillos.
- Correcta
exportación de los smoothing groups(SG)
- Fácil
creación de LOD´s (Niveles de detalle).
- 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:
- 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.
- 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.
|