技能 shader-programming-glsl
📦

shader-programming-glsl

安全

使用 GLSL 编写 GPU 着色器

创建令人惊艳的视觉效果并优化图形渲染。本指南将教授 GLSL 语法、顶点和片段着色器,以及用于实时图形的着色器数学。

支持: Claude Codex Code(CC)
🥉 73 青铜
1

下载技能 ZIP

2

在 Claude 中上传

前往 设置 → 功能 → 技能 → 上传技能

3

开启并开始使用

测试它

正在使用“shader-programming-glsl”。 创建一个着色器,使屏幕中心产生脉冲发光效果

预期结果:

一个片段着色器,使用 smoothstep 和基于时间的 sin 函数创建径向渐变动画,从中心到边缘进行颜色插值

正在使用“shader-programming-glsl”。 如何优化这个运行 100 次迭代的着色器循环?

预期结果:

建议减少迭代次数、使用提前终止、在 CPU 上预计算常量,并用 step/mix 函数替换分支以获得更好的 GPU 性能

安全审计

安全
v1 • 2/25/2026

All 33 static analysis findings are false positives. The SKILL.md file is educational documentation about GLSL shader programming. Backtick-quoted text represents GLSL code examples in markdown format, not shell command execution. C2 keywords and system reconnaissance patterns are GLSL built-in variables (gl_Position, gl_FragColor, varying) and shader language syntax. No actual security risks detected.

1
已扫描文件
122
分析行数
0
发现项
1
审计总数
未发现安全问题
审计者: claude

质量评分

38
架构
100
可维护性
87
内容
50
社区
100
安全
83
规范符合性

你能构建什么

创建交互式视觉效果的 Web 开发者

为 Three.js 项目构建自定义着色器,包括动画背景、粒子系统和网站的后期处理效果。

实现自定义效果的游戏开发者

为 Unity 或 Unreal Engine 编写着色器,创建独特的视觉风格、地形生成和实时光照效果。

探索生成艺术的创意程序员

使用 SDF、光线步进和片段着色器技术进行程序化生成实验,用于数字艺术装置。

试试这些提示

基础片段着色器设置
帮我编写一个基础的 GLSL 片段着色器,基于 UV 坐标创建颜色渐变,用于 Three.js。
带变换的顶点着色器
生成一个顶点着色器,使用时间 uniform 和 sin/cos 函数对网格应用波浪变形。
光线步进 SDF 场景
创建一个光线步进步片段着色器,包含多个 SDF 形状(球体和盒子),使用平滑并集操作组合。
后期处理效果
编写一个 bloom 后期处理着色器,提取明亮像素,应用高斯模糊,然后合成回原始图像。

最佳实践

  • 使用 mix() 进行插值,使用 step()/smoothstep() 进行阈值判断,而不是 if-else 分支
  • 在 CPU 上预计算常量值并作为 uniforms 传递,而不是在着色器中计算
  • 将相关数据打包到 vec4 中以最小化内存带宽并利用 GPU 向量单元

避免

  • 循环中的重度条件分支会降低 GPU 并行性并导致线程分歧
  • 每个片段计算静态值,而不是从 CPU 传递预计算的 uniforms
  • 不必要的精度(在 mediump 足够时使用 highp)会在移动设备上浪费带宽和电量

常见问题

顶点着色器和片段着色器有什么区别?
顶点着色器将 3D 顶点位置变换为 2D 屏幕坐标。片段着色器确定每个像素的最终颜色。顶点着色器每个顶点运行一次;片段着色器每个像素运行一次。
为什么我的着色器显示黑屏?
检查 gl_Position.w 是否等于 1.0,验证 uniforms 是否从主机应用程序正确设置,确保 UV 坐标在 0-1 范围内,并确认着色器编译无错误。
GLSL 中的 swizzling 是什么意思?
Swizzling 允许你使用 .xyzw、.rgba 或 .stpq 等后缀重新排序或选择向量分量。例如,color.zyx 反转 vec3 的 RGB 通道。
如何从顶点着色器向片段着色器传递数据?
使用 varying 关键字。在两个着色器中都声明 varying,在顶点着色器中赋值,在片段着色器中读取。值会在图元上进行插值。
什么是光线步进?什么时候应该使用它?
光线步进通过使用有符号距离函数沿射线步进渲染 3D 场景。适用于程序化几何体、有机形状和传统光栅化难以实现的效果。
如何提高移动设备上的着色器性能?
尽可能使用 mediump 精度,最小化纹理查找,减少循环迭代次数,避免动态分支,并在 CPU 上预计算复杂计算。

开发者详情

文件结构

📄 SKILL.md