20.04.2014 Views

Mundo 3D

iRS - Identi

iRS - Identi

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!