Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
mamayaya1
GitHub Repository: mamayaya1/game
Path: blob/main/projects/HexGL/libs/postprocessing/BloomPass.js
4627 views
1
/**
2
* @author alteredq / http://alteredqualia.com/
3
*/
4
5
THREE.BloomPass = function ( strength, kernelSize, sigma, resolution ) {
6
7
strength = ( strength !== undefined ) ? strength : 1;
8
kernelSize = ( kernelSize !== undefined ) ? kernelSize : 25;
9
sigma = ( sigma !== undefined ) ? sigma : 4.0;
10
resolution = ( resolution !== undefined ) ? resolution : 256;
11
12
// render targets
13
14
var pars = { minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBFormat };
15
16
this.renderTargetX = new THREE.WebGLRenderTarget( resolution, resolution, pars );
17
this.renderTargetY = new THREE.WebGLRenderTarget( resolution, resolution, pars );
18
19
// screen material
20
21
var screenShader = THREE.ShaderExtras[ "screen" ];
22
23
this.screenUniforms = THREE.UniformsUtils.clone( screenShader.uniforms );
24
25
this.screenUniforms[ "opacity" ].value = strength;
26
27
this.materialScreen = new THREE.ShaderMaterial( {
28
29
uniforms: this.screenUniforms,
30
vertexShader: screenShader.vertexShader,
31
fragmentShader: screenShader.fragmentShader,
32
blending: THREE.AdditiveBlending,
33
transparent: true
34
35
} );
36
37
// convolution material
38
39
var convolutionShader = THREE.ShaderExtras[ "convolution" ];
40
41
this.convolutionUniforms = THREE.UniformsUtils.clone( convolutionShader.uniforms );
42
43
this.convolutionUniforms[ "uImageIncrement" ].value = THREE.BloomPass.blurx;
44
this.convolutionUniforms[ "cKernel" ].value = THREE.ShaderExtras.buildKernel( sigma );
45
46
this.materialConvolution = new THREE.ShaderMaterial( {
47
48
uniforms: this.convolutionUniforms,
49
vertexShader: "#define KERNEL_SIZE " + kernelSize + ".0\n" + convolutionShader.vertexShader,
50
fragmentShader: "#define KERNEL_SIZE " + kernelSize + "\n" + convolutionShader.fragmentShader
51
52
} );
53
54
this.enabled = true;
55
this.needsSwap = false;
56
this.clear = false;
57
58
};
59
60
THREE.BloomPass.prototype = {
61
62
render: function ( renderer, writeBuffer, readBuffer, delta, maskActive ) {
63
64
if ( maskActive ) renderer.context.disable( renderer.context.STENCIL_TEST );
65
66
// Render quad with blured scene into texture (convolution pass 1)
67
68
THREE.EffectComposer.quad.material = this.materialConvolution;
69
70
this.convolutionUniforms[ "tDiffuse" ].texture = readBuffer;
71
this.convolutionUniforms[ "uImageIncrement" ].value = THREE.BloomPass.blurX;
72
73
renderer.render( THREE.EffectComposer.scene, THREE.EffectComposer.camera, this.renderTargetX, true );
74
75
76
// Render quad with blured scene into texture (convolution pass 2)
77
78
this.convolutionUniforms[ "tDiffuse" ].texture = this.renderTargetX;
79
this.convolutionUniforms[ "uImageIncrement" ].value = THREE.BloomPass.blurY;
80
81
renderer.render( THREE.EffectComposer.scene, THREE.EffectComposer.camera, this.renderTargetY, true );
82
83
// Render original scene with superimposed blur to texture
84
85
THREE.EffectComposer.quad.material = this.materialScreen;
86
87
this.screenUniforms[ "tDiffuse" ].texture = this.renderTargetY;
88
89
if ( maskActive ) renderer.context.enable( renderer.context.STENCIL_TEST );
90
91
renderer.render( THREE.EffectComposer.scene, THREE.EffectComposer.camera, readBuffer, this.clear );
92
93
}
94
95
};
96
97
THREE.BloomPass.blurX = new THREE.Vector2( 0.001953125, 0.0 );
98
THREE.BloomPass.blurY = new THREE.Vector2( 0.0, 0.001953125 );
99
100
101
102