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
Mensagem pronta para colar
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-glslOu 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.mdConteú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()esmoothstep()para limiarização e bordas suaves (evite branchesif). - ✅ 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.
Popularidade
- Estrelas no GitHub
- 48 mil
- Posição no ranking
- #4155
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
00-andruia-consultant
Ajuda seu agente a iniciar ou melhorar projetos de IA. Ele analisa código, sugere ferramentas e cria planos de ação em espanhol.
sickn33/agentic-awesome-skills
007
Faz seu agente realizar auditorias de segurança e modelagem de ameaças. É útil para proteger projetos contra ataques e vulnerabilidades.
sickn33/agentic-awesome-skills
10-andruia-skill-smith
Ajuda seu agente a criar ou melhorar ferramentas de IA. Ele define como as ferramentas funcionam, escreve a documentação e valida a estrutura.
sickn33/agentic-awesome-skills
20-andruia-niche-intelligence
Faz seu agente criar um resumo sobre um setor específico. É útil para entender o contexto, regras, padrões de uso e riscos de um projeto, usando fontes confiáveis.
sickn33/agentic-awesome-skills
Skills parecidas
benchmark-optimization-loop
Faz seu agente melhorar a velocidade de algo de forma medida. Ele testa várias versões e escolhe a mais rápida que ainda funciona corretamente.
affaan-m/ECC
change-impact
Ajuda seu agente a analisar o impacto de mudanças no código antes de fazê-las. Ele compara o planejado com o real depois, cobrindo caminhos, dados, testes e documentação. É útil para mudanças arriscadas ou que afetam várias partes do sistema.
affaan-m/ECC
click-path-audit
Faz seu agente rastrear todos os botões e interações do usuário para achar bugs. Ele encontra problemas onde funções parecem funcionar sozinhas, mas falham juntas. Útil quando bugs persistem mesmo após depuração.
affaan-m/ECC