Está en la página 1de 10

Diego Ruiz | diego@dedalus-software.com.

ar

No es novedad escuchar que la tecnologa


avanza rpidamente, y este dicho, en el
mundo 3D, est lejos de ser una excepcin. Quien no haya jugado a
un videojuego en los ltimos dos aos se sorprender muchsimo al ver cunto
han cambiado. Y es que el mercado de los videojuegos mueve enormes sumas de
dinero, y estas cifras justifican inversiones gigantescas en desarrollo de tecnologa relacionada.
En 1992 salieron al mercado Wlfestein 3D y Alone in the Dark, dos exponentes de ttulos en tres
dimensiones que marcaran el comienzo de una poca. Claro que aquellos juegos distan mucho de lo que
podemos encontrar hoy en da en las consolas de ltima generacin, pero experimentar la sensacin que
nos otorgaban haca evidente que la era de los juegos 2D estaba llegando a su fin.
Desde el punto de vista tcnico, un juego 3D (si bien comparte muchas de las caractersticas de uno 2D)
es un mundo nuevo, especialmente en el apartado grfico. Los personajes ya no son sprites sino modelos
conformados por polgonos y recubiertos de texturas; los escenarios dejaron de ser mapas armados a partir
de pequeos bitmaps, y ahora son autnticas y complejas mallas usualmente ordenadas por algoritmos de
particionamiento espacial como el BSP (Binary Space Partitioning); y muchos elementos nuevos entran en
escena, como luces, materiales, sistemas de partculas 3D, etc.
En esta nota, introduciremos algunos de los conceptos ms importantes que maneja la tecnologa 3D y veremos
su aplicacin al desarrollo de videojuegos. Tambin analizaremos cules son los dispositivos que hoy se pueden
encontrar en el mercado y cules son las consolas de videojuegos que anhelaremos en unos pocos meses.
Pero, para lograrlo, vamos a ver un poco cmo fue avanzando este mercado, sumergindonos en la historia
reciente de los adaptadores de video.
24

POWERUSR

PLACAS DE VIDEO

UN POCO DE HISTORIA

LA IMPORTANCIA DE LAS PLACAS DE VIDEO EN NUESTRAS COMPUTADORAS SE HA IDO INCREMENTANDO CON EL


PASO DEL TIEMPO. EN UN PRINCIPIO, LAS MEJORAS ESTABAN RELACIONADAS CON LA CANTIDAD DE COLORES
QUE PODIA OFRECER EL DISPOSITIVO Y/O CON LA RESOLUCION. SIN EMBARGO, POCO A POCO, ESTOS ELEMENTOS
FUERON ADQUIRIENDO MAYOR FUNCIONALIDAD Y SE HAN HECHO FUNDAMENTALES PARA LOS JUEGOS.

uando las computadoras personales irrumpieron


en el mercado, el adaptador ms popular era el
MDA (un fabricante muy popular de aquel entonces era la empresa Hercules), un dispositivo que ofreca
una resolucin de 720x350 y era monocromtico.
Luego, lleg el momento del color. Al comienzo, con dispositivos modestos como el clsico CGA (Color Graphics
Adapter), que brindaba tan slo cuatro colores con una
resolucin de 320x200 (alcanzaba 640x480 en modo monocromtico). Y tras l, el dispositivo EGA (Enhanced
Graphics Adapter), que ofreca 16 colores en una ya decente resolucin de 640x350.
Sin embargo, muchas personas conocieron el color ya
con el popular VGA (Video Graphics Adapter) y sus consecuentes mejoradas versiones (SVGA, XGA, SXGA, etc.).
El adaptador VGA ofreca 256 colores en resolucin de
320x200; el SVGA (Super Video Graphics Adapter), por
su parte, dependa de la cantidad de memoria que posea
la placa. A partir de este punto, ingresamos en la historia
reciente de las placas de video.

LA MEMORIA DE VIDEO
Cuando las placas SVGA eran las ms populares dentro
de nuestros flamantes gabinetes mini tower, la caracterstica ms importante del dispositivo era la cantidad de
memoria que posea. A mayor memoria, mayor cantidad
de colores y mayor resolucin para deleitarnos la vista.
Con 1 MB de RAM en nuestra placa de video, podamos
llegar a una resolucin de 1024x768 con profundidad de
256 colores y ser el orgullo (nerd) de la cuadra. En aquel
entonces, la memoria de video se utilizaba exclusivamente como video buffer, es decir que era una representacin lgica de lo que se vea en pantalla.

Escribir un byte en ella significaba modificar el color de


un pixel en nuestro monitor.
Luego, los dispositivos de video comenzaron a ganar inteligencia, fruto de la necesidad de crear aplicaciones cada vez ms complejas (principalmente, juegos). Dejaron
de ser estpidos esclavos que slo lean una porcin de
su memoria para generar la seal correspondiente por el
puerto de salida al monitor.
Comenzaba la era de las placas aceleradoras 3D. Se denominaron vagamente aceleradoras, debido a que implementaban en mayor o menor medida operaciones en hardware
que, clsicamente, se hacan por software, razn por la cual
las aplicaciones 3D se ejecutaban con ms velocidad.

