Torre de Babel

Qué herramientas de desarrollo de shaders puedo usar

by Francisco Charte.

Las entregas de los meses previos, sobre Tipos de shaders y Lenguajes para programar shaders, nos han servido para establecer el contexto en el que se utilizan los shaders, ofreciendo una visión general de esta tecnología y los conceptos teóricos fundamentales para comprenderla. El objetivo de este nuevo tutorial es complementar a los anteriores, haciendo una evaluación de algunas herramientas que pueden utilizarse para la programación de shaders y sirve de antesala a las entregas finales en las que se brindarán algunos ejemplos prácticos.

Shader Maker

Cada tipo de trabajo requiere sus herramientas específicas, no siendo en este sentido una excepción el desarrollo de shaders. Un diseñador web precisará un editor de XHTML/CSS, un programador OpenGL un entorno de desarrollo C/C++ y, análogamente, un creador de shaders necesitará una herramienta específica para este fin.

Es cierto que podrían utilizarse DirectX, OpenGL o incluso O3D para implementar shaders, pero la visualización de los efectos requiere la escritura de una cantidad importante de código adicional que nada tiene que ver con el shader en sí, especialmente si se quiere tener la posibilidad de probarlos sobre distintas geometrías, con diversas luces y con la capacidad para rotar, hacer zoom, mover las luces, etc.

Existen multitud de herramientas específicas para el diseño de shaders, procedentes tanto de los fabricantes de hardware como de terceras partes. La mayor parte de ellas son gratuitas. Shader Maker es una herramienta desarrollada por el CGC (Computer Graphics Clausthal), un grupo de investigación de la University of Clausthal (Alemania), desde cuyo sitio web puede descargarse gratuitamente. Para poder utilizarla es necesario tener instalados unos controladores de vídeo con soporte para OpenGL actualizados, especialmente si se quiere utilizar la programación de geometry shaders. El programa no necesita instalación, basta con extraer los archivos en un directorio y ejecutarlo, incluye todo lo necesario salvo los citados controladores que serán específicos para cada hardware.

Entorno de desarrollo de ShaderMaker

Como puede apreciarse en la figura superior, el programa consta de dos ventanas independientes: una en la que se visualiza la escena, con numerosos controles que permiten ajustar la geometría a mostrar, iluminación, materiales, etc., y otra (derecha) en la que se edita el código de los diferentes tipos de shaders. Éstos deberán escribirse en OGLSL, al ser una herramienta específica para OpenGL.

Junto con la herramienta se entregan algunos shaders de ejemplo, como el GS que aparece en la figura anterior y que genera dígitos de siete segmentos a partir de la geometría original. La textura pétrea la aplica un PS. Desarrollar un shader es tan fácil como escribir el código, o modificar uno de los existentes, y pulsar el botón de compilación. El resultado aparece de inmediato en la ventana de visualización.

Una vez que los shaders creados con Shader Maker producen el efecto deseado, no hay más que tomar el código e importarlo en el proyecto OpenGL donde se deseen utilizar. Para ello se recurriría al procedimiento descrito en la entrada dedicada a OGLSL publicada en el mes de marzo.

ShaderDesigner

Al igual que Shader Maker, ésta es una herramienta dirigida específicamente al desarrollo de shaders con OGLSL, por lo que se parte de los mismos requerimientos: disponer de un controlador de vídeo actualizado que soporte las últimas versiones de OpenGL.

Es un programa creado por la desaparecida empresa TyphoonLabs que puede obtenerse gratuitamente desde el sitio de esta empresa o bien como parte del OpenGL SDK. La última versión data de abril de 2009 y, aunque aprovecha las características de OpenGL 3.0, únicamente contempla el desarrollo de VS y PS, pero no de GS.

Como se aprecia en la figura inferior, la interfaz del programa tiene el aspecto típico de un entorno de desarrollo, ofreciendo un editor de shaders, paneles para la modificación de propiedades, una previsualización del shader en funcionamiento y diferentes opciones para la aplicación de texturas, uso de luces y selección de la geometría sobre la que se quieren probar los efectos.

Entorno de desarrollo de ShaderDesigner

El inconveniente de esta herramienta es que no permite trabajar con GS y, además, está limitada al lenguaje de shading de OpenGL, al igual que Shader Maker.

FX Composer

p> La tercera herramienta que me ha parecido interesante, ya que complementa en cierta manera a las anteriores, es nVidia FX Composer. Como sería de esperar, al ser un programa desarrollado por nVidia, el lenguaje empleado para codificar los shaders no es OGLSL, siendo posible elegir entre HLSL, Cg y COLLADA Fx Cg.

Lo más interesante de este programa es que, como puede verse en la figura inferior, permite comprobar los shaders sobre DirectX 9, DirectX 10 y OpenGL. No hay más que abrir la lista y seleccionar la API, obteniéndose la visualización del efecto de manera inmediata. De esta forma es posible diseñar un mismo conjunto de shaders para DirectX y OpenGL, sin que importe el lenguaje de shading empleado originalmente.

Entorno de desarrollo de FX Composer

Salvo por las opciones ya citadas, que permiten elegir el lenguaje de shading y el API sobre el que se ejecutarán los shaders, FX Composer no se diferencia demasiado de ShaderDesigner. Hay un editor de código para escribir los shaders, una ventana de propiedades, un panel de previsualización y una serie de funciones que permiten establecer la geometría sobre la que se probarán los efectos, luces, texturas, etc.

Otra posibilidad interesante de este programa es la de convertir los shaders de un lenguaje a otro, por ejemplo de HLSL a Cg, con una simple opción de menú. También es capaz de analizar el rendimiento de los shaders en distintas configuraciones hardware.

Tras la introducción de estas tres herramientas, los últimos tutoriales en esta serie de artículos sobre programación de shaders estarán dedicados al desarrollo de algunos ejemplos sencillos, diseñando vertex shaders, pixel shaders y geometry shaders. Para ello se recurrirá a la herramienta Shader Maker descrita antes y se utilizará el lenguaje OGLSL.