Skip to content

Commit 0ac69e2

Browse files
authored
WebGLShadowMap: Make VSM samples a define. (#22708)
1 parent b4747b2 commit 0ac69e2

File tree

2 files changed

+16
-6
lines changed

2 files changed

+16
-6
lines changed

src/renderers/shaders/ShaderLib/vsm.glsl.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,13 @@ export const fragment = /* glsl */`
1010
uniform sampler2D shadow_pass;
1111
uniform vec2 resolution;
1212
uniform float radius;
13-
uniform float samples;
1413
1514
#include <packing>
1615
1716
void main() {
1817
18+
const float samples = float( VSM_SAMPLES );
19+
1920
float mean = 0.0;
2021
float squared_mean = 0.0;
2122

src/renderers/webgl/WebGLShadowMap.js

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,13 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
3131
const shadowSide = { 0: BackSide, 1: FrontSide, 2: DoubleSide };
3232

3333
const shadowMaterialVertical = new ShaderMaterial( {
34-
34+
defines: {
35+
VSM_SAMPLES: 8
36+
},
3537
uniforms: {
3638
shadow_pass: { value: null },
3739
resolution: { value: new Vector2() },
38-
radius: { value: 4.0 },
39-
samples: { value: 8.0 }
40+
radius: { value: 4.0 }
4041
},
4142

4243
vertexShader: vsm.vertex,
@@ -202,12 +203,21 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
202203

203204
const geometry = _objects.update( fullScreenMesh );
204205

206+
if ( shadowMaterialVertical.defines.VSM_SAMPLES !== shadow.blurSamples ) {
207+
208+
shadowMaterialVertical.defines.VSM_SAMPLES = shadow.blurSamples;
209+
shadowMaterialHorizontal.defines.VSM_SAMPLES = shadow.blurSamples;
210+
211+
shadowMaterialVertical.needsUpdate = true;
212+
shadowMaterialHorizontal.needsUpdate = true;
213+
214+
}
215+
205216
// vertical pass
206217

207218
shadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture;
208219
shadowMaterialVertical.uniforms.resolution.value = shadow.mapSize;
209220
shadowMaterialVertical.uniforms.radius.value = shadow.radius;
210-
shadowMaterialVertical.uniforms.samples.value = shadow.blurSamples;
211221
_renderer.setRenderTarget( shadow.mapPass );
212222
_renderer.clear();
213223
_renderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null );
@@ -217,7 +227,6 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
217227
shadowMaterialHorizontal.uniforms.shadow_pass.value = shadow.mapPass.texture;
218228
shadowMaterialHorizontal.uniforms.resolution.value = shadow.mapSize;
219229
shadowMaterialHorizontal.uniforms.radius.value = shadow.radius;
220-
shadowMaterialHorizontal.uniforms.samples.value = shadow.blurSamples;
221230
_renderer.setRenderTarget( shadow.map );
222231
_renderer.clear();
223232
_renderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null );

0 commit comments

Comments
 (0)