No XNA (e no Direct3D em geral no AFAIK), em vez de criar sombreadores individuais de vértices e fragmentos, você agrupa potencialmente muitos sombreadores relacionados em 'Efeitos'. Quando você usa um efeito, seleciona uma 'técnica' (ou repete todas elas) e, em seguida, cada 'técnica' tem um número de 'passes'. Você percorre cada passagem, seleciona o vértice e o sombreador relevantes e desenha a geometria.
O que estou curioso é que você precisa de vários passes? Entendo que, nos primeiros dias do 3d, você tinha apenas uma unidade de textura e, em seguida, você tinha 2, e isso muitas vezes ainda não era suficiente se você também quisesse fazer o mapeamento do ambiente. Mas em dispositivos modernos, mesmo na classe móvel, você pode experimentar 8 ou mais texturas e fazer quantos cálculos de iluminação desejar em um único sombreador.
Os mais experientes aqui podem oferecer exemplos práticos de onde a renderização multipassas ainda é necessária, ou isso é apenas um excesso de engenharia por parte do XNA / Direct3d?
Como apontado nas outras respostas, a renderização de várias passagens (desenhando uma única malha várias vezes com sombreadores / parâmetros diferentes), como sugerido em outras respostas, ainda é definitivamente usada, principalmente para iluminação e efeitos especiais
Os passes D3DX Effect podem ser usados para esse tipo de coisa. Mas também pode ser implementado com mais de um shader / efeito.
A intenção original dos passes era ajudar na implementação de shaders complexos em hardware de extremidade inferior (pré-shader-2.0), onde as restrições no número de estágios de textura e instruções de shader por passe eram bastante limitantes.
No exemplo da iluminação multipass, existem ganhos de desempenho significativos usando passes em vez de alternar efeitos?
fonte
Além da iluminação que todos mencionaram, outro uso importante disso é o borrão . Horizontal e vertical são feitas em passagens separadas (para obter um desfoque de 9x9, apenas 18 pixels precisam ser amostrados para cada pixel de saída em vez de 81). Isso é usado para bloom / HDR, profundidade de campo, brilho, etc.
fonte
O exemplo no site dos criadores do XNA usa várias passagens para calcular a iluminação de muitas (centenas) fontes de luz.
fonte
Como Ranieri disse, você pode usar vários passes para várias luzes, por exemplo, com um único material, você pode ter um passe 'ambiente', um passe aditivo por ponto de luz, outro passe aditivo por refletor e, em seguida, um passe de decalque para multiplicar no difuso textura (usei uma configuração como essa no passado e é a maneira mais flexível de lidar com um sombreador de iluminação que eu já vi sem entrar no sombreamento adiado).
Além disso, acredito que a maioria dos shaders de peles usa vários passes.
fonte
Os mapas de sombra para criar sombras podem ser feitos usando a passagem múltipla. Apenas uma observação, alguns efeitos de múltiplas passagens podem ser feitos em uma passagem se a placa de vídeo suportar o mesmo número de unidades de textura que o número de passagens. Portanto, se você não tiver unidades de textura suficientes, precisará usar várias passagens. Em uma plataforma de hardware fixa (como consoles de jogos), você provavelmente pode codificar usando várias texturizações porque conhece o número de unidades de textura. Mas para PCs, há um número infinito de configurações de hardware. Se você deseja ter o alcance mais amplo dos consumidores, provavelmente deseja dividir alguns de seus efeitos mais complexos em várias passagens, para que os usuários com hardware de nível inferior (por exemplo, não tenham tantas unidades de textura na GPU) ainda veja o efeito. Resumidamente, Os mapas de sombra são criados criando primeiro um mapa de sombra da cena da perspectiva da luz em uma passagem. Em seguida, a textura do mapa de sombras é misturada à cena com as outras texturas da cena.
fonte