En XNA (y Direct3D en general AFAIK), en lugar de crear sombreadores de vértices y fragmentos individuales, agrupa potencialmente muchos sombreadores relacionados en 'Efectos'. Cuando utilizas un efecto, seleccionas una 'técnica' (o iteras a través de todos ellos) y luego cada 'técnica' tiene una serie de 'pases'. Recorre cada pasada, selecciona el sombreador de vértices y fragmentos relevante y dibuja la geometría.
Sin embargo, lo que tengo curiosidad es para qué necesitarías múltiples pases. Entiendo que en los primeros días del 3D solo tenías una unidad de textura y luego tenías 2 y que a menudo todavía no era suficiente si también querías hacer un mapeo del entorno. Pero en los dispositivos modernos, incluso en la clase móvil, puede muestrear 8 o más texturas y hacer tantos cálculos de iluminación como desee en un solo sombreador.
¿Pueden los más experimentados ofrecer ejemplos prácticos de dónde aún se necesita la renderización de múltiples pasos, o es solo una ingeniería excesiva por parte de XNA / Direct3d?
Como se señaló en las otras respuestas, el renderizado de múltiples pasos (dibujar una sola malla varias veces con diferentes sombreadores / parámetros), como se sugiere en otras respuestas, definitivamente todavía se usa, principalmente para iluminación y efectos especiales
Los pases de efecto D3DX podrían usarse para este tipo de cosas. Pero también podría implementarse con más de un sombreador / efecto.
La intención original de los pases era ayudar a implementar sombreadores complejos en hardware de gama baja (pre-shader-2.0), donde las restricciones en el número de etapas de textura y las instrucciones de sombreado por pase eran bastante limitantes.
En el ejemplo de la iluminación de pasadas múltiples, ¿se pueden obtener ganancias de rendimiento significativas al usar pasadas en lugar de cambiar los efectos?
fuente
Además de la iluminación que todos mencionaron, otro uso importante de esto es el desenfoque . Horizontal y vertical se realizan en pasadas separadas (para obtener un desenfoque de 9x9, solo se deben muestrear 18 píxeles para cada píxel de salida en lugar de 81). Esto se usa para floración / HDR, profundidad de campo, brillo, etc.
fuente
El ejemplo en el sitio web de los creadores de XNA usa múltiples pases para calcular la iluminación de muchas (cientos) fuentes de luz.
fuente
Como dijo Ranieri, puede usar múltiples pases para múltiples luces, por ejemplo, con un solo material puede tener un pase 'ambiental', un pase aditivo por punto de luz, otro pase aditivo por foco y luego un pase de calcomanía para multiplicar en el difuso textura (he usado una configuración como esta en el pasado y se trata de la forma más flexible de manejar un sombreador de iluminación que he visto sin entrar en el sombreado diferido).
Además, creo que la mayoría de los sombreadores de pieles usan múltiples pases.
fuente
Los mapas de sombras para crear sombras se pueden hacer con varias pasadas. Solo una nota, algunos efectos de varias pasadas se pueden hacer en una pasada si la tarjeta de video admite la misma cantidad de unidades de textura que la cantidad de pasadas. Entonces, si no tiene suficientes unidades de textura, entonces tendrá que usar múltiples pases. Una plataforma de hardware fija (como las consolas de juegos), probablemente pueda codificar simplemente usando texturizado múltiple porque conoce la cantidad de unidades de textura. Pero para las PC, hay infinitas configuraciones de hardware. Si desea tener el alcance más amplio para los consumidores, es probable que desee dividir algunos de sus efectos más complejos en múltiples pases para que los usuarios con hardware de menor grado (es decir, no tengan tantas unidades de textura en la GPU) Ver el efecto. Brevemente, Los mapas de sombras se crean creando primero un mapa de sombras de la escena desde la perspectiva de la luz en una sola pasada. Luego, la textura del mapa de sombras se mezcla en la escena con las otras texturas de la escena.
fuente