🚚 Move shader code to GLSL files
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
// Inject some common shader snippets. It is only possible to include glsl files from the
|
||||
// "common" directory. Also, the files in the "common" directory are not allowed to
|
||||
// include any further files.
|
||||
#include "common/uniforms.glsl"
|
||||
#include "common/noise.glsl"
|
||||
#include "common/edgeMask.glsl"
|
||||
|
||||
uniform vec3 uColor;
|
||||
uniform float uScale;
|
||||
|
||||
const float SHOWER_TIME = 0.3;
|
||||
const float SHOWER_WIDTH = 0.3;
|
||||
const float STREAK_TIME = 0.6;
|
||||
const float EDGE_FADE = 50;
|
||||
|
||||
// This method returns four values:
|
||||
// result.x: A mask for the particles which lead the shower.
|
||||
// result.y: A mask for the streaks which follow the shower particles.
|
||||
// result.z: A mask for the final "atom" particles.
|
||||
// result.w: The opacity of the fading window.
|
||||
vec4 getMasks() {
|
||||
float showerProgress = uProgress / SHOWER_TIME;
|
||||
float streakProgress = clamp((uProgress - SHOWER_TIME) / STREAK_TIME, 0, 1);
|
||||
float fadeProgress = clamp((uProgress - SHOWER_TIME) / (1.0 - SHOWER_TIME), 0, 1);
|
||||
|
||||
// Gradient from top to bottom.
|
||||
float t = cogl_tex_coord_in[0].t;
|
||||
|
||||
// A smooth gradient which moves to the bottom within the showerProgress.
|
||||
float showerMask =
|
||||
smoothstep(1, 0, abs(showerProgress - t - SHOWER_WIDTH) / SHOWER_WIDTH);
|
||||
|
||||
// This is 1 above the streak mask.
|
||||
float streakMask = (showerProgress - t - SHOWER_WIDTH) > 0 ? 1 : 0;
|
||||
|
||||
// Compute mask for the "atom" particles.
|
||||
float atomMask = getRelativeEdgeMask(0.2);
|
||||
atomMask = max(0, atomMask - showerMask);
|
||||
atomMask *= streakMask;
|
||||
atomMask *= sqrt(1 - fadeProgress * fadeProgress);
|
||||
|
||||
// Make some particles visible in the streaks.
|
||||
showerMask += 0.05 * streakMask;
|
||||
|
||||
// Add shower mask to streak mask.
|
||||
streakMask = max(streakMask, showerMask);
|
||||
|
||||
// Fade-out the masks at the window edges.
|
||||
float edgeFade = getAbsoluteEdgeMask(EDGE_FADE);
|
||||
streakMask *= edgeFade;
|
||||
showerMask *= edgeFade;
|
||||
|
||||
// Fade-out the masks from top to bottom.
|
||||
float fade = smoothstep(0.0, 1.0, 1.0 + t - 2.0 * streakProgress);
|
||||
streakMask *= fade;
|
||||
showerMask *= fade;
|
||||
|
||||
// Compute fading window opacity.
|
||||
float windowMask = pow(1.0 - fadeProgress, 2.0);
|
||||
|
||||
if (uForOpening) {
|
||||
windowMask = 1.0 - windowMask;
|
||||
}
|
||||
|
||||
return vec4(showerMask, streakMask, atomMask, windowMask);
|
||||
}
|
||||
Reference in New Issue
Block a user