mirror of
https://github.com/ifengzp/cocos-awesome.git
synced 2024-12-26 11:49:18 +00:00
131 lines
2.6 KiB
Plaintext
131 lines
2.6 KiB
Plaintext
|
// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
|
||
|
|
||
|
CCEffect %{
|
||
|
techniques:
|
||
|
- passes:
|
||
|
- vert: vs
|
||
|
frag: fs
|
||
|
blendState:
|
||
|
targets:
|
||
|
- blend: true
|
||
|
rasterizerState:
|
||
|
cullMode: none
|
||
|
properties:
|
||
|
scale: { value: 20 }
|
||
|
smoothness: { value: 0.1 }
|
||
|
seed: { value: 12.9898 }
|
||
|
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 Perlin {
|
||
|
float scale;
|
||
|
float smoothness;
|
||
|
float seed;
|
||
|
float time;
|
||
|
};
|
||
|
float progress = time;
|
||
|
in mediump vec2 v_uv0;
|
||
|
in vec4 v_color;
|
||
|
|
||
|
// http://byteblacksmith.com/improvements-to-the-canonical-one-liner-glsl-rand-for-opengl-es-2-0/
|
||
|
float random(vec2 co) {
|
||
|
highp float a = seed;
|
||
|
highp float b = 78.233;
|
||
|
highp float c = 43758.5453;
|
||
|
highp float dt= dot(co.xy ,vec2(a,b));
|
||
|
highp float sn= mod(dt,3.14);
|
||
|
return fract(sin(sn) * c);
|
||
|
}
|
||
|
|
||
|
// 2D Noise based on Morgan McGuire @morgan3d
|
||
|
// https://www.shadertoy.com/view/4dS3Wd
|
||
|
float noise (in vec2 st) {
|
||
|
vec2 i = floor(st);
|
||
|
vec2 f = fract(st);
|
||
|
|
||
|
// Four corners in 2D of a tile
|
||
|
float a = random(i);
|
||
|
float b = random(i + vec2(1.0, 0.0));
|
||
|
float c = random(i + vec2(0.0, 1.0));
|
||
|
float d = random(i + vec2(1.0, 1.0));
|
||
|
|
||
|
// Cubic Hermine Curve. Same as SmoothStep
|
||
|
vec2 u = f*f*(3.0-2.0*f);
|
||
|
|
||
|
// Mix 4 coorners porcentages
|
||
|
return mix(a, b, u.x) +
|
||
|
(c - a)* u.y * (1.0 - u.x) +
|
||
|
(d - b) * u.x * u.y;
|
||
|
}
|
||
|
|
||
|
vec4 getFromColor(vec2 uv) {
|
||
|
return texture(texture, uv);
|
||
|
}
|
||
|
vec4 getToColor(vec2 uv) {
|
||
|
return texture(texture2, uv);
|
||
|
}
|
||
|
|
||
|
vec4 transition (vec2 uv) {
|
||
|
vec4 from = getFromColor(uv);
|
||
|
vec4 to = getToColor(uv);
|
||
|
float n = noise(uv * scale);
|
||
|
|
||
|
float p = mix(-smoothness, 1.0 + smoothness, progress);
|
||
|
float lower = p - smoothness;
|
||
|
float higher = p + smoothness;
|
||
|
|
||
|
// 根据噪声值进行平滑插值
|
||
|
float q = smoothstep(lower, higher, n);
|
||
|
|
||
|
return mix(
|
||
|
from,
|
||
|
to,
|
||
|
1.0 - q
|
||
|
);
|
||
|
}
|
||
|
|
||
|
void main () {
|
||
|
gl_FragColor = v_color * transition(v_uv0);
|
||
|
}
|
||
|
}%
|