Este documento resume la historia reciente de las tarjetas de video, desde las primeras que solo ofrecían colores hasta el surgimiento de las tarjetas 3D a fines de los 90. Explica conceptos clave de las tarjetas 3D como polígonos, texturas, luces y partículas 3D. También compara las tarjetas más avanzadas actuales de NVIDIA y ATI.
Desarrollo de las consolas a través de la historia y la alta calidad de estos con el conocimiento de nuevas tecnologías utilizando los computadores como base.
Desarrollo de las consolas a través de la historia y la alta calidad de estos con el conocimiento de nuevas tecnologías utilizando los computadores como base.
1. Diego Ruiz | diego@dedalus-software.com.ar
No es novedad escuchar que la tecnología
avanza rápidamente, y este dicho, en el
mundo 3D, está lejos de ser una excepción. Quien no haya jugado a
un videojuego en los últimos dos años se sorprenderá muchísimo al ver cuánto
han cambiado. Y es que el mercado de los videojuegos mueve enormes sumas de
dinero, y estas cifras justifican inversiones gigantescas en desarrollo de tecnología relacionada.
En 1992 salieron al mercado Wölfestein 3D y Alone in the Dark, dos exponentes de títulos en tres
dimensiones que marcarían el comienzo de una época. Claro que aquellos juegos distan mucho de lo que
podemos encontrar hoy en día en las consolas de última generación, pero experimentar la sensación que
nos otorgaban hacía evidente que la era de los juegos 2D estaba llegando a su fin.
Desde el punto de vista técnico, un juego 3D (si bien comparte muchas de las características de uno 2D)
es un mundo nuevo, especialmente en el apartado gráfico. Los personajes ya no son sprites sino modelos
conformados por polígonos y recubiertos de texturas; los escenarios dejaron de ser mapas armados a partir
de pequeños bitmaps, y ahora son auténticas y complejas mallas usualmente ordenadas por algoritmos de
particionamiento espacial como el BSP (Binary Space Partitioning); y muchos elementos nuevos entran en
escena, como luces, materiales, sistemas de partículas 3D, etc.
En esta nota, introduciremos algunos de los conceptos más importantes que maneja la tecnología 3D y veremos
su aplicación al desarrollo de videojuegos. También analizaremos cuáles son los dispositivos que hoy se pueden
encontrar en el mercado y cuáles son las consolas de videojuegos que anhelaremos en unos pocos meses.
Pero, para lograrlo, vamos a ver un poco cómo fue avanzando este mercado, sumergiéndonos en la historia
reciente de los adaptadores de video.
24 POWERUSR
2. UN POCO DE HISTORIA
LA IMPORTANCIA DE LAS PLACAS DE VIDEO EN NUESTRAS COMPUTADORAS SE HA IDO INCREMENTANDO CON EL
PASO DEL TIEMPO. EN UN PRINCIPIO, LAS MEJORAS ESTABAN RELACIONADAS CON LA CANTIDAD DE COLORES
QUE PODIA OFRECER EL DISPOSITIVO Y/O CON LA RESOLUCION. SIN EMBARGO, POCO A POCO, ESTOS ELEMENTOS
FUERON ADQUIRIENDO MAYOR FUNCIONALIDAD Y SE HAN HECHO FUNDAMENTALES PARA LOS JUEGOS.
C
Escribir un byte en ella significaba modificar el color de
un pixel en nuestro monitor.
Luego, los dispositivos de video comenzaron a ganar in-teligencia,
fruto de la necesidad de crear aplicaciones ca-da
vez más complejas (principalmente, juegos). Dejaron
de ser estúpidos esclavos que sólo leían una porción de
su memoria para generar la señal correspondiente por el
puerto de salida al monitor.
Comenzaba la era de las placas aceleradoras 3D. Se denomi-naron
vagamente aceleradoras, debido a que implementa-ban
—en mayor o menor medida— operaciones en hardware
que, clásicamente, se hacían por software, razón por la cual
las aplicaciones 3D se ejecutaban con más velocidad.
EL INICIO DE LA ERA 3D
En estas páginas pretendemos remitirnos más a las genera-ciones
y arquitecturas de dispositivos que a los modelos es-pecíficos
que cada empresa saca al mercado cada seis me-ses.
Sin embargo, existen hitos que son marcados específi-camente
por una u otra firma, y que no pueden quedar al
margen. Un ejemplo de lo expresado es el caso de la difunta
compañía 3Dfx Interactive (ver recuadro).
La primera generación de procesadores de video inteligentes
consistió en la implementación de un grupo de operaciones
prefijadas por medio de las cuales se procesaba una serie de
vértices que luego finalizarían representando polígonos en
pantalla, materia prima de todo objeto 3D.
Dicha inteligencia fue “vendida” comercialmente a los usua-rios
finales por parte de NVIDIA bajo el nombre “motor de
transformación e iluminación” (Transformation and Lighting),
más conocida popularmente por su abreviatura, TnL.
Para comprender un poco mejor cómo funciona este tipo
de dispositivos, es conveniente introducir el modo en que
PLACAS DE VIDEO
uando las computadoras personales irrumpieron
en el mercado, el adaptador más popular era el
MDA (un fabricante muy popular de aquel enton-ces
era la empresa Hercules), un dispositivo que ofrecía
una resolución de 720x350 y era monocromático.
Luego, llegó el momento del color. Al comienzo, con dis-positivos
modestos como el clásico CGA (Color Graphics
Adapter), que brindaba tan sólo cuatro colores con una
resolución de 320x200 (alcanzaba 640x480 en modo mo-nocromático).
Y tras él, el dispositivo EGA (Enhanced
Graphics Adapter), que ofrecía 16 colores en una ya de-cente
resolución de 640x350.
Sin embargo, muchas personas conocieron el color ya
con el popular VGA (Video Graphics Adapter) y sus con-secuentes
mejoradas versiones (SVGA, XGA, SXGA, etc.).
El adaptador VGA ofrecía 256 colores en resolución de
320x200; el SVGA (Super Video Graphics Adapter), por
su parte, dependía de la cantidad de memoria que poseía
la placa. A partir de este punto, ingresamos en la historia
reciente de las placas de video.
LA MEMORIA DE VIDEO
Cuando las placas SVGA eran las más populares dentro
de nuestros flamantes gabinetes mini tower, la caracte-rística
más importante del dispositivo era la cantidad de
memoria que poseía. A mayor memoria, mayor cantidad
de colores y mayor resolución para deleitarnos la vista.
Con 1 MB de RAM en nuestra placa de video, podíamos
llegar a una resolución de 1024x768 con profundidad de
256 colores y ser el orgullo (nerd) de la cuadra. En aquel
entonces, la memoria de video se utilizaba exclusiva-mente
como video buffer, es decir que era una represen-tación
lógica de lo que se veía en pantalla.
ATARI 2600: PROGRAMAR SIN VIDEO BUFFER
La consola de juegos más popular de Atari fue la gloriosa Atari 2600. Una de las razones
de su éxito fue su bajo costo de fabricación. En aquella época, la memoria era muy
cara, y disponer de un video buffer en la consola incrementaba
notablemente su precio. El total de memoria con que contaba el
sistema para dibujar en pantalla era suficiente sólo para
dos líneas de video. Los programadores debían
ingeniárselas para escribir, de modo sincronizado, el
barrido vertical, y así crear en pantalla la imagen que el
juego necesitara en cada momento. La consola Atari 2600
tenía un procesador 6507 de 8 bits (1,19 MHz), 128 bytes de RAM,
4 KB máximos de ROM, una resolución en pantalla de 192x160
pixeles y 16 colores (4 simultáneos en pantalla). El primer modelo
salió a la calle en 1978, y el último —el Atari 2600 Jr.—, en 1986 (aunque
recientemente se lanzó, para los nostálgicos, una pequeña consolita Atari
2600 dentro de su clásico joystick con diez juegos incluidos).
LA VCS (VIDEO
COMPUTER SYSTEM)
ATARI 2600.
POWERUSR 25
3. end). Para esto lanzan diversos modelos
que se ajusten a la necesidad y el bolsi-llo
de cada usuario.
En el mercado high end, el modelo de
vanguardia de NVIDIA es la serie
GeForce 6800 (teniendo como mayor
exponente la versión Ultra), mientras que
3DFX INTERACTIVE
3Dfx Interactive fue una empresa
dedicada al desarrollo de dispositivos
de video 3D. Signo del tiempo en el
que vivimos, fue un ejemplo notorio de
lo efímero que es el éxito; muchos no
la vieron venir. Se formó en el año
1994, y en 1998 ya era dueña casi total
del mercado de aceleradoras 3D.
Lo curioso del caso es que 3Dfx, en un
principio, ofrecía un dispositivo que
era un complemento para el adaptador
de video principal del sistema. Por lo
tanto, una PC con los modelos de
placas Voodoo Graphics o Voodoo2
requería una placa de video
convencional para realizar el trabajo
en escritorio de Windows. Además,
sólo aceleraba aplicaciones en
pantalla completa que hicieran uso de
su API de programación (Glide) y
ofrecía una profundidad de colores de
únicamente 16 bits.
Aun así, 3Dfx Interactive se convirtió
en el líder del mercado y entró en la
ATI ofrece su línea RADEON X850 (cuyo
tope es la poderosa XT Platinum Edition).
Si bien no es objeto de este artículo espe-cificar
con gran detalle los modelos de
estos fabricantes, en la tabla de esta
página podemos ver las opciones de me-jor
rendimiento propuestas por ambos.
fase más compleja: mantenerse en la
cresta de la ola.
A mediados de 1999 sacó al mercado
el modelo Voodoo3, que arremetía
contra la mayor cantidad de defectos
que se les podía achacar a los modelos
anteriores, pero ya no estaba solo:
NVIDIA poco a poco se convertía en
una espada de Damocles y,
silenciosamente, ganaba mercado con
sus productos TNT y, luego, TNT2.
La Voodoo3 vendió relativamente bien,
pero no tanto como se esperaba. 3Dfx
intentó recuperarse con una nueva
familia de productos: Voodoo4 y
Voodoo5. Pero en aquel momento,
NVIDIA había finalizado su flamante
GeForce: la suerte estaba echada.
3Dfx Interactive tomó malas
decisiones estratégicas y tuvo atrasos
considerables en el lanzamiento de
sus últimos modelos. Finalmente, en
2000 fue comprada por NVIDIA, con lo
cual finalizó su ciclo de vida.
PLACAS DE ULTIMA GENERACION
Característica NVIDIA 6800 ULTRA ATI RADEON X850 PE
Interfaz de memoria 256 bits 256 bits
Cantidad de memoria 512 MB 256 MB
Tipo de memoria GDDR3 GDDR3
Velocidad memorias 1,1 GHz 1,1 GHz
Velocidad core 400 MHz 540 MHz
Fill rate 6,4 Gpixels/s 8,6 Gpixels/s
Vértices por segundo 600 MT/s 810 MT/s
RAMDAC 400 MHz 400 MHz
Cantidad de pipelines 16 16
Cantidad de transistores 222 millones 160 millones
Vertex shader model 3.0 2.0
Pixel shader model 3.0 2.0
Tipo interfaz AGP / PCIE AGP / PCIE
Max. resolución 2048x1536 2048x1536
trabajan las librerías 3D más popula-res,
como es el caso de OpenGL y
Direct3D, ya que éstas se desarrollan
paralelamente al hardware, a tal
punto que en algunos no es fácil de-terminar
cuál empuja a cuál. De esto
hablaremos en las próximas páginas.
PLACAS DE VIDEO
DE ULTIMA GENERACION
Tanto la gigante californiana NVIDIA
como el contendiente canadiense ATI
Technologies se encuentran compi-tiendo
ferozmente por liderar el mer-cado
de los dispositivos de video. Por
un lado, esto es bueno para nosotros,
ya que existe una mejora continua, y
sin pausa, de la tecnología gráfica.
Por otro lado, dicha competencia mu-chas
veces evita un desarrollo de
fondo de los nuevos dispositivos: con
la necesidad de salir en pocos meses
con un producto más veloz que el
competidor, simplemente se busca por
fuerza bruta aumentar la cantidad de
procesamiento del dispositivo, au-mentando
la frecuencia de clock de
la GPU y/o aumentando la velocidad
a la cual trabajan las memorias, lo
cual significa mayor consumo, más
calor, mayor tamaño de placa, etc.
Ambas empresas diferencian a los
mercados de alto desempeño (high
end) de aquellos más modestos (low
EN ESTA FOTO SE PUEDE
OBSERVAR LA CLASICA TARJETA
DE VIDEO 3DFX VOODOO3 3000.
26 POWERUSR
4. COMO SE FORMAN LAS IMAGENES
DE POLIGONOS Y VERTICES
¿NUNCA SE PREGUNTARON COMO ES QUE SE PROCESAN LAS IMAGENES EN LA COMPUTADORA? LA GENERACION
DE UN MUNDO 3D EN UNA PANTALLA BIDIMENSIONAL COMO LA DEL MONITOR IMPLICA LA APLICACION DE
DISTINTAS TECNICAS REALIZADAS DIRECTAMENTE POR LA PLACA DE VIDEO. AQUI VEREMOS COMO FUNCIONAN.
C
uando estamos jugando un juego
3D de computadora o consola, todo
lo que vemos en escena son objetos
formados por polígonos (más específica-mente,
triángulos), los cuales, a su vez, se
encuentran formados por vértices.
Cada vértice de un objeto en particular
(por ejemplo, un personaje del juego) está
definido en un espacio local a dicho obje-to;
es decir que posee un centro (0, 0, 0)
relativo a sí mismo e independiente del
origen del mundo donde finalmente será
inmerso. Como es posible inferir, existe
una conversión de un espacio a otro que
alguien debe realizar; al mismo tiempo,
todos los vértices deberán ser reorientados
dentro de una escena para que ésta sea
visualizada desde un punto en particular
(como si se tratara del ojo de una cáma-ra).
Entonces, se definen ciertos linea-mientos
con los cuales se procesarán los
vértices y se facilitará la operación con
ellos en los usos más comunes.
El pipeline prefijado establece (como se
puede apreciar en la figura de la página
30) una serie de operaciones que se reali-zarán
sobre cada vértice entrante (de cada
triángulo, de cada objeto del juego).
ETAPA 1:
PROCESAMIENTO DE VERTICES
El pipeline se alimenta de vértices. Cada
uno es convertido en coordenadas ho-mogéneas
para, luego, poder ser multi-plicado
por tres matrices: la matriz de
mundo, la de vista y la de proyección.
Luego, la coordenada resultante es rees-calada
en función del punto de visuali-zación
especificado (en general, la pan-talla
completa o la ventana que estamos
utilizando como objetivo para el dibuja-do)
y, en caso de quedar fuera del área
de visualización, es eliminada.
Finalmente, el vértice es transferido al
proceso de rasterización, donde será di-bujado
en pantalla.
La matriz de mundo: la primera ma-triz
de mundo se utiliza para colocar el
objeto en la escena 3D. Realiza una
transformación que va del espacio del
modelo al espacio del mundo en el cual
trabajamos. La transformación de mun-do
puede incluir traslaciones, rotaciones
y escalamientos.
La matriz de vista: esta segunda matriz
reubica todos los objetos en función de
un punto de visualización especificado.
La matriz de proyección: especifica,
principalmente, la escala y la perspecti-va
adoptadas. Esta matriz determinará,
también, cuánto vemos de la escena, es
decir, el volumen de visualización.
Es importante entender que el uso de
matrices es un recurso matemático crea-do
para simplificar la manipulación de
vértices. Con ellas es muy sencillo mo-dificar
la posición, la orientación y la
escala de éstos.
Una vez que el vértice ha sido procesa-do,
si se mantiene dentro del volumen
de visualización predefinido, pasará a
una segunda etapa: la rasterización.
ETAPA 2: LA RASTERIZACION
En la rasterización se “pintan” los vérti-ces,
y para hacerlo se utiliza una ecua-ción
en la cual participan varios elemen-tos,
como el color del vértice, las luces
de la escena que lo afectan, la normal
que especifica el vértice en cuestión y el
material activo que corresponda. Luego,
se rellena todo el triángulo, realizando
una interpolación de los colores de cada
vértice que lo conforman.
Un objeto 3D también puede estar cu-bierto
por una textura, que es, básica-mente,
un mapa de bits con ciertas pro-piedades.
Las texturas, para poder ser
aplicadas a la geometría, deben estar
cargadas en memoria de video. De este
modo, ya no son sólo utilizadas como
video buffer. Este uso “secundario” es,
hoy en día, la principal razón para optar
por tarjetas de mayor memoria: una pla-ca
de video con más memoria podrá al-bergar
más texturas, y de mejor calidad.
Las placas de última generación poseen
256 MB o 512 MB de memoria de video,
MODELO FORMADO CON VERTICES
QUE ESPECIFICAN COORDENADAS
DE TEXTURA.
EL MISMO MODELO DE LA
IZQUIERDA, PERO YA CON UNA
TEXTURA APLICADA.
28 POWERUSR
5. cifra que es el promedio, al día de hoy, de
la memoria principal en nuestros equipos.
Pero si bien el proceso de iluminar vérti-ces
por hardware fue un gran avance, al
poco tiempo dejó de ser suficiente. Se
precisaba una flexibilidad mayor, pero...
¿cómo saber qué operaciones implemen-tar
en una GPU, si las necesidades po-drían
ser distintas? Pues permitiendo que
cada desarrollador escribiera el programa
que manipulara los vértices a su gusto.
Por ejemplo, ¿cómo podríamos imple-mentar
que un conjunto de vértices se
moviera dentro de un rango de posicio-nes
en función del tiempo? Utilizando el
pipeline prefijado, deberíamos modificar
el valor de cada vértice antes de ingresar
en él, o modificar la matriz de mundo
por cada vértice que tuviera un valor es-pecífico.
Ambos métodos son factibles
pero poco eficientes, pues requieren un
uso notable de la CPU. Mejor sería poder
hacer la cuenta del cálculo del desplaza-miento
de la posición de cada vértice en
el pipeline y, mejor aún, liberar a la CPU
de dicho cálculo.
El pipeline programable nos permite es-pecificar
(mediante un lenguaje especia-lizado
para tal fin) un programa que
procese el vértice en función de sus ne-cesidades.
Estos pequeños programas re-ciben
el nombre de shaders; más especí-ficamente,
cuando trabajan con vértices,
vertex shaders, y cuando lo hacen con
pixeles, pixel shaders.
PIXEL Y VERTEX SHADERS
Los dispositivos de video con pixel y
vertex shaders son moneda corriente en
el mercado de las placas de video actua-les;
casi todos los juegos AAA modernos
hacen uso de esta característica de algún
modo, y hasta algunos, recientemente,
comenzaron a exigir que esta caracterís-tica
estuviera presente para poder iniciar
su ejecución.
La característica básica de esta nueva
tecnología consiste en una GPU progra-mable.
Con los vertex shaders es posible
especificar un pequeño programa que to-me
al vértice entrante y lo manipule a su
gusto. De este modo, se pueden efectuar
cálculos aritméticos arbitrarios tomando
como materia prima vértices (en el caso
de vertex shaders) y pixeles (en el caso
de pixel shaders).
La versión 9.0c de DirectX permite utilizar
la versión 3.0 del set de instrucciones de
pixel y vertex shaders. En ella se incorpora
mayor cantidad de instrucciones aritméti-cas,
mayor cantidad de registros y mayor
cantidad máxima de instrucciones por
programa que en versiones anteriores.
DirectX 9 puede emular el uso de vertex
shaders cuando el hardware necesario no
está presente, mediante una capa de emu-lación
vía software. Claro que lo hace con
una performance notablemente inferior a
la implementación en GPU.
VERSIONES DE SHADERS EN DIRECTX
DirectX 8.0: primer soporte a pixel y vertex shaders. Se soportaron las versiones
1.0 y 1.1 de pixel shader, y las versiones 1.0 y 1.1 de vertex shader.
DirectX 8.1: no hubo cambios en vertex shaders. Se agregó soporte para versiones
1.2, 1.3 y 1.4 para pixel shaders.
DirectX 9.0: se agregó soporte para pixel y vertex shaders 2.0.
DirectX 9.0c: se agregó soporte para pixel y vertex shaders 3.0.
VERTEX SHADERS: REGISTROS DE ENTRADA
Registro Descripción Cantidad en VS 1.1 Cantidad en VS 2.0 Cantidad en VS 2.x
a0 Direccionamiento 1 1 1
c# Constante (tipo float) 96 (como mínimo) 256 (como mínimo) 256 (como mínimo)
v# Entrada 16 16 16
r# Temporal 12 12 12 (como mínimo)
b# Constante (tipo bool) - 16 16
i# Constante (tipo int) - 16 16
aL Contador de bucle - 1 1
p0 Predicado - - 1
VERTEX SHADERS: REGISTROS DE SALIDA
Registro Descripción Cantidad en VS 1.1 Cantidad en VS 2.0 Cantidad en VS 2.x
oPos Posición 1 1 1
oFog Niebla 1 1 1
oPts Tamaño punto 1 1 1
oD# Color 2 (difuso y especular) 2 (difuso y especular) 2 (difuso y especular)
oT# Coordenadas de textura 8 8 8
* Nota: En la versión 3.0 de VS los registros de salida son 12 y son generales; se dejó de lado la especificación
del tipo, y ahora el sistema es más flexible y pueden utilizarse según conveniencia.
POWERUSR 29
6. OPERADORES PROGRAMABLES
LOS SHADERS
SIEMPRE HABLAMOS DE LOS SHADERS Y DE SU IMPORTANCIA EN LAS TARJETAS DE VIDEO ACTUALES.
LO QUE NUNCA COMENTAMOS ES COMO SE COMPONEN INTERNAMENTE Y DE QUE MANERA LOS
UTILIZAN LOS PROGRAMADORES DE JUEGOS PARA CREAR SUS MARAVILLAS. EN ESTAS PAGINAS NOS
METEREMOS DENTRO DE LOS PIXEL Y VERTEX SHADERS, Y LOS MOSTRAREMOS EN DETALLE.
L
os vertex shaders operan sobre
vértices o, mejor dicho, la salida
de la operación de un vertex
shaders es un vértice en formato homo-géneo,
listo para ser enviado a la etapa
de clipping y reescalado.
Un vertex shader no puede crear ni des-truir
geometría (no puede crear vértices ni
tampoco puede eliminarlos). Opera con un
vértice a la vez y puede manipular la geo-metría
existente modificando propiedades
del vértice manipulado.
Un pixel shader especifica el color en un
pixel; usualmente, recibe como entrada
coordenadas de textura.
Existe cierta independencia en el uso de
pixel o vertex shaders. Por lo general, los
vertex shaders hacen modificaciones en la
geometría, como ciertas transformaciones
para crear efectos específicos (como pe-queñas
olas en el agua), mientras que los
pixel shaders se utilizan, principalmente,
para realizar cálculos arbitrarios de ilumi-nación
(como la iluminación por pixeles
tan frecuente en los juegos actuales, como
Doom 3 y Far Cry).
VERTEX SHADERS
Los vertex shaders podrían reemplazar al
motor de transformación e iluminación
prefijado que existía en el pipeline tradi-cional
utilizado por OpenGL o Direct3D.
Nuestra aplicación podría utilizar ambos
para distintos vértices, pero no para el
mismo, ya que se excluyen mutuamente
(ver figura del pipeline completo). Debido
a que los vertex shaders reemplazan al
EL PIPELINE COMPLETO
motor TnL, se infiere que deberían produ-cir
la misma salida; en otras palabras, el
vertex shader recibirá un vértice y deberá
entregar un vértice, en una relación es-tricta
de uno a uno; no podrá cambiar la
cantidad final de vértices.
La entrada a un vertex shader es uno o
más vértices e información de estados del
pipeline (existen estados de renderización
que pueden modificar el modo en que se
produce la salida). La salida es la posición
en espacio de recorte (clipping) y el resto
de la información usual del vértice en
función de su formato (color, coordenadas
de textura, etc.).
ARQUITECTURA
DE LOS VERTEX SHADERS
El vertex shader es un programa que to-mará
como entrada un vértice, y dejará
a la salida:
Un vértice en espacio de recorte
Un color de vértice (en función del
formato de vértice)
Coordenadas de texturas (en función
del formato de vértice)
Intensidad de niebla (opcionalmente)
Tamaño de punto (en función del for-mato
de vértice)
Como mínimo, el programa del shader
deberá tomar el vértice y realizar una
transformación que lo lleve de espacio
local a espacio de recorte. Luego, el vér-tice
contendrá información opcional que
estará de acuerdo con el formato de vér-
tice y el estado de renderización.
Veamos sólo un poco de código de un
vertex shader que realice esta operación
mínima:
dp4 oPos.x, v0, c0
dp4 oPos.y, v0, c1
dp4 oPos.z, v0, c2
dp4 oPos.w, v0, c3
En este caso, hemos empleado lenguaje
ensamblador de la GPU, y no, HLSL.
Quienes conozcan algo de ensamblador
para cualquier microprocesador notarán
una sintaxis familiar: un mnemónico re-presentando
la operación por realizar, un
componente sobre el cual se realiza la
operación (en este caso, componentes de
un registro de salida) y luego argumen-tos
de la operación.
dp4: operación por realizar, significa
“producto punto de cuatro componentes”.
oPos: registro de salida del vértice (es
un vector de cuatro componentes)
v0: registro de entrada, desde donde to-mamos
el vértice con el cual trabajamos.
c0..c3: constantes (vectores de cuatro
componentes cada una de ellas).
Esquematizando la operación, lo que he-mos
hecho es lo que se puede apreciar en
la figura de la página siguiente. Es decir,
hemos multiplicado el vértice entrante por
una matriz construida a partir de cuatro
vectores constantes. La salida fue coloca-da
en un registro de salida.
Frame buffer
blending
Primitiva de
teselación de
alto nivel
Información de
vértices
Vertex shader
Motor de
iluminación y
transformación
(TnL)
Recorte y
reescalado
Pixel shader
Multitexturado
de DirectX 6/7
Blending de
niebla
Testeo de
Alpha, Stencil y
Depth
30 POWERUSR
7. La interfaz más general de las dos es la de vertex shaders. Por
medio de ella, el programador podrá usar instrucciones para
especificar las operaciones que realizará el dispositivo de video
con los vértices entrantes.
La interfaz de pixel shaders es un poco más complicada y po-see
ciertas restricciones que hay que tener en cuenta. La más
importante es que los pixel shaders sólo pueden ejecutarse en
un hardware que los soporte; por lo tanto, si deseamos crear
juegos que utilicen esta funcionalidad y que, al mismo tiempo,
funcionen en equipos no programables, deberemos realizar más
de un flujo de ejecución.
Hasta el momento, para hacer uso de estas facilidades el progra-mador
debía escribir el código en el lenguaje ensamblador de la
placa de video sobre un procesador de textos. Naturalmente (y co-mo
era de esperar), comenzaron a implementarse herramientas que
ayudan al programador en esta tarea: entornos que facilitan la
creación de efectos y lenguajes de alto nivel que luego son tradu-cidos
al lenguaje ensamblador de la placa de video en cuestión.
PROGRAMACION EN ENSAMBLADOR
En una época, los juegos se programaban en lenguaje ensambla-dor.
Este lenguaje consiste en instrucciones de procesador de ba-jo
nivel, que luego se traducen en código binario y, finalmente,
son ejecutadas por el microprocesador. Programar directamente
en el lenguaje que entiende la máquina posee muchas ventajas:
tendremos control absoluto del modo en que se administran los
registros (“posiciones de memoria” que se pueden leer y escribir
de manera muy veloz, porque son locales al microprocesador).
La gran desventaja es que programar en ensamblador es compli-cado.
Veamos un programa sencillo en este lenguaje:
mov AX, algún_número ; asigna un número cualquiera al
cmp AX, 5 ; compara el contenido del registro AX
je true ; si la comparación fue existosa salta
mov CX, 2 ; asigna el número 2 al registro CX
VERTEX SHADER PIXEL SHADER
registros de vértices
v15
registro de
direcciones
(VS 1.1 y
superiores)
v0
r0 t0 Etapa 0
registros
temporales
a0
c0
r1 Unidad de
procesamiento
de vértices
registros
temporales constantes
v0 v1
c1
c95
oDn oT
registros de salida pixel de salida
r11
REGISTROS DE ENTRADA, TEMPORALES Y DE SALIDA,
QUE SE PUEDEN UTILIZAR EN UN VERTEX SHADER.
registro AX
con el número 5
a la etiqueta “true”
Etapa 1
Etapa 2
Etapa 3
t1
t2
t3
r0
r1
c0
c1
c7
Unidad de
procesamiento
de píxeles
REGISTROS DE ENTRADA, TEMPORALES Y DE SALIDA
QUE PUEDEN UTILIZARSE EN UN PIXEL SHADER.
PIXEL SHADERS
Los pixels shaders reemplazan las operaciones de multitextura-do
fijas del pipeline prefijado. Para entender mejor cómo fun-cionan
los pixels shaders hay que comprender el modo de fun-cionamiento
dual que posee el pipeline de texturas. Tradicio-nalmente,
dos caminos corren en paralelo manejando operacio-nes
de color (vector pipe) y alpha (escalar pipe). El resultado de
estas operaciones se mezcla al final, y termina en la especifica-ción
de un color con componente alpha.
Dentro del pixel shader se pueden realizar operaciones aritméti-cas
(con valores de coordenadas de texturas) y operaciones con
texturas (haciendo uso de una coordenada de textura). De todos
modos, más allá de la operación realizada, la salida debe ser
una estructura de color con componentes RGBA (Red, Green,
Blue, Alpha: Rojo, Verde, Azul y Alpha).
ARQUITECTURA DE LOS PIXEL SHADERS
Un pixel shader toma un color como entrada, una textura de
coordenada (o más) y una textura activa, y produce un valor
RGBA de salida. Es posible ignorar los estados de etapas de
texturas que están fijados. De hecho, es posible ignorar las
coordenadas de texturas especificadas y fijar el color de mane-ra
arbitraria. Lo que podrá cambiar el color fijador de lo que
veremos en pantalla será el estado del render state relacionado
a la niebla (recordemos que blending de niebla es una etapa
posterior al pixel shader).
Por lo general, un programa de pixel shaders es más pequeño
que uno de vertex shaders, simplemente, debido a las operacio-nes
que suelen entrar en juego.
HLSL
Los dispositivos de video programables que existen hoy son las
GeForce#3 y superiores (exceptuando la GeForce#4 MX), y las
ATI Radeon 8500 y superiores.
Sin embargo, la capacidad de programación de todas estas pla-cas
está fuertemente relacionada con el modo por el cual se ac-cede
a estas funcionalidades, por medio de la interfaz de vertex
shaders y pixel shaders de DirectX 8 (DX8) y DirectX 9 (DX9).
constantes
POWERUSR 31
8. jmp end ; salta a la etiqueta “end”
true:
mov CX, 1 ; asigna el número 1 al registro CX
end:
El mismo programa, en lenguaje C, se escribiría del siguiente modo:
a = algún_número; // asigno un número cualquiera
a la variable ‘a’
if (a == 5 // ¿es igual a 5?
b = 1; // asigno el número 1 a la variable ‘b’
b = 2; // asigno el número 2 a la variable ‘b’
Naturalmente, el código escrito en C es mucho más legible que
el escrito en código ensamblador. De hecho, el código ensam-blador
requiere de una documentación mucho más precisa, ya
que entender cuál es el propósito de un trozo de código, sin es-tar
contextualizado en el problema, resulta muy complicado.
Otra ventaja de C es que el lenguaje no está atado a ningún
microprocesador en particular. Existe un compilador que se en-carga
de realizar dicha tarea. Por lo tanto, podemos escribir có-digo
C y luego recompilarlo en distintas plataformas.
HIGH-LEVEL SHADER LANGUAGES
Se podría decir que HLSL es al ensamblador de los VS/PS (ver-tex
shaders/pixel shaders) lo que el lenguaje C es al ensambla-dor
de la CPU. Veamos qué código de VS se requiere para reali-zar
una transformación de vértices sencilla:
mov r0, c0 ; copia el registro constante c0 al temporal r0
mov r1, v2 ; copia el registro entrante v2 al temporal r1
dp3 r2, r0, r1 ; realiza un dot product entre los registros r0
y r1 y coloca el resultado en r2
mov r3, c1 ; copia registro constante c1 al temporal r3
max r0, r2, r3 ; clampea valor de r0 al máximo entre r2 y r3
mov oD0, r0 ; escribe |en registro de salida de color oD0 el
valor del registro temporal r0
Con HLSL, en cambio, deberíamos escribir:
float4 lightdirection = constant[0];
OUT.Diffuse = max(dp3(IN.Normal, lightdirection), 0 );
Nuevamente, el lenguaje de alto nivel permite realizar las mis-mas
operaciones en menos pasos, mantener la legibilidad en
niveles razonables y desprenderse de características específicas
del hardware. Claro que en lo que respecta a la legibilidad, el
problema se reduce un poco debido a que los programas de
VS/PS no suelen poseer muchas líneas de código.
Lo que se debe tener en cuenta es que, a pesar de estar realizando
una programación en un nivel más alto, las limitaciones de hard-ware
siguen existiendo. En versiones de VS inferiores a la 2, la
cantidad de instrucciones máxima y la cantidad de registros pue-den
ser un inconveniente; además, no existen instrucciones de
control de flujo de ejecución (condicionales, bucles, etc.).
Si estamos codificando en ensamblador de Vertex Shader/Pixel
Shader, usualmente estaremos más en contacto con las limita-ciones
de hardware, ya que la programación está estrechamente
relacionada a las características del dispositivo. Codificando en
alto nivel, estas limitaciones podrían saltearse e incurrir fácil-mente
en errores de programación.
El lado negativo es similar al existente en la programación tra-dicional
en alto nivel contra la programación en ensamblador
de CPU, y es la optimización. Un compilador podrá traducir
nuestro código no de la mejor manera posible, cuando una mul-tiplicación
y una adición expresada en HLSL podrían ser tradu-cidas
a instrucciones de multiplicación (mul) y adición (add) in-dependientes
o, tal vez, a una sola instrucción que realizara
ambos procesos en una sola operación (mad). Esta situación re-dundará
en mayor uso de GPU del necesario y, finalmente, en
menor cantidad de cuadros por segundo para nuestro juego.
RENDERMONKEY
RenderMonkey es una aplicación creada por la compañía diseña-dora
de procesadores gráficos ATI Technologies que puede des-cargarse
libremente desde el sitio oficial. Es importante destacar
que no es un lenguaje, como suele pensarse comúnmente, sino
una herramienta pensada para ayudar a los artistas y/o progra-madores
a crear shaders.
Si alguien desea crear un shader y verlo en acción, deberá
crear un framework que realice la carga de la geometría, textu-ras,
pase las constantes al shader, etc. Todo este trabajo es rea-lizado
por RenderMonkey, por lo que quien quiera crear un
efecto deberá concentrarse solamente en su programación espe-cífica
del vertex y pixel shader, y no, en aplicaciones auxilia-res.
Además, la aplicación permite modificar elementos viendo
su consecuencia en tiempo real.
Si quieren obtener más información respecto a RenderMonkey,
recomiendo visitar www.ati.com/developer/rendermonkey.
EN ESTA CAPTURA DE PANTALLA VEMOS A RENDERMONKEY,
LA HERRAMIENTA PARA CREAR SHADERS, EN ACCION.
32 POWERUSR
9. EL FUTURO CERCANO
LAS CONSOLAS DE JUEGOS
DE PROXIMA GENERACION
ESPECIALMENTE EN NORTEAMERICA, LAS CONSOLAS DE JUEGOS SON MAS POPULARES QUE LAS PC, NO SOLO POR
SU PODER DE PROCESAMIENTO, SINO TAMBIEN POR SU ECONOMIA Y COMODIDAD. POR ESO, CON EL ADVENIMIENTO
DE LAS NUEVAS CONSOLAS, NO PODIAMOS DEJAR DE MENCIONAR LO QUE SE VIENE EN ESTE AMBITO
¿LA PLAYSTATION 3? ¡NO! UN CLASICO
DISEÑO FALSO DE LOS VARIOS QUE
CIRCULAN POR LA RED.
to a la placa de video que poseerá la
PlayStation 3, NVIDIA anunció en di-ciembre
de 2004 que firmó un acuerdo
con Sony para encargarse de desarrollar
la nueva GPU de la consola, que poseerá
una variante de la tercera generación de
sus aceleradoras gráficas.
XBOX 360
La nueva consola de Microsoft utilizará
tres microprocesadores IBM PowerPC co-rriendo
a 3,2 GHz, cada uno con dos hilos
de ejecución, 32 KB de caché L1 de datos
y 32 KB de instrucciones; los tres compar-tirán
una caché de 1 MB del tipo L2.
La consola poseerá 512 MB RAM del tipo
GDDR3, y el disco rígido ahora será un
opcional (recordemos que la primera Xbox
incluía disco duro, característica que incre-mentaba
el peso, el ruido, el consumo y el
costo del sistema). Este disco será fácil-mente
desmontable —para poder ser trasla-dado
a la consola de un amigo con los
juegos almacenados en él— y, en principio,
se ofrecerá con 20 GB de capacidad.
El avance de las partidas también podrá
ser almacenado en tarjetas de memoria
que van de 64 MB a 1 GB.
La placa de video que poseerá la consola
ya no será NVIDIA sino ATI, corriendo a
500 MHz con 10 MB integrados de DRAM.
Los controles de juego serán inalámbricos
l mercado de las consolas de jue-gos
mueve muchísimo dinero. Por
lo tanto, no debería sorprendernos
E
la importancia que le brindan a esta uni-dad
de negocio las principales empresas
que dominan el mercado (Sony, Micro-soft
y Nintendo). Sólo en el año 2004 se
vendieron un total de 25 millones de
consolas en todo el mundo.
Las consolas siempre se han caracteriza-do
por ser muy avanzadas tecnológica-mente,
al menos cuando son lanzadas al
mercado. En un principio, los gráficos
son increíbles, mucho mejores de lo que
puede verse en el mundo de las PCs. Pe-ro
luego, los nuevos modelos de CPU y
GPU que se ofrecen como partes inde-pendientes
para computadoras alcanzan
y superan holgadamente a las consolas.
Debido a que el ciclo de vida de una
consola de juegos es de alrededor de cin-co
años, podríamos establecer que las
consolas actuales ya son piezas antiguas.
Este año en particular presenciaremos el
lanzamiento de una nueva generación de
consolas. Cuando esta revista se encuen-tre
en los kioscos, Microsoft ya habrá
presentado internacionalmente la nueva
Xbox 360 en un programa especial emi-tido
por el canal MTV. Una semana des-pués,
Sony hará lo propio en la exposi-ción
de entretenimiento electrónico más
importante del mundo (E3), introducien-do
lo que será la PlayStation 3.
Mucho se ha escrito
en distintos sitios de la red respecto a
estos nuevos y extraordinarios juguetes
tecnológicos. También se vieron muchos
“posibles” diseños de ellos, aunque casi
todos eran fakes (falsos).
Las noticias verdaderas se mezclan con
las falsas, y hasta el sitio más creíble se
hace eco de rumores cuando no hay su-ficiente
información para presentar y la
expectativa es grande. Por lo pronto, pa-semos
en limpio la información oficial
que se maneja para las consolas de nue-va
generación más importantes.
PS3 Y SU EXTRAORDINARIO
CEREBRO
Sony, Toshiba e IBM han estado trabajan-do
de manera mancomunada para crear lo
que será el nuevo microprocesador de la
consola PlayStation 3, que, además, ten-drá
otra infinidad de usos.
Su nombre es Cell y ya se oficializaron
varias de sus características. El micropro-cesador
correrá a 4,6 GHz, lo cual no es
poco teniendo en cuenta lo difícil que le
está resultando a Intel sobrepasar la ba-rrera
de los 4 GHz para su familia de pro-cesadores.
Estará compuesto por 234 mi-llones
de transistores, casi el doble de la
cantidad que componen los últimos proce-sadores
Intel Pentium 4. En la próxima
edición podremos encontrar un artículo
muy completo que analiza esta auténtica
maravilla de la computación.
Por otro lado, respec-
XBOX, LA PRIMERA
CONSOLA DE MICROSOFT.
34 POWERUSR
10. (hasta cuatro por consola), aunque tam-bién
36
se permitirá la conexión de controles
con cable. Poseerá tres puertos USB 2.0 y
una unidad de DVD dual layer (y no un
tipo de unidad de nueva generación como
Blu-Ray como se había especulado en un
principio); los formatos soportados serán
DVD-video, DVD-ROM, DVD-R, DVD-RW,
CD-DA, CD-ROM, CD-R, CD-RW, WMA
CD, MP3 CD y JPEG Photo CD.
En resumen, las especificaciones de la
nueva consola de Microsoft no sorpren-dieron
demasiado a quienes venían si-guiéndole
la pista, ya que, básicamente,
eran las que se rumoreaban. Por otro la-do,
le empresa no innova demasiado en
ninguna característica técnica de hard-ware,
y aunque es cierto que tres micro-procesadores
PowerPC es bastante más
poder de CPU que el que posee la PC de
un gamer, es mucho menos de lo que
ofrecerá la nueva consola de Sony.
NINTENDO REVOLUTION
De la nueva consola de Nintendo es de
la que menos información oficial existe.
A ciencia cierta, sólo se conocen algunos
datos emitidos por el presidente de la fir-ma,
Satoru Iwata.
Lo que está claro es que la consola in-tentará
revolucionar la experiencia ga-ming
por medio del modo de controlar el
juego. Existieron rumores —que no fue-ron
confirmados— respecto a que el con-trol
incluiría un touch pad configurable
para facilitar el manejo de tipos
de juegos no muy populares al
día de hoy en las consolas (por
ejemplo, juegos que en la PCs
se suelen manejar con mouse,
como los de estrategia y los de
acción en primera persona).
Respecto a esto, Satoru Iwata
prefirió guardar silencio, ya que
argumentó que las interfaces de
usuario pueden ser imitadas fá-cilmente
por los competidores.
La realidad es que Nintendo Ga-meCube
ha vendido menos de lo
planeado, al menos en el mundo
occidental, y muchos pronosti-can
que Revolution será la pró-xima
DreamCast (consola de
SEGA que fue discontinuada por
vender menos unidades de las
esperadas). Sin embargo, habrá
que darle crédito a Nintendo,
que hace ya muchos años se en-cuentra
en este rubro y ha de-mostrado,
de sobrada manera,
que sabe cómo manejarse en
situaciones adversas.
ASI SE VE LA CONSOLA
XBOX 360 DE MICROSOFT.
GLOSARIO DE TERMINOS
API (Application Programming Interface):
Interfaz definida por un programa o librería
por medio de la cual es posible acceder a
las funcionalidades que implementa.
Direct3D: Subsistema de DirectX,
encargado de crear gráficos en 3D en
tiempo real y de un modo eficiente.
DirectX: Conjunto de componentes
desarrollado por Microsoft para ser
utilizado en la creación de juegos y
aplicaciones multimedia de alto
desempeño. Haciendo uso de esta
herramienta, podremos crear gráficos
2D y 3D; sonidos, música y efectos; y
aplicaciones de red, como los juegos
multijugador, además de manejar
dispositivos de entrada como teclado,
mouse, joystick, volante, gamepad, etc.
E3 (Electronic Entertainment Expo):
Exposición anual de entretenimiento
electrónico realizada exclusivamente para
medios periodísticos, que se lleva a cabo
en los Estados Unidos. En este evento se
suelen presentar las novedades más
importantes del año en materia de juegos
y hardware relacionado.
GPU (Graphics Processing Unit):
Nombre que se le otorga al
microprocesador de la placa de video.
HLSL (High-Level Shader Language):
Lenguaje de alto nivel que permite
especificar el programa (shader) que
ejecutará una GPU programable. Dicho
programa también podría ser escrito en
lenguaje ensamblador (del GPU), pero esto
suele ser más complejo y se relaciona más
fuertemente a una arquitectura específica.
Juegos AAA: Juegos que fueron creados
con un gran presupuesto y poseen alta
calidad de producción. Se distribuyen de
manera masiva por los canales de venta
tradicionales (mostrador, pre-venta) a un
precio superior a U$S 40 (por ejemplo,
Half-Life 2, Doom 3, Far Cry, The Sims).
OpenGL: Librería gráfica 3D creada por
Silicon Graphics Incorporated (SGI). Hoy en
día es un estándar abierto de la industria.
EL LIBRO DE PASES ESTA ABIERTO
ESTA ES LA GAMECUBE DE
NINTENDO.
Recordemos que NVIDIA
fue la encargada de
desarrollar la GPU de la
primera consola de
Microsoft (Xbox). Microsoft
también está desarrollando
su nueva consola, pero su
GPU ya no será de NVIDIA
sino de su competencia, ATI.
POWERUSR