getCompositeMaterial method
ShaderMaterial
getCompositeMaterial(
- num nMips
)
Implementation
ShaderMaterial getCompositeMaterial(num nMips) {
return ShaderMaterial.fromMap({
"defines": {'NUM_MIPS': nMips},
"uniforms": {
'blurTexture1': <String,dynamic>{'value': null},
'blurTexture2': <String,dynamic>{'value': null},
'blurTexture3': <String,dynamic>{'value': null},
'blurTexture4': <String,dynamic>{'value': null},
'blurTexture5': <String,dynamic>{'value': null},
'dirtTexture': <String,dynamic>{'value': null},
'bloomStrength': {"value": 1.0},
'bloomFactors': <String,dynamic>{"value": null},
'bloomTintColors': <String,dynamic>{'value': null},
'bloomRadius': {"value": 0.0}
},
"vertexShader": """
varying vec2 vUv;
void main() {
vUv = uv;
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
}
""",
"fragmentShader": """
varying vec2 vUv;
uniform sampler2D blurTexture1;
uniform sampler2D blurTexture2;
uniform sampler2D blurTexture3;
uniform sampler2D blurTexture4;
uniform sampler2D blurTexture5;
uniform float bloomStrength;
uniform float bloomRadius;
uniform float bloomFactors[NUM_MIPS];
uniform vec3 bloomTintColors[NUM_MIPS];
float lerpBloomFactor(in float factor) {
float mirrorFactor = 1.2 - factor;
return mix(factor, mirrorFactor, bloomRadius);
}
void main() {
gl_FragColor = bloomStrength * 0.1 * ( lerpBloomFactor(bloomFactors[0]) * vec4(bloomTintColors[0], 1.0) * texture2D(blurTexture1, vUv) +
lerpBloomFactor(bloomFactors[1]) * vec4(bloomTintColors[1], 1.0) * texture2D(blurTexture2, vUv) +
lerpBloomFactor(bloomFactors[2]) * vec4(bloomTintColors[2], 1.0) * texture2D(blurTexture3, vUv) +
lerpBloomFactor(bloomFactors[3]) * vec4(bloomTintColors[3], 1.0) * texture2D(blurTexture4, vUv) +
lerpBloomFactor(bloomFactors[4]) * vec4(bloomTintColors[4], 1.0) * texture2D(blurTexture5, vUv) );
}
"""
});
}