Initial
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
/**
|
||||
* The default coloration shader used by standard rendering and animations.
|
||||
* A fragment shader which creates a solid light source.
|
||||
*/
|
||||
class AdaptiveDarknessShader extends AdaptiveLightingShader {
|
||||
|
||||
/** @override */
|
||||
update() {
|
||||
super.update();
|
||||
this.uniforms.darknessLevel = canvas.environment.darknessLevel;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/**
|
||||
* Flag whether the darkness shader is currently required.
|
||||
* Check vision modes requirements first, then
|
||||
* if key uniforms are at their default values, we don't need to render the background container.
|
||||
* @type {boolean}
|
||||
*/
|
||||
get isRequired() {
|
||||
const vs = canvas.visibility.lightingVisibility;
|
||||
|
||||
// Checking if darkness layer is disabled
|
||||
if ( vs.darkness === VisionMode.LIGHTING_VISIBILITY.DISABLED ) return false;
|
||||
|
||||
// Otherwise, returns true in every circumstances
|
||||
return true;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/* GLSL Statics */
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/** @override */
|
||||
static defaultUniforms = {
|
||||
intensity: 5,
|
||||
color: Color.from("#8651d5").rgb,
|
||||
screenDimensions: [1, 1],
|
||||
time: 0,
|
||||
primaryTexture: null,
|
||||
depthTexture: null,
|
||||
visionTexture: null,
|
||||
darknessLevelTexture: null,
|
||||
depthElevation: 1,
|
||||
ambientBrightest: [1, 1, 1],
|
||||
ambientDarkness: [0, 0, 0],
|
||||
ambientDaylight: [1, 1, 1],
|
||||
weights: [0, 0, 0, 0],
|
||||
dimLevelCorrection: 1,
|
||||
brightLevelCorrection: 2,
|
||||
borderDistance: 0,
|
||||
darknessLevel: 0,
|
||||
computeIllumination: false,
|
||||
globalLight: false,
|
||||
globalLightThresholds: [0, 0],
|
||||
enableVisionMasking: false
|
||||
};
|
||||
|
||||
static {
|
||||
const initial = foundry.data.LightData.cleanData();
|
||||
this.defaultUniforms.intensity = initial.animation.intensity;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/**
|
||||
* Shader final
|
||||
* @type {string}
|
||||
*/
|
||||
static FRAGMENT_END = `
|
||||
gl_FragColor = vec4(finalColor, 1.0) * depth;
|
||||
`;
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/**
|
||||
* Initialize fragment with common properties
|
||||
* @type {string}
|
||||
*/
|
||||
static FRAGMENT_BEGIN = `
|
||||
${this.COMPUTE_ILLUMINATION}
|
||||
float dist = distance(vUvs, vec2(0.5)) * 2.0;
|
||||
vec4 depthColor = texture2D(depthTexture, vSamplerUvs);
|
||||
float depth = smoothstep(0.0, 1.0, vDepth) *
|
||||
step(depthColor.g, depthElevation) *
|
||||
step(depthElevation, (254.5 / 255.0) - depthColor.r) *
|
||||
(enableVisionMasking ? 1.0 - step(texture2D(visionTexture, vSamplerUvs).r, 0.0) : 1.0) *
|
||||
(1.0 - smoothstep(borderDistance, 1.0, dist));
|
||||
vec4 baseColor = texture2D(primaryTexture, vSamplerUvs);
|
||||
vec3 finalColor = baseColor.rgb;
|
||||
`;
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/**
|
||||
* Memory allocations for the Adaptive Background Shader
|
||||
* @type {string}
|
||||
*/
|
||||
static SHADER_HEADER = `
|
||||
${this.FRAGMENT_UNIFORMS}
|
||||
${this.VERTEX_FRAGMENT_VARYINGS}
|
||||
${this.FRAGMENT_FUNCTIONS}
|
||||
${this.CONSTANTS}
|
||||
`;
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/** @inheritdoc */
|
||||
static fragmentShader = `
|
||||
${this.SHADER_HEADER}
|
||||
${this.PERCEIVED_BRIGHTNESS}
|
||||
|
||||
void main() {
|
||||
${this.FRAGMENT_BEGIN}
|
||||
finalColor *= (mix(color, color * 0.33, darknessLevel) * colorationAlpha);
|
||||
${this.FRAGMENT_END}
|
||||
}`;
|
||||
}
|
||||
Reference in New Issue
Block a user