Files
Foundry-VTT-Docker/resources/app/client/pixi/webgl/shaders/lighting/effects/ghost-light.js
2025-01-04 00:34:03 +01:00

87 lines
2.6 KiB
JavaScript

/**
* Ghost light animation illumination shader
*/
class GhostLightIlluminationShader extends AdaptiveIlluminationShader {
static fragmentShader = `
${this.SHADER_HEADER}
${this.PERCEIVED_BRIGHTNESS}
${this.PRNG}
${this.NOISE}
${this.FBM(3, 1.0)}
void main() {
${this.FRAGMENT_BEGIN}
// Creating distortion with vUvs and fbm
float distortion1 = fbm(vec2(
fbm(vUvs * 5.0 - time * 0.50),
fbm((-vUvs - vec2(0.01)) * 5.0 + time * INVTHREE)));
float distortion2 = fbm(vec2(
fbm(-vUvs * 5.0 - time * 0.50),
fbm((-vUvs + vec2(0.01)) * 5.0 + time * INVTHREE)));
vec2 uv = vUvs;
// time related var
float t = time * 0.5;
float tcos = 0.5 * (0.5 * (cos(t)+1.0)) + 0.25;
${this.TRANSITION}
finalColor *= mix( distortion1 * 1.5 * (intensity * 0.2),
distortion2 * 1.5 * (intensity * 0.2), tcos);
${this.ADJUSTMENTS}
${this.FALLOFF}
${this.FRAGMENT_END}
}`;
}
/* -------------------------------------------- */
/**
* Ghost light animation coloration shader
*/
class GhostLightColorationShader extends AdaptiveColorationShader {
static fragmentShader = `
${this.SHADER_HEADER}
${this.PRNG}
${this.NOISE}
${this.FBM(3, 1.0)}
${this.PERCEIVED_BRIGHTNESS}
void main() {
${this.FRAGMENT_BEGIN}
// Creating distortion with vUvs and fbm
float distortion1 = fbm(vec2(
fbm(vUvs * 3.0 + time * 0.50),
fbm((-vUvs + vec2(1.)) * 5.0 + time * INVTHREE)));
float distortion2 = fbm(vec2(
fbm(-vUvs * 3.0 + time * 0.50),
fbm((-vUvs + vec2(1.)) * 5.0 - time * INVTHREE)));
vec2 uv = vUvs;
// time related var
float t = time * 0.5;
float tcos = 0.5 * (0.5 * (cos(t)+1.0)) + 0.25;
float tsin = 0.5 * (0.5 * (sin(t)+1.0)) + 0.25;
// Creating distortions with cos and sin : create fluidity
uv -= PIVOT;
uv *= tcos * distortion1;
uv *= tsin * distortion2;
uv *= fbm(vec2(time + distortion1, time + distortion2));
uv += PIVOT;
finalColor = distortion1 * distortion1 *
distortion2 * distortion2 *
color * pow(1.0 - dist, dist)
* colorationAlpha * mix( uv.x + distortion1 * 4.5 * (intensity * 0.2),
uv.y + distortion2 * 4.5 * (intensity * 0.2), tcos);
${this.COLORATION_TECHNIQUES}
${this.ADJUSTMENTS}
${this.FALLOFF}
${this.FRAGMENT_END}
}`;
}