|
@@ -31,12 +31,13 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
|
|
|
const shadowSide = { 0: BackSide, 1: FrontSide, 2: DoubleSide };
|
|
|
|
|
|
const shadowMaterialVertical = new ShaderMaterial( {
|
|
|
-
|
|
|
+ defines: {
|
|
|
+ VSM_SAMPLES: 8
|
|
|
+ },
|
|
|
uniforms: {
|
|
|
shadow_pass: { value: null },
|
|
|
resolution: { value: new Vector2() },
|
|
|
- radius: { value: 4.0 },
|
|
|
- samples: { value: 8.0 }
|
|
|
+ radius: { value: 4.0 }
|
|
|
},
|
|
|
|
|
|
vertexShader: vsm.vertex,
|
|
@@ -202,12 +203,21 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
|
|
|
|
|
|
const geometry = _objects.update( fullScreenMesh );
|
|
|
|
|
|
+ if ( shadowMaterialVertical.defines.VSM_SAMPLES !== shadow.blurSamples ) {
|
|
|
+
|
|
|
+ shadowMaterialVertical.defines.VSM_SAMPLES = shadow.blurSamples;
|
|
|
+ shadowMaterialHorizontal.defines.VSM_SAMPLES = shadow.blurSamples;
|
|
|
+
|
|
|
+ shadowMaterialVertical.needsUpdate = true;
|
|
|
+ shadowMaterialHorizontal.needsUpdate = true;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
// vertical pass
|
|
|
|
|
|
shadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture;
|
|
|
shadowMaterialVertical.uniforms.resolution.value = shadow.mapSize;
|
|
|
shadowMaterialVertical.uniforms.radius.value = shadow.radius;
|
|
|
- shadowMaterialVertical.uniforms.samples.value = shadow.blurSamples;
|
|
|
_renderer.setRenderTarget( shadow.mapPass );
|
|
|
_renderer.clear();
|
|
|
_renderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null );
|
|
@@ -217,7 +227,6 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
|
|
|
shadowMaterialHorizontal.uniforms.shadow_pass.value = shadow.mapPass.texture;
|
|
|
shadowMaterialHorizontal.uniforms.resolution.value = shadow.mapSize;
|
|
|
shadowMaterialHorizontal.uniforms.radius.value = shadow.radius;
|
|
|
- shadowMaterialHorizontal.uniforms.samples.value = shadow.blurSamples;
|
|
|
_renderer.setRenderTarget( shadow.map );
|
|
|
_renderer.clear();
|
|
|
_renderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null );
|