EL INICIO DE LA ERA 3D
En estas pginas pretendemos remitirnos ms a las generaciones y arquitecturas de dispositivos que a los modelos especficos que cada empresa saca al mercado cada seis meses. Sin embargo, existen hitos que son marcados especficamente por una u otra firma, y que no pueden quedar al
margen. Un ejemplo de lo expresado es el caso de la difunta
compaa 3Dfx Interactive (ver recuadro).
La primera generacin de procesadores de video inteligentes
consisti en la implementacin de un grupo de operaciones
prefijadas por medio de las cuales se procesaba una serie de
vrtices que luego finalizaran representando polgonos en
pantalla, materia prima de todo objeto 3D.
Dicha inteligencia fue vendida comercialmente a los usuarios finales por parte de NVIDIA bajo el nombre motor de
transformacin e iluminacin (Transformation and Lighting),
ms conocida popularmente por su abreviatura, TnL.
Para comprender un poco mejor cmo funciona este tipo
de dispositivos, es conveniente introducir el modo en que

ATARI 2600: PROGRAMAR SIN VIDEO BUFFER


La consola de juegos ms popular de Atari fue la gloriosa Atari 2600. Una de las razones
de su xito fue su bajo costo de fabricacin. En aquella poca, la memoria era muy
cara, y disponer de un video buffer en la consola incrementaba
notablemente su precio. El total de memoria con que contaba el
sistema para dibujar en pantalla era suficiente slo para
dos lneas de video. Los programadores deban
ingenirselas para escribir, de modo sincronizado, el
barrido vertical, y as crear en pantalla la imagen que el
juego necesitara en cada momento. La consola Atari 2600
tena un procesador 6507 de 8 bits (1,19 MHz), 128 bytes de RAM,
4 KB mximos de ROM, una resolucin en pantalla de 192x160
pixeles y 16 colores (4 simultneos en pantalla). El primer modelo
sali a la calle en 1978, y el ltimo el Atari 2600 Jr., en 1986 (aunque
recientemente se lanz, para los nostlgicos, una pequea consolita Atari
2600 dentro de su clsico joystick con diez juegos incluidos).
POWERUSR

LA VCS (VIDEO
COMPUTER SYSTEM)
ATARI 2600.

25

trabajan las libreras 3D ms populares, como es el caso de OpenGL y


Direct3D, ya que stas se desarrollan
paralelamente al hardware, a tal
punto que en algunos no es fcil determinar cul empuja a cul. De esto
hablaremos en las prximas pginas.

end). Para esto lanzan diversos modelos


que se ajusten a la necesidad y el bolsillo de cada usuario.
En el mercado high end, el modelo de
vanguardia de NVIDIA es la serie
GeForce 6800 (teniendo como mayor
exponente la versin Ultra), mientras que

PLACAS DE VIDEO
DE ULTIMA GENERACION

3DFX INTERACTIVE

Tanto la gigante californiana NVIDIA


