Unity3D: Uso e desempenho de shaders integrados

Recomendado: adicione o NSDT Scene Editor ao seu conjunto de ferramentas 3D
Conjunto de ferramentas 3D: NSDT Jianshi Digital Twin

Uso e recursos de shader integrados

Shaders no Unity são usados ​​por meio de __material__, que essencialmente combina código de shader com textura e outros parâmetros. Uma explicação detalhada da relação shader/material é fornecida aqui.

As propriedades do material serão exibidas no Inspetor ao selecionar o próprio material ou selecionar um __GameObject__ que utiliza o material   . O painel Material Inspector (Inspector) tem esta aparência:

Cada material terá uma aparência diferente no Inspector, dependendo do shader específico usado. O próprio shader determina os tipos de propriedades que podem ser ajustadas no Inspetor. Para obter uma descrição detalhada do Inspetor de materiais, consulte a página Referência de materiais. Lembre-se de que os shaders são implementados por meio de materiais. Assim, embora o shader defina as propriedades que serão exibidas no Inspetor, cada material na verdade contém dados de ajuste de controles deslizantes, cores e texturas. A coisa mais importante a lembrar a esse respeito é que você pode usar um único shader em vários materiais, mas não pode usar vários shaders em um único material.

nome do sombreador

Alterar o nome de um shader antigo pode afetar sua funcionalidade. Isso ocorre porque antes do Unity 5.0, algumas funcionalidades de um sombreador eram determinadas por seu caminho e nome. Ainda é assim que os shaders legados funcionam. Para obter mais informações, consulte Nomes de shaders herdados

considerações de desempenho

Existem muitos fatores que afetam o desempenho geral do seu jogo. Esta página será dedicada a considerações de desempenho para shaders integrados. O desempenho de um shader depende principalmente de duas coisas: o próprio shader e o caminho de renderização usado pelo projeto ou câmera específica. Para dicas de desempenho ao escrever seus próprios shaders, consulte a página de desempenho do shader ShaderLab.

Caminhos de renderização e desempenho de shader

Dos caminhos de renderização suportados pelo Unity, o sombreamento diferido e os caminhos de iluminação de vértice têm o desempenho mais previsível. No sombreamento diferido, cada objeto geralmente é desenhado uma vez (independentemente de quais luzes o afetam). Da mesma forma, na iluminação de vértice, cada objeto geralmente é desenhado uma vez. Portanto, a diferença de desempenho dos shaders depende principalmente da quantidade de texturas que eles utilizam e dos cálculos que realizam.

Desempenho do Shader no caminho de renderização direto

No caminho de renderização direto, o desempenho do shader depende de dois fatores: o próprio shader e a iluminação da cena. As seções a seguir descrevem isso em detalhes. Do ponto de vista do desempenho, existem duas categorias básicas de shader: __Vertex-Lit__ e __Pixel-Lit__.

Os sombreadores de iluminação de vértice no caminho de renderização direto são sempre mais baratos que os sombreadores de iluminação de pixel. Esses shaders usam todas as luzes simultaneamente para calcular a iluminação com base nos vértices da malha. Portanto, não importa quantas luzes estejam no objeto, ele só precisa ser desenhado uma vez.

O shader __pixel lighting__ calcula a iluminação final para cada pixel desenhado. Portanto, o objeto deve ser desenhado uma vez para as luzes ambiente e direcionais principais, e uma vez para cada luz adicional. Portanto, a solução são N passagens de renderização, onde N representa o número final de pixels iluminados no objeto. Essa abordagem aumenta a carga de trabalho da CPU processando e enviando comandos para a placa gráfica, bem como processando vértices e desenhando pixels na placa gráfica. O tamanho de um objeto com iluminação de pixel na tela também afeta a rapidez com que o objeto é desenhado. Quanto maior o objeto, mais lento ele desenha.

Portanto, há um custo de desempenho para o sombreador de iluminação de pixel, mas esse custo pode produzir ótimos efeitos: sombras, mapas normais, belos realces especulares e silhuetas claras, para citar alguns.

Lembre-se de que a iluminação pode ser forçada para o modo pixel ("importante") ou vértice/SH ("não importante"). Quaisquer luzes de vértice iluminadas em um sombreador de luz de pixel serão calculadas com base nos vértices do objeto ou no objeto inteiro e não contarão para o custo de renderização ou efeitos visuais associados à luz de pixel.

Desempenho geral do shader

A ordem de complexidade dos shaders integrados, do menor para o maior, é aproximadamente a seguinte:

  • Sem luz (apagado) . Esta é apenas uma textura e não é afetada por nenhuma iluminação. * Iluminação de vértice (VertexLit) .
  • Difuso .
  • Normal mapeado . Este custa um pouco mais que o difuso: adiciona uma textura (mapa normal) e algumas instruções de shader.
  • Especular . Este item adiciona cálculos de realce especular.
  • Especular mapeado normal . Novamente, isso é um pouco mais caro que o especular.
  • Paralaxe Normal mapeado . Isso adiciona cálculo de mapa normal de paralaxe.
  • Especular mapeado normal paralaxe . Este item adiciona cálculo de mapa normal de paralaxe e cálculo de realce especular.

Shaders simplificados em dispositivos móveis

Além disso, o Unity possui vários shaders simplificados para plataformas móveis, localizados na categoria “Mobile”. Esses shaders também estão disponíveis em outras plataformas, portanto, se você tolerar o fato de que seu uso é simplificado (por exemplo, reflexões especulares aproximadas, sem suporte de cores por material, etc.), experimente!

Para ver as simplificações específicas que foram feitas para cada shader, verifique  .shader o arquivo no pacote "Built-in Shaders", que está listado em alguns comentários no topo.

Alguns exemplos de alterações comuns em shaders móveis incluem:

  • O sombreador não possui cor de material ou cor primária usada para sombreamento.
  • Para shaders com mapas normais, são usados ​​​​ladrilhos e deslocamento da textura base.
  • Os sombreadores de partículas não suportam  AlphaTest ou  ColorMask.
  • Funcionalidade e suporte de iluminação limitados, por exemplo, alguns shaders suportam apenas uma luz direcional.

Acho que você gosta

Origin blog.csdn.net/jianshi2023/article/details/130527825
Recomendado
Clasificación