加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Cocos Creator Shader工具

发布时间:2020-12-14 17:26:20 所属栏目:百科 来源:网络整理
导读:十一就这样过去了,没什么大成就,但还是写个总结吧。前几天用Cocos Creator写一个demo,涉及到了shader开发,而cocos一直没有好用的shader工具,就心血来潮要自己开发一个。花了两天时间,模拟Unity Shader完成了一套基本的材质框架,由于不知道怎么扩展编

十一就这样过去了,没什么大成就,但还是写个总结吧。前几天用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);
    }
    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);
            #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,1] },"variants" : ["ENABLE_COLOR","ENABLE_TEXTURE"] }

源码中包含一套简单的材质框架,和一个shader(非glsl)语法解析器。工具会根据shader文件中提供的变种宏列表,生成不同的着色器对象(GLProgram),材质系统用宏列表去匹配合适的着色器对象,然后合成GLProgramState,最后赋予Node。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读