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

Tipos de shaders (I) - Procesadores de vértices

Al estudiar las etapas programables del pipeline de las GPU actuales se aprecia la existencia de tres tipos de shaders en la actualidad: vertex, fragment y geometry. En realidad existen distintas versiones de cada una de estas clases de shaders, pudiendo utilizarse unas u otras dependiendo del hardware con que se cuente, los controladores de dispositivo y la API de programación empleada.

Un shader no es más que un programa, por regla general de reducida longitud, que se ejecuta en el interior de la GPU con el objetivo de realizar el procesamiento de los vértices o los fragmentos. Se puede decir, por tanto, que un shader es un procesador especializado en tratar una cierta información.

Esta entrada es la primera de una serie en la que se describe someramente el funcionamiento de cada uno de los tipos de shaders y también se resumen algunos datos relativos a las distintas versiones existentes.

SM x.y: Los denominados Shader Models son especificaciones elaboradas conjuntamente por Microsoft y nVidia. La versión del SM disponible en un sistema determina si podrá ejecutar o no una aplicación gráfica concreta, dependiendo de la versión de SM para la que ésta se haya construido. Aunque los SM están estrechamente ligados a DirectX y el lenguaje HLSL, existe una equivalencia entre sus versiones y las extensiones disponibles para las aplicaciones OpenGL.

Las instrucciones de un vertex shader se ejecutan sobre uno de los vértices de la geometría original, vértice facilitado por la aplicación a la GPU. El resultado ha de ser necesariamente otro vértice, no es posible generar vértices adicionales ni tampoco eliminar el que se recibe de entrada.

El vértice de entrada está expresado en coordenadas 3D en un sistema virtual, el que el programador haya decidido para su escena, que es necesario transformar en coordenadas 2D de pantalla. Dicha transformación puede ser lineal, como la que efectúa por defecto la etapa de transformación de un cauce no programable, o bien conllevar cálculos más complejos para generar efectos diversos, como puede ser el morphing de una figura.

Un vertex shader también puede operar sobre la información de color, los coeficientes de iluminación y las coordenadas de textura, así como sobre las normales. Además de transformar las coordenadas 3D a 2D, generará la información necesaria para la construcción del z-buffer.

La tabla siguiente recoge las características más destacables de los vertex shaders en cada una de las versiones aparecidas hasta la actualidad.

Característica VS 1.0 VS 2.0 VS 3.0 VS 4.0
Nº máx. instr. 128 256 512 4096
Registros 4 12 32 4096
Control flujo No No
Vértices de textura No No
Nº samplers de textura - - 4 128
Operadores de bits y enteros nativos No No No

Publicado el 11/12/2009

Histórico
Curso de shaders

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