Logo de Torre de Babel
Portada Libros Artículos Perfil Scholar

Lenguajes para programar shaders (y V) - O3D

A finales de abril de 2009 Google anunció la disponibilidad de O3D, un complemento independiente del navegador y del sistema operativo que permite generar gráficos 3D usando el lenguaje JavaScript, de forma que la escena se visualiza directamente en un cliente como Internet Explorer o Mozilla Firefox.

O3D tiene una arquitectura basada en un cauce gráfico completamente programable, prescindiendo de las etapas fijas de tratamiento de vértices y fragmentos. Por ello todo programa O3D debe aportar sus propios shaders, escritos en un lenguaje denominado genéricamente O3D Shading Language.

Una vez instalado el complemento O3D, un módulo de código escrito en C++, la descripción de la escena escrita en JavaScript, incluidos los shaders, serán procesados apoyándose sobre DirectX u OpenGL, según la configuración del sistema. En este sentido O3D representa una capa adicional de software, de más alto nivel que DirectX y OpenGL. La figura inferior es un esquema de bloques que representa la arquitectura de O3D, con la aplicación en la parte superior, escrita en JavaScript usando el API de O3D y una serie de utilidades; el núcleo de O3D (el complemento) justo debajo, apoyándose en OpenGL y DirectX, siendo responsabilidades de éstas bibliotecas la comunicación final con la GPU.

Arquitectura de O3D

El lenguaje de shanding de O3D es una variante de HLSL y Cg, limitado al SM 2.0. Esto significa que permite crear VS y PS, pero no GS. Además existen ciertas restricciones en cuanto a los tipos de datos que pueden utilizarse a la hora de compartir información entre los diferentes shaders de un programa. También se contempla la posibilidad de emplear SAS (Standard Annotations and Semantics), un conjunto de 24 semánticas de transformación definidas por nVidia que simplifica la implementación de VS.

Al igual que ocurre con otras opciones de las descritas en puntos previos, en O3D el código de los shaders se introduce en una cadena de caracteres corriente. El shader en sí, por tanto, no se escribe en JavaScript, aunque sí el resto de los elementos de la escena. Se utiliza el lenguaje JavaScript para crear un objeto de tipo Effect, invocar a su método loadFromFXString() facilitando el código del shader y, finalmente, asociando el efecto con un material aplicable a las primitivas.

La gran ventaja de O3D SL, respecto al resto de alternativas, estriba en que permite generar rápidamente prototipos de shaders con muy poco esfuerzo. No hay más que crear un esqueleto de aplicación con JavaScript, introducir el código del shader dentro de la propia página web y abrirla en un navegador para ver el resultado. Cualquier cambio se reduce a modificar esa página y refrescar el navegador, sin necesidad de compilar código en C/C++, conocer OpenGL o DirectX.


Publicado el 28/4/2010

Curso de shaders

Torre de Babel - Francisco Charte Ojeda - Desde 1997 en la Web