cocos creator effect 学习

在cocoscreator中新建一个effect,内容如下

// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.  

CCEffect %{
  techniques:
  - passes:
    - vert: vs
      frag: fs
      blendState:
        targets:
        - blend: true
      rasterizerState:
        cullMode: none
      properties:
        texture: { value: white }
        alphaThreshold: { value: 0.5 }
}%


CCProgram vs %{
  precision highp float;

  #include 
  #include 

  in vec3 a_position;
  in vec4 a_color;
  out vec4 v_color;

  #if USE_TEXTURE
  in vec2 a_uv0;
  out vec2 v_uv0;
  #endif

  void main () {
    vec4 pos = vec4(a_position, 1);

    #if CC_USE_MODEL
    pos = cc_matViewProj * cc_matWorld * pos;
    #else
    pos = cc_matViewProj * pos;
    #endif

    #if USE_TEXTURE
    v_uv0 = a_uv0;
    #endif

    v_color = a_color;

    gl_Position = pos;
  }
}%


CCProgram fs %{
  precision highp float;
  
  #include 

  in vec4 v_color;

  #if USE_TEXTURE
  in vec2 v_uv0;
  uniform sampler2D texture;
  #endif

  void main () {
    vec4 o = vec4(1, 1, 1, 1);

    #if USE_TEXTURE
    o *= texture(texture, v_uv0);
      #if CC_USE_ALPHA_ATLAS_TEXTURE
      o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;
      #endif
    #endif

    o *= v_color;

    ALPHA_TEST(o);

    gl_FragColor = o;
  }
}%

官方的effect文档 https://docs.cocos.com/creator/manual/zh/render/effect.html?h=shader
因为没有shader基础,看不明白
新建一个material,选择刚刚新建的effect,把这个材质放到一个sprite上

image.png

image.png

这个sprite没有发生任何变化,因为新建的effect和默认的builtin-2d-sprite内容一样。

现在尝试更改一下new effect之中的内容

通过对比别人制作的effect,发现有下图fs部分发生了改变,其他部分的内容暂时先不管


image.png
    #if USE_TEXTURE
    o *= texture(texture, v_uv0);
      #if CC_USE_ALPHA_ATLAS_TEXTURE
      o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;
      #endif
    #endif

猜测这个USE_TEXTURE应该就是material面板上面的两个Boolean类型的变量,取消勾选试一试,果然精灵变成了纯白色

image.png
image.png

因为这个if没有走进去,,直接使用了vec4 o = vec4(1,1,1,1);
这个颜色就是白色。
4个数字分别代表rgba,范围0-1
再把USE_TEXTURE勾选上,恢复正常
现在试试o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;这一句的作用,把他注释掉


image.png

sprite没有发生变化,猜测是CC_USE_ALPHA_ATLAS_TEXTURE为false,把if中的代码移到外面试试


image.png

image.png

图片发生了奇怪的变化,把这几句删除掉
下面应该就是正常显示图片的代码了
image.png

通过搜索,找到这篇文章,介绍了gl_FragColor = o;的作用,gl_FragColor里面保存的是图片的颜色。
https://www.jianshu.com/p/75b1b4b701f7

image.png

你可能感兴趣的:(cocos creator effect 学习)