Pular para o conteúdo
Skillpedia
Código em geral48 mil · #4155

shader-programming-glsl

Ajuda a escrever shaders GLSL eficientes para jogos e web. Explica a sintaxe e efeitos comuns para criar visuais incríveis.

O que ela faz

Este guia ensina como criar efeitos visuais para jogos e sites usando uma linguagem especial chamada GLSL. Ele mostra como fazer os gráficos parecerem bonitos e funcionarem rápido.

Quando usar

  • ✓Criar efeitos visuais personalizados em jogos ou sites.
  • ✓Otimizar a velocidade com que os gráficos aparecem na tela.
  • ✓Adicionar efeitos como desfoque ou brilho às imagens.

Exemplo do que pedir para a IA

“Como faço para criar um efeito de brilho em um objeto 3D usando GLSL?”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/shader-programming-glsl/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/shader-programming-glsl/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

O GLSL é usado para dar instruções diretas à placa de vídeo (GPU). Ele tem duas partes principais: uma que define a forma (vertex shader) e outra que define a cor de cada pontinho na tela (fragment shader).

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add sickn33/agentic-awesome-skills --skill shader-programming-glsl

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/shader-programming-glsl/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Programação de Shaders GLSL

Visão Geral

Um guia completo para escrever shaders de GPU usando GLSL (OpenGL Shading Language). Aprenda sintaxe, uniforms, variáveis varying e conceitos matemáticos chave como swizzling e operações vetoriais para efeitos visuais.

Quando Usar Esta Habilidade

  • Use ao criar efeitos visuais personalizados em WebGL, Three.js ou engines de jogos.
  • Use ao otimizar o desempenho de renderização gráfica.
  • Use ao implementar efeitos de pós-processamento (desfoque, bloom, correção de cor).
  • Use ao gerar proceduralmente texturas ou geometria na GPU.

Guia Passo a Passo

1. Estrutura: Vértice vs. Fragmento

Entenda o pipeline:

  • Vertex Shader: Transforma coordenadas 3D para espaço de tela 2D (gl_Position).
  • Fragment Shader: Colore pixels individuais (gl_FragColor).
// Vertex Shader (basic)
attribute vec3 position;
uniform mat4 modelViewMatrix;
uniform mat4 projectionMatrix;

void main() {
    gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
}
// Fragment Shader (basic)
uniform vec3 color;

void main() {
    gl_FragColor = vec4(color, 1.0);
}

2. Uniforms e Varyings

  • uniform: Dados constantes para todos os vértices/fragmentos (passados da CPU).
  • varying: Dados interpolados do vertex shader para o fragment shader.
// Passing UV coordinates
varying vec2 vUv;

// In Vertex Shader
void main() {
    vUv = uv;
    gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
}

// In Fragment Shader
void main() {
    // Gradient based on UV
    gl_FragColor = vec4(vUv.x, vUv.y, 1.0, 1.0);
}

3. Swizzling & Matemática Vetorial

Acesse componentes de vetores livremente: vec4 color = vec4(1.0, 0.5, 0.0, 1.0);

  • color.rgb -> vec3(1.0, 0.5, 0.0)
  • color.zyx -> vec3(0.0, 0.5, 1.0) (reordenação)

Exemplos

Exemplo 1: Raymarching Simples (Esfera SDF)

float sdSphere(vec3 p, float s) {
    return length(p) - s;
}

void mainImage(out vec4 fragColor, in vec2 fragCoord) {
    vec2 uv = (fragCoord - 0.5 * iResolution.xy) / iResolution.y;
    vec3 ro = vec3(0.0, 0.0, -3.0); // Ray Origin
    vec3 rd = normalize(vec3(uv, 1.0)); // Ray Direction
    
    float t = 0.0;
    for(int i = 0; i < 64; i++) {
        vec3 p = ro + rd * t;
        float d = sdSphere(p, 1.0); // Sphere radius 1.0
        if(d < 0.001) break;
        t += d;
    }
    
    vec3 col = vec3(0.0);
    if(t < 10.0) {
        vec3 p = ro + rd * t;
        vec3 normal = normalize(p);
        col = normal * 0.5 + 0.5; // Color by normal
    }
    
    fragColor = vec4(col, 1.0);
}

Melhores Práticas

  • ✅ Faça: Use mix() para interpolação linear em vez de matemática manual.
  • ✅ Faça: Use step() e smoothstep() para limiarização e bordas suaves (evite branches if).
  • ✅ Faça: Empacote dados em vetores (vec4) para minimizar o acesso à memória.
  • ❌ Não Faça: Use branching pesado (if-else) dentro de loops, se possível; isso prejudica o paralelismo da GPU.
  • ❌ Não Faça: Calcule valores constantes dentro do shader; pré-calcule-os na CPU (uniforms).

Solução de Problemas

Problema: Shader compila, mas a tela está preta. Solução: Verifique se gl_Position.w está correto (geralmente 1.0). Verifique se os uniforms estão realmente sendo definidos pela aplicação host. Verifique se as coordenadas UV estão dentro de [0, 1].

Limitações

  • Use esta habilidade apenas quando a tarefa corresponder claramente ao escopo descrito acima.
  • Não trate a saída como um substituto para validação específica do ambiente, testes ou revisão especializada.
  • Pare e peça esclarecimentos se os inputs necessários, permissões, limites de segurança ou critérios de sucesso estiverem ausentes.
Perguntas frequentes

O que são 'uniforms' e 'varyings'?

'Uniforms' são informações que não mudam para todos os objetos, como a cor geral. 'Varyings' são informações que mudam de um ponto para outro, como a textura.

Por que não usar 'if' dentro dos shaders?

Usar 'if' pode deixar a placa de vídeo mais lenta porque ela processa muitas coisas ao mesmo tempo. É melhor usar outras funções que são mais rápidas para a GPU.

Meu shader está compilando, mas a tela está preta. O que pode ser?

Verifique se as coordenadas estão corretas e se as informações que você está enviando para o shader (uniforms) estão sendo configuradas corretamente pelo programa principal.

Detalhes

Descrição original do autor

Expert guide for writing efficient GLSL shaders (Vertex/Fragment) for web and game engines, covering syntax, uniforms, and common effects.

repo: sickn33/agentic-awesome-skills

Popularidade

Estrelas no GitHub
48 mil
Posição no ranking
#4155
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas