Pergunta

O que são vertex e pixel shaders?

Qual é a diferença entre eles? Qual é o melhor?

Foi útil?

Solução

A Pixel Shader é um (Unidade de Processamento Gráfico) componente GPU que pode ser programado para operar em uma base por pixel e cuidar de coisas como iluminação e lombada mapeamento.

A Vertex Shader também é componente GPU e também é programado usando um específico montagem de como a linguagem , como pixel shaders, mas são orientados para a geometria da cena e pode fazer coisas como a adição de arestas de silhueta de desenho animado a objetos, etc.

Nem é melhor que o outro, cada um tem seus usos específicos. A maioria das placas gráficas modernas que suportam DirectX 9 ou melhor incluir esses recursos.

Existem vários recursos na web para obter uma melhor compreensão de como usar essas coisas. NVidia e ATI são especialmente bons recursos para os documentos sobre este tema.

Outras dicas

DirectX 10 e OpenGL 3 introduziu o Geometry Shader como um terceiro tipo.

A fim pipeline de processamento -

Vertex Shader - Toma um único ponto e pode ajustá-lo. Pode ser usado para trabalho fora complexas calcs iluminação vertex ** como uma instalação para a próxima fase e / ou deformar os pontos ao redor (oscilação, escala, etc).

cada um, resultando primitiva é passado para o

Geometria Shader - Toma cada transformada primitivo (triângulo, etc.) e pode realizar cálculos nele. Isto pode adicionar novos pontos, levá-los ou movê-los, conforme necessário. Isso pode ser usado para adicionar ou remover níveis de detalhe dinamicamente a partir de uma única base de malha, criar malhas matemáticos baseados em um ponto (para sistemas de partículas complexas) e outras tarefas semelhantes.

cada um, resultando primitiva fica scanline convertido e cada pixel das cobertas extensão é passado através da

Pixel Shader (Fragment Shader em OpenGL) - Calcula a cor de um pixel na tela com base no que o shader de vértice passa, texturas encadernados e dados adicionados pelo usuário. Isso não pode ler a tela atual em tudo, basta descobrir o que cor / transparência desse pixel deve ser para o atual primitivo.

esses pixels em seguida, se colocados no tampão de corrente (tela, backbuffer, tornar-se textura, qualquer que seja)

Todos os shaders podem acessar os dados globais, tais como a matriz visão de mundo e o desenvolvedor pode passar em variáveis ??simples para que eles utilizam para a iluminação ou qualquer outra finalidade. Shaders são processados ??em um montador-como a linguagem, mas modernas versões do DirectX e OpenGL têm construído em alto nível c-como compiladores de linguagem construída em chamada HLSL e GLSL respectivamente. NVidia também têm um compilador shader chamado CG que funciona em ambas as APIs.

[editado para refletir a ordem incorreta eu tinha antes (Geometry-> Vertex-> Pixel) como observado em um comentário.]

Existem agora 3 novos shaders utilizados em DirectX 11 para tessellation. A nova ordem shader completa é Vertex-> Hull-> Tessellation-> domínio-> Geometry-> Pixel. Eu não usei esses novos ainda assim não me sinto qualificado para descrevê-los com precisão.

vertex e pixel shaders fornecer diferentes funções dentro do pipeline de gráficos. vertex shaders colher e tratar dados de vértice relacionadas (posições, normais, texcoords).

pixel (ou, mais precisamente, fragmento) sombreamentos tomar valores interpolados a partir daqueles processado no shader Vertex e gerar fragmentos de pixel. A maioria das coisas "cool" é feito em pixel shaders. Isto é onde as coisas como pesquisa de textura e iluminação lugar tomar.

DirectX específico:

Shader:

conjunto de programas que além características gráficas para os objetos que não estão definidos no pipeline de processamento fixo implementos. Devido a isso, podemos ter nossos próprios efeitos gráficos de acordo com as nossas necessidades -. Ou seja, já não estão limitados a pré-definidos “fixo” operações.

HLSL: (Alto Nível Shading Language):

HLSL é uma linguagem de programação como C ++, que é usado para implementar shaders (Pixel Shaders / Vertex Shaders).

Vertex Shaders:

Um vértice shader é um programa executado em GPU da placa gráfica que opera em cada vértice individualmente. Isso facilita podemos escrever nosso próprio algoritmo personalizado para trabalhar com o vértice de.

Pixel Shaders:

Um pixel shader é um programa executado em GPU da placa gráfica durante o processo rasterization para cada pixel. Isso nos dá uma facilidade para acessar / manipular os pixels individuais diretamente. Este acesso directo ao pixels nos permite alcançar uma variedade de efeitos especiais, tais como multitexturing, iluminação por pixel, profundidade de campo, simulação nuvem, simulação de incêndio, e as técnicas de sombreamento sofisticados.

Nota: Ambos Vertex Shaders e Pixel Shaders (programas) deve ser compilado usando versão específica do compilador antes do uso. Compilação pode ser feito apenas como um chamado de uma API com os parâmetros necessários, como nome do arquivo, a função de entrada principal etc.,

Em termos de desenvolvimento de um shader Pixel é um pequeno programa que opera em cada pixel individualmente, da mesma forma um shader Vertex opera em cada vértice individualmente.

Estes podem ser usados ??para criar efeitos especiais, sombras, iluminação, etc ...

Uma vez que cada Pixel / Vertex é operada individualmente estes shaders se prestam à arquitetura altamente paralela de processadores modernos gráficos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top