cocos shader消失

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

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:
        rowsCount: { value: 8.0, editor: { slide: true, range: [2, 100] } } 
        
        o: { value: -1, editor: { slide: true, range: [0, 100] } } 
        
}%

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 {


    float rowsCount;   // 切成几行
    float o;    // 整排下落到底部所需时间
  };

// 随机数函数,用于决定方块消失顺序
  float random(vec2 st) {
    return fract(sin(dot(st, vec2(12.9898, 78.233))) * 43768.5453123);
  }

  vec4 frag () {
    // 切成方块
    vec2 gridPos = floor(uv * vec2(rowsCount));
    vec2 blockCoord = (gridPos + 0.5) / vec2(rowsCount);
    
    vec4 color = texture(cc_spriteTexture, blockCoord);
    
    // ===== 消散动画 =====
    float time = cc_time.x * o / 2.0;
    float dissolve = fract(time); // 循环消散
    
    // 方法1:从中心向外消散
    vec2 centerDist = abs(blockCoord - 0.5) * 2.0; // 0=中心,1=边缘
    float distanceFromCenter = length(centerDist);
    
    // 距离中心越远,消散越早
    float appearThreshold = dissolve * 2.0 - distanceFromCenter;
    if (appearThreshold < 0.0) {
      color = vec4(0.0);
    }
    
    // 方法2:向上消散
    // float fadeStart = 0.5 - blockCoord.y * 0.5; // 底部先消散
    // if (dissolve > fadeStart) {
    //   color = vec4(0.0);
    // }
    
    return color;
  

  }

}%
相关推荐
mxwin2 天前
Unity Custom Interpolators与半透明阴影的原理与实战
unity·游戏引擎·shader
小贺儿开发5 天前
【MediaPipe】Unity3D 虚拟面具互动演示
unity·人机交互·shader·摄像头·面具·互动·脸部捕捉
mxwin5 天前
Unity Shader 屏幕空间反射 (SSR) 原理解析
jvm·unity·游戏引擎·shader
mxwin5 天前
Unity Shader 屏幕空间法线重建 从深度缓冲反推世界法线——原理、踩坑与 URP Shader 实战
unity·游戏引擎·shader
mxwin6 天前
Unity Shader 径向模糊与径向 UV 变形速度感 · 冲击波效果完全指南
unity·游戏引擎·shader·uv
mxwin8 天前
Unity URP 下 TBN 矩阵学习 切线空间、tangent.w 与镜像 UV 的那些坑
学习·unity·矩阵·shader
mxwin9 天前
Unity Shader 深度写入与关闭ZWrite Off · 半透明排序 · 粒子穿插
unity·游戏引擎·shader
mxwin9 天前
Unity Shader 深度重建世界坐标
unity·游戏引擎·shader
mxwin9 天前
Unity URP 软粒子(Soft Particles)完全指南
unity·游戏引擎·shader
mxwin9 天前
Unity Shader 深度偏移Depth Bias / Offset 完全指南
unity·游戏引擎·shader