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

75 lines
1.9 KiB
JavaScript

/**
* Siren light animation coloration shader
*/
class SirenColorationShader extends AdaptiveColorationShader {
static fragmentShader = `
${this.SHADER_HEADER}
uniform float gradientFade;
uniform float beamLength;
${this.PERCEIVED_BRIGHTNESS}
${this.PIE}
${this.ROTATION}
void main() {
${this.FRAGMENT_BEGIN}
vec2 ncoord = vUvs * 2.0 - 1.0;
float angularIntensity = mix(PI, 0.0, intensity * 0.1);
ncoord *= rot(time * 50.0 + angle);
float angularCorrection = pie(ncoord, angularIntensity, clamp(gradientFade * dist, 0.05, 1.0), beamLength);
finalColor = color * brightnessPulse * colorationAlpha * angularCorrection;
${this.COLORATION_TECHNIQUES}
${this.ADJUSTMENTS}
${this.FALLOFF}
${this.FRAGMENT_END}
}
`;
/** @inheritdoc */
static defaultUniforms = ({
...super.defaultUniforms,
ratio: 0,
brightnessPulse: 1,
angle: 0,
gradientFade: 0.15,
beamLength: 1
});
}
/* -------------------------------------------- */
/**
* Siren light animation illumination shader
*/
class SirenIlluminationShader extends AdaptiveIlluminationShader {
static fragmentShader = `
${this.SHADER_HEADER}
uniform float gradientFade;
uniform float beamLength;
${this.PERCEIVED_BRIGHTNESS}
${this.PIE}
${this.ROTATION}
void main() {
${this.FRAGMENT_BEGIN}
${this.TRANSITION}
vec2 ncoord = vUvs * 2.0 - 1.0;
float angularIntensity = mix(PI, 0.0, intensity * 0.1);
ncoord *= rot(time * 50.0 + angle);
float angularCorrection = mix(1.0, pie(ncoord, angularIntensity, clamp(gradientFade * dist, 0.05, 1.0), beamLength), 0.5);
finalColor *= angularCorrection;
${this.ADJUSTMENTS}
${this.FALLOFF}
${this.FRAGMENT_END}
}`;
/** @inheritdoc */
static defaultUniforms = ({
...super.defaultUniforms,
angle: 0,
gradientFade: 0.45,
beamLength: 1
});
}