Por dois anos consecutivos na WWDC, a Apple aprimorou o Metal, com o Metal 3 rodando em Apple Silicon Macs e em dispositivos iOS e tvOS. Aqui estão as grandes mudanças no Metal no próximo iOS 17 e macOS Sonoma.

Metal 3 representa melhorias significativas para o motor Metal e estruturas para escrever jogos 3D para plataformas Apple.

O metal tem sua própria linguagem de sombreamento baseada em C++ 14, Metal Shading Language, que é totalmente detalhada na Metal Shading Language Specification (MSL).

Na WWDC’23, a Apple apresentou a versão 1.3 da Metal Shading Language Specification. A especificação MSL cobre todos os aspectos da escrita de código de shader para Metal em C++.

A nova especificação MSL pode ser baixada como um PDF no site do desenvolvedor da Apple.

Metal 3 agora inclui um pequeno Heads-Up Display opcional visível no canto superior direito das cenas renderizadas enquanto o jogo é executado:

O Performance HUD pode exibir várias informações úteis para inspecionar o desempenho do seu jogo em tempo real:

Mostrar e registrar as principais estatísticas de desempenho CPU e resolução Taxa de atualização do dispositivo Escala Renderização direta ou composta FPS custo médio de GPU por quadro Mais

Algumas estatísticas de exibição heads-up do Metal.

Na WWDC’23, a Apple também apresentou o Metal Shader Converter ferramenta. Shaders são pequenos programas que gerenciam luz, cor e materiais em objetos 3D em uma cena.

Metal Shader Converter ajuda você a converter shaders escritos em outras linguagens e estruturas ou de outras plataformas para Metal 3-ou seja, do formato DirectX 12 DXIL do Microsoft Windows.

O Metal Shader Converter oferece dois modelos de encadernação para escolher: Layout automático e Layout explícito. Esses modelos ajudam a converter shaders de outras plataformas.

Tabelas MTLBuffer são usadas na ferramenta Metal Shader Converter.

Bindless Rendering, buffers de argumento e ray tracing

Novidade no Metal 3, a renderização sem ligação permite que você use o ray tracing para melhorar o desempenho e a qualidade em 3D cenas renderizadas.

Um aspecto da renderização sem ligação-buffers de argumento-permite combinar recursos em buffers que aceleram a renderização.

Em vez de vincular cada recurso de exibição, com buffers de argumento, os recursos são vinculados na memória em um buffer. No modelo sem ligação, os buffers de argumento agregam e vinculam recursos, permitindo o acesso direto dos pipelines de renderização.

As malhas 3D são vinculadas na memória em vez de serem usadas uma a uma nos pipelines de renderização. Isso acelera o acesso a todos os objetos necessários para sombreadores de rastreamento de raio para renderizar superfícies de alta resolução mais rapidamente e com mais detalhes.

Renderização sem vínculo.

Malhas, materiais e texturas podem ser vinculados na memória.

Quatro novos aprimoramentos no Metal 3 ajudam na renderização sem vínculos:

Buffers de argumento-vincula recursos para acesso direto conforme descrito acima.

Arrays ilimitados-permite a definição de várias estruturas Mesh em um array de uma só vez. Shaders podem acessar arrays de qualquer tamanho sem restrições.

Objetos struct de malha em arrays ilimitados agora podem ser acessados ​​diretamente do código C/C++ e threads, embora você deva ter cuidado ao acessá-los devido a problemas de sincronização de thread.

Você pode usar o sinalizador de pré-compilador __METAL_VERSION__ para compilar condicionalmente declarações C, C++ e Mesh no Metal 3 para usar matrizes ilimitadas, se disponíveis na plataforma de destino.

Você pode usar o objeto MTLDevice em tempo de execução para ver se algum determinado dispositivo oferece suporte aos novos recursos. Para usar os novos recursos, você deve ter um dispositivo com as seguintes especificações:

