Pular para o conteúdo principal
Recomendamos que você leia primeiro o tópico Meshlets. O tópico Exemplo de culling de meshlets apresenta o pseudocódigo de uma implementação em Amplification Shader de uma técnica chamada culling de meshlets. Como os primitivos de um meshlet idealmente seguem uma coerência espacial e de orientação, podemos armazenar dados de culling eficientes por meshlet. Isso pode ser usado para fazer rapidamente o culling de uma lista de meshlets em relação a uma visão em um Amplification Shader e despachar instâncias de Mesh Shader somente para os meshlets restantes. A técnica começa com um Amplification Shader no qual cada thread processa um único meshlet. Isso significa que devemos despachar ceil(MeshletCount / GROUP_SIZE) grupos de threads na lista de comandos. Cada grupo de threads do Amplification Shader é então responsável por processar GROUP_SIZE meshlets. Cada thread faz o culling do seu meshlet em relação ao frustum de visão, determina seu slot de exportação e, em seguida, grava seu índice nos dados de payload. Depois, usa DispatchMesh para despachar um grupo de threads de Mesh Shader para cada meshlet restante a ser renderizado. Cada grupo de threads de Mesh Shader então carrega seu meshlet a partir dos dados de payload e exporta sua geometria. O exemplo completo pode ser encontrado na página de downloads para desenvolvedores do XBOX.

Amplification Shader

A estrutura do Amplification Shader é idêntica à dos compute shaders, mas termina com no máximo uma chamada ‘DispatchMesh(…)’. Primeiro, cada thread carrega seu meshlet e faz o culling dele em relação à visão. Em seguida, uma rotina de compactação é executada para determinar o local final de gravação de cada thread. Isso também fornece a contagem final de meshlets não descartados para o grupo de threads. Por fim, o índice do meshlet é gravado nos dados de payload groupshared, e DispatchMesh é chamado com a contagem de meshlets restantes e os dados de payload. O exemplo a seguir mostra um Amplification Shader que implementa o culling de meshlets em pseudocódigo.

Mesh Shader

O Mesh Shader do pipeline é muito semelhante à renderização de meshlets com um pipeline somente de Mesh Shader, exceto pelo fato de que lemos o índice do meshlet do grupo de threads a partir dos dados de payload. Os dados de payload são os mesmos dados criados e exportados pelo Amplification Shader anterior. Os GroupIDs e DispatchThreadIDs são localizados no cluster de Mesh Shader despachado pelo grupo de threads do Amplification Shader que o invocou, e todos compartilham os mesmos dados de payload. Este exemplo de código mostra o Mesh Shader que segue o Amplification Shader anterior.

Consulte também

Visão geral do pipeline de Mesh Shader Por que Mesh Shaders? Visão geral da API de Mesh Shader Meshlets
Última modificação em 6 de outubro de 2026