Cocos Creater Shader-3D溶解效果

复制一个卡通渲染着色器文件,在properties加入一下属性:

        dissolveTexture:    { value: white, editor: { parent: USE_DISSOLVE } }
        dissolveThreshold:  { value: 0.0, editor: { range: [0, 1], step: 0.01}}
        dissolveLineWidth:  { value: 0.1, editor: { range: [0, 0.3], step: 0.01}}
        dissolveColor0:     { value: [1, 0, 0, 1], editor: { type: color } }
        dissolveColor1:     { value: [1, 0, 0, 1], editor: { type: color } }
        offsetDirection:    { value: [0.0, 0.0, 0.0, 0.0]}
        offsetThreshold:    { value: 0.0, editor: { range:  [0, 10], step: 0.01 } }
        offsetScale:        { value: 0.5, editor: { range:  [0, 1], step: 0.01 } }

在shared-ubos加入全局Uniform:

  #if USE_DISSOLVE
    uniform sampler2D dissolveTexture;
    uniform Dissolves{
      vec4 dissolveColor0;
      vec4 dissolveColor1;
      vec4 offsetDirection;
      float dissolveThreshold;
      float dissolveLineWidth;    
      float offsetThreshold;
      float offsetScale;
    };
  #endif

在片元着色器中加入以下代码,注意阴影片元着色器也要添加代码:

    #if USE_DISSOLVE
      //获取噪声纹理的颜色
      vec4 colDissolve = texture(dissolveTexture, v_uv);
      //颜色小于阙值就不着色
      if(colDissolve.r < dissolveThreshold){
        discard;
      }
      float t = 1.0 - smoothstep(0.0, dissolveLineWidth, colDissolve.r - dissolveThreshold);
      vec4 dissolveColor = mix(dissolveColor0, dissolveColor1, t);
      color.rgb = mix(color.rgb, dissolveColor.rgb, t * step(0.001, dissolveThreshold));
    #endif

在ts文件里的update函数设置溶解阙值,控制溶解效果:

    private dissolveThreshold: number = 0.0;
    protected update(dt: number): void {
        this.dissolveThreshold += dt;
        if (this.dissolveThreshold > 1) {
            this.dissolveThreshold = 1.0;
        }
        this.material.setProperty("dissolveThreshold", this.dissolveThreshold);
    }

可以给消融效果加上膨胀和带方向的消融,添加顶点着色器代码:

    #if USE_DISSOLVE
    //膨胀消融,沿法线方向膨胀
    pos += vec4(v_normal, 0.0) * clamp(dissolveThreshold - offsetThreshold, 0.0, 1.0) * offsetScale;    
    //方向消融
    pos += offsetDirection * clamp(dissolveThreshold - offsetThreshold, 0.0, 1.0) * offsetScale;
    #endif

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现搓牌效果可以使用Cocos Creator的js shader来完成。首先,我们需要创建一个自定义的shader,将其应用到牌的渲染组件上。可以通过编辑顶点和片段着色器来实现搓牌的效果。 首先,定义一个变量来控制搓牌的进度。可以通过在脚本中设置一个初始值,然后在每一帧更新该值,以模拟手指滑动搓牌的效果。 然后,在顶点着色器中,对牌的每个顶点进行偏移操作。根据搓牌的进度值,调整顶点的位置,使之呈现出搓牌的形态。可以使用简单的插值方法(如线性插值),计算出每个顶点新的位置。 接下来,在片段着色器中,根据顶点的位置信息,设置每个像素的颜色值。可以使用纹理坐标来采样牌的纹理图片,根据搓牌的进度值,调整采样的坐标,以实现搓牌的效果。 最后,在每一帧更新搓牌的进度值,并将其传递给shader,更新牌的渲染效果。可以通过设置shader的uniform变量,将进度值传递给shader。 总结起来,使用Cocos Creator的js shader实现搓牌效果的步骤如下: 1. 创建自定义的shader,定义搓牌的进度变量。 2. 在顶点着色器中根据进度值调整顶点位置。 3. 在片段着色器中根据进度值调整纹理采样坐标。 4. 在每一帧更新进度值,并将其传递给shader。 5. 应用shader到牌的渲染组件上,实现搓牌效果。 希望这个简单的解答对你有帮助!如果你还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值