Cocos Creator Shader工具
程序员文章站
2022-06-11 11:57:59
...
十一就这样过去了,没什么大成就,但还是写个总结吧。前几天用Cocos Creator写一个demo,涉及到了shader开发,而cocos一直没有好用的shader工具,就心血来潮要自己开发一个。花了两天时间,模拟Unity Shader完成了一套基本的材质框架,由于不知道怎么扩展编辑器,就没写工具,后面等Cocos Creator的编辑器扩展功能更完善一些再说。
源码已经放到github了,戳这里。shader的语法类似于Unity Shader,详细的说明已经写在github项目主页了,大致如下:
Shader "SimpleShader" {
Properties{ // 材质属性
_MainTex("Main Tex", texture) = "";
_Color("Main Color", color) = (1, 1, 1, 1);
}
SubShader{
Pass{
// 变种shader宏列表。shader会根据宏的排列组合,生成不同版本的shader
variants = (ENABLE_COLOR, ENABLE_TEXTURE);
// 顶点着色器源码
vsh = `
attribute vec4 a_position;
attribute vec2 a_texCoord;
varying vec2 v_texCoord;
void main()
{
gl_Position = CC_PMatrix * a_position;
v_texCoord = a_texCoord;
}
`;
// 片段着色器源码
fsh = `
#ifdef GL_ES
precision mediump float;
#endif
#ifdef ENABLE_TEXTURE
varying vec2 v_texCoord;
uniform sampler2D _MainTex;
#endif
#ifdef ENABLE_COLOR
uniform vec4 _Color;
#endif
void main()
{
vec4 color = vec4(1, 1, 1, 1);
#ifdef ENABLE_TEXTURE
color = texture2D(_MainTex, v_texCoord);
#endif
#ifdef ENABLE_COLOR
color *= _Color;
#endif
gl_FragColor = color;
}
`;
}
}
}
材质格式如下:
{
"shaderPath" : "resources/shaders/simple-shader.shader",
"values" : {
"_MainTex" : "resources/textures/tex00.jpg",
"_Color" : [1, 0, 0, 1]
},
"variants" : ["ENABLE_COLOR", "ENABLE_TEXTURE"]
}
源码中包含一套简单的材质框架,和一个shader(非glsl)语法解析器。工具会根据shader文件中提供的变种宏列表,生成不同的着色器对象(GLProgram),材质系统用宏列表去匹配合适的着色器对象,然后合成GLProgramState,最后赋予Node。
推荐阅读
-
抖音道具制作工具Effect Creator安装新建保存上传教程
-
Cocos2d-x上适合做工具的UI库:ImGui
-
cocos creator入门
-
cocos creator Touch事件应用(触控选择多个子节点的实例)
-
全球首家!Cocos Creator正式支持HarmonyOS多设备协同
-
Cocos Creator 热更新工具BUG:重启游戏后热更新无效!(已解决)
-
荐 麒麟子Cocos Creator 3D研究笔记三:角色换装(无动画)
-
用 shader effect 实现雨滴落水效果!Cocos Creator 3D !
-
cocos creator 3D | 拇指投篮 | 3D项目入门实战
-
Cocos Creator - 2D扭曲Shader