iOS-chip A13 Bionic ou mais recente.

macOS-Um Mac 2016 ou superior.

A seção”Buffers”da documentação do desenvolvedor do Metal da Apple tem uma nova seção sobre buffers de argumento.

Estruturas de aceleração MTLHeap alocadas

Heaps são espaços de memória pré-alocados nos quais recursos e estruturas são carregados antes da renderização. Ser residente no heap significa que os recursos são pré-carregados e prontos para uso instantaneamente quando necessário durante a renderização.

Estruturas de aceleração de rastreamento de raios podem ser alocadas diretamente de objetos MTLHeap junto com buffers e texturas. Isso permite a agregação com outros tipos de recursos. O uso de estruturas de aceleração MTLHeap economiza tempo de CPU em threads.

Aprimoramentos de validação do sombreador

Normalmente, os recursos devem residir na pilha antes da renderização para garantir o desempenho da renderização e a exibição precisa. A falha na alocação antecipada de recursos pode levar a falhas de desempenho e até mesmo à exibição incorreta do objeto durante o desenho.

Para ajudar a garantir que os recursos sejam residentes no heap, o Metal 3 fornece um novo recurso para detectar a falta de residência durante a execução do buffer de comando compartilhado. Para garantir a residência do heap, useResource: agora é enviado para cada elemento em uma cena antes que os objetos da cena sejam enviados para o codificador de rastreamento de raios.

Esta forma de garantir que os recursos são residentes antes da execução dos sombreadores de traçado de raio é chamada de validação de sombreamento no Metal 3.

Esses quatro recursos tornam mais fácil ficar sem ligação no Metal 3.

p>

Além disso, certifique-se de verificar as sessões do WWDC’23″Your guide to Metal ray tracing”e”Go bindless with Metal 3″.

O novo Metal Debugger Dependency Viewer exibe dependências entre recursos de carga de trabalho de renderização.

Para exibir o Dependency Viewer, abra o Metal Debugger e clique na linha Dependencies no navegador à esquerda:

Abrindo o Metal Dependency Debugger.

Um gráfico de dependência aparecerá mostrando as dependências em cada comando de renderização. Clicar em qualquer item em um gráfico de dependência mostra os detalhes desse item na nova barra lateral à direita do Visualizador de Dependência.

Existem dois tipos de dependências exibidas no Metal Debugger Dependency Viewer: fluxo de dados e sincronização. As linhas sólidas no Dependency Viewer mostram o fluxo de dados e as linhas pontilhadas mostram as dependências que mostram a sincronização entre as passagens.

Gráfico do depurador de dependência de metal.

Depurador de sombreador

Há também um depurador de sombreador embutido no Xcode 14 e posterior que permite executar a depuração em nível de pixel do código do sombreador. Você pode selecionar qualquer pixel renderizado exibido em qualquer cena, clicar no botão Shader Debugger no canto inferior direito da janela do depurador e ele pulará para o ponto exato em seu código de shader usado para desenhar o objeto.

Aprimoramentos diversos

A equipe do Metal agora tem quatro recomendações adicionais para otimizar os pipelines de renderização do Metal:

Mova as cópias antes da renderização. Agrupar comandos do mesmo tipo. Evite codificadores vazios. Otimizar usando MTLLoadAction e MTLStoreAction

A última recomendação — MTLLoadAction e MTLStoreAction — são usadas em anexos, ações a serem executadas antes de uma passagem de renderização.

Essas recomendações também são abordadas com mais detalhes na sessão WWDC’23″Go bindless with Metal 3″. Consulte o aplicativo Apple Developer para acessar todos os vídeos da sessão WWDC’23 Metal.

Certifique-se também de verificar o upscaling do MetalFX, que abordamos em outro artigo na semana passada.

Essas melhorias no Metal 3 significam que o Metal está melhor do que nunca como plataforma para seus jogos e aplicativos 3D em dispositivos Apple.

Categories: IT Info