Se denominan fragmentos las porciones de la escena, ya en coordenadas 2D, justo antes de aplicarles texturas, color y otros atributos que darán como resultado el píxel final. También se les llama habitualmente pre-píxeles. Los términos fragment shader y pixel shader hacen referencia al mismo elemento: el programa encargado de procesar esos pre-píxeles para generar el píxel que aparecerá en pantalla.
A diferencia de los vertex shaders, no existe una correspondencia uno a uno entre los fragmentos que forman la escena ya en 2D y los píxeles que finalmente conformarán la imagen a mostrar. Esto es debido a que al proyectar de 3D a 2D puede darse el caso de que varios fragmentos correspondan a un mismo píxel, posiblemente con diferentes profundidades en el z-buffer. También podría darse el caso opuesto: que un mismo fragmento deba cubrir más de un píxel físico. Por ello un fragment shader puede generar, al procesar el fragmento recibido, cualquiera de los tres resultados siguientes:
En cuanto a las operaciones que un fragment shader tiene encomendadas, todas ellas van enfocadas a decidir cuál será el color que se asigne al píxel o píxeles generados a partir del fragmento. Para ello se basará en las coordenadas del fragmento, establecidas en etapas previas y que no puede modificar, y la información disponible sobre texturas e iluminación.
Los fragment shaders no aparecieron hasta la versión 2.0 de la especificación Shader Model, razón por lo que en la tabla siguiente no existe una versión 1.0.
Característica | PS 2.0 | PS 3.0 | PS 4.0 |
Nº máx. instr. | 64 | 512 | 65536 |
Registros | 12 | 32 | 4096 |
Nº máx. instr. textura | 32 | Ilimitado | Ilimitado |
Control flujo | No | Limitado | Sí |
Contador de bucle | No | Sí | Sí |
Nº de texturas | 8 | Ilimitado | Ilimitado |
Operadores de bits y enteros nativos | No | No | Sí |
Registros de posición | No | Sí | Sí |
Instrucciones de gradiente | No | Sí | Sí |
Registro iluminación a dos caras | No | Sí | Sí |
Torre de Babel - Francisco Charte Ojeda - Desde 1997 en la Web