Programación en Lenguaje Ensamblador

-El Verdadero Lenguaje de las Máquinas-

¡No Puedes Escapar de la Programación!

–Cuando haces videojuegos todo tiene que ver con programar–

Como saben quienes han leido estos escritos desde hace tiempo, un tema del que escribo mucho es sobre programación de videojuegos, de hecho me interesé en el ensamblador porque en aquellos años era el lenguaje en el que se programaban los mejores juegos. Esta forma de pensar me llevó un día a la idea de abrir otro blog relacionado con el tema que mas se toca aquí (incluso mas que el ASM) y me refiero al desarrollo de videojuegos. Pero cuando escribía las posibles entradas me di cuenta de una cosa: ¡De que todo se relacionaba con la programación!.

Esta sentencia no es del todo mia. Es parte de una entrevista que escuché hace mucho por radio analógica. En un programa sobre computadoras entrevistaban a uno de los egresados de una de las en ese entonces muy contadas escuelas de videojuegos y el invitado dijo que no importaba a que área del desarrollo de videojuegos uno se dedicara, siempre se relacionaba con la programación de una forma u otra. Y esto lo confirmé cuando intentaba escribir una entrada de como se crean los sprites y vi que la mayor parte del texto hablaba sobre estructuras de datos, alineación de memoria y transferencias eficientes de secuencias numéricas. Es decir que nada que ver con lo que la gente que yo conozco que se dedica a dibujar para videojuegos hace. Ahora veamos las principales áreas del desarrollo de videojuegos que aunque lo intenten no pueden huir de la programación:

Los Artistas Gráficos no pueden escapar

Suponiendo que ustedes sean artistas gráficos porque en verdad les gusta dibujar y no porque programar les daba miedo de seguro tienen un estudio propio con una mesa de dibujo, lámpara flexible, una colección de tintas y lápices siempre disponible y si tienen dinero puede que hasta una tableta gráfica. Las paredes de su lugar de trabajo sostienen aquellas obras que los hacen sentir orgullosos y que les levantan la autoestima cuando el último cliente al que le hicieron los dibujos de esa campaña publicitaria no les pagó lo que querían. En fin, el asunto es que cuando intentan meter su arte en un videojuego este no se ve tan bien como lo hacía en los dibujos de las paredes. Ni siquiera se ve tan bien como se veía en la pantalla de la computadora en la que diseñaron. En lugar de eso los personajes parecen planos y sin detalle. No se aprecian los gestos faciales ni las expresiones en los juegos para móviles, los trazos se ven toscos e irregulares y las fotos digitalizadas de los personajes parecen recortes de revista. El artista se siente mal, pero nada de esto sucede porque sea un mal dibujante, sino porque no sabe como funciona el sistema gráfico de una computadora.

Algunos de estos errores comunes son por ejemplo no calcular bien la resolución en la que va a aparecer la imagen. Si tan solo dibujan en papel y usan un scanner a la hora de ajustar el tamaño los detalles grandes se van a deformar y los pequeños a perder por completo. También está el problema de la profundidad de color. Un Scanner puede capturar hasta 48 bits de profundidad de color pero las pantallas de muchos sistemas de videojuegos con dificultad alcanzan los 32 bits y aunque los alcanzaran el ojo humano puede no percibir bien las tonalidades. Algunos intentan paliar este cambio retocando las imágenes digitalizadas antes de integrarlas al juego. Debo advertirles que esto nunca funciona. Si una imagen digitalizada y pegada directamente a un juego tiene el aspecto de un recorte de revista una imagen digitalizada y retocada en un editor gráfico va a parecer un recorte de revista al que le dibujaron encima. Otro problema al convertir un dibujo a sprite sin saber programar es el de que queda “delineado”. Las figuras quedan con un contorno que hace que no se vean debidamente integradas con el resto de la escena. Esto es por no saber manejar la profundidad de color. De todos estos problemas hablaré en el futuro porque necesitan una nota para ellos solos. Ahora veamos como los modeladores 3D que no saben programar se dan de narices al tratar de hacer modelos para videojuegos.

Los Modeladores 3D no pueden escapar

