Alone in the Dark (el primero) es uno de mis juegos favoritos. Cumple todos los requisitos: no sólo es bueno de narices, básicamente creó un nuevo género (el survival horror, o "terror y supervivencia"), y además de eso su aspecto técnico era impresionante, con una tecnología subyacente que era estado del arte por entonces, lo cual podría pasarte desapercibido si nunca te molestaras en descubrirlo.
Por supuesto, un culto de seguidores creció en torno a él que todavía persiste, con aficionados analizando en detalle su motor por motivos como el desarrollo de una alternativa de código abierto, el aprovechamiento de fallos para arañar unos segundos durante un speedrun, o la extracción de recursos de los archivos del juego, además de muchos otros que te puedas imaginar.
Uno de esos proyectos es Room Viewer, "visor de habitaciones" (hecho por el usuario tigrou), una aplicación que a pesar de su nombre no sólo permite visualizar los mapas y la ubicación de entidades en ellos, sino también inspeccionar los modelos 3D y sus animaciones.
También puedes exportar el modelo actual a formato .obj (Wavefront OBJ), pulsando la tecla X
. El archivo resultante se puede importar desde editores 3D como Blender, aunque conseguir que se renderice correctamente (tal y como se ve en Room Viewer) no es inmediato, y los .obj no almacenan información compleja sobre materiales. Para automatizar este proceso desarrollé un script de Python para Blender que lo hace todo por ti. Conseguirlo fue más fácil de lo que parece porque Blender se ejecuta de forma acoplada con un subsistema de Python, y cada acción o botón de la interfaz gráfica tiene una instrucción equivalente en dicho lenguaje.
El primer paso es hacerte con Blender. Bastaría con la versión portable comprimida en ZIP, para que no tengas que instalarlo. Después, coge la textura noise.png (que algunas de las superficies usan para crear un patrón de "ruido") del repositorio de Room Viewer, y guárdala en algún sitio (por simplicidad, yo la coloqué en la misma carpeta donde está el ejecutable de Blender). Finalmente, abre una terminal de comandos (por ejemplo, PowerShell en Windows) y lanza el script, especificando el OBJ de entrada y (opcionalmente) el archivo .blend que quieres de resultado (o de lo contrario se llamará por defecto untitled.blend
).
Si tienes muchos archivos de modelos para convertir, puedes procesarlos todos en serie escribiendo un script para tu sistema operativo. Aquí tienes un ejemplo en PowerShell que lo ejecutará para todos los .obj presentes en la carpeta actual (guárdalo con extensión .ps1):
Get-ChildItem .\*.obj | Foreach-Object `
{.\blender.exe --background --python .\convert_aitd_obj.py -- -f $_.Name -o "$($_.BaseName).blend"}
El/los archivo(s) resultante(s), con extensión .blend, aparecerán en la misma ruta. Ya puedes arrancar Blender para comprobar los resultados.
Y, si abres el visor de materiales (ventana Nodos de sombreado) podrás confirmar que todos los materiales y sus nodos han sido configurados correctamente. El juego utiliza las siguientes clases de materiales:
- Sin sombreado (shadeless): una textura estándar con un único color plano.
- Ruido (noise): mezcla el patrón de la textura noise.png mencionada anteriormente con un color base.
- Cristal (glass): superficies con un grado variable de transparencia (pero que también poseen un color que afecta a lo que sea vea a través).
- Metal: también un color simple, pero con un gradiente que varía acorde al ángulo de visión, lo cual hace el efecto de un sombreado (shader) reflectante muy simple.
Descarga
- GitHub Gist
- convert_aitd_obj.py (alternativo)