Introducción
Hace aproximadamente un año, una compañía llamada 3Dfx
Interactive anunció su nuevo chipset 3D que cambiaría el concepto
que los usuarios de PCs tienen de los gráficos en 3D. Antes del
lanzamiento de esta tarjeta de 3Dfx, no había ninguna alternativa
razonablemente económica para disponer de gráficos 3D de altas
prestaciones en un ordenador de uso doméstico. Los gráficos de alto
nivel solo se podían encontrar en caras estaciones de trabajo como las
de SGI y Sun, con un costoso hardware especializado. Los fabricantes
de tarjetas de video para PC, como Number Nine, Diamond Multimedia y
Matrox, tenían tarjetas asequibles en el mercado con reconocidas
capacidades 3D, pero eran muy limitadas en comparación con el hardware
costoso de las estaciones de trabajo.
Con el lanzamiento de la tarjeta de 3Dfx, bautizada como la
Voodoo 3Dfx, los gráficos 3D de altas prestaciones se hicieron
asequibles para el usuario medio. El rendimiento de este chip es
indudablemente un punto de refenrencia en la infinita tarea de traer los
gráficos de alto nivel al ordenador de sobremesa. Hasta ahora, la
capacidad 3D de otras tarjetas de video estaban limitados al
z-buffering y al sombreado gouraud (algunas menos primitivas soportaban
un mapeado limitado de texturas) pero estas prestaciones estaban con
frecuencia limitadas a unas determinadas resoluciones o a una
profundidad de color. Desafortunadamente, se necesitaba muchísimo la
intervención de la CPU para conseguir poner en marcha alguna de estas
prestaciones para que funcione con alguna aplicación.
Limitaciones del 3D
en las tarjetas de video
Aquí tenemos un ejemplo de cómo una tarjeta de video podría
quedar limitada en sus prestaciones. Podría asegurar que soporta
z-buffering, pero sólo puede tener código en los video drivers que
almacena las the z-coordinates of pixels en areas de memoria de video
que de otro modo no se usarían. Este z-buffering solamente podría ser
usado a bajas resoluciones y con poca profundidad de color debido a
que los modos superiores necesitan mucha más memoria. En los modos
superiores no habría suficiente memoria para permitir almacenar las
coordenadas-z. Incluso con el almacenamiento de estas coordenadas en
memoria, la aplicación aún necesitaría usar la CPU para comparar las
coordenadas-z de nuevos pixels con el contenido de la memoria de
video. Ya que estas comparaciones requieren una importante capacidad
de proceso en la CPU para llevarlo a cabo, la capacidad de z-buffering
en la tarjeta de video no está en realidad eliminando el clásico
cuello de botella del z-buffer. Si esto le suena demasiado complejo no
se preocupe... en realidad es sólo una explicación técnica de por qué
ni siquiera es comparable la tarjeta 3Dfx con aquellas tarjetas que
aseguran ofrecer soporte 3D.
Prestaciones de la tarjeta
Voodoo 3Dfx
Es suficiente decir que la Voodoo 3Dfx tiene capacidades 3D muy
avanzadas que no ha conseguido ningún otro fabricante por ese
precio. El chip se jacta de ofrecer prestaciones 3D tales como
sombreado gouraud,buffer de profundidad (tanto z-buffering como
w-buffering), mezclado-alpha, niebla, chroma-keying, y
dithering. Tambien es capaz de proveer verdadera correccion de perspectiva en
el mapeo de texturas, mipmapping trilineal, iluminacion de texturas,
correccion de sub-pixeles y decompresion en el espacio de texturas.
Todas estas tareas se realizan en su
totalidad desde el hardware de la Voodoo sin prácticamente
intervención de la aplicación.
La aplicación es únicamente responsable de preparar el entorno
gráfico 3D y las coordenadas. Actualmente la Voodoo no soporta la
inicialización de coordenadas, pero esto no es normalmente un problema
ya que las CPUs modernas pueden ofrecer amplia capacidad de proceso
para estos cálculos. Fíjese que aunque la próxima generación 3Dfx,
bautizada como Voodoo2, sí que tendrá esta capacidad e incluso con aún
más velocidad gráfica; los actuales modelos de pruebas de tarjetas de
video usando el chip Voodoo2 están rompiendo todos los records de
velocidad. Y más importante aún, la relación precio/prestaciones del
chip Voodoo actual es la característica más sobresaliente.
Limitaciones del chip
Voodoo 3Dfx
Desafortunadamente, el chip Voodoo 3Dfx también tiene por
supuesto sus limitaciones. La principal es que sólo puede hacer
rendering a pantalla completa, y que el chip no puede ser usado de
forma efectiva como único adaptador de video de un ordenador. Las
tarjetas de video que usen el chip 3Dfx necesitan tener otro adaptador
independiente trabajando junto a él. La tarjeta con el chip 3Dfx
trabaja codo con codo junto al otro adaptador. Funciona de forma que
el sistema operativo usa la tarjeta de video normal, pero cuando una
aplicación necesita hacer uso de la capacidad 3D, accede al driver de
la tarjeta para inicializarla. El 3Dfx entonces arranca y empieza a
dar servicio de acuerdo con las funciones Glide invocadas por la
aplicación.
En una configuración normal sin un adaptador 3Dfx, la tarjeta
tradicional se sitúa en su propia ranura de la placa madre, y con su
salida conectada al monitor donde visualiza el resultado. Tarjetas de
video 3Dfx tales como la Monster3D y Pure3D usan un sistema
"pass-through" que permite a ambas tarjetas, la tradicional y la 3Dfx,
usar el mismo monitor. Una configuración de este tipo consiste en
tener ambas tarjetas de video en sendas ranuras de la placa madre. La
salida de la tarjeta convencional se conecta a la entrada de la 3Dfx a
través de un cable pass-through normalmente incluido con la 3Dfx. En
los modos normales de funcionamiento, la tarjeta convencional produce
su señal normal de video que inyecta en la entrada de la tarjeta 3Dfx,
que a su vez la pasa al monitor. Cuando una aplicación pide al driver
3D inicializar la 3Dfx, la tarjeta 3D desactiva la propagación de la
señal convencional que ya no llegará al monitor, comenzando a enviar
su propia señal al monitor, hasta que la aplicación genere una orden
de parada del driver 3D y restaure el envío de la señal de video
convencional al monitor.
Desafortunadamente, con una configuración pass-through la
salida de video normal no es visible lo que puede convertirse en un
problema para aplicaciones corriendo en sistemas de ventanas tales
como Xwindows, donde se quiera obtener el resultado 3D dentro
de una ventana. Para ello hay otro método soportado por los
adaptadores 3Dfx que puede ser mejor para aplicaciones de este tipo,
pero que requiere un monitor adicional. Si tiene dos monitores, puede
conectar uno a la salida de la tarjeta convencional y otro a la salida
del adaptador 3Dfx. De esta forma, un monitor siempre visualiza la
señal de la tarjeta de video convencional, y el otro permanece
inactivo hasta que inicialice la tarjeta 3Dfx. Entonces, una vez que
arranque la 3Dfx, puede usar un monitor para su sistema de ventanas
normal, y el otro para dar la salida de la 3Dfx a pantalla
completa.
3Dfx ha creado un nuevo chip llamado 3Dfx RUSH, que es capaz de
producir en una ventana. Las tarjetas de video con este chip tambien
traen incorporado un chip 2D y comparten una memoria intermedia
única. Ya que no hay actualmente soporte de este tipo para Linux no
podemos comentarlo aquí, pero ya está en marcha su desarrollo.
Otra limitación del chip 3Dfx es que no puede alcanzar
resoluciones más altas que las que consiguen las tarjetas
convencionales de hoy en día, que mientras que éstas últimas están ya
alcanzando resoluciones de 1280x1024, 1600x1200, o incluso superiores,
los adaptadores 3Dfx generalmente no van más allá de los 640x480,
aunque no es tanta limitación como se podría pensar, ya que con las
técnicas de anti-aliasing avanzado y filtrado de texturas de la 3Dfx,
un gran número de objetos se pueden visualizar dentro de los 640x480
de resolución sin que prácticamente no se observe la pixelización. De
hecho es con frecuencia dificil identificar la resolución que esté
usando una aplicación 3Dfx sólo mirando a la pantalla.
Las tarjetas básicas 3Dfx más comunes, como la Monster3D
solamente alcanzan los 640x480. Creo que algunas pueden elevar su
resolución hasta los 800x600, pero según tengo entendido a esta
resolución la tarjeta pierde la capacidad de hacer buffering de profundidad
y alfa ya que la memoria que normalmente se usaría para estos
buffers se consume dedicada a alcanzar esta resolución mayor. Las
tarjetas de gama alta, como la Quantum3D, puede soportar 800x600 sin
perder esas otras capacidads.
Fabricantes OEM usan 3Dfx
3Dfx Interactive es el fabricante de este chip 3D de alto
rendimiento. Sin embargo no fabrican las tarjetas de video que usan
este chip. Otras compañías como Diamond Multimedia, Orchid Technology
y Canopus Corporation usan todas ellas este chip en las tarjetas de
video que ellos producen. Diamond tiene la Monster3D, Orchid la
Righteous3D y Canopus la Pure3D. Una compañía con el nombre de Quantum
3D se segregó de 3Dfx y ofrece tarjetas de video que hacen uso de
configuraciones avanzadas de la Voodoo (unidades PixelFX y TexelFX),
más memoria para cuadros o texturas, etc. Estos modelos son conocidos
como los Obsidian 3D. Visite el web de 3Dfx Interactive en (www.3dfx.com) para consultar un listado
completo de fabricantes que producen tarjetas de video que usan el
chip 3Dfx.
Dentro del Voodoo 3Dfx
El chip Voodoo en realidad puede ser concebido como un sistema
avanzado y flexible de generación de gráficos, formado por subsistemas
Voodoo separados que pueden combinarse de diferentes formas, pero la
más simplista sería aquella formada por un único Voodoo. Cada
subsistema a su vez está formado por procesadores independientes
conocidos como unidades PixelFX y TexelFX. PixelFX es la unidad
responsable de operaciones por pixel tales como buffering de
profundidad de color y sombreado gouraud. La unidad TexelFX es la
responsable de operaciones con filtrado de texturas y
proyecciones. Juntas, estas unidades pueden trabajar para producir
efectos tales como texturas iluminadas. Cada una tiene además su
propia memoria de video, usada para sus operaciones especializadas. La
PixelFX usa su memoria para almacenar pixels para la memoria
intermedia de cuadros, y la TexelFX para almacenar texturas.
Cada configuración de subsistema Voodoo contiene una unidad
PixelFX, pero puede haber más subsistemas configurados con una, dos o
tres unidades TexelFX independientes para aumentar la velocidad del
mapeado de texturas. Incluso yendo más lejos, un sistema Voodoo se
puede configurar con múltiples subsistemas y usar entrelazados para
doblar de forma efectiva la tasa de renderización. Estas
configuraciones avanzadas son capaces de propocionar rendimientos
superiores incluso que las estaciones de trabajo SGI de gama alta. Por
supuesto estas configuraciones avanzadas son bastante más costosas que
las tarjetas Voodoo simples, que cubren con creces el uso medio de la
mayoría de usuarios.
Programación con
3Dfx
3Dfx Interactive no publica documentación relativa a la
programación de sus chips a nivel de registros por temor a facilitar
el plagio de su hardware mediante ingeniería inversa. En su lugar,
distribuyen un kit de desarrollo llamado Glide que actúa como una
microcapa de software para acceder al hardware. Glide es un conjunto
de funciones organizadas en forma de biblioteca que oculta las
especificaciones de los registros a la vez que proporciona un interfaz
de programación relativamente sencillo. Las bibliotecas se portan a
cada plataforma (incluído Linux) que 3Dfx elija para dar soporte,
junto con una documentación muy detallada del interfaz. Los
desarrolladores pueden entonces usar el interfaz para desarrollar sus
propias aplicaciones con la 3Dfx. Glide es una biblioteca gráfica de
muy bajo nivel, no como OpenGL o Direct3D. No proporciona ninguna
capacidad gráfica de alto nivel como mostrar listas o funciones de
transformación. Tan solo proporciona una pequeña abstracción de los
registros hardware y unas funciones por software que acceden a las
rutinas implementadas directamente en el hardware. He podido hablar
con la persona que portó Glide a Linux, que indica que la biblioteca
es muy simple. Básicamente, dice que solamente debe pasar los
parámetros correctos a las funciones de Glide, que se limitan a
pasarlos a los registros de la tarjeta e indicar a la 3Dfx que
renderize.
Esto no quiere decir que los desarrolladores con OpenGL o
Direct3D no puedan desarrollar aplicaciones 3Dfx. Los drivers de
OpenGL y Direct3D han sido escritos para usar Glide, para que los
desarrolladores puedan usar los interfaces de ambos entornos y los
drivers traducirán las funciones de alto nivel a llamadas específicas
a Glide, el que a su vez ejecuta 3Dfx. Este es un método muy rápido y
eficiente para el desarrollo.
Usando Mesa con
3Dfx
Se ha escrito un driver que interactúa entre Mesa (la
implementación libre de OpenGL que corre sobre muchos sistemas
operativos) y Glide, para permitir la ejecución de aplicaciones OpenGL
sobre Linux y Windows95 con soporte hardware. Linux es libre, los
compiladores para Linux lo son, Mesa lo es, y el kit de desarrollo
Glide de 3Dfx lo es. ¡Toda esta combinación proporciona un sistema de
desarrollo de increiblemente bajo coste y a la vez de muy altas
prestaciones! Desafortunadamente, no hay aún kit de desarrollo Glide
para linux en sistemas Alpha o Sparc, por lo que por ahora se limita a
la plataforma Intel x86.
A la hora de escribir estas líneas, la última versión de Mesa es
la 2.5, y ya está disponible la 2.6 en fase beta, en pruebas. El
driver Mesa está muy avanzado y es capaz de acelerar la renderización
de puntos, líneas y polígonos con sombras planas y sombras gouraud,
además de mapeado de texturas, depth buffering, fogging y
blending. Aunque mencioné antes que el chip Voodoo 3Dfx no era capaz
de nada excepto renderización a pantalla completa, es posible
conseguir renderización dentro de una ventana gracias a un pequeño
truco en el driver Mesa, que toma los datos de la memoria intermedia
de cuadros y la transfiere por el bus PCI a la memoria de video de la
tarjeta convencional. Incluso aunque no es tan rápido como la
renderización a pantalla completa, es aún mucho más rápido que la
renderización por software de Mesa en solitario.
Mesa está disponible para descargarlo del servidor ftp de Mesa en
ftp://iris.ssec.wisc.edu/pub/Mesa. Mesa se distribuye en dos
paquetes separados: uno contiene la biblioteca principal y los
ficheros de cabecera, y comienza con el nombre MesaLib, mientras que
el otro archivo es sólo de ejemplos demostrativos, y comienza con el
nombre MesaDemos. Para instalarlo simplemente desempaquete el archivo
en formato tar, cambie al directorio creado durante el proceso,
y a partir de aquí dispone de varias alternativas para construir
Mesa. Desde Mesa 2.5 hubo unas cuantas rutinas de transformacion
reescritas en lenguaje ensamblador de intel x86 para optimizar la
velocidad. Por desgracia no están del todo libre de errores, pero ya
corregios en las versiones beta de Mesa 2.6. Para compilar Mesa con
soporte 3Dfx pero sin las rutinas en ensamblador, sólo teclearía la
orden "make linux-glide" (por supuesto sin las comillas). Para
compilarlo con 3Dfx e incluyendo las rutinas, teclearía "make
linux-386-glide". A partir de Mesa 2.6 se han escrito optimizaciones
en el makefile que permiten al compilador producir código que
optimizará Mesa para usarlo con los famosos juegos GlQuake and
QuakeII. Si quiere optimización GlQuake usaría "make
linux-386-quake-glide" para compilar Mesa.
Una vez compilado Mesa, hay varias formas de instalarlo. Una
alternativa podría ser colocar los ficheros de cabecera y bibliotecas
respectivamente en los directorios /usr/include y /usr/lib, o quizás
en /usr/local/include y /usr/local/lib. O bien puede colocarlos en
cualquier directorio siempre que el cargador dinámico de Linux pueda
encontrarlos, según se le indique en el fichero de configuración
/etc/ld.so.conf. Ya que Mesa se desarrolla con rapidez y me gusta
probar las betas a medida que se publican, conservo copias en
directorios separados para cada version. Cualquiera que sea la versión
que quiera usar, cambio mi fichero ld.so.conf para incluir ese
directorio incluyendo la versión deseada. Sin embargo, es muy
importante no olvidar el paso de cambiar adecuadamente el fichero
ld.so.conf y ejecutar la utilidad ldconfig, para ajustar correctamente
los enlaces simbólicos en los directorios con biblioteclas entre otras
tareas. Si desea ver qué bibliotecas conoce exactamente su sistema,
puede usar la opción -p de ldconfig: cuando quiero saber qué versión
de Mesa usará una aplicación, tecleo la orden siguiente para mostrar
la revisión de la biblioteca Mesa actualmente en uso :
ldconfig -p | grep Mesa
Una vez instalado Mesa ya está listo para comenzar. Para usar una
aplicación Mesa que use 3Dfx debe ejecutarla como root, y debe tener
preparado el servidor Xwindow con una profundidad de color de 16 bits
por pixel. Si descargó y desempaquetó el paquete de demos, se habrán
compilado junto a Mesa y ya puede probarlos. Cuando use Mesa, hay tres
diferentes formas de ejecutar una aplicación. Lo primero, puede
hacerlo todo con software de renderización que no use 3Dfx para
nada. Esta es la opción inicialmente por defecto. Para hacer que la
aplicación use 3Dfx debe definir una variable de entorno. Para hacer
que se ejecute la aplicación con 3Dfx a pantalla completa debe
definir MESA_GLX_FX=fullscreen
y el programa
usará 3Dfx en consecuencia. Sin embargo usar un programa Mesa dentro
de Xwindows puede necesitar ciertos trucos. Cuando ejecute un programa
Mesa, el servidor X no sabe en realidad si 3Dfx existe siquiera. Lo
que sucede es que inicializa y abre una ventana, y 3Dfx es
inicializado y puede empezar a renderizar. Si el cursor del ratón se
sale de la ventana en el servidor X, el programa Mesa no será capaz
desde ese momento de aceptar entrada de teclado o eventos de
ratón. Por tanto, si no está usando más que un monitor, es aconsejable
usar la colocación interactiva de ventanas si el gestor lo soporta, o
de lo contrario cuando arranque la aplicación Mesa, 3Dfx entrará en
funcionamiento y no será capaz de ver su escritorio en el servidor X
para colocar el cursor del ratón de nuevo dentro de la ventana. Sí que
es posible escribir un programa Mesa para interceptar el movimiento
del cursor de forma que una vez entra el ratón en la ventana no pueda
salir, que al alcanzar el borde de la ventana sea colocado de nuevo en
el centro de la ventana.
Para hacer que una aplicación use 3Dfx para renderizar dentro de
una ventana tiene que definir otras variables de entorno:
SST_VGA_PASS=1
SST_NOSHUTDOWN=1
MESA_GLX_FX=window
Una vez fijadas estas variables y ejecutado el programa, debería
obtener mejor rendimiento durante la renderiziación que la resultante
con métodos por software.
|