Esta historia la vi en persona. Cierto modelador 3D se quejaba de que los modelos que hacía para videojuegos eran demasiado simples y angulosos y que cuando hacía que se vieran bien estos alentaban demasiado el juego o incluso no corrian. Esto sucede porque los primeros editores 3D para computadoras personales como el 3D Studio no hacían realmente modelos de objetos sino de escenas completas y a la hora de importar uno de esos archivos a un juego había demasiada información que en realidad no se usaba. Otro detalle que los modeladores 3D que nunca han hecho modelos para videojuegos es que los modelos se procesan en Tiempo Real. Hay reglas sobre como deben diseñarse esos objetos para que se vean bien en un videojuego de acción rápida y que no sobrecarguen las rutinas de rendering. Por ejemplo muchos de estos se dibujan incompletos de modo que al moverse rápido el cerebro humano los une. Si son observadores o tienen un Playstation de primera generación que funcione podrán ver como muchos personajes en realidad no tienen articulaciones sólidas. Otra manera de aligerar el rendering es usar las texturas de manera que parezca que el objeto tenga relieve irregular u obedezca a cambios de iluminación. El conocido como Normal-Mapping es en realidad una optimización para simular superficies irregulares en un objeto formado por caras planas.

Los modeladores 3D cuyo trabajo no se relaciona con los videojuegos no necesitan saber esto porque rara vez les piden hacer modelos que van a ser presentados por un sistema de visualización en tiempo real. Casi siempre lo que les piden son animaciones e imágenes fijas o en el caso de los que trabajan para cuestiones de ingeniería modelos muy detallados que no necesariamente se ven realistas. Al hacer modelado para videojuegos no se debe de hacer tanto detalle porque hace el modelo demasiado dificil de procesar. Pero tampoco basta con disminuir la cantidad de polígonos para convertir un modelo detallado en uno que pueda incluirse en un videojuego. Esto da al modelo una apariencia falsa y plástica. El proceso para convertir un modelo detallado en uno apto para un sistema en tiempo real comienza desde antes de diseñar el modelo detallado y toma en cuenta detalles tan poco artísticos como la precisión numérica usada para representar los vértices o que al multiplicar las dimensiones y profundidad de color de las texturas el resultado sea una potencia de dos alineable en memoria. En mi experiencia he visto gente que hace modelos de millones de caras con efectos de luz dificilísimos de procesar cuando podrían obtener resultados mas vistosos y eficientes con unos cuantos miles de caras, iluminación interpolada y unos cuantos juegos de texturas.

Por cierto, en mucho tiempo de convivir con desarrolladores de videojuegos, tengo por lo menos 10 años en los que no he visto que abran un archivo de imagen ni mucho menos uno de un modelo 3D a nivel binario. Casi siempre el sistema en el que están trabajando los carga de manera automática o los mas avanzados llaman a una función de una API (o a la clase de un paquete como dicen ahora) que lo carga en la memoria con tan solo pasarle el nombre del archivo. Les recomiendo que si quieren saber en lo que se están metiendo intenten un día por lo menos abrir uno de estos archivos en modo texto y desplegar los valores mas importantes. Conocer a nivel de bit los formatos gráficos de archivo no solo les ayudará a decidir cual es el formato que mas les conviene sino que podrán optimizar mejor los recursos y hacer gráficos mas rápidos, de mejor calidad y sin errores extraños relacionados con fugas de memoria.

Los Game Producers no pueden escapar

Esta última parte la pongo nada mas para reirme. Pues me resulta gracioso como los que menos parecen relacionarse con la programación en una empresa de videojuegos son los que mas daño pueden causarle a la empresa por sus pobres conocimientos sobre computación. Vamos primero con los game producers. Un game producer, o al menos los que yo he conocido personalmente son jóvenes egresados de prestigiosas carreras de negocios y tienen experiencia en comercio internacional. Para ellos es sencillo conseguir fondos para arrancar proyectos y conocen gente que les ayudará a publicitar y vender sus productos. Su problema es que decisiones que parecen perfectamente razonables para un negocio cualquiera pueden ser verdaderos suicidios a la hora de hacer videojuegos. Pues una cosa que casi todos los game producers aprenden a la mala es que esto de los juegos es lo que en cultura corporativa se conoce como “Bet Your Company” que es cuando inviertes meses o hasta años en producir algo que no sabes siquiera si se va a vender. Un Producer puede hacer cálculos del costo de desarrollar un videojuego a lo largo de un año y luego ver que la adquisición de una licencia de un engine puede recortar ese tiempo y el costo a la mitad. Cuando ve que el desarrollo no avanza según lo planeado contrata a mas ingenieros para sacar el trabajo y hasta prevee como cubrir las inminentes pérdidas. Y al final si es listo hace un trabajito para un cliente corporativo, queda tablas con las deudad y liquida la empresa. Esto le pasó porque aunque su razonamiento era perfecto para producción industrial o negocios tradicionales al no saber de programación cometió errores que lo llevaron a la bancarrota. Y es que para sacar a flote un negocio de software es necesario conocer una serie de fenómenos que solo ocurren en este tipo de negocios como que mientras mas ingenieros se unen al trabajo en etapas avanzadas mas tiempo tarda el sistema en terminarse o que lograr que un programador pueda modificar un código de otra persona cuesta mas dinero y toma mas tiempo que si el mismo lo hiciera desde cero. Incluso hay grandes tomos sobre administración del desarrollo de software y las carreras de ingeniería en computación mas serias comienzan a orientarse mas a eso que realmente a programar. Un productor o especialista en negocios que no sepa de programación puede cometer este tipo de errores y otros que le harán perder mucho dinero y sobre todo no cumplir a tiempo con los deadlines.

