cocos shader闪光

在这里插入图片描述

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

go 复制代码
// 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: 3.0, editor: { slide: true, range: [1, 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>

  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 pulse = 0.5 + 0.5 * sin(time * pulseSpeed);
    float blink = isBlinking > 0.5 ? (0.5 + 0.5 * sin(time * 8.0)) : 1.0;
    float intensity = lightIntensity * pulse * blink;
    
    // 基于alpha发光:透明部分不发光,不透明部分发光
    float glowAmount = texColor.a; // 直接使用alpha值作为发光强度
    
    // 创建光晕效果(简单边缘检测)
    float edgeGlow = 0.0;
    
    // 采样周围4个点
    float sampleAlpha1 = texture(cc_spriteTexture, uv + vec2(0.01, 0.01)).a;
    float sampleAlpha2 = texture(cc_spriteTexture, uv + vec2(-0.01, 0.01)).a;
    float sampleAlpha3 = texture(cc_spriteTexture, uv + vec2(-0.01, -0.01)).a;
    float sampleAlpha4 = texture(cc_spriteTexture, uv + vec2(0.01, -0.01)).a;
    
    // 如果周围有透明像素,当前像素在边缘
    float edgeDetect = 0.0;

    edgeDetect += step(0.5, abs(texColor.a - sampleAlpha1));
    edgeDetect += step(0.5, abs(texColor.a - sampleAlpha2));

    edgeDetect += step(0.5, abs(texColor.a - sampleAlpha3));
    edgeDetect += step(0.5, abs(texColor.a - sampleAlpha4));
    
    edgeGlow = edgeDetect * 0.25; // 边缘发光
    
    // 组合发光效果

    vec3 glow = lightColor.rgb * (glowAmount + edgeGlow * glowsize) * intensity;

    
    // 叠加到原始颜色
    vec3 finalColor = texColor.rgb + glow;
    
    return vec4(finalColor, texColor.a);
  }

}%
相关推荐
魔士于安3 天前
unity 丑陋哥布林 哥布林有humannoid 动画没 带动画
unity·游戏引擎·材质·贴图·模型
淡海水4 天前
13-04-面试-源码级深度追问链
数据结构·unity·面试·c#·游戏引擎·源码·il2cpp
小小数媒成员4 天前
UGUI 性能优化(详细,全,深入)
开发语言·unity·游戏引擎
goujunwe5 天前
GEO 评估方法:如何自测你的内容,会不会被 AI 引用
搜索引擎·网络安全·游戏引擎·全文检索·中文分词
林川~016 天前
Unity 常用 API 与核心类全解:从生命周期到协程,附性能避坑清单(Unity 6 适配)
unity·游戏引擎·常用api
梦想平凡7 天前
情怀棋牌源代码焕新记录(一):全新国风UI与原版工程梳理
java·服务器·数据库·websocket·网络协议·cocos2d
WiChP8 天前
【V0.1B16】从零开始的2D游戏引擎开发之路
开发语言·算法·游戏引擎
狂人开飞机9 天前
23、实战平台跳跃游戏
游戏·游戏引擎·godot
淡海水9 天前
11-02-Unity-Mono-vs-IL2CPP-两种脚本后端的数据结构行为差异
数据结构·unity·游戏引擎·il2cpp·mono
彧azz9 天前
初学Unity:编辑器
笔记·学习·unity·游戏引擎