como el contendiente canadiense ATI
Technologies se encuentran compitiendo ferozmente por liderar el mercado de los dispositivos de video. Por
un lado, esto es bueno para nosotros,
ya que existe una mejora continua, y
sin pausa, de la tecnologa grfica.
Por otro lado, dicha competencia muchas veces evita un desarrollo de
fondo de los nuevos dispositivos: con
la necesidad de salir en pocos meses
con un producto ms veloz que el
competidor, simplemente se busca por
fuerza bruta aumentar la cantidad de
procesamiento del dispositivo, aumentando la frecuencia de clock de
la GPU y/o aumentando la velocidad
a la cual trabajan las memorias, lo
cual significa mayor consumo, ms
calor, mayor tamao de placa, etc.
Ambas empresas diferencian a los
mercados de alto desempeo (high
end) de aquellos ms modestos (low

3Dfx Interactive fue una empresa


dedicada al desarrollo de dispositivos
de video 3D. Signo del tiempo en el
que vivimos, fue un ejemplo notorio de
lo efmero que es el xito; muchos no
la vieron venir. Se form en el ao
1994, y en 1998 ya era duea casi total
del mercado de aceleradoras 3D.
Lo curioso del caso es que 3Dfx, en un
principio, ofreca un dispositivo que
era un complemento para el adaptador
de video principal del sistema. Por lo
tanto, una PC con los modelos de
placas Voodoo Graphics o Voodoo2
requera una placa de video
convencional para realizar el trabajo
en escritorio de Windows. Adems,
slo aceleraba aplicaciones en
pantalla completa que hicieran uso de
su API de programacin (Glide) y
ofreca una profundidad de colores de
nicamente 16 bits.
Aun as, 3Dfx Interactive se convirti
en el lder del mercado y entr en la

ATI ofrece su lnea RADEON X850 (cuyo


tope es la poderosa XT Platinum Edition).
Si bien no es objeto de este artculo especificar con gran detalle los modelos de
estos fabricantes, en la tabla de esta
pgina podemos ver las opciones de mejor rendimiento propuestas por ambos.

fase ms compleja: mantenerse en la


cresta de la ola.
A mediados de 1999 sac al mercado
el modelo Voodoo3, que arremeta
contra la mayor cantidad de defectos
que se les poda achacar a los modelos
anteriores, pero ya no estaba solo:
NVIDIA poco a poco se converta en
una espada de Damocles y,
silenciosamente, ganaba mercado con
sus productos TNT y, luego, TNT2.
La Voodoo3 vendi relativamente bien,
pero no tanto como se esperaba. 3Dfx
intent recuperarse con una nueva
familia de productos: Voodoo4 y
Voodoo5. Pero en aquel momento,
NVIDIA haba finalizado su flamante
GeForce: la suerte estaba echada.
3Dfx Interactive tom malas
decisiones estratgicas y tuvo atrasos
considerables en el lanzamiento de
sus ltimos modelos. Finalmente, en
2000 fue comprada por NVIDIA, con lo
cual finaliz su ciclo de vida.

PLACAS DE ULTIMA GENERACION

EN ESTA FOTO SE PUEDE


OBSERVAR LA CLASICA TARJETA
DE VIDEO 3DFX VOODOO3 3000.
26

Caracterstica
Interfaz de memoria
Cantidad de memoria
Tipo de memoria
Velocidad memorias
Velocidad core
Fill rate
Vrtices por segundo
RAMDAC
Cantidad de pipelines
Cantidad de transistores
Vertex shader model
Pixel shader model
Tipo interfaz
Max. resolucin

NVIDIA 6800 ULTRA


256 bits
512 MB
GDDR3
1,1 GHz
400 MHz
6,4 Gpixels/s
600 MT/s
400 MHz
16
222 millones
3.0
3.0
AGP / PCIE
2048x1536

ATI RADEON X850 PE


256 bits
256 MB
GDDR3
1,1 GHz
540 MHz
8,6 Gpixels/s
810 MT/s
400 MHz
16
160 millones
2.0
2.0
AGP / PCIE
2048x1536

POWERUSR

C O M O S E FO R M A N L A S I M A G E N E S

DE POLIGONOS Y VERTICES
NUNCA SE PREGUNTARON COMO ES QUE SE PROCESAN LAS IMAGENES EN LA COMPUTADORA? LA GENERACION
DE UN MUNDO 3D EN UNA PANTALLA BIDIMENSIONAL COMO LA DEL MONITOR IMPLICA LA APLICACION DE
DISTINTAS TECNICAS REALIZADAS DIRECTAMENTE POR LA PLACA DE VIDEO. AQUI VEREMOS COMO FUNCIONAN.

uando estamos jugando un juego


3D de computadora o consola, todo
lo que vemos en escena son objetos
formados por polgonos (ms especficamente, tringulos), los cuales, a su vez, se
encuentran formados por vrtices.
Cada vrtice de un objeto en particular
(por ejemplo, un personaje del juego) est
definido en un espacio local a dicho objeto; es decir que posee un centro (0, 0, 0)
relativo a s mismo e independiente del
origen del mundo donde finalmente ser
inmerso. Como es posible inferir, existe
una conversin de un espacio a otro que
alguien debe realizar; al mismo tiempo,
todos los vrtices debern ser reorientados
dentro de una escena para que sta sea
visualizada desde un punto en particular
(como si se tratara del ojo de una cmara). Entonces, se definen ciertos lineamientos con los cuales se procesarn los
vrtices y se facilitar la operacin con
ellos en los usos ms comunes.
El pipeline prefijado establece (como se
puede apreciar en la figura de la pgina
30) una serie de operaciones que se realizarn sobre cada vrtice entrante (de cada
tringulo, de cada objeto del juego).

modelo al espacio del mundo en el cual


trabajamos. La transformacin de mundo puede incluir traslaciones, rotaciones
y escalamientos.
La matriz de vista: esta segunda matriz
reubica todos los objetos en funcin de
un punto de visualizacin especificado.
La matriz de proyeccin: especifica,
principalmente, la escala y la perspectiva adoptadas. Esta matriz determinar,
tambin, cunto vemos de la escena, es
decir, el volumen de visualizacin.

Es importante entender que el uso de


matrices es un recurso matemtico creado para simplificar la manipulacin de
vrtices. Con ellas es muy sencillo modificar la posicin, la orientacin y la
escala de stos.
Una vez que el vrtice ha sido procesado, si se mantiene dentro del volumen
de visualizacin predefinido, pasar a
una segunda etapa: la rasterizacin.

ETAPA 2: LA RASTERIZACION
En la rasterizacin se pintan los vrtices, y para hacerlo se utiliza una ecuacin en la cual participan varios elementos, como el color del vrtice, las luces
de la escena que lo afectan, la normal
que especifica el vrtice en cuestin y el
material activo que corresponda. Luego,
se rellena todo el tringulo, realizando
una interpolacin de los colores de cada
vrtice que lo conforman.
Un objeto 3D tambin puede estar cubierto por una textura, que es, bsicamente, un mapa de bits con ciertas propiedades. Las texturas, para poder ser
aplicadas a la geometra, deben estar
cargadas en memoria de video. De este
modo, ya no son slo utilizadas como
video buffer. Este uso secundario es,
hoy en da, la principal razn para optar
por tarjetas de mayor memoria: una placa de video con ms memoria podr albergar ms texturas, y de mejor calidad.
Las placas de ltima generacin poseen
256 MB o 512 MB de memoria de video,

ETAPA 1:
PROCESAMIENTO DE VERTICES
El pipeline se alimenta de vrtices. Cada
uno es convertido en coordenadas homogneas para, luego, poder ser multiplicado por tres matrices: la matriz de
mundo, la de vista y la de proyeccin.
Luego, la coordenada resultante es reescalada en funcin del punto de visualizacin especificado (en general, la pantalla completa o la ventana que estamos
utilizando como objetivo para el dibujado) y, en caso de quedar fuera del rea
de visualizacin, es eliminada.
Finalmente, el vrtice es transferido al
proceso de rasterizacin, donde ser dibujado en pantalla.
La matriz de mundo: la primera ma-

triz de mundo se utiliza para colocar el


objeto en la escena 3D. Realiza una
transformacin que va del espacio del
28

MODELO FORMADO CON VERTICES


QUE ESPECIFICAN COORDENADAS
DE TEXTURA.

EL MISMO MODELO DE LA
IZQUIERDA, PERO YA CON UNA
TEXTURA APLICADA.

POWERUSR

cifra que es el promedio, al da de hoy, de


la memoria principal en nuestros equipos.
Pero si bien el proceso de iluminar vrtices por hardware fue un gran avance, al
poco tiempo dej de ser suficiente. Se
precisaba una flexibilidad mayor, pero...
cmo saber qu operaciones implementar en una GPU, si las necesidades podran ser distintas? Pues permitiendo que
cada desarrollador escribiera el programa
que manipulara los vrtices a su gusto.
Por ejemplo, cmo podramos implementar que un conjunto de vrtices se
moviera dentro de un rango de posiciones en funcin del tiempo? Utilizando el
pipeline prefijado, deberamos modificar
el valor de cada vrtice antes de ingresar
en l, o modificar la matriz de mundo
por cada vrtice que tuviera un valor especfico. Ambos mtodos son factibles
pero poco eficientes, pues requieren un
uso notable de la CPU. Mejor sera poder
hacer la cuenta del clculo del desplazamiento de la posicin de cada vrtice en
el pipeline y, mejor an, liberar a la CPU
de dicho clculo.
El pipeline programable nos permite especificar (mediante un lenguaje especializado para tal fin) un programa que

procese el vrtice en funcin de sus necesidades. Estos pequeos programas reciben el nombre de shaders; ms especficamente, cuando trabajan con vrtices,
vertex shaders, y cuando lo hacen con
pixeles, pixel shaders.

PIXEL Y VERTEX SHADERS


Los dispositivos de video con pixel y
vertex shaders son moneda corriente en
el mercado de las placas de video actuales; casi todos los juegos AAA modernos
hacen uso de esta caracterstica de algn
modo, y hasta algunos, recientemente,
comenzaron a exigir que esta caracterstica estuviera presente para poder iniciar
su ejecucin.
La caracterstica bsica de esta nueva
tecnologa consiste en una GPU programable. Con los vertex shaders es posible

especificar un pequeo programa que tome al vrtice entrante y lo manipule a su


gusto. De este modo, se pueden efectuar
clculos aritmticos arbitrarios tomando
como materia prima vrtices (en el caso
de vertex shaders) y pixeles (en el caso
de pixel shaders).
La versin 9.0c de DirectX permite utilizar
la versin 3.0 del set de instrucciones de
pixel y vertex shaders. En ella se incorpora
mayor cantidad de instrucciones aritmticas, mayor cantidad de registros y mayor
cantidad mxima de instrucciones por
programa que en versiones anteriores.
DirectX 9 puede emular el uso de vertex
shaders cuando el hardware necesario no
est presente, mediante una capa de emulacin va software. Claro que lo hace con
una performance notablemente inferior a
la implementacin en GPU.

VERSIONES DE SHADERS EN DIRECTX


DirectX 8.0: primer soporte a pixel y vertex shaders. Se soportaron las versiones

1.0 y 1.1 de pixel shader, y las versiones 1.0 y 1.1 de vertex shader.
DirectX 8.1: no hubo cambios en vertex shaders. Se agreg soporte para versiones

1.2, 1.3 y 1.4 para pixel shaders.


DirectX 9.0: se agreg soporte para pixel y vertex shaders 2.0.
DirectX 9.0c: se agreg soporte para pixel y vertex shaders 3.0.

VERTEX SHADERS: REGISTROS DE ENTRADA


Registro
a0
c#
v#
r#
b#
i#
aL
p0

Descripcin
Direccionamiento
Constante (tipo float)
Entrada
Temporal
Constante (tipo bool)
Constante (tipo int)
Contador de bucle
Predicado

Cantidad en VS 1.1
1
96 (como mnimo)
16
12
-

Cantidad en VS 2.0
1
256 (como mnimo)
16
12
16
16
1
-

Cantidad en VS 2.x
1
256 (como mnimo)
16
12 (como mnimo)
16
16
1
1

Cantidad en VS 2.0
1
1
1
2 (difuso y especular)
8

Cantidad en VS 2.x
1
1
1
2 (difuso y especular)
8

VERTEX SHADERS: REGISTROS DE SALIDA


Registro
oPos
oFog
oPts
oD#
oT#

Descripcin
Posicin
Niebla
Tamao punto
Color
Coordenadas de textura

Cantidad en VS 1.1
1
1
1
2 (difuso y especular)
8

* Nota: En la versin 3.0 de VS los registros de salida son 12 y son generales; se dej de lado la especificacin
del tipo, y ahora el sistema es ms flexible y pueden utilizarse segn conveniencia.

POWERUSR

29

OPERADORES PROGRAMABLES

LOS SHADERS
SIEMPRE HABLAMOS DE LOS SHADERS Y DE SU IMPORTANCIA EN LAS TARJETAS DE VIDEO ACTUALES.
LO QUE NUNCA COMENTAMOS ES COMO SE COMPONEN INTERNAMENTE Y DE QUE MANERA LOS
UTILIZAN LOS PROGRAMADORES DE JUEGOS PARA CREAR SUS MARAVILLAS. EN ESTAS PAGINAS NOS
METEREMOS DENTRO DE LOS PIXEL Y VERTEX SHADERS, Y LOS MOSTRAREMOS EN DETALLE.

os vertex shaders operan sobre


vrtices o, mejor dicho, la salida
de la operacin de un vertex
shaders es un vrtice en formato homogneo, listo para ser enviado a la etapa
de clipping y reescalado.
Un vertex shader no puede crear ni destruir geometra (no puede crear vrtices ni
tampoco puede eliminarlos). Opera con un
vrtice a la vez y puede manipular la geometra existente modificando propiedades
del vrtice manipulado.
Un pixel shader especifica el color en un
pixel; usualmente, recibe como entrada
coordenadas de textura.
Existe cierta independencia en el uso de
pixel o vertex shaders. Por lo general, los
vertex shaders hacen modificaciones en la
geometra, como ciertas transformaciones
para crear efectos especficos (como pequeas olas en el agua), mientras que los
pixel shaders se utilizan, principalmente,
para realizar clculos arbitrarios de iluminacin (como la iluminacin por pixeles
tan frecuente en los juegos actuales, como
Doom 3 y Far Cry).

VERTEX SHADERS
Los vertex shaders podran reemplazar al
motor de transformacin e iluminacin
prefijado que exista en el pipeline tradicional utilizado por OpenGL o Direct3D.
Nuestra aplicacin podra utilizar ambos
para distintos vrtices, pero no para el
mismo, ya que se excluyen mutuamente
(ver figura del pipeline completo). Debido
a que los vertex shaders reemplazan al

motor TnL, se infiere que deberan producir la misma salida; en otras palabras, el
vertex shader recibir un vrtice y deber
entregar un vrtice, en una relacin estricta de uno a uno; no podr cambiar la
cantidad final de vrtices.
La entrada a un vertex shader es uno o
ms vrtices e informacin de estados del
pipeline (existen estados de renderizacin
que pueden modificar el modo en que se
produce la salida). La salida es la posicin
en espacio de recorte (clipping) y el resto
de la informacin usual del vrtice en
funcin de su formato (color, coordenadas
de textura, etc.).

ARQUITECTURA
DE LOS VERTEX SHADERS
El vertex shader es un programa que tomar como entrada un vrtice, y dejar
a la salida:
Un vrtice en espacio de recorte
Un color de vrtice (en funcin del

formato de vrtice)
Coordenadas de texturas (en funcin
del formato de vrtice)
Intensidad de niebla (opcionalmente)
Tamao de punto (en funcin del formato de vrtice)
Como mnimo, el programa del shader
deber tomar el vrtice y realizar una
transformacin que lo lleve de espacio
local a espacio de recorte. Luego, el vrtice contendr informacin opcional que
estar de acuerdo con el formato de vr-

tice y el estado de renderizacin.


Veamos slo un poco de cdigo de un
vertex shader que realice esta operacin
mnima:
dp4
dp4
dp4
dp4

oPos.x, v0, c0
oPos.y, v0, c1
oPos.z, v0, c2
oPos.w, v0, c3

En este caso, hemos empleado lenguaje


ensamblador de la GPU, y no, HLSL.
Quienes conozcan algo de ensamblador
para cualquier microprocesador notarn
una sintaxis familiar: un mnemnico representando la operacin por realizar, un
componente sobre el cual se realiza la
operacin (en este caso, componentes de
un registro de salida) y luego argumentos de la operacin.
dp4: operacin por realizar, significa
producto punto de cuatro componentes.
oPos: registro de salida del vrtice (es
un vector de cuatro componentes)
v0: registro de entrada, desde donde tomamos el vrtice con el cual trabajamos.
c0..c3: constantes (vectores de cuatro
componentes cada una de ellas).

Esquematizando la operacin, lo que hemos hecho es lo que se puede apreciar en


la figura de la pgina siguiente. Es decir,
hemos multiplicado el vrtice entrante por
una matriz construida a partir de cuatro
vectores constantes. La salida fue colocada en un registro de salida.

EL PIPELINE COMPLETO
Primitiva de
teselacin de
alto nivel

Pixel shader

Vertex shader
Recorte y
reescalado

Informacin de
vrtices

30

Motor de
iluminacin y
transformacin
(TnL)

Blending de
niebla

Testeo de
Alpha, Stencil y
Depth

Frame buffer
blending

Multitexturado
de DirectX 6/7

POWERUSR

PIXEL SHADERS
Los pixels shaders reemplazan las operaciones de multitexturado fijas del pipeline prefijado. Para entender mejor cmo funcionan los pixels shaders hay que comprender el modo de funcionamiento dual que posee el pipeline de texturas. Tradicionalmente, dos caminos corren en paralelo manejando operaciones de color (vector pipe) y alpha (escalar pipe). El resultado de
estas operaciones se mezcla al final, y termina en la especificacin de un color con componente alpha.
Dentro del pixel shader se pueden realizar operaciones aritmticas (con valores de coordenadas de texturas) y operaciones con
texturas (haciendo uso de una coordenada de textura). De todos
modos, ms all de la operacin realizada, la salida debe ser
una estructura de color con componentes RGBA (Red, Green,
Blue, Alpha: Rojo, Verde, Azul y Alpha).

ARQUITECTURA DE LOS PIXEL SHADERS


Un pixel shader toma un color como entrada, una textura de
coordenada (o ms) y una textura activa, y produce un valor
RGBA de salida. Es posible ignorar los estados de etapas de
texturas que estn fijados. De hecho, es posible ignorar las
coordenadas de texturas especificadas y fijar el color de manera arbitraria. Lo que podr cambiar el color fijador de lo que
veremos en pantalla ser el estado del render state relacionado
a la niebla (recordemos que blending de niebla es una etapa
posterior al pixel shader).
Por lo general, un programa de pixel shaders es ms pequeo
que uno de vertex shaders, simplemente, debido a las operaciones que suelen entrar en juego.

HLSL
Los dispositivos de video programables que existen hoy son las
GeForce#3 y superiores (exceptuando la GeForce#4 MX), y las
ATI Radeon 8500 y superiores.
Sin embargo, la capacidad de programacin de todas estas placas est fuertemente relacionada con el modo por el cual se accede a estas funcionalidades, por medio de la interfaz de vertex
shaders y pixel shaders de DirectX 8 (DX8) y DirectX 9 (DX9).

VERTEX SHADER

La interfaz ms general de las dos es la de vertex shaders. Por


medio de ella, el programador podr usar instrucciones para
especificar las operaciones que realizar el dispositivo de video
con los vrtices entrantes.
La interfaz de pixel shaders es un poco ms complicada y posee ciertas restricciones que hay que tener en cuenta. La ms
importante es que los pixel shaders slo pueden ejecutarse en
un hardware que los soporte; por lo tanto, si deseamos crear
juegos que utilicen esta funcionalidad y que, al mismo tiempo,
funcionen en equipos no programables, deberemos realizar ms
de un flujo de ejecucin.
Hasta el momento, para hacer uso de estas facilidades el programador deba escribir el cdigo en el lenguaje ensamblador de la
placa de video sobre un procesador de textos. Naturalmente (y como era de esperar), comenzaron a implementarse herramientas que
ayudan al programador en esta tarea: entornos que facilitan la
creacin de efectos y lenguajes de alto nivel que luego son traducidos al lenguaje ensamblador de la placa de video en cuestin.

PROGRAMACION EN ENSAMBLADOR
En una poca, los juegos se programaban en lenguaje ensamblador. Este lenguaje consiste en instrucciones de procesador de bajo nivel, que luego se traducen en cdigo binario y, finalmente,
son ejecutadas por el microprocesador. Programar directamente
en el lenguaje que entiende la mquina posee muchas ventajas:
tendremos control absoluto del modo en que se administran los
registros (posiciones de memoria que se pueden leer y escribir
de manera muy veloz, porque son locales al microprocesador).
La gran desventaja es que programar en ensamblador es complicado. Veamos un programa sencillo en este lenguaje:
mov AX, algn_nmero
cmp AX, 5
je true
mov CX, 2

PIXEL SHADER

registros de vrtices

v0

v15

v0

a0

r0
r1

Unidad de
procesamiento
de vrtices

registros
temporales

registro de
direcciones
(VS 1.1 y
superiores)

oDn

Etapa 0

c1

constantes

oT

Etapa 1

t1

Etapa 2

t2

Etapa 3

t3

c95

registros de salida
REGISTROS DE ENTRADA, TEMPORALES Y DE SALIDA,
QUE SE PUEDEN UTILIZAR EN UN VERTEX SHADER.

registros
temporales

v1
c0

t0

c0

r11

POWERUSR

; asigna un nmero cualquiera al


registro AX
; compara el contenido del registro AX
con el nmero 5
; si la comparacin fue existosa salta
a la etiqueta true
; asigna el nmero 2 al registro CX

constantes
c1
Unidad de
procesamiento
de pxeles
c7

r0
r1

pixel de salida

REGISTROS DE ENTRADA, TEMPORALES Y DE SALIDA


QUE PUEDEN UTILIZARSE EN UN PIXEL SHADER.
31

jmp end
true:
mov CX, 1
end:

; salta a la etiqueta end


; asigna el nmero 1 al registro CX

El mismo programa, en lenguaje C, se escribira del siguiente modo:


a = algn_nmero;
if (a == 5
b = 1;
b = 2;

// asigno un nmero cualquiera


a la variable a
// es igual a 5?
// asigno el nmero 1 a la variable b
// asigno el nmero 2 a la variable b

Naturalmente, el cdigo escrito en C es mucho ms legible que


el escrito en cdigo ensamblador. De hecho, el cdigo ensamblador requiere de una documentacin mucho ms precisa, ya
que entender cul es el propsito de un trozo de cdigo, sin estar contextualizado en el problema, resulta muy complicado.
Otra ventaja de C es que el lenguaje no est atado a ningn
microprocesador en particular. Existe un compilador que se encarga de realizar dicha tarea. Por lo tanto, podemos escribir cdigo C y luego recompilarlo en distintas plataformas.

HIGH-LEVEL SHADER LANGUAGES


Se podra decir que HLSL es al ensamblador de los VS/PS (vertex shaders/pixel shaders) lo que el lenguaje C es al ensamblador de la CPU. Veamos qu cdigo de VS se requiere para realizar una transformacin de vrtices sencilla:
mov r0, c0
mov r1, v2
dp3 r2, r0, r1
mov r3, c1
max r0, r2, r3
mov oD0, r0

; copia el registro constante c0 al temporal r0


; copia el registro entrante v2 al temporal r1
; realiza un dot product entre los registros r0
y r1 y coloca el resultado en r2
; copia registro constante c1 al temporal r3
; clampea valor de r0 al mximo entre r2 y r3
; escribe |en registro de salida de color oD0 el
valor del registro temporal r0

Si estamos codificando en ensamblador de Vertex Shader/Pixel


Shader, usualmente estaremos ms en contacto con las limitaciones de hardware, ya que la programacin est estrechamente
relacionada a las caractersticas del dispositivo. Codificando en
alto nivel, estas limitaciones podran saltearse e incurrir fcilmente en errores de programacin.
El lado negativo es similar al existente en la programacin tradicional en alto nivel contra la programacin en ensamblador
de CPU, y es la optimizacin. Un compilador podr traducir
nuestro cdigo no de la mejor manera posible, cuando una multiplicacin y una adicin expresada en HLSL podran ser traducidas a instrucciones de multiplicacin (mul) y adicin (add) independientes o, tal vez, a una sola instruccin que realizara
ambos procesos en una sola operacin (mad). Esta situacin redundar en mayor uso de GPU del necesario y, finalmente, en
menor cantidad de cuadros por segundo para nuestro juego.

RENDERMONKEY
RenderMonkey es una aplicacin creada por la compaa diseadora de procesadores grficos ATI Technologies que puede descargarse libremente desde el sitio oficial. Es importante destacar
que no es un lenguaje, como suele pensarse comnmente, sino
una herramienta pensada para ayudar a los artistas y/o programadores a crear shaders.
Si alguien desea crear un shader y verlo en accin, deber
crear un framework que realice la carga de la geometra, texturas, pase las constantes al shader, etc. Todo este trabajo es realizado por RenderMonkey, por lo que quien quiera crear un
efecto deber concentrarse solamente en su programacin especfica del vertex y pixel shader, y no, en aplicaciones auxiliares. Adems, la aplicacin permite modificar elementos viendo
su consecuencia en tiempo real.
Si quieren obtener ms informacin respecto a RenderMonkey,
recomiendo visitar www.ati.com/developer/rendermonkey.

Con HLSL, en cambio, deberamos escribir:


float4 lightdirection = constant[0];
OUT.Diffuse = max(dp3(IN.Normal, lightdirection), 0 );

Nuevamente, el lenguaje de alto nivel permite realizar las mismas operaciones en menos pasos, mantener la legibilidad en
niveles razonables y desprenderse de caractersticas especficas
del hardware. Claro que en lo que respecta a la legibilidad, el
problema se reduce un poco debido a que los programas de
VS/PS no suelen poseer muchas lneas de cdigo.
Lo que se debe tener en cuenta es que, a pesar de estar realizando
una programacin en un nivel ms alto, las limitaciones de hardware siguen existiendo. En versiones de VS inferiores a la 2, la
cantidad de instrucciones mxima y la cantidad de registros pueden ser un inconveniente; adems, no existen instrucciones de
control de flujo de ejecucin (condicionales, bucles, etc.).
32

EN ESTA CAPTURA DE PANTALLA VEMOS A RENDERMONKEY,


LA HERRAMIENTA PARA CREAR SHADERS, EN ACCION.
POWERUSR

EL FUTURO CERCANO

LAS CONSOLAS DE JUEGOS


DE PROXIMA GENERACION
ESPECIALMENTE EN NORTEAMERICA, LAS CONSOLAS DE JUEGOS SON MAS POPULARES QUE LAS PC, NO SOLO POR
SU PODER DE PROCESAMIENTO, SINO TAMBIEN POR SU ECONOMIA Y COMODIDAD. POR ESO, CON EL ADVENIMIENTO
DE LAS NUEVAS CONSOLAS, NO PODIAMOS DEJAR DE MENCIONAR LO QUE SE VIENE EN ESTE AMBITO

l mercado de las consolas de juegos mueve muchsimo dinero. Por


lo tanto, no debera sorprendernos
la importancia que le brindan a esta unidad de negocio las principales empresas
que dominan el mercado (Sony, Microsoft y Nintendo). Slo en el ao 2004 se
vendieron un total de 25 millones de
consolas en todo el mundo.
Las consolas siempre se han caracterizado por ser muy avanzadas tecnolgicamente, al menos cuando son lanzadas al
mercado. En un principio, los grficos
son increbles, mucho mejores de lo que
puede verse en el mundo de las PCs. Pero luego, los nuevos modelos de CPU y
GPU que se ofrecen como partes independientes para computadoras alcanzan
y superan holgadamente a las consolas.
Debido a que el ciclo de vida de una
consola de juegos es de alrededor de cinco aos, podramos establecer que las
consolas actuales ya son piezas antiguas.
Este ao en particular presenciaremos el
lanzamiento de una nueva generacin de
consolas. Cuando esta revista se encuentre en los kioscos, Microsoft ya habr
presentado internacionalmente la nueva
Xbox 360 en un programa especial emitido por el canal MTV. Una semana despus, Sony har lo propio en la exposicin de entretenimiento electrnico ms
importante del mundo (E3), introduciendo lo que ser la PlayStation 3.
Mucho se ha escrito

en distintos sitios de la red respecto a


estos nuevos y extraordinarios juguetes
tecnolgicos. Tambin se vieron muchos
posibles diseos de ellos, aunque casi
todos eran fakes (falsos).
Las noticias verdaderas se mezclan con
las falsas, y hasta el sitio ms creble se
hace eco de rumores cuando no hay suficiente informacin para presentar y la
expectativa es grande. Por lo pronto, pasemos en limpio la informacin oficial
que se maneja para las consolas de nueva generacin ms importantes.

PS3 Y SU EXTRAORDINARIO
CEREBRO
Sony, Toshiba e IBM han estado trabajando de manera mancomunada para crear lo
que ser el nuevo microprocesador de la
consola PlayStation 3, que, adems, tendr otra infinidad de usos.
Su nombre es Cell y ya se oficializaron
varias de sus caractersticas. El microprocesador correr a 4,6 GHz, lo cual no es
poco teniendo en cuenta lo difcil que le
est resultando a Intel sobrepasar la barrera de los 4 GHz para su familia de procesadores. Estar compuesto por 234 millones de transistores, casi el doble de la
cantidad que componen los ltimos procesadores Intel Pentium 4. En la prxima
edicin podremos encontrar un artculo
muy completo que analiza esta autntica
maravilla de la computacin.
Por otro lado, respec-

XBOX, LA PRIMERA
CONSOLA DE MICROSOFT.

34

LA PLAYSTATION 3? NO! UN CLASICO


DISEO FALSO DE LOS VARIOS QUE
CIRCULAN POR LA RED.

to a la placa de video que poseer la


PlayStation 3, NVIDIA anunci en diciembre de 2004 que firm un acuerdo
con Sony para encargarse de desarrollar
la nueva GPU de la consola, que poseer
una variante de la tercera generacin de
sus aceleradoras grficas.

XBOX 360
La nueva consola de Microsoft utilizar
tres microprocesadores IBM PowerPC corriendo a 3,2 GHz, cada uno con dos hilos
de ejecucin, 32 KB de cach L1 de datos
y 32 KB de instrucciones; los tres compartirn una cach de 1 MB del tipo L2.
La consola poseer 512 MB RAM del tipo
GDDR3, y el disco rgido ahora ser un
opcional (recordemos que la primera Xbox
inclua disco duro, caracterstica que incrementaba el peso, el ruido, el consumo y el
costo del sistema). Este disco ser fcilmente desmontable para poder ser trasladado a la consola de un amigo con los
juegos almacenados en l y, en principio,
se ofrecer con 20 GB de capacidad.
El avance de las partidas tambin podr
ser almacenado en tarjetas de memoria
que van de 64 MB a 1 GB.
La placa de video que poseer la consola
ya no ser NVIDIA sino ATI, corriendo a
500 MHz con 10 MB integrados de DRAM.
Los controles de juego sern inalmbricos
POWERUSR

(hasta cuatro por consola), aunque tambin se permitir la conexin de controles


con cable. Poseer tres puertos USB 2.0 y
una unidad de DVD dual layer (y no un
tipo de unidad de nueva generacin como
Blu-Ray como se haba especulado en un
principio); los formatos soportados sern
DVD-video, DVD-ROM, DVD-R, DVD-RW,
CD-DA, CD-ROM, CD-R, CD-RW, WMA
CD, MP3 CD y JPEG Photo CD.
En resumen, las especificaciones de la
nueva consola de Microsoft no sorprendieron demasiado a quienes venan siguindole la pista, ya que, bsicamente,
eran las que se rumoreaban. Por otro lado, le empresa no innova demasiado en
ninguna caracterstica tcnica de hardware, y aunque es cierto que tres microprocesadores PowerPC es bastante ms
poder de CPU que el que posee la PC de
un gamer, es mucho menos de lo que
ofrecer la nueva consola de Sony.

NINTENDO REVOLUTION
De la nueva consola de Nintendo es de
la que menos informacin oficial existe.
A ciencia cierta, slo se conocen algunos
datos emitidos por el presidente de la firma, Satoru Iwata.
Lo que est claro es que la consola intentar revolucionar la experiencia gaming por medio del modo de controlar el
juego. Existieron rumores que no fueron confirmados respecto a que el control incluira un touch pad configurable

para facilitar el manejo de tipos


de juegos no muy populares al
da de hoy en las consolas (por
ejemplo, juegos que en la PCs
se suelen manejar con mouse,
como los de estrategia y los de
accin en primera persona).
Respecto a esto, Satoru Iwata
prefiri guardar silencio, ya que
argument que las interfaces de
usuario pueden ser imitadas fcilmente por los competidores.
La realidad es que Nintendo GameCube ha vendido menos de lo
planeado, al menos en el mundo
occidental, y muchos pronostican que Revolution ser la prxima DreamCast (consola de
SEGA que fue discontinuada por
vender menos unidades de las
esperadas). Sin embargo, habr
que darle crdito a Nintendo,
que hace ya muchos aos se encuentra en este rubro y ha demostrado, de sobrada manera,
que sabe cmo manejarse en
situaciones adversas.

GLOSARIO DE TERMINOS
API (Application Programming Interface):

Interfaz definida por un programa o librera


por medio de la cual es posible acceder a
las funcionalidades que implementa.
Direct3D: Subsistema de DirectX,

encargado de crear grficos en 3D en


tiempo real y de un modo eficiente.
DirectX: Conjunto de componentes
desarrollado por Microsoft para ser
utilizado en la creacin de juegos y
aplicaciones multimedia de alto
desempeo. Haciendo uso de esta
herramienta, podremos crear grficos
2D y 3D; sonidos, msica y efectos; y
aplicaciones de red, como los juegos
multijugador, adems de manejar
dispositivos de entrada como teclado,
mouse, joystick, volante, gamepad, etc.
E3 (Electronic Entertainment Expo):

Exposicin anual de entretenimiento


electrnico realizada exclusivamente para
medios periodsticos, que se lleva a cabo
en los Estados Unidos. En este evento se
suelen presentar las novedades ms
importantes del ao en materia de juegos
y hardware relacionado.
GPU (Graphics Processing Unit):
Nombre que se le otorga al
microprocesador de la placa de video.
HLSL (High-Level Shader Language):

ASI SE VE LA CONSOLA
XBOX 360 DE MICROSOFT.

ESTA ES LA GAMECUBE DE
NINTENDO.

EL LIBRO DE PASES ESTA ABIERTO


Recordemos que NVIDIA
fue la encargada de
desarrollar la GPU de la
primera consola de
Microsoft (Xbox). Microsoft
tambin est desarrollando
su nueva consola, pero su
GPU ya no ser de NVIDIA
sino de su competencia, ATI.

36

Lenguaje de alto nivel que permite


especificar el programa (shader) que
ejecutar una GPU programable. Dicho
programa tambin podra ser escrito en
lenguaje ensamblador (del GPU), pero esto
suele ser ms complejo y se relaciona ms
fuertemente a una arquitectura especfica.
Juegos AAA: Juegos que fueron creados
con un gran presupuesto y poseen alta
calidad de produccin. Se distribuyen de
manera masiva por los canales de venta
tradicionales (mostrador, pre-venta) a un
precio superior a U$S 40 (por ejemplo,
Half-Life 2, Doom 3, Far Cry, The Sims).
OpenGL: Librera grfica 3D creada por
Silicon Graphics Incorporated (SGI). Hoy en
da es un estndar abierto de la industria.

POWERUSR

También podría gustarte