Bom exemplo de efeito multipass?

9

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?

U62
fonte

Respostas:

5

Sempre que você estiver realizando efeitos pós-processo em um conjunto de buffers capturados, seria um tempo razoável para usar um efeito de várias passagens, isto é, delineamento de objetos, motion blur, SSAO, bloom. A ideia é que a primeira passagem seria onde você renderizaria tudo para os buffers apropriados, e cada passagem subsequente lidaria com cada efeito pós-processo.

Como Ranieri mencionou sobre o exemplo XNACC, eles estão usando vários passes para renderizar um grande número de luzes. Embora nesse exemplo, eles estejam executando o mesmo passe, apenas uma vez para cada luz.

Lembre-se de que o Shader Model 2 e anteriores não podem suportar ter nem de perto tantas instruções quanto o Shader Model 3 ou 4 em cada shader, mais um motivo para dividir um efeito em várias passagens - para suportar hardware mais antigo.

brett
fonte
Você pode dar um exemplo em que um objeto XNA Effect no qual você percorre o EffectPasses tem mais de uma passagem em vez de usar efeitos diferentes e por quê?
Jason Goemaat
4

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?

bluescrn
fonte
3

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.

Robert Fraser
fonte
Possivelmente, mas a maioria das implementações de desfoque usaria o mesmo sombreador para as passagens horizontais e verticais - e apenas passaria nas compensações de amostragem (como constantes do sombreador ou dados por vértice)?
bluescrn
11
@bluescrn - O Bloom é tipicamente considerado um efeito de 4 passagens: um para extrair as áreas brilhantes e a escala reduzida, um para desfocar horizontalmente, um para desfocar verticalmente, um para combinar / aprimorar a imagem desfocada com a original. Enquanto os parâmetros de sombreamento poderia ser usado para controlar estes, ramificação seria necessário para diferenciar todos, mas os dois borrão passa
Robert Fraser
1

O exemplo no site dos criadores do XNA usa várias passagens para calcular a iluminação de muitas (centenas) fontes de luz.

drxzcl
fonte
1

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.

Riley Adams
fonte
0

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.

zooropa
fonte