cocos-awesome/assets/Scene/SwitchScene__GlitchMemories/Materials/GlitchMemories.effect
2024-09-23 23:51:46 +08:00

95 lines
2.0 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
CCEffect %{
techniques:
- passes:
- vert: vs
frag: fs
blendState:
targets:
- blend: true
rasterizerState:
cullMode: none
properties:
texture: { value: white }
time: {value: 0}
}%
CCProgram vs %{
precision highp float;
#include <cc-global>
#include <cc-local>
in vec3 a_position;
in vec4 a_color;
out vec4 v_color;
#if USE_TEXTURE
in vec2 a_uv0;
out vec2 v_uv0;
#endif
void main () {
vec4 pos = vec4(a_position, 1);
#if CC_USE_MODEL
pos = cc_matViewProj * cc_matWorld * pos;
#else
pos = cc_matViewProj * pos;
#endif
#if USE_TEXTURE
v_uv0 = a_uv0;
#endif
v_color = a_color;
gl_Position = pos;
}
}%
CCProgram fs %{
precision highp float;
uniform sampler2D texture;
uniform sampler2D texture2;
uniform Common {
float time;
};
float progress = time;
in mediump vec2 v_uv0;
in vec4 v_color;
vec4 getFromColor(vec2 uv) {
return texture(texture, uv);
}
vec4 getToColor(vec2 uv) {
return texture(texture2, uv);
}
vec4 transition(vec2 p) {
// 计算块索引每个块大小为16x16
vec2 block = floor(p.xy / vec2(16));
// 计算UV噪声根据进度调整UV噪声
vec2 uv_noise = block / vec2(64);
uv_noise += floor(vec2(progress) * vec2(1200.0, 3500.0)) / vec2(64);
// 计算扭曲距离,并算出各颜色通道的偏移值
vec2 dist = progress > 0.0 ? (fract(uv_noise) - 0.5) * 0.3 * (1.0 - progress) : vec2(0.0);
vec2 red = p + dist * 0.2;
vec2 green = p + dist * 0.3;
vec2 blue = p + dist * 0.5;
return vec4(
mix(getFromColor(red).r, getToColor(red).r, progress),
mix(getFromColor(green).g, getToColor(green).g, progress),
mix(getFromColor(blue).b, getToColor(blue).b, progress),
1.0
);
}
void main () {
gl_FragColor = v_color * transition(v_uv0);
}
}%