43 lines
1.1 KiB
JavaScript
43 lines
1.1 KiB
JavaScript
/**
|
|
* Compute baseline illumination according to darkness level encoded texture.
|
|
*/
|
|
class BaselineIlluminationSamplerShader extends BaseSamplerShader {
|
|
|
|
/** @override */
|
|
static classPluginName = null;
|
|
|
|
/** @inheritdoc */
|
|
static fragmentShader = `
|
|
precision ${PIXI.settings.PRECISION_FRAGMENT} float;
|
|
uniform sampler2D sampler;
|
|
uniform vec4 tintAlpha;
|
|
uniform vec3 ambientDarkness;
|
|
uniform vec3 ambientDaylight;
|
|
varying vec2 vUvs;
|
|
|
|
void main() {
|
|
float illuminationRed = texture2D(sampler, vUvs).r;
|
|
vec3 finalColor = mix(ambientDaylight, ambientDarkness, illuminationRed);
|
|
gl_FragColor = vec4(finalColor, 1.0) * tintAlpha;
|
|
}`;
|
|
|
|
/** @inheritdoc */
|
|
static defaultUniforms = {
|
|
tintAlpha: [1, 1, 1, 1],
|
|
ambientDarkness: [0, 0, 0],
|
|
ambientDaylight: [1, 1, 1],
|
|
sampler: null
|
|
};
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
/** @inheritDoc */
|
|
_preRender(mesh, renderer) {
|
|
super._preRender(mesh, renderer);
|
|
const c = canvas.colors;
|
|
const u = this.uniforms;
|
|
c.ambientDarkness.applyRGB(u.ambientDarkness);
|
|
c.ambientDaylight.applyRGB(u.ambientDaylight);
|
|
}
|
|
}
|