Los Beta Testers no pueden escapar

Finalmente llegamos a lo mas bajo de la empresa de videojuegos. Conocido en otra época como Beta Tester, un QA es un pobre diablo al que le obligan a jugar los mismos juegos malos una y otra vez durante horas para detectar errores. Si tanto los jefes encargados del departamento de control de calidad como los QA’s no saben nada de programación van a mantener las partidas durante dias y noches enteras y al final se les van a colar errores. Y eso ocurre porque probar un videojuego no es simplemente jugarlo sino que el que lo prueba debe de ser capaz de destruirlo.

Suponiendo que antes de pasarle al probador humano los programadores ya efectuaron toda una batería de pruebas automatizadas para llevar al videojuego a su límite y que el encargado de probarlo sabe de programación seguro hará pruebas que ningún jugador considerado normal haría. Por ejemplo, un programador sabe que los números se guardan en espacios de memoria de longitud limitada y no pueden crecer indefinidamente. Una prueba sería acumular todas las monedas o items que pueda para ver cuantas puede cargar el personaje, llevar el contador de puntuación a su máximo a ver si se detiene o reinicia o intentará atraer a la mayor cantidad de monstruos en una sola pantalla. Estas pruebas casi siempre conducen a un viejo error conocido como Overflow y pueden hacer que el juego se trabe u ocurran cosas extrañas. Otro tipo de prueba es la siguiente: Si conoce el concepto de banderas y toma de decisiones puede intentar cosas como tomar una vida al mismo tiempo que recibe el golpe final o intentar guardar el juego justo en el momento que va a aparecer la pantalla de game over. Incluso si conoce el concepto de máquina de estado finito y aceptores puede deducir y probar combinaciones de acciones que potencialmente podrían llevar al juego a un fallo. En fin, un QA que sepa de programación puede descubrir errores que un jugador normal no podría localizar ni aunque jugara durante años.

Ya para irme, les recuerdo que si se interesan por hacer videojuegos no pueden escapar de la programación. No importa si son artistas, productores o simple control de calidad. Les digo esto porque he visto grupos de desarrollo que no tienen programadores o estos son muy pocos en comparación con los especialistas en otras áreas. O que simplemente los menosprecian y marginan. Si sus trabajadores no tienen un mínimo de conocimiento de programación por lo menos procúrenles un asesor que si sepa y los oriente en su trabajo. Aunque viéndolo bien, si los artistas, productores o QAs no les interesa un mínimo la programación. ¿Para qué quieren dedicarse a hacer videojuegos?

Anuncios

julio 21, 2012 - Posted by | Uncategorized | , , ,

2 comentarios »

  1. Un amigo mio quiere seguir el camino del desarrollador de videojuegos desde el lado de modelador 3D con el afán de escapar de la programación, le pasaré el link para trollear sus sueños xD

    Comentario por Iñigo | agosto 13, 2012 | Responder

  2. Los programadores no pueden escapar xD. Porque sin artistas gráficos o modeladores 3D saldría algo como ésto.

    Todas las piezas del proceso de creación de un video juego son imprescindibles, así como es completamente cierto que es una verdadera locura intentar crear un video juego sin tener uno o más programadores en el Staff, es igual de demente intentar llevar a buen termino un proyecto como éste sin artistas gráficos.

    Comentario por Anthony Gonzalez | marzo 18, 2013 | Responder


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: