Fiz minha parte justa da programação de jogos em 3D para meu (ex) empregador e também em meus próprios mecanismos personalizados para meus próprios jogos independentes.
Inicialmente, comecei com o Direct3D 9 e o D3DX9, que praticamente fizeram tudo por mim e não exigiram que eu pensasse em termos de sombreadores.
Depois disso, escrevi meus primeiros shaders Direct3D 9, mas usei principalmente um shader muito simples para tudo o que fiz.
Na iteração mais recente do meu mecanismo de jogo, mudei para o Direct3D 11 e, com isso, criei muitos shaders. Fiz a skin da GPU, partículas calculadas pela GPU, muitos efeitos de iluminação e pós-processamento, tudo na GPU. Coisas muito legais.
Até agora, usei apenas sombreadores de vértice e pixel / fragmento. Embora ainda haja muitas coisas que ainda não fiz, acredito ter um conhecimento sólido do que os shaders de vértice e pixel / fragmento fazem e como tudo isso se encaixa em todo o pipeline 3D.
Acompanhando desenvolvimentos mais recentes, fiquei muito interessado nos estágios mais novos do shader. Ou seja, o sombreador de geometria e, ainda mais recente, os sombreadores de casco e domínio.
Eu nunca usei esses estágios, mas pelo que sei, o sombreador Geometry, se ativado, é executado após o sombreador de vértice, uma vez para cada vértice transformado (ou uma vez por primitivo?) E permite descartar vértices (e primitivos?) e crie novos (que eu acho que voltam ao início do pipeline?).
Meu palpite é que o principal uso do sombreador de geometria seria gerar programaticamente a geometria na GPU. Um uso comum seria criar quads de outdoor com base em um único vértice, mas eu realmente não visualizo muitos outros cenários comuns além de gerar fractais e outras coisas que você pode gerar 100% programaticamente.
Quanto aos sombreadores Hull e Domain, parece que eles estão relacionados ao mosaico (criando superfícies mais suaves a partir de superfícies ásperas?) E devem ser usados juntos ou não. O termo "patch" também parece ser comum aqui.
Alguém gostaria de me explicar, em termos práticos, para que servem esses estágios de novo shader, como eles se encaixam no pipeline 3D e em quais casos devo considerar usá-los?