Sombreador padrão MRTK2

Exemplos de sombreador padrão

O sistema de sombreamento Padrão do MRTK2 utiliza um único sombreador flexível que pode obter visuais semelhantes ao Sombreador Padrão do Unity, implementar Sistema Fluent Design princípios e manter o desempenho em dispositivos de realidade misturada.

Cenas de exemplo

Você pode encontrar os exemplos de material de sombreador na cena MRTK/Examples/Demos/StandardShader/Scenes/MaterialGallery em . Todos os materiais nesta cena estão usando o sombreador MRTK/Standard.

Galeria de materiais

Você pode encontrar uma cena de comparação para comparar e testar o sombreador MRTK/Standard em relação ao exemplo de sombreador Unity/Standard na cena StandardMaterialComparison em MRTK/Examples/Demos/StandardShader/Scenes/.

Comparação de materiais

Arquitetura

O sistema de sombreamento MRTK/Standard é um "sombreador uber" que usa o recurso 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 material, ele só incorre em custo de desempenho para os recursos que habilitou.

Inspetor de materiais

Existe um inspetor de material personalizado para o sombreador MRTK/Standard chamado MixedRealityStandardShaderGUI.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.

Inspetor de Materiais

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 do sombreador MRTK/Standard é espelho os modos de renderização encontrados no sombreador Unity/Standard. O sombreador MRTK/Standard também inclui um modo de renderização aditivo e modo de renderização 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 quaisquer realces especular ou reflexões que ele possa ter. Esse modo será útil se você quiser animar um objeto desbotado dentro ou fora. Não é adequado para renderizar materiais transparentes realistas, como plástico transparente ou vidro, porque as reflexões e os destaques também serão desbotados.
Transparente Adequado para renderizar materiais transparentes realistas, como plástico transparente ou vidro. Nesse modo, o próprio material assumirá valores de transparência (com base no canal alfa da textura e no alfa da cor de 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.

Modos de renderizaçã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.

Desempenho

Uma das principais vantagens de usar o sombreador Padrão do MRTK sobre o sombreador padrão do Unity é o desempenho. O Sombreador Padrão do MRTK é extensível para utilizar apenas os recursos habilitados. No entanto, o sombreador Padrão do MRTK também foi escrito para fornecer resultados estéticos comparáveis como o sombreador Standard do Unity, mas a um custo muito menor. Uma maneira simples de comparar o desempenho do sombreador é por meio do número de operações que precisam ser executadas na GPU. É claro que a magnitude dos cálculos pode flutuar por recursos habilitados e outras configurações de renderização. Mas, em geral, o sombreador Padrão do MRTK executa significativamente menos computação do que o sombreador Standard do Unity.

Exemplo de estatísticas do sombreador Standard do Unity

Estatísticas do sombreador padrão do Unity

Exemplo de estatísticas de sombreador padrão do MRTK

Estatísticas do sombreador padrão do MRTK

Observação

Esses resultados podem ser gerados selecionando e exibindo um ativo de sombreador no inspetor do Unity e, em seguida, clicando no botão Compilar e mostrar código .

Iluminação

O MRTK/Standard usa uma aproximação simples para iluminação. Como esse sombreador não calcula a correção física e a conservação de energia, ele renderiza de forma rápida e eficiente. Blinn-Phong é a técnica de iluminação primária que é combinada com Fresnel e iluminação baseada em imagem para iluminação aproximada de base física. O sombreador dá 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). Luzes de ponto dinâmico, luzes spot ou qualquer outra luz do Unity não serão consideradas na iluminação em tempo real.

Harmônicos esféricos

O sombreador usará Investigações Leves para aproximar luzes na cena usando Harmônicos Esféricos, se habilitado. Os cálculos de harmônicos esféricos são executados por vértice para reduzir o custo de cálculo.

Lightmapping

Para iluminação estática, o sombreador respeitará os lightmaps criados pelo sistema Lightmapping do Unity. Basta marcar o renderizador como estático (ou estático de mapa de luz) para usar lightmaps.

Luz de foco

Luz de proximidade

Suporte ao Pipeline de Renderização Com Script Leve

O MRTK contém um caminho de atualização para permitir que os desenvolvedores utilizem o LWRP (Lightweight Scriptable Render Pipeline) do Unity com sombreadores MRTK. Testado no pacote do Unity 2019.1.1f1 e lightweight RP 5.7.2. Para obter instruções sobre como começar a usar o LWRP, consulte esta página.

Para executar a atualização do MRTK, selecione: Realidade Misturada Toolkit –> Utilitários –> Atualizar o Sombreador Padrão do MRTK para o Pipeline de Renderização Leve

Atualização lwrp

Depois que a atualização ocorrer, o sombreador MRTK/Standard será alterado e todos os materiais magenta (erro de sombreador) deverão ser corrigidos. Para verificar se a atualização ocorreu com êxito, marcar console para: Ativos atualizados/MixedRealityToolkit/StandardAssets/Shaders/MixedRealityStandard.shader para uso com o Pipeline de Renderização Leve.

Suporte a UGUI

