|
@@ -20021,7 +20021,7 @@ class MeshDistanceMaterial extends Material {
|
|
|
|
|
|
MeshDistanceMaterial.prototype.isMeshDistanceMaterial = true;
|
|
|
|
|
|
-var vsm_frag = "uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include <packing>\nvoid main() {\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean * HALF_SAMPLE_RATE;\n\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}";
|
|
|
+var vsm_frag = "uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\nuniform float samples;\n#include <packing>\nvoid main() {\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\n\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\n\tfor ( float i = 0.0; i < samples; i ++ ) {\n\t\tfloat uvOffset = uvStart + i * uvStride;\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean / samples;\n\tsquared_mean = squared_mean / samples;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}";
|
|
|
|
|
|
var vsm_vert = "void main() {\n\tgl_Position = vec4( position, 1.0 );\n}";
|
|
|
|
|
@@ -20045,15 +20045,11 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
|
|
|
|
|
|
const shadowMaterialVertical = new ShaderMaterial( {
|
|
|
|
|
|
- defines: {
|
|
|
- SAMPLE_RATE: 2.0 / 8.0,
|
|
|
- HALF_SAMPLE_RATE: 1.0 / 8.0
|
|
|
- },
|
|
|
-
|
|
|
uniforms: {
|
|
|
shadow_pass: { value: null },
|
|
|
resolution: { value: new Vector2() },
|
|
|
- radius: { value: 4.0 }
|
|
|
+ radius: { value: 4.0 },
|
|
|
+ samples: { value: 8.0 }
|
|
|
},
|
|
|
|
|
|
vertexShader: vsm_vert,
|
|
@@ -20225,6 +20221,7 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
|
|
|
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 );
|
|
@@ -20234,6 +20231,7 @@ 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 );
|
|
@@ -39131,6 +39129,7 @@ class LightShadow {
|
|
|
this.bias = 0;
|
|
|
this.normalBias = 0;
|
|
|
this.radius = 1;
|
|
|
+ this.blurSamples = 8;
|
|
|
|
|
|
this.mapSize = new Vector2( 512, 512 );
|
|
|
|