@react-three/drei 9.56.21 → 9.56.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -369,8 +369,6 @@ type CameraControlsProps = {
369
369
  onStart?: (e?: { type: 'controlstart' }) => void
370
370
  onEnd?: (e?: { type: 'controlend' }) => void
371
371
  onChange?: (e?: { type: 'update' }) => void
372
- /** While "dragging", state's `events` are disabled by default(for performance). You can explicitly disable this optimisation, by setting this prop to true */
373
- events?: boolean
374
372
  }
375
373
  ```
376
374
 
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react"),n=require("@react-three/fiber"),o=require("camera-controls");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function a(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var u=s(e),c=a(t),l=a(r),d=s(o);const f=r.forwardRef(((e,t)=>{r.useMemo((()=>{d.default.install({THREE:c}),n.extend({CameraControlsImpl:d.default})}),[]);const{camera:o,domElement:s,makeDefault:a,onStart:f,onEnd:i,onChange:m,events:v=!0,regress:E,...b}=e,p=n.useThree((e=>e.camera)),h=n.useThree((e=>e.gl)),T=n.useThree((e=>e.invalidate)),g=n.useThree((e=>e.events)),j=n.useThree((e=>e.setEvents)),O=n.useThree((e=>e.set)),L=n.useThree((e=>e.get)),q=n.useThree((e=>e.performance)),y=o||p,C=s||g.connected||h.domElement,x=r.useMemo((()=>new d.default(y)),[y]);return n.useFrame(((e,t)=>{x.enabled&&x.update(t)}),-1),r.useEffect((()=>(x.connect(C),()=>{x.disconnect()})),[C,x]),l.useEffect((()=>{v&&j({enabled:!0});const e=e=>{T(),E&&q.regress(),m&&m(e)},t=e=>{f&&f(e),v||j({enabled:!1})},r=e=>{i&&i(e),v||j({enabled:!0})};return x.addEventListener("update",e),x.addEventListener("controlstart",t),x.addEventListener("controlend",r),()=>{x.removeEventListener("update",e),x.removeEventListener("controlstart",t),x.removeEventListener("controlend",r)}}),[x,v,f,i,T,j,E,m]),r.useEffect((()=>{if(a){const e=L().controls;return O({controls:x}),()=>O({controls:e})}}),[a,x]),l.createElement("primitive",u.default({ref:t,object:x},b))}));exports.CameraControls=f;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react"),n=require("@react-three/fiber"),o=require("camera-controls");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function a(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var u=s(e),c=a(t),l=a(r),d=s(o);const f=r.forwardRef(((e,t)=>{r.useMemo((()=>{d.default.install({THREE:c}),n.extend({CameraControlsImpl:d.default})}),[]);const{camera:o,domElement:s,makeDefault:a,onStart:f,onEnd:i,onChange:m,regress:v,...E}=e,p=n.useThree((e=>e.camera)),b=n.useThree((e=>e.gl)),h=n.useThree((e=>e.invalidate)),T=n.useThree((e=>e.events)),g=n.useThree((e=>e.setEvents)),j=n.useThree((e=>e.set)),O=n.useThree((e=>e.get)),L=n.useThree((e=>e.performance)),q=o||p,y=s||T.connected||b.domElement,C=r.useMemo((()=>new d.default(q)),[q]);return n.useFrame(((e,t)=>{C.enabled&&C.update(t)}),-1),r.useEffect((()=>(C.connect(y),()=>{C.disconnect()})),[y,C]),l.useEffect((()=>{const e=e=>{h(),v&&L.regress(),m&&m(e)},t=e=>{f&&f(e)},r=e=>{i&&i(e)};return C.addEventListener("update",e),C.addEventListener("controlstart",t),C.addEventListener("controlend",r),()=>{C.removeEventListener("update",e),C.removeEventListener("controlstart",t),C.removeEventListener("controlend",r)}}),[C,f,i,h,g,v,m]),r.useEffect((()=>{if(a){const e=O().controls;return j({controls:C}),()=>j({controls:e})}}),[a,C]),l.createElement("primitive",u.default({ref:t,object:C},E))}));exports.CameraControls=f;
@@ -21,7 +21,6 @@ const CameraControls = /*#__PURE__*/forwardRef((props, ref) => {
21
21
  onStart,
22
22
  onEnd,
23
23
  onChange,
24
- events: enableEvents = true,
25
24
  regress,
26
25
  ...restProps
27
26
  } = props;
@@ -44,12 +43,6 @@ const CameraControls = /*#__PURE__*/forwardRef((props, ref) => {
44
43
  return () => void controls.disconnect();
45
44
  }, [explDomElement, controls]);
46
45
  React.useEffect(() => {
47
- if (enableEvents) {
48
- setEvents({
49
- enabled: true
50
- });
51
- }
52
-
53
46
  const callback = e => {
54
47
  invalidate();
55
48
  if (regress) performance.regress();
@@ -58,16 +51,10 @@ const CameraControls = /*#__PURE__*/forwardRef((props, ref) => {
58
51
 
59
52
  const onStartCb = e => {
60
53
  if (onStart) onStart(e);
61
- if (!enableEvents) setEvents({
62
- enabled: false
63
- });
64
54
  };
65
55
 
66
56
  const onEndCb = e => {
67
57
  if (onEnd) onEnd(e);
68
- if (!enableEvents) setEvents({
69
- enabled: true
70
- });
71
58
  };
72
59
 
73
60
  controls.addEventListener('update', callback);
@@ -78,7 +65,7 @@ const CameraControls = /*#__PURE__*/forwardRef((props, ref) => {
78
65
  controls.removeEventListener('controlstart', onStartCb);
79
66
  controls.removeEventListener('controlend', onEndCb);
80
67
  };
81
- }, [controls, enableEvents, onStart, onEnd, invalidate, setEvents, regress, onChange]);
68
+ }, [controls, onStart, onEnd, invalidate, setEvents, regress, onChange]);
82
69
  useEffect(() => {
83
70
  if (makeDefault) {
84
71
  const old = get().controls;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),r=require("react"),n=require("three-stdlib");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function a(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var o=s(e),u=a(r);const c=u.forwardRef((({makeDefault:e,events:r=!0,camera:s,regress:a,domElement:c,enableDamping:i=!0,onChange:d,onStart:l,onEnd:f,...b},m)=>{const v=t.useThree((e=>e.invalidate)),h=t.useThree((e=>e.camera)),E=t.useThree((e=>e.gl)),p=t.useThree((e=>e.events)),g=t.useThree((e=>e.setEvents)),O=t.useThree((e=>e.set)),j=t.useThree((e=>e.get)),T=t.useThree((e=>e.performance)),L=s||h,y=c||p.connected||E.domElement,q=u.useMemo((()=>new n.OrbitControls(L)),[L]);return t.useFrame((()=>{q.enabled&&q.update()}),-1),u.useEffect((()=>(q.connect(y),()=>{q.dispose()})),[y,a,q,v]),u.useEffect((()=>{r&&g({enabled:!0});const e=e=>{v(),a&&T.regress(),d&&d(e)},t=e=>{l&&l(e),r||g({enabled:!1})},n=e=>{f&&f(e),r||g({enabled:!0})};return q.addEventListener("change",e),q.addEventListener("start",t),q.addEventListener("end",n),()=>{q.removeEventListener("start",t),q.removeEventListener("end",n),q.removeEventListener("change",e)}}),[d,l,f,q,v,r,g]),u.useEffect((()=>{if(e){const e=j().controls;return O({controls:q}),()=>O({controls:e})}}),[e,q]),u.createElement("primitive",o.default({ref:m,object:q,enableDamping:i},b))}));exports.OrbitControls=c;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),r=require("react"),n=require("three-stdlib");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var a=s(e),u=o(r);const c=u.forwardRef((({makeDefault:e,camera:r,regress:s,domElement:o,enableDamping:c=!0,onChange:i,onStart:f,onEnd:d,...l},m)=>{const b=t.useThree((e=>e.invalidate)),v=t.useThree((e=>e.camera)),h=t.useThree((e=>e.gl)),E=t.useThree((e=>e.events)),p=t.useThree((e=>e.setEvents)),g=t.useThree((e=>e.set)),O=t.useThree((e=>e.get)),j=t.useThree((e=>e.performance)),T=r||v,L=o||E.connected||h.domElement,y=u.useMemo((()=>new n.OrbitControls(T)),[T]);return t.useFrame((()=>{y.enabled&&y.update()}),-1),u.useEffect((()=>(y.connect(L),()=>{y.dispose()})),[L,s,y,b]),u.useEffect((()=>{const e=e=>{b(),s&&j.regress(),i&&i(e)},t=e=>{f&&f(e)},r=e=>{d&&d(e)};return y.addEventListener("change",e),y.addEventListener("start",t),y.addEventListener("end",r),()=>{y.removeEventListener("start",t),y.removeEventListener("end",r),y.removeEventListener("change",e)}}),[i,f,d,y,b,p]),u.useEffect((()=>{if(e){const e=O().controls;return g({controls:y}),()=>g({controls:e})}}),[e,y]),u.createElement("primitive",a.default({ref:m,object:y,enableDamping:c},l))}));exports.OrbitControls=c;
@@ -17,6 +17,5 @@ export declare type OrbitControlsProps = Omit<ReactThreeFiber.Overwrite<ReactThr
17
17
  onStart?: (e?: Event) => void;
18
18
  regress?: boolean;
19
19
  target?: ReactThreeFiber.Vector3;
20
- events?: boolean;
21
20
  }>, 'ref'>;
22
21
  export declare const OrbitControls: React.ForwardRefExoticComponent<OrbitControlsProps & React.RefAttributes<OrbitControlsImpl>>;
@@ -5,7 +5,6 @@ import { OrbitControls as OrbitControls$1 } from 'three-stdlib';
5
5
 
6
6
  const OrbitControls = /*#__PURE__*/React.forwardRef(({
7
7
  makeDefault,
8
- events: enableEvents = true,
9
8
  camera,
10
9
  regress,
11
10
  domElement,
@@ -34,12 +33,6 @@ const OrbitControls = /*#__PURE__*/React.forwardRef(({
34
33
  return () => void controls.dispose();
35
34
  }, [explDomElement, regress, controls, invalidate]);
36
35
  React.useEffect(() => {
37
- if (enableEvents) {
38
- setEvents({
39
- enabled: true
40
- });
41
- }
42
-
43
36
  const callback = e => {
44
37
  invalidate();
45
38
  if (regress) performance.regress();
@@ -48,16 +41,10 @@ const OrbitControls = /*#__PURE__*/React.forwardRef(({
48
41
 
49
42
  const onStartCb = e => {
50
43
  if (onStart) onStart(e);
51
- if (!enableEvents) setEvents({
52
- enabled: false
53
- });
54
44
  };
55
45
 
56
46
  const onEndCb = e => {
57
47
  if (onEnd) onEnd(e);
58
- if (!enableEvents) setEvents({
59
- enabled: true
60
- });
61
48
  };
62
49
 
63
50
  controls.addEventListener('change', callback);
@@ -68,7 +55,7 @@ const OrbitControls = /*#__PURE__*/React.forwardRef(({
68
55
  controls.removeEventListener('end', onEndCb);
69
56
  controls.removeEventListener('change', callback);
70
57
  };
71
- }, [onChange, onStart, onEnd, controls, invalidate, enableEvents, setEvents]);
58
+ }, [onChange, onStart, onEnd, controls, invalidate, setEvents]);
72
59
  React.useEffect(() => {
73
60
  if (makeDefault) {
74
61
  const old = get().controls;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),n=require("three"),a=require("@react-three/fiber");function r(e){if(e&&e.__esModule)return e;var n=Object.create(null);return e&&Object.keys(e).forEach((function(a){if("default"!==a){var r=Object.getOwnPropertyDescriptor(e,a);Object.defineProperty(n,a,r.get?r:{enumerable:!0,get:function(){return e[a]}})}})),n.default=e,Object.freeze(n)}var o=r(e),t=r(n);const s=({frustum:e=3.75,size:n=.005,near:a=9.5,samples:r=10,rings:o=11}={})=>`#define LIGHT_WORLD_SIZE ${n}\n#define LIGHT_FRUSTUM_WIDTH ${e}\n#define LIGHT_SIZE_UV (LIGHT_WORLD_SIZE / LIGHT_FRUSTUM_WIDTH)\n#define NEAR_PLANE ${a}\n\n#define NUM_SAMPLES ${r}\n#define NUM_RINGS ${o}\n#define BLOCKER_SEARCH_NUM_SAMPLES NUM_SAMPLES\n\nvec2 poissonDisk[NUM_SAMPLES];\n\nvoid initPoissonSamples( const in vec2 randomSeed ) {\n float ANGLE_STEP = PI2 * float( NUM_RINGS ) / float( NUM_SAMPLES );\n float INV_NUM_SAMPLES = 1.0 / float( NUM_SAMPLES );\n\n // jsfiddle that shows sample pattern: https://jsfiddle.net/a16ff1p7/\n float angle = rand( randomSeed ) * PI2;\n float radius = INV_NUM_SAMPLES;\n float radiusStep = radius;\n\n #pragma unroll_loop_start\n for( int i = 0; i < ${r}; i ++ ) {\n poissonDisk[i] = vec2( cos( angle ), sin( angle ) ) * pow( radius, 0.75 );\n radius += radiusStep;\n angle += ANGLE_STEP;\n }\n #pragma unroll_loop_end\n}\n\nfloat penumbraSize( const in float zReceiver, const in float zBlocker ) { // Parallel plane estimation\n return (zReceiver - zBlocker) / zBlocker;\n}\n\nfloat findBlocker( sampler2D shadowMap, const in vec2 uv, const in float zReceiver ) {\n // This uses similar triangles to compute what\n // area of the shadow map we should search\n float searchRadius = LIGHT_SIZE_UV * ( zReceiver - NEAR_PLANE ) / zReceiver;\n float blockerDepthSum = 0.0;\n float shadowMapDepth = 0.0;\n int numBlockers = 0; \n #pragma unroll_loop_start\n for( int i = 0; i < ${r}; i++ ) {\n shadowMapDepth = unpackRGBAToDepth(texture2D(shadowMap, uv + poissonDisk[i] * searchRadius));\n if ( shadowMapDepth < zReceiver ) {\n blockerDepthSum += shadowMapDepth;\n numBlockers ++;\n }\n }\n #pragma unroll_loop_end\n\n if( numBlockers == 0 ) return -1.0;\n return blockerDepthSum / float( numBlockers );\n}\n\nfloat PCF_Filter(sampler2D shadowMap, vec2 uv, float zReceiver, float filterRadius ) {\n float sum = 0.0;\n float depth;\n #pragma unroll_loop_start\n for( int i = 0; i < ${r}; i ++ ) {\n depth = unpackRGBAToDepth( texture2D( shadowMap, uv + poissonDisk[ i ] * filterRadius ) );\n if( zReceiver <= depth ) sum += 1.0;\n }\n #pragma unroll_loop_end\n #pragma unroll_loop_start\n for( int i = 0; i < ${r}; i ++ ) {\n depth = unpackRGBAToDepth( texture2D( shadowMap, uv + -poissonDisk[ i ].yx * filterRadius ) );\n if( zReceiver <= depth ) sum += 1.0;\n }\n #pragma unroll_loop_end\n return sum / ( 2.0 * float( ${r} ) );\n}\n\nfloat PCSS ( sampler2D shadowMap, vec4 coords ) {\n vec2 uv = coords.xy;\n float zReceiver = coords.z; // Assumed to be eye-space z in this code\n\n initPoissonSamples( uv );\n // STEP 1: blocker search\n float avgBlockerDepth = findBlocker( shadowMap, uv, zReceiver );\n\n //There are no occluders so early out (this saves filtering)\n if( avgBlockerDepth == -1.0 ) return 1.0;\n\n // STEP 2: penumbra size\n float penumbraRatio = penumbraSize( zReceiver, avgBlockerDepth );\n float filterRadius = penumbraRatio * LIGHT_SIZE_UV * NEAR_PLANE / zReceiver;\n\n // STEP 3: filtering\n //return avgBlockerDepth;\n return PCF_Filter( shadowMap, uv, zReceiver, filterRadius );\n}`;let i=!1;function l(e,n,a){n.traverse((n=>{n.material&&(e.properties.remove(n.material),n.material.dispose())})),e.info.programs.length=0,e.compile(n,a)}exports.SoftShadows=function({frustum:e=3.75,size:n=.005,near:r=9.5,samples:i=10,rings:p=11}){const d=a.useThree((e=>e.gl)),f=a.useThree((e=>e.scene)),u=a.useThree((e=>e.camera));o.useEffect((()=>{const a=t.ShaderChunk.shadowmap_pars_fragment;let o=t.ShaderChunk.shadowmap_pars_fragment;return o=o.replace("#ifdef USE_SHADOWMAP","#ifdef USE_SHADOWMAP\n"+s({frustum:e,size:n,near:r,samples:i,rings:p})),o=o.replace("#if defined( SHADOWMAP_TYPE_PCF )","\nreturn PCSS(shadowMap, shadowCoord);\n#if defined( SHADOWMAP_TYPE_PCF )"),t.ShaderChunk.shadowmap_pars_fragment=o,l(d,f,u),()=>{t.ShaderChunk.shadowmap_pars_fragment=a,l(d,f,u)}}),[e,n,r,i,p])},exports.softShadows=e=>{if(!i){console.warn("drei/softShadows() is deprecated, use <SoftShadows> instead"),i=!0;let n=t.ShaderChunk.shadowmap_pars_fragment;n=n.replace("#ifdef USE_SHADOWMAP","#ifdef USE_SHADOWMAP\n"+s({...e})),n=n.replace("#if defined( SHADOWMAP_TYPE_PCF )","\nreturn PCSS(shadowMap, shadowCoord);\n#if defined( SHADOWMAP_TYPE_PCF )"),t.ShaderChunk.shadowmap_pars_fragment=n}};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),n=require("three"),a=require("@react-three/fiber");function r(e){if(e&&e.__esModule)return e;var n=Object.create(null);return e&&Object.keys(e).forEach((function(a){if("default"!==a){var r=Object.getOwnPropertyDescriptor(e,a);Object.defineProperty(n,a,r.get?r:{enumerable:!0,get:function(){return e[a]}})}})),n.default=e,Object.freeze(n)}var o=r(e),t=r(n);const s=({frustum:e=3.75,size:n=.005,near:a=9.5,samples:r=10,rings:o=11}={})=>`#define LIGHT_WORLD_SIZE ${n}\n#define LIGHT_FRUSTUM_WIDTH ${e}\n#define LIGHT_SIZE_UV (LIGHT_WORLD_SIZE / LIGHT_FRUSTUM_WIDTH)\n#define NEAR_PLANE ${a}\n\n#define NUM_SAMPLES ${r}\n#define NUM_RINGS ${o}\n#define BLOCKER_SEARCH_NUM_SAMPLES NUM_SAMPLES\n\nvec2 poissonDisk[NUM_SAMPLES];\n\nvoid initPoissonSamples( const in vec2 randomSeed ) {\n float ANGLE_STEP = PI2 * float( NUM_RINGS ) / float( NUM_SAMPLES );\n float INV_NUM_SAMPLES = 1.0 / float( NUM_SAMPLES );\n\n // jsfiddle that shows sample pattern: https://jsfiddle.net/a16ff1p7/\n float angle = rand( randomSeed ) * PI2;\n float radius = INV_NUM_SAMPLES;\n float radiusStep = radius;\n\n #pragma unroll_loop_start\n for( int i = 0; i < ${r}; i ++ ) {\n poissonDisk[i] = vec2( cos( angle ), sin( angle ) ) * pow( radius, 0.75 );\n radius += radiusStep;\n angle += ANGLE_STEP;\n }\n #pragma unroll_loop_end\n}\n\nfloat penumbraSize( const in float zReceiver, const in float zBlocker ) { // Parallel plane estimation\n return (zReceiver - zBlocker) / zBlocker;\n}\n\nfloat findBlocker( sampler2D shadowMap, const in vec2 uv, const in float zReceiver ) {\n // This uses similar triangles to compute what\n // area of the shadow map we should search\n float searchRadius = LIGHT_SIZE_UV * ( zReceiver - NEAR_PLANE ) / zReceiver;\n float blockerDepthSum = 0.0;\n float shadowMapDepth = 0.0;\n int numBlockers = 0; \n #pragma unroll_loop_start\n for( int i = 0; i < ${r}; i++ ) {\n shadowMapDepth = unpackRGBAToDepth(texture2D(shadowMap, uv + poissonDisk[i] * searchRadius));\n if ( shadowMapDepth < zReceiver ) {\n blockerDepthSum += shadowMapDepth;\n numBlockers ++;\n }\n }\n #pragma unroll_loop_end\n\n if( numBlockers == 0 ) return -1.0;\n return blockerDepthSum / float( numBlockers );\n}\n\nfloat PCF_Filter(sampler2D shadowMap, vec2 uv, float zReceiver, float filterRadius ) {\n float sum = 0.0;\n float depth;\n #pragma unroll_loop_start\n for( int i = 0; i < ${r}; i ++ ) {\n depth = unpackRGBAToDepth( texture2D( shadowMap, uv + poissonDisk[ i ] * filterRadius ) );\n if( zReceiver <= depth ) sum += 1.0;\n }\n #pragma unroll_loop_end\n #pragma unroll_loop_start\n for( int i = 0; i < ${r}; i ++ ) {\n depth = unpackRGBAToDepth( texture2D( shadowMap, uv + -poissonDisk[ i ].yx * filterRadius ) );\n if( zReceiver <= depth ) sum += 1.0;\n }\n #pragma unroll_loop_end\n return sum / ( 2.0 * float( ${r} ) );\n}\n\nfloat PCSS ( sampler2D shadowMap, vec4 coords ) {\n vec2 uv = coords.xy;\n float zReceiver = coords.z; // Assumed to be eye-space z in this code\n\n initPoissonSamples( uv );\n // STEP 1: blocker search\n float avgBlockerDepth = findBlocker( shadowMap, uv, zReceiver );\n\n //There are no occluders so early out (this saves filtering)\n if( avgBlockerDepth == -1.0 ) return 1.0;\n\n // STEP 2: penumbra size\n float penumbraRatio = penumbraSize( zReceiver, avgBlockerDepth );\n float filterRadius = penumbraRatio * LIGHT_SIZE_UV * NEAR_PLANE / zReceiver;\n\n // STEP 3: filtering\n //return avgBlockerDepth;\n return PCF_Filter( shadowMap, uv, zReceiver, filterRadius );\n}`;let i=!1;function l(e,n,a){n.traverse((n=>{n.material&&(e.properties.remove(n.material),n.material.dispose())})),e.info.programs.length=0,e.compile(n,a)}exports.SoftShadows=function({frustum:e=3.75,size:n=.005,near:r=9.5,samples:i=10,rings:p=11}){const d=a.useThree((e=>e.gl)),u=a.useThree((e=>e.scene)),f=a.useThree((e=>e.camera));return o.useEffect((()=>{const a=t.ShaderChunk.shadowmap_pars_fragment;let o=t.ShaderChunk.shadowmap_pars_fragment;return o=o.replace("#ifdef USE_SHADOWMAP","#ifdef USE_SHADOWMAP\n"+s({frustum:e,size:n,near:r,samples:i,rings:p})),o=o.replace("#if defined( SHADOWMAP_TYPE_PCF )","\nreturn PCSS(shadowMap, shadowCoord);\n#if defined( SHADOWMAP_TYPE_PCF )"),t.ShaderChunk.shadowmap_pars_fragment=o,l(d,u,f),()=>{t.ShaderChunk.shadowmap_pars_fragment=a,l(d,u,f)}}),[e,n,r,i,p]),null},exports.softShadows=e=>{if(!i){console.warn("drei/softShadows() is deprecated, use <SoftShadows> instead"),i=!0;let n=t.ShaderChunk.shadowmap_pars_fragment;n=n.replace("#ifdef USE_SHADOWMAP","#ifdef USE_SHADOWMAP\n"+s({...e})),n=n.replace("#if defined( SHADOWMAP_TYPE_PCF )","\nreturn PCSS(shadowMap, shadowCoord);\n#if defined( SHADOWMAP_TYPE_PCF )"),t.ShaderChunk.shadowmap_pars_fragment=n}};
@@ -6,5 +6,5 @@ declare type SoftShadowsProps = {
6
6
  rings?: number;
7
7
  };
8
8
  export declare const softShadows: (props?: SoftShadowsProps) => void;
9
- export declare function SoftShadows({ frustum, size, near, samples, rings }: SoftShadowsProps): void;
9
+ export declare function SoftShadows({ frustum, size, near, samples, rings }: SoftShadowsProps): null;
10
10
  export {};
@@ -155,6 +155,7 @@ function SoftShadows({
155
155
  reset(gl, scene, camera);
156
156
  };
157
157
  }, [frustum, size, near, samples, rings]);
158
+ return null;
158
159
  }
159
160
 
160
161
  export { SoftShadows, softShadows };