Sombreador padrão das ferramentas gráficas – MRTK3

O sistema de sombreamento Padrão das Ferramentas de Gráfico utiliza um sombreador flexível que pode obter elementos visuais semelhantes ao sombreador Padrão (ou Iluminado) do Unity. Ele implementa os princípios do Sistema Fluent Design e permanece em desempenho em dispositivos de realidade misturada.

Exemplo de galeria de material de sombreador padrão

Amostra

Consulte o exemplo da Galeria de Materiais para obter várias demonstrações de variantes de sombreador de Ferramentas de Gráfico/Padrão. Para obter exemplos de Ferramentas de Gráficos/Tela Padrão, consulte o exemplo UnityUI

Arquitetura

O sistema de sombreamento de Ferramentas de Gráficos/Padrão é um "sombreador superior" que usa o recurso de variante do programa de sombreador do Unity para gerar automaticamente o código de sombreador ideal com base nas propriedades do material. Quando um usuário seleciona propriedades de material no inspetor de materiais, ele só incorre em custo de desempenho para os recursos que habilitou.

Para dar melhor suporte a fluxos de trabalho tradicionais do Unity e fluxos de trabalho (tela) do UnityUI, o sistema de sombreamento de Ferramentas de Gráfico/Padrão tem dois pontos de entrada de sombreador:

Contexto Padrão UnityUI
Nome Ferramentas de gráficos/Padrão Ferramentas de gráficos/Padrão Canvas
Sombreador GraphicsToolsStandard GraphicsToolsStandardCanvas

Ambos sombreadores são praticamente idênticos porque compartilham um código de sombreador comum. As Ferramentas de Gráficos/Tela Padrão contém uma lógica extra específica do UnityUI.

O sombreador a seguir inclui o sistema de sombreamento das Ferramentas de Gráficos/Padrão:

Incluir Finalidade
GraphicsToolsStandardProgram Contém os métodos de ponto de entrada de sombreador do vértice e fragmento (a implementação principal).
GraphicsToolsStandardMetaProgram Contém os métodos de ponto de entrada de sombreador do vértice e fragmento usados pelo Unity para iluminação estática (não usada em runtime).
GraphicsToolsStandardInput Definições para atributos de vértice, interpoladores de vértice, texturas, amostras de textura, buffers por constantes de material, propriedades globais e constantes.
GraphicsToolsCommon Métodos reutilizável e definição.

Suporte ao pipeline de renderização

O Unity alguns pipelines de renderização para os desenvolvedores escolherem. O sistema de sombreamento das Ferramentas de Gráficos Padrão foi projetado para funcionar automaticamente com o pipeline de renderização interno do Unity ou o URP (Pipeline de Renderização Universal). Não é necessário alternar sombreadores com base no pipeline. Veja abaixo uma matriz de suporte:

Pipeline Com suporte Exceções
Pipeline de Renderização Interno Não há suporte para "Modos de Desfoque" de acrílico.
URP (Pipeline de Renderização Universal)
HDRP (Pipeline de Renderização de Alta Definição)
Pipeline de Renderização Personalizada O suporte depende de como o pipeline é criado.

Suporte do UnityUI

O sistema de sombreamento das Ferramentas de Gráficos Padrão funciona com o sistema de interface do usuário interno do Unity chamado UnityUI. Graphics Tools/Standard Canvas deve ser usado para todos os materiais nas telas do UnityUI.

Canvas ou CanvasRenderer nas ferramentas de gráficos solicitará a adição de ScaleMeshEffect.cs quando for necessário:

Aviso do inspetor de efeitos de malha de escala

Em componentes da UnityUI, a matriz unity_ObjectToWorld (ou UNITY_MATRIX_M no URP) não é a matriz de transformação da transformação local em que o componente gráfico reside, mas a de sua tela pai. Muitos efeitos de sombreador das Ferramentas de Gráficos/Tela Padrão exigem que a escala de objeto seja conhecida. Para resolver esse problema, ScaleMeshEffect.cs armazenará informações de escala em atributos de canal UV durante a construção da malha da interface do usuário.

