Sombreador: diferenças entre revisões

Conteúdo apagado Conteúdo adicionado
m Adicionando proposta de fusão
Modificações referente ao site da Wikipedia em inglês.
Etiquetas: Editor Visual Hiperligações de desambiguação
Linha 1:
{{Fusão de|1=Sombreamento de Gouraud|data=março de 2021}}
{{Fusão de|1=GLSL|data=março de 2021}}
[[Arquivo:Phong-shading-sample.jpg|thumb|Shaders são comumente são usados para produzir iluminação e sombreado em [[modelagem 3D]].<br/>Essa imagem ilustra o [[Sombreamento de Phong]], um dos primeiros modelos de shading de computador desenvolvido.]]
Em [[computação gráfica]], um '''shader''' ou '''sombreador'''<ref>{{citar web|título=Designer de sombreador|url=https://msdn.microsoft.com/pt-br/library/hh315733.aspx|publicado=Microsoft Developer Network|acessodata=1 de Fevereiro de 2016}}</ref> é 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]].<ref>{{citar web|último=DEMARTINI|primeiro=FELIPE|título=Shaders: o que são e para que servem?|url=http://games.tecmundo.com.br/especiais/shaders-o-que-sao-e-para-que-servem_161249.htm|publicado=Tecmundo Games|acessodata=1 de Fevereiro de 2016|data=2 de Março de 2011}}</ref>
 
== História ==
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.<ref>{{citar web|url=http://www.redrabbit-studios.com/coursework/renderman/prman/RISpec/index.html|titulo=A Especificação da Interface RenderMan (em inglês)}}</ref>
 
Com a evolução das [[Unidade de processamento gráfico|unidades de processamento gráfico]], várias [[Biblioteca (computação)|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 300|GeForce 3]] (NV20), lançado em 2001.<ref>{{citar web|ultimo=Lilly|primeiro=Paul|url=https://www.pcgamer.com/from-voodoo-to-geforce-the-awesome-history-of-3d-graphics/|titulo=Do voodoo para a GeForce: Incrível história dos Gráficos 3D (em inglês)|data=19 de maio de 2009|website=PC GAMER}}</ref> 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]].
 
== Desenho ==
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, [[Mapeamento de textura|coordenadas de texturas]], cor, etc.) de um vértice, enquanto em pixéis é descrito o tratamento (cor, [[Z-buffer|profundidade,]] valores [[Composição alpha|alpha]], etc.) do pixel. O sombreamento de vértice é feito em cada vértice [[Desenho assistido por computador|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 [[Framebuffer|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.
 
== Tipos ==
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 2D ===
Sombreamentos 2D agem nas [[Imagem digital|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 diferencial|geometria 3D]]. O único sombreamento 2D hoje é o chamado sombreamento de pixéis.
 
==== Sombreamento de pixéis ====
No sombreamento de pixéis, também chamados sombreamento de [[Fragmentos Computação Gráfica|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<ref>{{citar web|url=https://www.lighthouse3d.com/tutorials/glsl-tutorial/fragment-shader/|titulo=Tutorial GLSL - Sombreamento de fragmentos (em inglês)|data=09 de junho de 2011}}</ref>. 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 3D ===
Sombreamentos 3D agem em [[3D (computação gráfica)|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értices ====
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 tracing ====
[[Traçado de raio|Ray tracing]] já é suportado pela [[Microsoft]] com o [[DirectX|DirectX Raytracing]], pelo [[Khronos Group|grupo Khronos]] com o [[Vulkan]], [[GLSL]], e SPIR-V,<ref>{{citar web|url=https://www.khronos.org/blog/vulkan-ray-tracing-final-specification-release|titulo=Lançamento da última especificação do Vulkan Ray Tracing (em inglês)|website=Blog. Khronos Group}}</ref> e também pela [[Apple]] com o Metal.
 
== Processamento paralelo ==
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 [[Pipeline (hardware)|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ção ==
A linguagem onde o sombreado é programado depende bastante da plataforma alvo. A linguagem de sombreamento oficial do OpenGL e [[OpenGL ES]] é a [[GLSL|Linguagem de Sombreamento OpenGL]], conhecido como GLSL, e a linguagem oficial do Direct3D é a [[HLSL|Linguagem de Sombreamento de Alto Nível]], chamado de HLSL.
 
== Editores de sombreamento ==
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ém==
*[[GLSL]]
*[[Sombreamento de Gouraud]]
*HLSL
*Linguagem de sombreamento
*SPIR-V
 
{{Referências}}