HLSL

HLSL - High Level Shading Language é a linguagem de shading da Microsoft, usada em conjunto com sua API gráfica DirectX. Atualmente ela é muito utilizada em Jogos devido à importância que os shaders ganharam.

DIrectX 12

O DirectX 12 é a versão mais recente do DirectX no tempo dessa escrita. Ele apresenta ao desenvolvedor uma API de mais baixo nível, com menos abstrações para que o desenvolvedor possa atingir o maior desempenho possível em suas aplicações gráficas.

Pipeline do DirectX 11

hpipe-dx11.png

Tipos de dados

Os tipos de dados da linguagem HLSL são semelhantes ao de C/C++, sendo que vetores de até 4 componentes são estendidos para serem tipos primitivos da linguagem. Um tipo de dado ausente é aquele relacionado a strings, o que é explicado por tal tipo de dados ser desnecessários em operações gráficas.

Tipos escalares/vetores de ponto flutuante: float, float2, float3, float4

Vertex Shader

O vertex shader de uma aplicação HLSL necessita como saída pelo menos alguma variável que tenha a semântica POSITION atrelada a ela

Fragment Shader

O fragment shader de uma aplicação HLSL necessita como saída pelo menos alguma variável que tenha a semântica COLOR atrelada a ela

Semânticas

Há diversas maneiras de se especificar entradas e saídas de um vertex shader. Uma delas é através de estruturas que são compostas por variáveis de um certo tipo e semântica. Um exemplo é a estrutura VertexShaderInput abaixo que representa as informações de entrada de um shader HLSL pela aplicação

struct VertexShaderInput{
    float4 Position : POSITION;
    float4 Color : COLOR
    float4 Normal : NORMAL
};

A semântica POSITION está atrelada a posição do vértice no mundo
A semântica COLOR está vinculada à cor do vértice ou do pixel dependendo de que parte do pipeline programável se está fazendo refeência
A semântcia NORMAL se refere à normal do vértice na posição aonde ele se encontra
A semântica TEXCOORD se refere à uma coordenada de textura para o caso de aplicaçào de texturas a um determinado primitivo/pixel
A semãntica BINORMAL xxx
A semãntica TANGENT xxx

O formato de arquivo FX

Normalmente se manipulam shaders HLSL através de arquivos conhecidos como arquivos de efeitos. Estes arquintos juntam os diversos tipos de shaders existentes, em técnicas que consistem de múltiplos passos.

(Pôr exemplo simples de arquivo FX)

Utilitários

Try HLSL

Um utilitário online para ver se seu arquivo HLSL é válido e examinar as instruções resultantes da compilação
Link: https://tryhlsl.azurewebsites.net/

Microsoft Shader Compiler

O Compilador de shader da Microsoft
Link: https://github.com/Microsoft/DirectXShaderCompiler

Links

http://wiki.gamedev.net/index.php/D3DBook:Book_Cover Livro Online sobre Shaders HLSL (Em inglês)
http://vvvv.org/documentation/ex9.hlsl.semantics Semânticas do HLSL (Em inglês)
http://wiki.blade3d.com/page/Supported+HLSL+Semantics (Em inglês)
http://msdn.microsoft.com/en-us/library/bb509647%28v=vs.85%29.aspx (Em inglês)

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-Share Alike 2.5 License.