Dica

Ao usar um componente de Imagem do Unity, é recomendável especificar "Nenhum (Sprite)" como a Imagem de Origem para impedir que a interface do usuário do Unity gere vértices extras.

Inspetor de materiais

Existe um inspetor de material personalizado para os sombreadores das Ferramentas de Gráficos/Padrão e das Ferramentas de Gráficos/Tella Padrãochamado StandardShaderGUI.cs. O inspetor habilita/desabilita automaticamente os recursos do sombreador, com base na seleção do usuário e em auxiliares na configuração do estado de renderização. Para obter mais informações sobre cada recurso , passe o mouse sobre cada propriedade no Editor do Unity para obter uma dica de ferramenta.

Observação

A interface do usuário do inspetor é dinâmica. Partes da interface do usuário serão alteradas conforme os recursos forem habilitados e desabilitados.

Inspetor de material para ferramentas de gráficos/padrão

O inspetor pode ser dividido em algumas áreas de recursos, conforme descrito abaixo.

Modo de renderização

A primeira parte do inspetor controla o estado de renderização do material. O Modo de Renderização determina quando e como um material será renderizado. O objetivo dos sombreadores Graphics Tools/Standard e Graphics Tools/Standard Canvas é espelhar os modos de renderização encontrados no sombreador Unity/Padrão. Os sombreadores de Ferramentas de Gráficos/PadrãoFerramentas de Gráficos/Tela Padrão também incluem modos de renderização Aditivo e Personalizado para controle de usuário completo.

Modo de renderização Descrição
Opaco (Padrão) Adequado para objetos sólidos normais sem áreas transparentes.
Recorte Permite a criação de efeitos transparentes com bordas duras entre as áreas opacas e transparentes. Nesse modo, não há áreas semitransparente. A textura é 100% opaca ou invisível. Isso é útil ao usar a transparência para criar a forma de materiais, como vegetação.
Esmaecimento Permite que os valores de transparência esmaeçam completamente um objeto, incluindo realces especulares ou reflexões que ele possa ter. Esse modo será útil se você quiser animar um objeto aparecendo ou desaparecendo. Não é adequado para renderizar materiais transparentes realistas, como plástico transparente ou vidro, porque os reflexos e os destaques também serão esmaecidos.
Transparente Adequado para renderizar materiais transparentes realistas, como plástico transparente ou vidro. Nesse modo, o material assumirá valores de transparência (com base no canal alfa da textura e no alfa da cor da tonalidade). No entanto, reflexões e realces de iluminação permanecerão visíveis com total clareza, como é o caso de materiais transparentes reais.
Aditiva Habilita um modo de combinação aditivo, que soma a cor do pixel anterior com a atual. Esse é o modo de transparência preferencial para evitar problemas de classificação de transparência.
Personalizado Permite que todos os aspectos do modo de renderização sejam controlados manualmente. Somente para uso avançado.

Lista de exemplo de modos de renderização

Modo de seleção

Modo de seleção Descrição
Desativado Desabilita a seleção facial. A seleção só deve ser Desativada quando uma malha de dois lados for necessária.
Front Habilita a seleção facial.
Voltar (Padrão) Habilita a seleção da face traseira. A seleção da face traseira deve ser habilitada com a maior frequência possível para melhorar o desempenho de renderização.

Mapas principais

A função principal desta seção é controlar a cor albedo do material e as opções de renderização fisicamente baseadas.

Para melhorar a paridade com o sombreador padrão do Unity por pixel, os valores metálico, de suavidade, emissivo e oclusão podem ser controlados pelo empacotamento de canal.

Ao usar o empacotamento de canal, você só precisa amostrar e carregar uma textura na memória em vez de quatro separadas. Ao gravar seus mapas de textura em um programa como o Substance ou o Photoshop, você pode empacotá-los como o seguinte:

Canal Propriedade
Vermelho Metálico
Verde Oclusão
Azul Emissões (escala de cinza)
Alpha Suavidade

A seção principal do mapa também tem uma opção para mapeamento triplanar e anti-atribuição de alias de super amostra. Ela também contém a opção de adicionar mapas de textura de emissão colorida depois que a caixa de seleção Emissão for marcada.