O sistema de sombreamento Padrão do MRTK funciona com o sistema de interface do usuário interno do Unity. Nos componentes da interface do usuário do Unity, a matriz de unity_ObjectToWorld não é a matriz de transformação da transformação local em que o componente Gráfico reside, mas a de seu Canvas pai. Muitos efeitos de sombreador MRTK/Standard exigem que a escala do 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.

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

Uma Tela no MRTK solicitará a adição de um ScaleMeshEffect.cs quando for necessário:

efeito de malha de escala

Combinador de textura

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. Por exemplo:

exemplo de mapa de canais

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

Ou você pode usar a Ferramenta de Combinador de Textura mrtk. Para abrir a ferramenta, selecione: Realidade Misturada Toolkit –> Utilitários –> Combinador de Textura que abrirá a janela abaixo:

exemplo do combinador de textura

Essa janela pode ser preenchida automaticamente selecionando um sombreador Padrão do Unity e clicando em "Preencher automaticamente do Material Padrão". Ou você pode especificar manualmente uma textura (ou valor constante) por canal vermelho, verde, azul ou alfa. A combinação de textura é acelerada por GPU e não exige que a textura de entrada seja acessível à CPU.

Documentação de recursos adicionais

Abaixo estão detalhes extras sobre alguns detalhes do recurso disponíveis com o sombreador MRTK/Standard.

Recorte primitivo

recorte primitivo

Estruturas de tópicos de malha

Muitas técnicas de estrutura de malha são feitas usando uma técnica de pós-processamento. O pós-processamento fornece ótimas estruturas de qualidade, mas pode ser proibitivamente caro em muitos dispositivos Realidade Misturada. Você pode encontrar uma cena que demonstra o uso de estruturas de tópicos de malha na cena OutlineExamples em MRTK/Examples/Demos/StandardShader/Scenes/.

Estrutura de Tópicos de Malha

MeshOutline.cs e MeshOutlineHierarchy.cs podem ser usados para renderizar uma estrutura de tópicos em torno de um renderizador de malha. Habilitar esse componente introduz uma passagem de renderização adicional do objeto que está sendo descrito, mas foi projetado para ser executado com desempenho em dispositivos de Realidade Misturada móveis e não utiliza nenhum processo de postagem. As limitações desse efeito incluem não funcionar bem em objetos que não são impermeáveis (ou que devem ter dois lados) e problemas de classificação de profundidade podem ocorrer em objetos sobrepostos.

Os comportamentos de estrutura de tópicos foram projetados para serem usados em conjunto com o sombreador MRTK/Standard. Os materiais de estrutura de tópicos geralmente são uma cor não iluminada sólida, mas podem ser configurados para obter uma ampla matriz de efeitos. A configuração padrão de um material de estrutura de tópicos é a seguinte:

Material da Estrutura de Tópicos de Malha
  1. Gravação de profundidade – deve ser desabilitada para materiais de estrutura de tópicos para garantir que a estrutura de tópicos não impeça a renderização de outros objetos.
  2. Extrusão de vértice – deve ser habilitada para renderizar a estrutura.
  3. Usar normal suave – essa configuração é opcional em algumas malhas. A extrusão ocorre movendo um vértice ao longo de um vértice normal, em algumas malhas extrudadas ao longo do normal padrão causará descontinuidades na estrutura. Para corrigir essas descontinuidades, você pode marcar essa caixa para usar outro conjunto de normais suavizados que são gerados porMeshSmoother.cs

MeshSmoother.cs é um componente que pode ser usado para gerar automaticamente normais suavizados em uma malha. Esse método agrupa vértices em uma malha que compartilha o mesmo local no espaço e, em seguida, encontra a média dos normais desses vértices. Esse processo cria uma cópia da malha subjacente e deve ser usado somente quando necessário.

Contorno de Normas Suaves
  1. Normais suaves geradas por meio de MeshSmoother.cs.
  2. Normais padrão usadas, observe os artefatos ao redor dos cantos do cubo.

Teste de estêncil

Suporte interno ao teste de estêncil configurável para obter uma ampla variedade de efeitos. Como os portais:

Teste de estêncil

Suporte a cores em instâncias

Suporte a cores em instâncias para fornecer a milhares de propriedades de material exclusivo de malhas com instâncias de GPU:

propriedades de instância

Mapeamento triplanar

O mapeamento triplanar é uma técnica para texturizar uma malha de forma programática. Geralmente usado em terrenos, malhas sem UVs ou difíceis de desembrulhar formas. 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 amostras de textura, portanto, use com moderação em situações críticas de desempenho.

triplanar

Extrusão de vértice

Extrusão de vértice no espaço mundial. Útil para visualizar volumes delimitados extrudados ou transições em malhas de entrada/saída.

escala de mapa normal 1

Diversos

Uma caixa de seleção para controlar otimizações albedo. Como uma otimização, as operações albedo são desabilitadas quando nenhuma textura albedo é especificada. Isso é útil para controlar o carregamento remoto de textura.

Basta marcar esta caixa:

atribuição albedo

Há suporte para texturas de recorte por pixel, anti aliasing baseado em borda local e dimensionamento normal do mapa.

escala de mapa normal 2

Confira também