Curso completo de DirectX 9 com C\C++
Gameprog - Escola de programação de jogos digitais
Contato: gameprog.br@gmail.com
Fase 10-1

index << >>


10.1 O que é HLSL?

1.1 Visão geral
* Amostras de exemplo produzidas no software RenderMonkey da AMD com hlsl:
Em resumo, HLSL é uma linguagem de programação com comunicação direta com a placa de aceleração de vídeo. A linguagem tem dois propósitos principais que consistem em habilitar o acesso a transformação final dos vértices e o acesso na composição da cor final do pixel através de um programa escrito que o DirectX transfere para a placa de video executar. HLSL é uma abreviação para High Level Shader Language que pode ser traduzido como linguagem de programação de shader de alto nível. O alto nível é por conta da linguagem trazer os padrões da linguagem C em contraste com sua outra versão expressada em linguagem assembly. A linguagem de programação de shaders é uma das grandes revoluções da computação gráfica e surgiu inicialmente dentro do ambiente do desenho animado cinematográfico. Foi criada pela Pixar que produziu Toy Story e dezenas de outros filmes animados. Hoje a produção dos melhores videogames ou a produção dos melhores efeitos especiais do cinema não ocorre mais sem a presença do shader programado. HLSL é padrão da Microsoft e a linguagem original da Pixar chama-se Renderman Shader Language. O surgimento do HLSL dividiu o modelo de produção gráfica em duas linhas de produção distintas:a linha de funções fixas (fixed-function pipeline no inglês da Microsoft) e a linha programável (programmable pipeline). A linha de funções fixas é o modelo mais antigo aonde cada recurso que a placa de vídeo oferece é traduzida por uma função fixa criada para explorá-lo. A linha de funções fixas coloca entre o programador e a placa de video uma complicada API gráfica, o DirectX aqui no caso. A linha programável permite o contato direto com a placa de vídeo, dando ao programador mais poder, mais performance, mais liberdade criativa e produtiva, e também reduz o fardo da complexidade do DirectX. É muito mais simples e muito mais fácil produzir as coisas com HLSL dentro da placa da vídeo do que utilizar código DirectX similar. A estrutura interna da placa de video e o conjunto de funções produzidas que modificam a posição final dos vértices é chamado de VertexShader; a estrutura interna com o conjunto de funções que modificam a composição da cor final do pixel é chamado de PixelShader. O modelo de shader é composto então pelo pixelshader e vertexshader que surgiu inicialmente na versão 1.0 com o DirectX 8. O DirectX 9 suporta o modelo 3.0 e o modelo mais atual é o 5.0 presente no DirectX 11. Nossa aplicação foi escrita utilizando o modelo 1.1. No subtópico abaixo é exibido o primeiro programa em hlsl com o qual você vai travar contato nesse curso apenas para você perceber o quanto o programa tem semelhança com um programa escrito na linguagem C++. 1.2 O primeiro programa em HLSL
// Gameprog: Introdução a programação em HLSL // Arquivo: simples.fx - prj_HSL01 // Matriz de projeção e visualização float4x4 Camera : WORLDVIEWPROJECTION; float nMovimento; // Transforma coordenadas 3d em espaço de tela float4 vs_Main( float4 Pos : POSITION) : POSITION { // Declara variável de saída float4 saida_pos; // Transforma posição Pos.z += nMovimento * 2; saida_pos = mul(Pos, Camera); // Retorna posição transformada return saida_pos; } // vs_Main().fim float4 ps_Main ( ) : COLOR0 { // Declara uma variável para cor no padrão RGBA float4 cor = float4 (0.0f, 0.0f, 0.0f, 0.0f); // Configura individualmente os canais de cor cor.r = nMovimento; cor.b = 1 - nMovimento; cor.ga = 1.0f; return cor; } // ps_Main().fim technique MovimentoCor { pass P0 { // Configura alguns estados do dispositivo CullMode = None; FillMode = Solid; // Compila o VertexShader e o PixelShader VertexShader = compile vs_1_1 vs_Main(); PixelShader = compile ps_1_1 ps_Main(); } // fim do passo P0 } // fim da técnica

index << >>

Produzido por Gameprog: Jair Pereira - Agosto/2014 © gameprog.br@gmail.com http://www.gameprog.com.br