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