Con la evolución exponencial del
hardware resulta difícil percibir como el software también
avanza de manera proporcional, no tanto en sus cualidades y capacidades
como en su volúmen. Una de las principales características
de los programas de estos últimos años es la enorme cantidad
de recursos (en términos de código) invertidos en lograr
que el programa se vea bien. También estamos llegando al extremo
con el concepto aquel de ofrecer aplicaciones que hacen de todo, menos
sacar al perro a pasear. Mas bien que algunas compañías andan
ofreciendo buenos productos y versiones más útiles y eficientes
de sus aplicaciones estrella. Tal vez el sector que mejores cosas ofrece,
en todo aspecto, es la de los vídeojuegos, aunque con las infaltables
excepciones.
Pero, vayamos paso a paso. Hace no menos
de doce años el componente funcional base del MS-DOS (el sistema
operativo del momento) entraba sin problemas en un diskette de 1.44MB,
tanto así que inclusive uno podía tener un par de programas
utilitarios como el format, chkdsk o el mem en el mismo diskette. El Windows
3.1 trabajaba tranquilo en un disco duro de 80MB. Hoy en día
el Windows XP requiere de ¡2GB! para una instalación
común. Hace doce años era posible incluir en un diskette
varios juegos sencillos, aquellos calificados como complejos entraban en
más, tal el caso de Prince of Persia que entraba en uno,
Dune
ocupaba dos, Warcraft también, uno de los primeros juegos
de la saga D&D entraba tranquilamente en 2 diskettes. Juegos como CD-MAN,
tetris, o Arkanoid entraban de sobra todos en un solo diskette. Hoy Warcraft
III requiere de un CD, Emperor: Battle for Dune ocupa 4 CDs,
Baldur's
Gate 2 ocupa 4 CDs, su demo requiere ¡600MB de espacio!. Y la
tendencia parece ir creciendo. ¿Por qué el software crece
tanto?
Antes de entra en detalles hay que pensar
en los cambios ocurridos en el hardware durante el mismo lapso de tiempo.
Un procesador Pentium III es tres generaciones superior a un Pentium
o un Pentium MMX pero incluye hasta diez veces más transistores
y alcanza velocidades netas una decena de veces superiores. Por otro lado
la tecnología utilizada permite ejecutar hasta dos instrucciones
por ciclo, lo cual duplicaria el número de instrucciones netas por
segundo. Un Pentium IV si bien sólo una generación
superior casi duplica el número de instrucciones y la velocidad
bruta del procesador, sin contar con la tecnología que permite ejecutar
hasta 3 o 4 instrucciones por cíclo (bajo situaciones óptimas),
por ende cuatruplicando la cantidad de instrucciones por segundo.
Hace una década una máquina
con ¡1MB! de RAM era un súper lujo, hoy en día se está
volviendo cosa corriente contar con equipos con 512MB y para fin de año
tener 1GB de RAM será lo preferido por la reducción actual
en los costos. A parte que las memorias de hoy en día son hasta
un buen par de veces más rápidas y utilizan tecnologías
especiales que les permiten recibir o enviar información al mismo
tiempo, encontrar datos en instantes, etcétera. No hace mucho un
disco duro con 100MB era como tener un Ferrari en el garage, hoy
uno de 80GB es la Peta parqueda en la calle. Una tarjeta de vídeo
con aceleración 3D era algo prohibitivo, ahora es tan común
que hasta vienen con 64MB a 256 MB de memoria especial ultra-rápida
para vídeo (actualmente la DDR). Un monitor de 17" ya es algo adminisible
de tener sin por ello olvidarse de pagar las cuotas de la casa, y un sistema
de sonido envolvente ya lo podemos comprar sin dejar de comer un mes. El
hardware ha mejorado increíblemente, pero no por ello hay que abusar.
¿Verdad?
Pero, volvamos al tema. ¿Por qué
el software es tan voluminoso?. Bien por debajo de la cubierta el software
moderno es modular y hace uso del paradigma Orientado a Objetos cuyo código
compilado (el ejecutable en binario entendible por la máquina) suele
ser muy extenso --y redundante, esto último sobretodo porque los
creadores de compiladores no han invertido el tiempo suficiente en optimizarlos.
Por otro lado el uso de librerías predefinidas se ha vuelto la norma
para "ahorrar tiempo de desarrollo" esto implica que en muchos casos un
programa incluye decenas de librerías prefabricadas sólo
para utlizar una o dos funciones de cada una, el resto no puede ser aislado
ni botado, así que forma parte del paquete final como relleno.
En los tiempos en que mucha memoria era
un lujo el equipo de Windows sale con el concepto de las librerías
dinámicas (las DLL), modulos funcionales que se cargaban y descargaban
de la RAM según sean o no requeridas por la aplicación en
uso. Esta idea siempre tuvo una faceta mala, claro que las ventajas otorgadas
lograban opacar los pequeños detalles negativos. El primer problema
con estas librerías es que fragmentan la memoria, como Windows no
tiene un sistema eficiente de recolección de fragmentos (garbage
collection) y reorganización llega un momento en que sin importar
el monto disponible en hardware para el S.O. la cantidad de recursos es
demasiado baja. Sólo queda reiniciar, este problema no es tan notorio
en equipos con XP, por lo que podemos asumir que han optimizado la gestión
de memoria.
Un otro problema con las DLL es que muchas
veces los programas instalan algunos módulos en la carpeta de sistema,
mismos que luego son pocos los que desinstalan adecuadamente, dejando así
archivos que nunca se utilizan pero que tampoco sabemos cuales son para
eliminarlos. Muchas utilidades tratan de cumplir el papel de borradores
de liberías inútiles pero todavía no hay una que funcione
siempre y bien. Las librerías dinámicas son parte importante
de la arriba citada presencia de mucho código redundante en los
ejecutables, aún así sin su presencia mucho software podría
acabar todavía más voluminoso o, en cualquier caso, ser más
difícil de mantener y programar.
Actualmente está de moda incluir
todo lo que los demás tienen y más, lo que termina creando
un cúmulo de funcionalidad que al final resulta contraproducente,
y que además asusta y confunde al usuario. Claro ejemplo de que
alguien se dió cuenta de esto es como el Office 2000/Windows
XP presenta menús que ocultan el 70% de las funciones y sólo
muestran aquellas más utilizadas y, sin ánimo de ofender
a nadie, las más simples. Sólo si el usuario quiere se despliegan
las restantes opciones disponibles. Por otro lado, en el afan de simplificar
las cosas al usuario final se agrega a un Sistema Operativo, o programa,
una infinidad de funciones cuya utilidad real es dudosa pero que hacen
ver bonito y sencillo al entorno. Seamos sinceros, ¿quién
realmente necesita 50, cuando no más, temas de ambientación?
¿100 fondos de escritorio? ¿miles de diferentes sonidos para
cada proceso? ¿decenas de salvapantallas para cada día? Jugar
con ellos y elegirlos es divertido por 10 minutos, luego sólo ocupan
espacio en disco duro que pocos saben como liberar. Personalizar permite
dar un toque único a las cosas, pero carece de utilidad práctica.
¿Sabía usted que todos esos
lindos fondos y sonidos, e iconos ocupan espacio en su memoria RAM, y en
su disco duro? Sin incluir el espacio ocupado por los módulos de
ejecución, o las librerías que los manipulan. Con Internet
se promueve aún más la posibilidad de que cada usuario descargue
temas de escritorio, sonidos y afines para personalizar no sólo
el Sistema Operativo si no muchos programas más; desde que el Winamp
empezo a ofrecer sus famosos skins, el Internet Explorer, luego
el Netscape y hoy por hoy decenas de otros que la verdad, no tienen nada
que hacer con ese tipo de oferta.
Ahora bien, entrando más en los
juegos. Los sistemas gráficos 3D vinieron para evitar el uso de
pesados sprites prerenderizados, entonces ¿por qué
cada vez necesitan más y más espacio, memoria y velocidad
de procesamiento? Si bien es cierto que en un principio los engines
3D tenían el objetivo de liberar espacio en memoria y disco duro
al no usar imágenes predibujadas no hay que olvidar que su uso se
ha extendido y evolucionado bastante. Hoy en día su aplicación
es para ofrecer mejores imágenes, mayor libertad de movimiento y
mejores efectos y renderizados en tiempo real. Una vez que las tarjetas
de aceleración 3D se volvieron cosa común las restricciones
--auto-- impuestas en el diseño de los engines desapareció
rápidamente.
No hay que olvidar que un engine
3D trabaja dibujando polígonos (tríangulos), calculando posiciones
en un espacio tridimensional virtual (abstracto) y adaptándolo a
una perspectiva 2D totalmente plana (el monitor), la matemática
y el cálculo geométrico involucrados en éste proceso,
aunque no al nivel del cálculo cuántico, tampoco es cuestión
de sumar dos números y listo, por lo que el monto de procesamiento
involucrado es inmenso y crece exponencialmente dependiendo el número
de efectos a ser aplicados y la cantidad de detalle presente en los polígonos
(texturas). De igual manera aún los polígonos que el usuario
no llega a ver tienen que ser calculados para otorgar imágenes realistas
y nítidas, sombras que estén de acorde a las fuentes de luz,
y efectos especiales que cubren o no determinadas áreas de lo que
el usuario va ha ver. Existen varias tecnologías, o estrategias,
para calcular lo menos posible, pero aún así, hoy en día
se están empezando a manejar alrededor de 100.000 a 1'000.000 de
polígonos por pantalla, lo cual, créanme, no es cosa de chiste.
Las tarjetas de aceleración modernas
suelen trabajar utilizando un buffer, de tal manera que una vez
terminada una imágen la mandan a la memoria de vídeo para
que la vea el usuario mientras la tarjeta en sí esta trabajando
en la siguiente, todo esto a decenas, cuando no centenas, de veces por
segundo. Algunas inclusive tienen tecnologías que les permiten tener
dos o más imágenes en proceso de renderizado mientra el usuario
ve la primera. Desde la resolución de pantalla, hasta la densidad
de colores, sin olvidar el número de polígonos, la cantidad
y la calidad de las texturas, el número de fuentes de luz y los
efectos a ser aplicados afectan la velocidad final de entrega, o renderizado,
mejor conocidos como fps, frames per second. Una medida usualmente
utilizada para demostrar el poder de la tarjeta cuando, por ejemplo, indican
que Unreal Tournament 2003 ejecuta a 100fps a 1024x768 con 32bits
de color, todo una proeza.
A medida que las tarjetas de vídeo
3D fueron evolucionando también lo hicieron el número de
efectos, y si bien la mayoría se realiza dentro el GPU (Graphics
Processing Unit) aún así deben utilizar la memoria RAM
y al ALU (Aritmetic-Logic Unit) o al FPU (Floating-Point Processing Unit)
del CPU principal como apoyo en varios cálculos. No en vano uno
de los grandes avances de estos últimos años fue la implementación
del AGP, un bus privado, más rápido y directo entre la memoria
RAM del sistema (que es mucho más voluminosa y lenta) y el procesador
gráfico de la tarjeta de vídeo, que si bien tiene su propia
memoria la misma es de alta velocidad menos voluminosa y más costosa,
por lo que su uso es selectivo y/o temporal. No hay que olvidar que acceder
a la RAM sigue siendo centanas de veces más rápido que cargar
de disco duro.
Pero aún así, ¿por
qué crece tanto el espacio necesario por un engine 3D? La
clave viene de mano de las nuevas texturas de alta resolución, las
cuales se quiera o no son imágenes predibujadas de elevado volúmen
que ciertamente ocupan mucho espacio en disco, y en memoria. Es por ellas,
también, que muchos juegos requieren harta RAM para cachear todas
las texturas y mapas de bits en memoria, para un acceso, o procesado, más
rápido. De ahí que contar con mucha RAM sea --en varios casos--
más eficiente que tener un procesador muy rápido, después
de todo será la tarjeta de vídeo la que haga gran parte del
procesamiento no el CPU principal, el cual ya esta bastante cargado y ocupado
con los sistemas de IA --de cada bot o unidad, interfaz de usuario, módulos
de razonamiento estratégico y planeación, seguimiento del
guión de la historia, voces, sonidos, etcétera.
Otro punto de incremento en el tamaño
de los juegos actuales es la propia dimensión de sus niveles y el
detalle que presentan. Además que como los discos duros han crecido
tanto, los desarrolladores ya no ven mucha necesidad en optimizar sus imágenes,
aparte de que llegan a ofrecer grabaciones de sonido de alta fidelidad
(44KHz) en vez de los optimizados de antes que eran de baja fidelidad (4KHz
a 16KHz), diferencia que, la verdad sea dicha, sólo se percibe con
tarjetas de sonido modernas y de calidad, y un juego de parlantes muy fino,
en un ambiente libre de interferencias auditivas. En esta misma línea
las bandas sonoras ya no son los diminutos archivos instrumentales MIDI
sino grabaciones completas que cuando tenemos suerte están en formato
MP3 (entre 2 y 5MB) y que en el más de los casos vienen en WAV (entre
tres y cinco veces más grande) para evitar uso de cíclos
de CPU en la descompresión, y facilitar la inclusión de efectos
y/o la sincronización con las animaciones.
Al final pareciera que los desarrolladores
de hardware y los productores de software, tienen algún trato o
están en una competencia no declarada de siempre consumir, y volver
obsoleto, lo que el otro hace lo más rápido posible. Resulta
difícil deducir si es que los productores de software complican
sus productos más en pos de aprovechar mejor el hardware existente,
o estos últimos mejoran todo para poder utilizar mejor lo que los
primeros hacen. Vaya uno a saber. Lo seguro es que mientras no pase nada
raro en el área de la tecnología o el software ambos seguiran
evolucionando a un paso acelerado y cada vez serán más grandes
los programas aunque su funcionalidad no aumente mucho. Claro que, en el
caso de los juegos, ese incremento de funciones --casi-- siempre existe
y se nota en los efectos visuales, el detalle, la calidad visual y de audio,
las increíbles peripecias que suelen lograr algunas Inteligencias
Artificiales, o la cantidad de cosas que suceden en la pantalla mientras
el usuario esta ocupado pensando en como destruir a su oponente. Basta
con imaginar a Republic: The Revolution que debere simular un país
entero con un ¡millón de habitantes!, o a Xenus que
deberá implementar la simulación realista (dicen) de toda
una porción de un país. O a Perimeter que ofrecerá
no menos de 1'000.000 de polígonos por pantalla.
Queda claro que si bien visualmente los
juegos seguirán evolucionando las nuevas áreas para realmente
explorar y explotar son las de jugabilidad, la integración a un
ambiente real que existe todo el tiempo y se ve afectado por nuestras acciones,
y las capacidades de Inteligencia Artificial de los bots que debamos enfrentar.
Los bichos de Serious Sam serán muchos y serán tontos,
pero no hay que olvidar que ejecuta bastante bien en un Pentium II
de las últimas, en máquinas más nuevas no creo que
sea problema dotarles un poco de cerebro, aunque, claro, poco probable
que sea igual de divertido si en vez de lanzarse a nosotros, sus bichos
la pensaran primero en como atacarnos. El asunto del comportamiento grupal
y social de los bots, para juegos de estrategia y táctica, es otra
área que esta siendo estudiada con lupa. Los juegos del futuro prometen,
habrá que ver si nosotros, los jugadores, estaremos a la par, después
de todo seguimos teniendo el mismo hardware --cerebral-- que cuando el
primer homosapiens piso la tierra.
¿Por qué el software crece
tanto? La verdad sea dicha, porque es inevitable. Por suerte el hardware
sigue a la par y hasta un poco adelante, así que no hay de que precuparse,
todavía. Que un poco de optimización a los compiladores o
a las librerías no le haría daño a nadie es cierto,
pero, en esta carrera por ganar el mercado y a los clientes, de seguro
ninguno de los involucrados se va ha dar tiempo de hacerlo nunca. Lamentable,
pero realista.