quinta-feira, 19 de agosto de 2010

Pixel e Vertex Shader

Primeiramente ambos eram executados distintamente em placas de videos, cada um possuia processadores exclusivos para sua função, o que acarretou em um problema, se o programa usar somente o pixel shader os processadores vertex ficariam em estado de espera sem função nenhuma, resultando em uma enorme perda de processamento, para resolver este problema, foram unificados os processamentos de ambos, assim o pixel e vertex shader poderiam utilizar os mesmos processadores sem exclusividade, removendo a ociosidade de parte da placa de video, essa uificação passou a ser chamada de Stream Processors, que veio para sustituir o antigo Pipeline.

Funções:
Vertex Shader: Modifica a textura, incorporando iluminação, reflexo, sobras, bumps, esta mais ligado a geometria do objeto em questão.
Pixel Shader: efetua o acabamento final da imagem, colocando blurs, saturação, contrastes, deixando a imagem final bonita.

O que é Vertex Shader?

O Vertex Shader (semelhante ao Pixel Shader) é um programa que é processado no pipeline da GPU (graphic processing unity), ele é capaz de trabalhar na estrutura de vértices do modelo 3D e com isso modificar sua estrutura a tempo de execução. É utilizado para otimização dos modelos, pois a partir da programação conseguimos detalhes ou efeitos que seriam muito árduos para serem feito na hora da modelagem. Por exemplo modelar as ondas de um oceano além de ser díficil conseguir um resultado bom, alterá-lo dinamicamente para o mar não ficar estático é muito trabalhoso, um vertex shader é capaz de fazer isso com poucas linhas de código.

Para criar programas de Vertex Shader, pode-se usar as linguagens GLSL (OpenGL Shading Language) que é utilizada para API gráfica OpenGL, HLSL (High Level Shading Language) que é utilizada para API gráfica DirectX da Microsoft, a linguagem foi idealizada e produzida pela mesma e por último temos a CG (C for Graphics) que funciona em ambas APIs, feita pela NVidia junto a Microsoft, possui um sintaxe muito próxima da linguagem C.

Fonte: wikipedia.com

O que é Pixel Shader?

Um pixel shader é um tipo de programa de sombreamento, muitas vezes executadas em uma unidade de processamento gráfico (placa de vídeo). Estes programas são normalmente utilizados para realizar complexos efeitos por pixel.

Tem a função de cáculo no kernel, onde calcula a cor e outros atributos de cada pixel. Pixel shaders variam produzindo cores, a aplicação de um valor de iluminação, fazendo "bump mapping", sombras, reflexos especulares, translucidez e outros fenômenos. Eles podem alterar a profundidade do pixel (para Z-buffering), ou a saída de mais de uma cor se tornam alvos múltiplos são ativos. Um pixel shader por si só não pode produzir efeitos muito complexa, porque opera em um único pixel, sem o conhecimento da geometria de uma cena ou dos pixels vizinhos.

Pixel shaders usam linguagens diferentes, dependendo de qual API que eles usam. Populares APIs incluem o DirectX e OpenGL.

Tabelona de Pixel Shaders por Placas de Videos:

PS 1.0 e 1.1 - Direct3D 8.0
   * Nvidia Geforce 3 Series;
   * Sis Xabre Series.

PS 1.2 - Direct3D 8.0a
   * 3D Labs Wildcat VP.

PS 1.3 - Direct3D 8.0a
   * Matrox Série Parhelia;
   * Nvidia Geforce 4 série Ti/4200Go;
   * Sis Mirage 2.

PS 1.4 - Direct3D 8.1
   * ATI Radeon R200; XGI Volari V3 series (exceto V3XT)(8500-9250).

PS 2.0 - Direct3D 9.0
   * 3DLabs Wildcat Realizm Wildcat;
   * ATI Radeon R300 (9500-9800, X300-X600);
   * Intel GMA 900, 950, 3000, 3100;
   * S3Graphics DeltaChrome, GammaChrome, Chrome série S2X;
   * Sis Mirage 3, Mirage 3 +;
   * XGI Volari V3XT, série Volari V5, série Volari V8, Volari 8300, Volari XP10.

PS 2.0a - Direct3D 9.0a
   * GeForce série FX.

PS 2.0b - Direct3D 9.0b
   * ATI Radeon R420 (X700-X850).

PS 3.0 - Direct3D 9.0c
    * ATI Radeon R520 (X1300-X2100);
   * Intel GMA X3000;
    * Nvidia GeForce 6 series, GeForce 7 series.

PS 4.0 - Direct3D 10.0
   * ATI Radeon R600 (HD 2400-HD 2900) Radeon R600 (HD 2400-HD 2900);
   * Intel GMA X3100, X3500, X4500;
   * Nvidia Série GeForce 8, GeForce 9 Series, GeForce 200, Quadro FX 1700;
   * Sis Mirage 4.

PS 4.1 - Direct3D 10.1
   * ATI Radeon R600 (HD 3xxx), Radeon R700 (HD 4xxx);
   * Intel GMA 500;
   * S3Graphics Chrome 400 Series.

PS 5.0 - Direct3D 11.0
    * ATI Radeon R8xx;
    * Nvidia GeForce 300 Series, GT300 Series.

Referência

Estava pensando em criar um blog, mas então surgiu o problema, o que iria postar, bom, uma vez criei um blog mais sem futuro, era só para teste, sem preocupação, mas então resolvi criar um blog mais técnico, algumas notícias, sem nada de entretenimento, quer dizer o mínimo, sim vai ter algumas "coisiquinhas", mas com prioridade em textos sérios.

Começarei com temas de informática e jogos, e algumas coisas que acontece no meu dia a dia, não escreverei sobre minha vida, e sim de fatores que a englobam, coisas que surgem, idéias, e o que surgir a mente.

Vou começar com alguns posts do meu outro blog que considero mais sérios, com alguma relevância, ou seja, com informação útil, nos futuros posts estarei colocando informações novas.

Pelo meu primeiro post já se prolongou bastante.
Fico por aqui.