Sombreador

(Redirecionado de Sombreamento de Phong)

Em computação gráfica, um shader ou sombreador[1] é um programa de computador usado para fazer shading: a produção de níveis de cor apropriadas para uma imagem, ou, na era moderna, também produzir efeitos especiais ou pós-processamento de vídeo. São executados na GPU.[2]

Shaders são comumente usados para produzir iluminação e sombreado em modelagem 3D.
Essa imagem ilustra o Sombreamento de Phong, um dos primeiros modelos de shading de computador desenvolvido.

HistóriaEditar

O uso do termo "shader" foi primeiro introduzido pela Pixar com a versão 3.0 da especificação da interface RenderMan, originalmente publicado em maio de 1988.[3]

Com a evolução das unidades de processamento gráfico, várias bibliotecas de software para processamento de gráficos como o OpenGL e Direct3D começaram a suportar shaders. A primeira GPU com suporte a shaders apenas suportava sombreamento de pixéis, mas sombreamento de vértices foi rapidamente introduzido assim que os desenvolvedores começaram a conhecer a capacidade dos shaders. A primeira placa gráfica com sombreamento de pixéis programáveis foi a Nvidia GeForce 3 (NV20), lançado em 2001.[4] Os shaders geométricos foram primariamente introduzidos com o Direct3D 10 e OpenGL 3.2. Eventualmente, hardwares para gráficos evoluíram para um modelo unificado de sombreamento.

DesenhoEditar

Shaders são programas simples que descrevem o devido tratamento tanto de um vértice quanto de um pixel. Sombreamento de vértice descreve os atributos (posição, coordenadas de texturas, cor, etc.) de um vértice, enquanto em pixéis é descrito o tratamento (cor, profundidade, valores alpha, etc.) do pixel. O sombreamento de vértice é feito em cada vértice primitivo; assim um vértice entra, e outro (atualizado) sai. Então, cada vértice é renderizado em uma série de pixéis (blocos de memória) que vão ser eventualmente ser mandados para uma tela.


Pipelines gráficas básicas seguem esse modelo:

  • A CPU manda instruções (compilados em linguagens de sombreamento) e dados geométricos para a unidade de processamento gŕafico (GPU), localizado na placa gráfica.
  • Dentro do sombreamento de um vértice, sua geometria é transformada.
  • Se o sombreamento geométrico está na GPU e ativo, algumas mudanças geométricas são feitas na cena
  • Se o sombreamento de tesselação está na GPU e ativo, a geometria na cena pode ser subdividida.
  • A geometria calculada é então triangulada (subdividida em triângulos).
  • Os triângulos são então divididos em fragmentos quádruplo (2 x 2 fragmentos primitivos)
  • Os fragmentos quádruplos são então modificados de acordo com o sombreamento de fragmentos
  • O teste de profundidade é então feito; os fragmentos que passarem serão então mandadados para serem desenhados na tela e podem ser misturados em um frame buffer.

Esses passos são seguidos em uma maneira de transformar dados tridimensionáis (as vezes bidimensionáis também) em dados bidimensionáis utéis para ser desenhado em uma tela. Geralmente, isso é uma enorme matrix de pixéis ou um frame buffer.

TiposEditar

Aqui estão três tipos mais comuns de sombreamento (pixel, e vértice), com outros recentemente adicionados. Enquanto placas gráficas mais antigas usam unidades de processamento separadas, placas mais novas usam sombreamento unificado, capaz de executar qualquer tipo de sombreamento.

Sombreamentos 2DEditar

Sombreamentos 2D agem nas imagens digitais, também são chamados de textura na área de computação gráfica. Eles modificam atributos de pixéis. O sombreamento 2D também é utilizado em partes na geometria 3D. O único sombreamento 2D hoje é o chamado sombreamento de pixéis.

Sombreamento de pixéisEditar

