بنقرة واحدة
galacean-shader-writing
此 Skill 约定了 Galacean Engine 中自定义着色器的编写方式,包含 Shader.create、BaseMaterial 参数绑定、动画驱动、透明混合与常见排错。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
此 Skill 约定了 Galacean Engine 中自定义着色器的编写方式,包含 Shader.create、BaseMaterial 参数绑定、动画驱动、透明混合与常见排错。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
此 Skill 包含了使用 Galacean Engine 物理引擎的注意事项、距离检测替代方案以及常见问题解决方案
此 Skill 包含了在 Galacean Engine 中通过 Script 脚本处理物体交互(如点击)的核心模式,基于 onPointerClick 实现
此 Skill 包含了在 Galacean Engine 中创建物理碰撞体的核心模式,涵盖动态碰撞体 (DynamicCollider) 和 静态碰撞体 (StaticCollider) 的实现
使用 Galacean Engine 开发2D游戏的核心模式,包括真2D(Sprite)和伪2D(3D正交投影)实现
此 Skill 包含了 Galacean Engine 相机的配置方法,包括透视/正交投影设置、俯视视角配置、窗口适配等
Galacean Engine 移动端游戏开发指南,包含适配、优化和最佳实践
| name | galacean-shader-writing |
| description | 此 Skill 约定了 Galacean Engine 中自定义着色器的编写方式,包含 Shader.create、BaseMaterial 参数绑定、动画驱动、透明混合与常见排错。 |
本 Skill 用于统一项目里的着色器开发方式,目标是:
适用场景:液面波动、遮罩填充、命中特效、扫描线、呼吸发光等 2D/3D 视觉效果。
references/debug-checklist.mdreferences/debug-log-template.mdimport { Shader, BaseMaterial, Color } from '@galacean/engine'
water-surface-wave-shader-v1。material_ 前缀,例如:
material_BaseColormaterial_Timematerial_WaveStrengthgetOrCreateXxxShader() 做缓存,避免重复 Shader.create(...)。createXxxMaterial() 封装默认参数。const SHADER_NAME = 'custom-effect-shader-v1'
function getOrCreateShader(): Shader {
let shader = Shader.find(SHADER_NAME)
if (shader) return shader
shader = Shader.create(
SHADER_NAME,
`
#include <common>
attribute vec3 POSITION;
attribute vec2 TEXCOORD_0;
uniform mat4 renderer_MVPMat;
varying vec2 v_uv;
void main() {
gl_Position = renderer_MVPMat * vec4(POSITION, 1.0);
v_uv = TEXCOORD_0;
}
`,
`
#include <common>
uniform vec4 material_BaseColor;
uniform float material_Time;
uniform float material_Intensity;
varying vec2 v_uv;
void main() {
float pulse = 0.5 + 0.5 * sin(material_Time * 4.0);
float alpha = material_BaseColor.a * mix(0.35, 1.0, pulse) * material_Intensity;
gl_FragColor = vec4(material_BaseColor.rgb, alpha);
}
`
)
return shader
}
function createEffectMaterial(engine: any, color: Color): BaseMaterial {
const material = new BaseMaterial(engine, getOrCreateShader())
material.isTransparent = true
material.shaderData.setColor('material_BaseColor', color)
material.shaderData.setFloat('material_Time', 0)
material.shaderData.setFloat('material_Intensity', 1)
return material
}
material_Time += deltaTime 或直接传累计时间。new BaseMaterial();只更新 shaderData。示例:
material.shaderData.setFloat('material_Time', elapsed)
material.shaderData.setFloat('material_Intensity', Math.max(0, Math.min(strength, 1)))
material.isTransparent = true。smoothstep 做软边界,避免生硬锯齿。uvY 和阈值比较实现“从下到上填充”。示例片元逻辑:
float uvY = 1.0 - v_uv.y;
float fillMask = 1.0 - smoothstep(surfaceY, surfaceY + 0.018, uvY);
float alpha = material_BaseColor.a * fillMask;
Shader.find + Shader.create。material.isTransparent。uvY = 1.0 - v_uv.y。在脚本中推荐按以下分层:
getOrCreate...Shader:只管 Shader 定义和缓存。create...Material:只管默认参数和透明设置。apply...Shader:按瓶子或实体动态绑定参数。restore...Material:效果结束后恢复基础材质。这套结构适合当前项目里的倒水液面波动、命中闪白和状态高亮效果。