O mapeamento triplanar é uma técnica para texturizar uma malha de forma programática. Geralmente, ele é usado em terrenos, malhas sem UVs ou formas difíceis de desembrulhar. Essa implementação dá suporte à projeção de espaço local ou mundial, à especificação de suavidade de combinação e ao suporte normal ao mapa. Observe que cada textura usada requer três exemplos de textura, portanto, use com moderação em situações críticas de desempenho.

A anti-atribuição de alias de super amostra deve ser usada em todos os materiais que exibem um ícone ou imagem em que os detalhes são críticos à distância.

Opções de renderização

As opções de renderização controlam principalmente as configurações de iluminação de um material. Esta seção de material também contém outros recursos que controlam a cor, a translucência ou a posição de uma superfície. Para obter mais detalhes sobre iluminação, veja abaixo.

Comparações de iluminação

Opções do Fluent

O Fluent é uma estrutura de design usada em componentes da interface do usuário em produtos da Microsoft. Esta seção contém alguns recursos que ajudam a emular os princípios do sistema de design do Fluent em superfícies arbitrárias. Se você estiver procurando sombreadores do Fluent sob medida, eles podem ser encontrados no namespace de sombreador das Ferramentas de Gráficos/Tela e Ferramentas de Gráficos/Não Tela.

Opções avançadas

Semelhante à seção avançada nos sombreadores internos do Unity. Esta seção controla a ordem de renderização e se as variantes de instanciação de GPU devem ser compiladas. Além disso, há suporte para teste de estêncil configurável para obter uma ampla gama de efeitos. Como os portais:

Exemplo de portal

Iluminação

Os sombreadores das Ferramentas de Gráficos/Padrão e Ferramentas de Gráficos/Tela Padrão usam uma aproximação simples para iluminação. Como os sombreadores não calculam a correção física e a conservação de energia, eles são renderizados de forma rápida e eficiente. Blinn-Phong é a técnica de iluminação primária usada e misturada com Fresnel e iluminação baseada em imagem para iluminação aproximada fisicamente. Os sombreadores dão suporte às seguintes técnicas de iluminação:

Luz direcional

O sombreador respeitará a direção, a cor e a intensidade da primeira Luz Direcional do Unity na cena (se habilitada).

Importante

Luzes de ponto dinâmico, destaques ou qualquer outra luz do Unity não serão consideradas na iluminação em tempo real. No momento, as máscaras de luz não têm suporte.

Harmônicos esféricos

O sombreador usa sondas de luz para aproximar as luzes na cena usando harmônicos esféricos, se habilitados.

Importante

Os cálculos harmônicos esféricos são executados por vértice e as sondas de luz não são misturadas para reduzir os custos de cálculo.

Lightmapping

Para iluminação estática, o sombreador respeitará os lightmaps criados pelo sistema de lightmapping do Unity. Marque o renderizador como estático (ou lightmap estático) para usar lightmaps.

Desempenho

Uma das principais vantagens de usar o sistema de sombreamento padrão das Ferramentas de Gráficos ao invés do sombreador padrão do Unity é o desempenho. As Ferramentas de Gráficos/Padrão e Ferramentas de Gráficos/Tela Padrão são arquitetadas para utilizar apenas os recursos habilitados. No entanto, as Ferramentas de Gráficos/Padrão e Ferramentas de Gráficos/Tela Padrão também foram gravadas para fornecer resultados estéticos comparáveis como o sombreador padrão do Unity, mas a um custo muito menor. Uma maneira simples de comparar o desempenho do sombreador é pelo número de operações que precisam ser executadas na GPU. A magnitude dos cálculos pode flutuar dependendo dos recursos habilitados e outras configurações de renderização.

Dica

Como regra geral, você deve usar o sombreador padrão das Ferramentas de Gráficos em vez dos sombreadores internos em dispositivos de realidade misturada móvel. Mas, é sempre interessante criar um perfil do cenário com ferramentas como o RenderDoc.

Confira também