Cocos Shader入门学习案例,消融效果

根据对 来点花样!使用噪声图实现不规则溶解效果 的学习。

在学习Shader的过程中做的小案例,尝试在 Creator v2.4.10 使用噪声图实现物体的消融效果。

噪声图:

Shader:

CCEffect 中添加 propertie:

properties:
    dissolveMap: { value: white, editor: { tooltip: '噪音图'} }
    dissolveThreshold: { value: 0.3, editor: { tooltip: '溶解阈值'} }
    edgeColor: { value: [1, 1, 1, 1] ,editor: { type: color, tooltip: '边缘颜色'}}
    edgeWidth: { value: 0.05, editor: { tooltip: '边缘宽度'} }

修改片段着色器fs:

声明部分:

  #if USE_TEXTURE
  uniform sampler2D dissolveMap; // 噪音图
  #endif

  uniform Dissolve {  // 消融相关
    vec4 edgeColor;
    float edgeWidth;
    float dissolveThreshold;
  };

入口函数:

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

    #if USE_TEXTURE
      vec4 dissolveValue = texture2D(dissolveMap, v_uv0);

      if (dissolveValue.r < dissolveThreshold) { // 溶解
        discard;
      }
      
      o = texture2D(texture, v_uv0);
    #endif

    o *= v_color;

    if (dissolveValue.r < dissolveThreshold + edgeWidth && o.a > 0.0) { // 边缘
      float edge = smoothstep(dissolveThreshold - edgeWidth, dissolveThreshold + edgeWidth, dissolveValue.r);
      vec4 finalColor = mix(o, edgeColor, edge);
      o = finalColor;
    }

    gl_FragColor = o.rgba;
  }

使用脚本控制节点逐渐消融:

const {ccclass, property} = cc._decorator;

@ccclass
export default class DissolveEffect extends cc.Component {

    @property
    dissolveInterval: number = 0.01;
    @property
    dissolveStep: number = 0.01;

    start () {
        const material = this.getComponent(cc.Sprite).getMaterial(0);

        material.setProperty('dissolveThreshold', 0);
        
        this.schedule(()=>{

            let dissolveThreshold = material.getProperty('dissolveThreshold', 0);
            dissolveThreshold += this.dissolveStep;
            material.setProperty('dissolveThreshold', dissolveThreshold);

            // console.log(dissolveThreshold);
            
        }, this.dissolveInterval, 1/this.dissolveStep);
    }
}

最终效果:

  • 14
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cocos ShaderCocos引擎中用于实现自定义渲染效果的功能。它基于OpenGL ES 2.0或OpenGL ES 3.0,并且可以在2D和3D场景中使用。 使用Cocos Shader,您可以创建各种独特的效果,如阴影、扭曲、发光等等。您可以通过编写GLSL(OpenGL Shading Language)代码来定义着色器程序,然后将其与Cocos引擎中的节点进行关联。 要使用Cocos Shader,首先需要创建一个自定义的Shader文件,然后在Cocos引擎中加载并应用它。您可以使用Cocos Creator编辑器或手动编写代码来实现这一点。 以下是一个简单的示例代码,展示了如何在Cocos Creator中使用Cocos Shader: ```javascript // 创建一个Sprite节点 var spriteNode = new cc.Node(); var sprite = spriteNode.addComponent(cc.Sprite); sprite.spriteFrame = new cc.SpriteFrame("path/to/your/image.png"); // 加载并应用Shader cc.loader.loadRes("path/to/your/shader", cc.RawAsset, function (err, shaderCode) { if (err) { cc.error(err.message || err); return; } // 创建自定义材质 var material = new cc.Material(); material.effectAsset = shaderCode; material.name = 'CustomShader'; // 将材质应用到Sprite节点上 sprite.setMaterial(0, material); }); ``` 在上述示例中,您需要将路径 "path/to/your/image.png" 替换为您的图像文件路径,将路径 "path/to/your/shader" 替换为您的Shader文件路径。 请注意,使用Cocos Shader需要对OpenGL ES和GLSL有一定的了解。如果您不熟悉这些概念,建议先学习相关知识。同时,Cocos官方提供了丰富的文档和示例代码,可供参考和学习

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值