No sombreamento de pixéis, também chamados sombreamento de fragmentos, é feito vários cálculos para cor e outros atributos de cada "fragmento". O tipo mais simples de sombreamento de pixel retorna (saída) uma pixel como um valor de cor; tipos mais complexos podem utilizar de múltiplas entradas/saídas[5]. O sombreamento de pixéis variam de simplesmente devolver a mesma cor, apenas aplicando iluminação, até mapeamento de colisões, sombras, destaques espetaculares, translucidez e outros. Eles podem alterar a profundidade do fragmento, ou devolver mais de uma cor se múltiplos alvos de renderização estão ativos.

Sombreamentos 3DEditar

Sombreamentos 3D agem em modelos 3D mas pode também acessar as cores e texturas utilizadas para desenhar o modelo ou mesh. Sombreamento de Vértices é o mais antigo sombreamento 3D, geralmente aplicando mudanças em uma base por-vértice.

Sombreamento de vérticesEditar

São os mais estabilizados e comuns tipos de sombreamento 3D. Eles percorrem uma vez cada vértice dado para o processador gráfico. O objetivo é transformar cada posição 3D de um vértice em um espaço virtual para uma coordenada 2D quer será mostrada na tela. Sombreadores de vértices podem manipular propriedades como posição, cor e coordenada de texturas, mas não criar novos vértices.

Ray tracingEditar

Ray tracing já é suportado pela Microsoft com o DirectX Raytracing, pelo grupo Khronos com o Vulkan, GLSL, e SPIR-V,[6] e também pela Apple com o Metal.

Processamento paraleloEditar

Sombreamentos são escritos para aplicar transformações para uma grande quantidade de elementos ao mesmo tempo, por exemplo, para cada pixel em uma área na tela, ou para cada vértice de um modelo. Várias GPUs modernas apresentam múltiplas pipelines de sombreamento para se adequar ao processamento paralelo.

Um modelo de programação com sombreamento é parecido com uma função de alta ordem para renderização, recebendo os sombreamentos como argumentos, e providenciando um fluxo de dados específico entre os resultados intermediários, habilitando ambos paralelismo de dados (através pixéis, vérticies, etc.) e paralelismo de pipelines (entre os estágios).

ProgramaçãoEditar

A linguagem onde o sombreado é programado depende bastante da plataforma alvo. A linguagem de sombreamento oficial do OpenGL e OpenGL ES é a Linguagem de Sombreamento OpenGL, conhecido como GLSL, e a linguagem oficial do Direct3D é a Linguagem de Sombreamento de Alto Nível, chamado de HLSL.

Editores de sombreamentoEditar

Plataformas modernas de desenvolvimento de video games como Unity, Unreal Engine e Godot cada vez mais incluêm editores de texto baseado em nós que podem criar sombreamentos sem a necessidade de realmente programar; o usuário é invés disso apresentado com gráficos dirigidos dos nós conectados que permitem direcionar várias texturas, mapas, e funções matemáticas para o valores de saída. A compilação automática então cria um sombreador compilado

Ver tambémEditar

Referências

  1. «Designer de sombreador». Microsoft Developer Network. Consultado em 1 de Fevereiro de 2016 
  2. DEMARTINI, FELIPE (2 de Março de 2011). «Shaders: o que são e para que servem?». Tecmundo Games. Consultado em 1 de Fevereiro de 2016 
  3. «A Especificação da Interface RenderMan (em inglês)» 
  4. Lilly, Paul (19 de maio de 2009). «Do voodoo para a GeForce: Incrível história dos Gráficos 3D (em inglês)». PC GAMER 
  5. «Tutorial GLSL - Sombreamento de fragmentos (em inglês)». 09 de junho de 2011  Verifique data em: |data= (ajuda)
  6. «Lançamento da última especificação do Vulkan Ray Tracing (em inglês)». Blog. Khronos Group 

Ligações externasEditar

 
O Commons possui uma categoria com imagens e outros ficheiros sobre Sombreador
  Este artigo sobre computação gráfica é um esboço. Você pode ajudar a Wikipédia expandindo-o.