cocos shader三角流光

更直观的视频演示在我的B站更直观的视频演示在我的B站

go 复制代码
// Effect Syntax Guide: https://docs.cocos.com/creator/manual/zh/shader/index.html

// Effect Syntax Guide: https://docs.cocos.com/creator/manual/zh/shader/index.html

// Effect Syntax Guide: https://docs.cocos.com/creator/manual/zh/shader/index.html

// Effect Syntax Guide: https://docs.cocos.com/creator/manual/zh/shader/index.html

// Effect Syntax Guide: https://docs.cocos.com/creator/manual/zh/shader/index.html

CCEffect %{
  techniques:
  - name: glow
    passes:
    - vert: vs:vert

      frag: fs:frag
      blendState:
        targets:
        - blend: true

          blendSrc: src_alpha

          blendDst: one_minus_src_alpha
      depthStencilState:      
          depthTest: false  
          depthWrite: false 
      rasterizerState:
        cullMode: none
      properties:
        lightColor: { value: [1.0, 0.0, 0.0, 1.0], editor: { type: color } }
        lightIntensity: { value: 3.0, editor: { slide: true, range: [1, 10] } }
        glowsize: { value: 0.0, editor: { slide: true, range: [0, 10] } }
        pulseSpeed: { value: 2.0, editor: { slide: true, range: [0, 5] } }
        isBlinking: { value: 0, editor: { type: boolean } }
}%

CCProgram vs %{
  precision highp float;
#include <cc-global>
#if USE_LOCAL



  #include <builtin/uniforms/cc-local>
#endif
in vec3 a_position;

in vec2 a_texCoord;   
out vec2 uv;

#if USE_LOCAL
  in vec4 a_color; 

  out vec4 v_color; 
#endif


vec4 vert() {

  vec4 pos = vec4(a_position, 1);

  #if USE_LOCAL
    pos = cc_matWorld * pos; 

    v_color = a_color;
  #endif

  pos = cc_matViewProj * pos;
  uv = a_texCoord;
  
  return  pos;
}

}%

CCProgram fs %{
  precision highp float;
  #include <sprite-texture>
  #include <cc-global> // 添加cc_time支持
  in vec2 uv;

  uniform sampler2D mainTexture;
  uniform UBO {

    vec4 lightColor;
    float lightIntensity;
    float pulseSpeed;
    float time;
    float isBlinking;

    float glowsize;
  };


  vec4 frag () {
    // 获取原始纹理
    // 获取原始纹理及其透明度
    vec4 texColor = texture(cc_spriteTexture, uv);
    float texAlpha = texColor.a;
    
    // 如果完全透明,直接返回
    if (texAlpha < 0.01) {
        return texColor;
    }
    
    float angle = atan(uv.y - 0.5, uv.x - 0.5);
    float dist = distance(uv, vec2(0.5));
    
    // 🔴 危险脉冲(基于角度和距离)
    float dangerPulse = sin(cc_time.x * 5.0 + angle * 3.0) * 0.5 + 0.5;
    dangerPulse *= 1.0 - smoothstep(0.0, 0.5, dist); // 从中心向外的脉冲
    
    // 🌈 颜色根据危险程度变化
    vec3 dangerColor = mix(
        vec3(1.0, 0.5, 0.0),   // 橙色
        vec3(1.0, 0.0, 0.0),   // 红色
        glowsize * 0.1
    );
    
    // ⚫ 裂纹效果
    float crack = sin(angle * glowsize * 2.0 + cc_time.x) * 0.5 + 0.5;
    
    // 基于纹理alpha控制效果强度
    float effectStrength = texAlpha; // 不透明部分效果更强
    
    // 组合效果
    vec3 dangerEffect = dangerColor * dangerPulse * effectStrength * lightIntensity;
    dangerEffect += vec3(0.5, 0.2, 0.0) * crack * effectStrength * 0.5;
    
    // 混合原始颜色和效果
    vec3 finalColor = texColor.rgb + dangerEffect;
    
    // 边缘脉冲光晕
    float edgeGlow = 1.0 - smoothstep(0.3, 0.5, dist);
    vec3 edgeEffect = dangerColor * edgeGlow * sin(cc_time.x * 8.0) * 0.5 * texAlpha;
    finalColor += edgeEffect;
    
    return vec4(finalColor, texColor.a);
  }


}%
相关推荐
mxwin2 小时前
Unity Shader 半透明物体为什么不能写入深度缓冲?
unity·游戏引擎·shader
晚枫歌F3 小时前
三层时间轮的实现
网络·unity·游戏引擎
努力长头发的程序猿7 小时前
Unity使用ScriptableObject序列化资源
unity·游戏引擎
mxwin8 小时前
Unity Shader 手写基于 PBR 的 URP Lit Shader 核心光照计算
unity·游戏引擎·shader
魔士于安8 小时前
Unity windows 同步 异步 打开文件文件夹工具
游戏·unity·游戏引擎·贴图·模型
笑虾9 小时前
cocos2d-x lua 加载 Cocos Studio 导出的 csb
游戏引擎·lua·cocos2d
魔士于安9 小时前
unity lowpoly 风格 城市 建筑 道路 交通标志
游戏·unity·游戏引擎·贴图·模型
mxwin9 小时前
Unity GPU Shader 性能优化指南
unity·游戏引擎·shader
董董女友21 小时前
unity mcp 配置指南
unity·游戏引擎
垂葛酒肝汤1 天前
Unity的可视化网格和文字标签
unity·游戏引擎