@react-three/drei 9.18.0 → 9.19.0

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
@@ -179,6 +179,8 @@ The `native` route of the library **does not** export `Html` or `Loader`. The de
179
179
  <li><a href="#spotlight">SpotLight</a></li>
180
180
  <li><a href="#shadow">Shadow</a></li>
181
181
  <li><a href="#contactshadows">ContactShadows</a></li>
182
+ <li><a href="#randomizedlight">RandomizedLight</a></li>
183
+ <li><a href="#accumulativeshadows">AccumulativeShadows</a></li>
182
184
  <li><a href="#sky">Sky</a></li>
183
185
  <li><a href="#stars">Stars</a></li>
184
186
  <li><a href="#sparkles">Sparkles</a></li>
@@ -2143,6 +2145,81 @@ Since this is a rather expensive effect you can limit the amount of frames it re
2143
2145
  <ContactShadows frames={1} />
2144
2146
  ```
2145
2147
 
2148
+ ### RandomizedLight
2149
+
2150
+ A randomized light that internally runs multiple lights and jiggles them. See below, you would normally pair it with `AccumulativeShadows`. This component is context aware, paired with AccumulativeShadows it will take the number of frames from its parent.
2151
+
2152
+ ```tsx
2153
+ type RandomizedLightProps = JSX.IntrinsicElements['group'] & {
2154
+ /** How many frames it will jiggle the lights, 1.
2155
+ * Frames is context aware, if a provider like AccumulativeShadows exists, frames will be taken from there! */
2156
+ frames?: number
2157
+ /** Light position, [0, 0, 0] */
2158
+ position?: [x: number, y: number, z: number]
2159
+ /** Radius of the jiggle, higher values make softer light, 5 */
2160
+ radius?: number
2161
+ /** Amount of lights, 8 */
2162
+ amount?: number
2163
+ /** Light intensity, 1 */
2164
+ intensity?: number
2165
+ /** Ambient occlusion, lower values mean less AO, hight more, you can mix AO and directional light, 0.5 */
2166
+ ambient?: number
2167
+ /** If the lights cast shadows, this is true by default */
2168
+ castShadow?: boolean
2169
+ /** Default shadow bias, 0 */
2170
+ bias?: number
2171
+ /** Default map size, 512 */
2172
+ mapSize?: number
2173
+ /** Default size of the shadow camera, 10 */
2174
+ size?: number
2175
+ /** Default shadow camera near, 0.5 */
2176
+ near?: number
2177
+ /** Default shadow camera far, 500 */
2178
+ far?: number
2179
+ }
2180
+ ```
2181
+
2182
+ ```jsx
2183
+ <RandomizedLight castShadow amount={8} frames={100} position={[5, 5, -10]} />
2184
+ ```
2185
+
2186
+ ###  AccumulativeShadows
2187
+
2188
+ <p>
2189
+ <a href="https://codesandbox.io/s/hxcc1x"><img width="20%" src="https://codesandbox.io/api/v1/sandboxes/hxcc1x/screenshot.png" alt="Demo"/></a>
2190
+ </p>
2191
+
2192
+ A planar, Y-up oriented shadow-catcher that can accumulate into soft shadows and has zero performance impact after all frames have accumulated. It can be temporal, it will accumulate over time, or instantaneous, which might expensive depending on how many frames you render.
2193
+
2194
+ You must pair it with lightsources (and scene objects!) that cast shadows, which go into the children slot. Best use it with the `RandomizedLight` component, which jiggles a set of lights around, creating realistic raycast-like shadows and ambient occlusion.
2195
+
2196
+ ```tsx
2197
+ type AccumulativeShadowsProps = JSX.IntrinsicElements['group'] & {
2198
+ /** How many frames it can render, more yields cleaner results but takes more time, 40 */
2199
+ frames?: number
2200
+ /** If frames === Infinity blend controls the refresh ratio, 100 */
2201
+ blend?: number
2202
+ /** Scale of the plane, */
2203
+ scale?: number
2204
+ /** Temporal accumulates shadows over time which is more performant but has a visual regression over instant results, false */
2205
+ temporal?: false
2206
+ /** Opacity of the plane, 1 */
2207
+ opacity?: number
2208
+ /** Discards alpha pixels, 0.65 */
2209
+ alphaTest?: number
2210
+ /** Shadow color, black */
2211
+ color?: string
2212
+ /** Buffer resolution, 1024 */
2213
+ resolution?: number
2214
+ }
2215
+ ```
2216
+
2217
+ ```jsx
2218
+ <AccumulativeShadows temporal frames={100} temporal scale={10}>
2219
+ <RandomizedLight castShadow amount={8} position={[5, 5, -10]} />
2220
+ </AccumulativeShadows>
2221
+ ```
2222
+
2146
2223
  #### SpotLight
2147
2224
 
2148
2225
  <p>
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("three"),t=require("react"),a=require("@react-three/fiber"),n=require("react-merge-refs");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function s(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var a=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,a.get?a:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var o=i(e),u=s(r),l=s(t),c=i(n);class h{constructor(e,r,t=1024){this.renderer=e,this.res=t,this.scene=r,this.scene.background=null,this.buffer1Active=!1;const a=/(Android|iPad|iPhone|iPod)/g.test(navigator.userAgent)?u.HalfFloatType:u.FloatType;this.progressiveLightMap1=new u.WebGLRenderTarget(this.res,this.res,{type:a}),this.progressiveLightMap2=new u.WebGLRenderTarget(this.res,this.res,{type:a}),this.uvMat=new u.MeshPhongMaterial({shininess:0,specular:new u.Color("black")}),this.uniforms={},this.uvMat.onBeforeCompile=e=>{e.vertexShader="#define USE_LIGHTMAP\n"+e.vertexShader.slice(0,-1)+"\tgl_Position = vec4((uv2 - 0.5) * 2.0, 1.0, 1.0); }";const r=e.fragmentShader.indexOf("void main() {");e.fragmentShader=e.fragmentShader.replace("#include <clipping_planes_pars_fragment>","#include <clipping_planes_pars_fragment>\n#include <shadowmask_pars_fragment>\n"),e.fragmentShader="varying vec2 vUv2;\n"+e.fragmentShader.slice(0,r)+"\tuniform sampler2D previousShadowMap;\n\tuniform float averagingWindow;\n"+e.fragmentShader.slice(r-1,-1)+"\nvec3 texelOld = texture2D(previousShadowMap, vUv2).rgb;\n gl_FragColor.rgb = mix(texelOld, gl_FragColor.rgb, 1.0/averagingWindow);\n }",e.uniforms.previousShadowMap={value:this.progressiveLightMap1.texture},e.uniforms.averagingWindow={value:100},this.uniforms=e.uniforms}}clear(){this.renderer.setRenderTarget(this.progressiveLightMap1),this.renderer.clear(),this.renderer.setRenderTarget(this.progressiveLightMap2),this.renderer.clear()}configureObject(e){const r=e.geometry.getAttribute("uv").clone();e.geometry.setAttribute("uv2",r),e.geometry.getAttribute("uv2").needsUpdate=!0}update(e,r=100){this.uniforms.averagingWindow={value:r},this.scene.overrideMaterial=this.uvMat;const t=this.buffer1Active?this.progressiveLightMap1:this.progressiveLightMap2,a=this.buffer1Active?this.progressiveLightMap2:this.progressiveLightMap1;this.renderer.setRenderTarget(t),this.uniforms.previousShadowMap={value:a.texture},this.buffer1Active=!this.buffer1Active,this.renderer.render(this.scene,e),this.scene.overrideMaterial=null,this.renderer.setRenderTarget(null)}}const f=l.createContext(null),d=l.forwardRef((({children:e,blend:r,frames:t=40,scale:n=10,temporal:i=!1,opacity:s=1,alphaTest:o=.65,color:c="black",resolution:d=1024,...g},p)=>{const m=a.useThree((e=>e.gl)),v=a.useThree((e=>e.scene)),M=a.useThree((e=>e.camera)),b=l.useRef(null),y=l.useRef(null),w=l.useRef(0),[S]=l.useState((()=>new h(m,v,d)));l.useLayoutEffect((()=>{S.configureObject(b.current)}),[]);const _=void 0===r&&t===1/0?100:t,T=l.useMemo((()=>{const e=Object.assign(new u.MeshBasicMaterial({opacity:0,transparent:!0,dithering:!0,depthWrite:!1,map:S.progressiveLightMap2.texture}),{uniforms:{ucolor:{value:new u.Color(c)},alphaTest:{value:0}}});return e.onBeforeCompile=r=>{e.uniforms=r.uniforms={...r.uniforms,...e.uniforms},r.fragmentShader=r.fragmentShader.replace("void main() {","uniform vec3 ucolor;\n uniform float alphaTest;\n void main() {"),r.fragmentShader=r.fragmentShader.replace("#include <dithering_fragment>","#include <dithering_fragment>\n gl_FragColor = vec4(ucolor * gl_FragColor.r * 2.0, max(0.0, (1.0 - gl_FragColor.r / alphaTest)) * opacity);")},e}),[c]);function x(){y.current.visible=!0;const e=[];return v.traverse((r=>{(function(e){return e.isLight})(r)&&(e.push({object:r,intensity:r.intensity}),r.intensity=0)})),e}function L(e){y.current.visible=!1,e.forEach((({object:e,intensity:r})=>e.intensity=r))}function E(){t!==1/0&&(S.clear(),T.opacity=0,T.uniforms.alphaTest.value=0,w.current=0)}l.useEffect((()=>{if(!i){T.opacity=s,T.uniforms.alphaTest.value=o;const e=x();for(let e=0;e<_;e++)S.update(M,_);L(e)}})),a.useFrame((()=>{if(i&&w.current<t){T.opacity=Math.min(s,T.opacity+s/_),T.uniforms.alphaTest.value=Math.min(o,T.uniforms.alphaTest.value+o/_);const e=x();S.update(M,_),L(e),w.current++}}));const R=l.useMemo((()=>({refresh:E,count:w,frames:t})),[t]);return l.useImperativeHandle(p,(()=>R),[R]),l.useLayoutEffect(E),l.createElement("group",g,l.createElement("group",{traverse:()=>null,ref:y},l.createElement(f.Provider,{value:R},e)),l.createElement("mesh",{receiveShadow:!0,ref:b,material:T,scale:n,rotation:[-Math.PI/2,0,0]},l.createElement("planeGeometry",null)))})),g=l.forwardRef((({castShadow:e=!0,bias:r=0,mapSize:t=512,size:n=5,near:i=.5,far:s=500,frames:h=1,position:d=[0,0,0],radius:g=1,amount:p=8,intensity:m=1,ambient:v=.5,...M},b)=>{const y=l.useRef(null),w=new u.Vector3(...d).length(),S=l.useContext(f),_=l.useRef(0),T=S?S.count:_,x=S?S.frames:h;let L;return a.useFrame((()=>{if(T.current<x){for(let e=0;e<y.current.children.length;e++)if(L=y.current.children[e],Math.random()>v)L.position.set(d[0]+u.MathUtils.randFloatSpread(g),d[1]+u.MathUtils.randFloatSpread(g),d[2]+u.MathUtils.randFloatSpread(g));else{let e=Math.acos(2*Math.random()-1)-Math.PI/2,r=2*Math.PI*Math.random();L.position.set(Math.cos(e)*Math.cos(r)*w,Math.abs(Math.cos(e)*Math.sin(r)*w),Math.sin(e)*w)}S||T.current++}})),l.createElement("group",o.default({ref:c.default([y,b])},M),Array.from({length:p},((a,o)=>l.createElement("directionalLight",{key:o,castShadow:e,"shadow-bias":r,"shadow-mapSize":[t,t],intensity:m/p},l.createElement("orthographicCamera",{attach:"shadow-camera",args:[-n,n,n,-n,i,s]})))))}));exports.AccumulativeShadows=d,exports.RandomizedLight=g,exports.accumulativeContext=f;
@@ -0,0 +1,67 @@
1
+ import * as THREE from 'three';
2
+ import * as React from 'react';
3
+ export declare const accumulativeContext: React.Context<{
4
+ refresh: (force?: boolean | undefined) => void;
5
+ count: React.MutableRefObject<number>;
6
+ frames: number;
7
+ }>;
8
+ export declare const AccumulativeShadows: React.ForwardRefExoticComponent<Pick<Omit<import("@react-three/fiber").ExtendedColors<import("@react-three/fiber").Overwrite<Partial<THREE.Group>, import("@react-three/fiber").NodeProps<THREE.Group, typeof THREE.Group>>>, import("@react-three/fiber").NonFunctionKeys<{
9
+ position?: import("@react-three/fiber").Vector3 | undefined;
10
+ up?: import("@react-three/fiber").Vector3 | undefined;
11
+ scale?: import("@react-three/fiber").Vector3 | undefined;
12
+ rotation?: import("@react-three/fiber").Euler | undefined;
13
+ matrix?: import("@react-three/fiber").Matrix4 | undefined;
14
+ quaternion?: import("@react-three/fiber").Quaternion | undefined;
15
+ layers?: import("@react-three/fiber").Layers | undefined;
16
+ dispose?: (() => void) | null | undefined;
17
+ }>> & {
18
+ position?: import("@react-three/fiber").Vector3 | undefined;
19
+ up?: import("@react-three/fiber").Vector3 | undefined;
20
+ scale?: import("@react-three/fiber").Vector3 | undefined;
21
+ rotation?: import("@react-three/fiber").Euler | undefined;
22
+ matrix?: import("@react-three/fiber").Matrix4 | undefined;
23
+ quaternion?: import("@react-three/fiber").Quaternion | undefined;
24
+ layers?: import("@react-three/fiber").Layers | undefined;
25
+ dispose?: (() => void) | null | undefined;
26
+ } & import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers & {
27
+ frames?: number | undefined;
28
+ blend?: number | undefined;
29
+ scale?: number | undefined;
30
+ temporal?: boolean | undefined;
31
+ opacity?: number | undefined;
32
+ alphaTest?: number | undefined;
33
+ color?: string | undefined;
34
+ resolution?: number | undefined;
35
+ }, "visible" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "isGroup" | "id" | "uuid" | "name" | "parent" | "modelViewMatrix" | "normalMatrix" | "matrixWorld" | "matrixAutoUpdate" | "matrixWorldNeedsUpdate" | "castShadow" | "receiveShadow" | "frustumCulled" | "renderOrder" | "animations" | "userData" | "customDepthMaterial" | "customDistanceMaterial" | "isObject3D" | "onBeforeRender" | "onAfterRender" | "applyMatrix4" | "applyQuaternion" | "setRotationFromAxisAngle" | "setRotationFromEuler" | "setRotationFromMatrix" | "setRotationFromQuaternion" | "rotateOnAxis" | "rotateOnWorldAxis" | "rotateX" | "rotateY" | "rotateZ" | "translateOnAxis" | "translateX" | "translateY" | "translateZ" | "localToWorld" | "worldToLocal" | "lookAt" | "add" | "remove" | "removeFromParent" | "clear" | "getObjectById" | "getObjectByName" | "getObjectByProperty" | "getWorldPosition" | "getWorldQuaternion" | "getWorldScale" | "getWorldDirection" | "raycast" | "traverse" | "traverseVisible" | "traverseAncestors" | "updateMatrix" | "updateMatrixWorld" | "updateWorldMatrix" | "toJSON" | "clone" | "copy" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | "color" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "opacity" | "alphaTest" | "resolution" | "frames" | "blend" | "temporal"> & React.RefAttributes<unknown>>;
36
+ export declare const RandomizedLight: React.ForwardRefExoticComponent<Pick<Omit<import("@react-three/fiber").ExtendedColors<import("@react-three/fiber").Overwrite<Partial<THREE.Group>, import("@react-three/fiber").NodeProps<THREE.Group, typeof THREE.Group>>>, import("@react-three/fiber").NonFunctionKeys<{
37
+ position?: import("@react-three/fiber").Vector3 | undefined;
38
+ up?: import("@react-three/fiber").Vector3 | undefined;
39
+ scale?: import("@react-three/fiber").Vector3 | undefined;
40
+ rotation?: import("@react-three/fiber").Euler | undefined;
41
+ matrix?: import("@react-three/fiber").Matrix4 | undefined;
42
+ quaternion?: import("@react-three/fiber").Quaternion | undefined;
43
+ layers?: import("@react-three/fiber").Layers | undefined;
44
+ dispose?: (() => void) | null | undefined;
45
+ }>> & {
46
+ position?: import("@react-three/fiber").Vector3 | undefined;
47
+ up?: import("@react-three/fiber").Vector3 | undefined;
48
+ scale?: import("@react-three/fiber").Vector3 | undefined;
49
+ rotation?: import("@react-three/fiber").Euler | undefined;
50
+ matrix?: import("@react-three/fiber").Matrix4 | undefined;
51
+ quaternion?: import("@react-three/fiber").Quaternion | undefined;
52
+ layers?: import("@react-three/fiber").Layers | undefined;
53
+ dispose?: (() => void) | null | undefined;
54
+ } & import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers & {
55
+ frames?: number | undefined;
56
+ position?: [x: number, y: number, z: number] | undefined;
57
+ radius?: number | undefined;
58
+ amount?: number | undefined;
59
+ intensity?: number | undefined;
60
+ ambient?: number | undefined;
61
+ castShadow?: boolean | undefined;
62
+ bias?: number | undefined;
63
+ mapSize?: number | undefined;
64
+ size?: number | undefined;
65
+ near?: number | undefined;
66
+ far?: number | undefined;
67
+ }, "visible" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "isGroup" | "id" | "uuid" | "name" | "parent" | "modelViewMatrix" | "normalMatrix" | "matrixWorld" | "matrixAutoUpdate" | "matrixWorldNeedsUpdate" | "castShadow" | "receiveShadow" | "frustumCulled" | "renderOrder" | "animations" | "userData" | "customDepthMaterial" | "customDistanceMaterial" | "isObject3D" | "onBeforeRender" | "onAfterRender" | "applyMatrix4" | "applyQuaternion" | "setRotationFromAxisAngle" | "setRotationFromEuler" | "setRotationFromMatrix" | "setRotationFromQuaternion" | "rotateOnAxis" | "rotateOnWorldAxis" | "rotateX" | "rotateY" | "rotateZ" | "translateOnAxis" | "translateX" | "translateY" | "translateZ" | "localToWorld" | "worldToLocal" | "lookAt" | "add" | "remove" | "removeFromParent" | "clear" | "getObjectById" | "getObjectByName" | "getObjectByProperty" | "getWorldPosition" | "getWorldQuaternion" | "getWorldScale" | "getWorldDirection" | "raycast" | "traverse" | "traverseVisible" | "traverseAncestors" | "updateMatrix" | "updateMatrixWorld" | "updateWorldMatrix" | "toJSON" | "clone" | "copy" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "size" | "near" | "far" | "intensity" | "frames" | "radius" | "bias" | "mapSize" | "amount" | "ambient"> & React.RefAttributes<unknown>>;
@@ -0,0 +1,275 @@
1
+ import _extends from '@babel/runtime/helpers/esm/extends';
2
+ import * as THREE from 'three';
3
+ import * as React from 'react';
4
+ import { useThree, useFrame } from '@react-three/fiber';
5
+ import mergeRefs from 'react-merge-refs';
6
+
7
+ class ProgressiveLightMap {
8
+ constructor(renderer, scene, res = 1024) {
9
+ this.renderer = renderer;
10
+ this.res = res;
11
+ this.scene = scene;
12
+ this.scene.background = null;
13
+ this.buffer1Active = false; // Create the Progressive LightMap Texture
14
+
15
+ const format = /(Android|iPad|iPhone|iPod)/g.test(navigator.userAgent) ? THREE.HalfFloatType : THREE.FloatType;
16
+ this.progressiveLightMap1 = new THREE.WebGLRenderTarget(this.res, this.res, {
17
+ type: format
18
+ });
19
+ this.progressiveLightMap2 = new THREE.WebGLRenderTarget(this.res, this.res, {
20
+ type: format
21
+ }); // Inject some spicy new logic into a standard phong material
22
+
23
+ this.uvMat = new THREE.MeshPhongMaterial({
24
+ shininess: 0,
25
+ specular: new THREE.Color('black')
26
+ });
27
+ this.uniforms = {};
28
+
29
+ this.uvMat.onBeforeCompile = shader => {
30
+ // Vertex Shader: Set Vertex Positions to the Unwrapped UV Positions
31
+ shader.vertexShader = '#define USE_LIGHTMAP\n' + shader.vertexShader.slice(0, -1) + ' gl_Position = vec4((uv2 - 0.5) * 2.0, 1.0, 1.0); }'; // Fragment Shader: Set Pixels to average in the Previous frame's Shadows
32
+
33
+ const bodyStart = shader.fragmentShader.indexOf('void main() {');
34
+ shader.fragmentShader = shader.fragmentShader.replace('#include <clipping_planes_pars_fragment>', '#include <clipping_planes_pars_fragment>\n#include <shadowmask_pars_fragment>\n');
35
+ shader.fragmentShader = 'varying vec2 vUv2;\n' + shader.fragmentShader.slice(0, bodyStart) + ' uniform sampler2D previousShadowMap;\n uniform float averagingWindow;\n' + shader.fragmentShader.slice(bodyStart - 1, -1) + `\nvec3 texelOld = texture2D(previousShadowMap, vUv2).rgb;
36
+ gl_FragColor.rgb = mix(texelOld, gl_FragColor.rgb, 1.0/averagingWindow);
37
+ }`; // Set the Previous Frame's Texture Buffer and Averaging Window
38
+
39
+ shader.uniforms.previousShadowMap = {
40
+ value: this.progressiveLightMap1.texture
41
+ };
42
+ shader.uniforms.averagingWindow = {
43
+ value: 100
44
+ };
45
+ this.uniforms = shader.uniforms;
46
+ };
47
+ }
48
+
49
+ clear() {
50
+ this.renderer.setRenderTarget(this.progressiveLightMap1);
51
+ this.renderer.clear();
52
+ this.renderer.setRenderTarget(this.progressiveLightMap2);
53
+ this.renderer.clear();
54
+ }
55
+
56
+ configureObject(object) {
57
+ const uv2 = object.geometry.getAttribute('uv').clone();
58
+ object.geometry.setAttribute('uv2', uv2);
59
+ object.geometry.getAttribute('uv2').needsUpdate = true;
60
+ }
61
+
62
+ update(camera, blendWindow = 100) {
63
+ // Set each object's material to the UV Unwrapped Surface Mapping Version
64
+ this.uniforms.averagingWindow = {
65
+ value: blendWindow
66
+ };
67
+ this.scene.overrideMaterial = this.uvMat; // Ping-pong two surface buffers for reading/writing
68
+
69
+ const activeMap = this.buffer1Active ? this.progressiveLightMap1 : this.progressiveLightMap2;
70
+ const inactiveMap = this.buffer1Active ? this.progressiveLightMap2 : this.progressiveLightMap1; // Render the object's surface maps
71
+
72
+ this.renderer.setRenderTarget(activeMap);
73
+ this.uniforms.previousShadowMap = {
74
+ value: inactiveMap.texture
75
+ };
76
+ this.buffer1Active = !this.buffer1Active;
77
+ this.renderer.render(this.scene, camera);
78
+ this.scene.overrideMaterial = null;
79
+ this.renderer.setRenderTarget(null);
80
+ }
81
+
82
+ }
83
+
84
+ function isLight(object) {
85
+ return object.isLight;
86
+ }
87
+
88
+ const accumulativeContext = /*#__PURE__*/React.createContext(null);
89
+ const AccumulativeShadows = /*#__PURE__*/React.forwardRef(({
90
+ children,
91
+ blend,
92
+ frames = 40,
93
+ scale = 10,
94
+ temporal = false,
95
+ opacity = 1,
96
+ alphaTest = 0.65,
97
+ color = 'black',
98
+ resolution = 1024,
99
+ ...props
100
+ }, forwardRef) => {
101
+ const gl = useThree(state => state.gl);
102
+ const scene = useThree(state => state.scene);
103
+ const defaultCamera = useThree(state => state.camera);
104
+ const gPlane = React.useRef(null);
105
+ const gLights = React.useRef(null);
106
+ const count = React.useRef(0);
107
+ const [plm] = React.useState(() => new ProgressiveLightMap(gl, scene, resolution));
108
+ React.useLayoutEffect(() => {
109
+ plm.configureObject(gPlane.current);
110
+ }, []);
111
+ const blendFrames = blend === undefined ? frames === Infinity ? 100 : frames : frames;
112
+ const material = React.useMemo(() => {
113
+ const mat = Object.assign(new THREE.MeshBasicMaterial({
114
+ opacity: 0,
115
+ transparent: true,
116
+ dithering: true,
117
+ depthWrite: false,
118
+ map: plm.progressiveLightMap2.texture
119
+ }), {
120
+ uniforms: {
121
+ ucolor: {
122
+ value: new THREE.Color(color)
123
+ },
124
+ alphaTest: {
125
+ value: 0
126
+ }
127
+ }
128
+ });
129
+
130
+ mat.onBeforeCompile = shader => {
131
+ mat.uniforms = shader.uniforms = { ...shader.uniforms,
132
+ ...mat.uniforms
133
+ };
134
+ shader.fragmentShader = shader.fragmentShader.replace(`void main() {`, `uniform vec3 ucolor;
135
+ uniform float alphaTest;
136
+ void main() {`);
137
+ shader.fragmentShader = shader.fragmentShader.replace('#include <dithering_fragment>', `#include <dithering_fragment>
138
+ gl_FragColor = vec4(ucolor * gl_FragColor.r * 2.0, max(0.0, (1.0 - gl_FragColor.r / alphaTest)) * opacity);`);
139
+ };
140
+
141
+ return mat;
142
+ }, [color]);
143
+
144
+ function prepare() {
145
+ gLights.current.visible = true;
146
+ const intensities = [];
147
+ scene.traverse(object => {
148
+ if (isLight(object)) {
149
+ intensities.push({
150
+ object,
151
+ intensity: object.intensity
152
+ });
153
+ object.intensity = 0;
154
+ }
155
+ });
156
+ return intensities;
157
+ }
158
+
159
+ function finish(intensities) {
160
+ gLights.current.visible = false;
161
+ intensities.forEach(({
162
+ object,
163
+ intensity
164
+ }) => object.intensity = intensity);
165
+ }
166
+
167
+ function refresh() {
168
+ if (frames !== Infinity) {
169
+ plm.clear();
170
+ material.opacity = 0;
171
+ material.uniforms.alphaTest.value = 0;
172
+ count.current = 0;
173
+ }
174
+ }
175
+
176
+ React.useEffect(() => {
177
+ if (!temporal) {
178
+ material.opacity = opacity;
179
+ material.uniforms.alphaTest.value = alphaTest;
180
+ const intensities = prepare();
181
+
182
+ for (let i = 0; i < blendFrames; i++) plm.update(defaultCamera, blendFrames);
183
+
184
+ finish(intensities);
185
+ }
186
+ });
187
+ useFrame(() => {
188
+ if (temporal && count.current < frames) {
189
+ material.opacity = Math.min(opacity, material.opacity + opacity / blendFrames);
190
+ material.uniforms.alphaTest.value = Math.min(alphaTest, material.uniforms.alphaTest.value + alphaTest / blendFrames);
191
+ const intensities = prepare();
192
+ plm.update(defaultCamera, blendFrames);
193
+ finish(intensities);
194
+ count.current++;
195
+ }
196
+ }); // Expose refresh api
197
+
198
+ const api = React.useMemo(() => ({
199
+ refresh,
200
+ count,
201
+ frames
202
+ }), [frames]);
203
+ React.useImperativeHandle(forwardRef, () => api, [api]); // Refresh on render
204
+
205
+ React.useLayoutEffect(refresh);
206
+ return /*#__PURE__*/React.createElement("group", props, /*#__PURE__*/React.createElement("group", {
207
+ traverse: () => null,
208
+ ref: gLights
209
+ }, /*#__PURE__*/React.createElement(accumulativeContext.Provider, {
210
+ value: api
211
+ }, children)), /*#__PURE__*/React.createElement("mesh", {
212
+ receiveShadow: true,
213
+ ref: gPlane,
214
+ material: material,
215
+ scale: scale,
216
+ rotation: [-Math.PI / 2, 0, 0]
217
+ }, /*#__PURE__*/React.createElement("planeGeometry", null)));
218
+ });
219
+ const RandomizedLight = /*#__PURE__*/React.forwardRef(({
220
+ castShadow = true,
221
+ bias = 0,
222
+ mapSize = 512,
223
+ size = 5,
224
+ near = 0.5,
225
+ far = 500,
226
+ frames = 1,
227
+ position = [0, 0, 0],
228
+ radius = 1,
229
+ amount = 8,
230
+ intensity = 1,
231
+ ambient = 0.5,
232
+ ...props
233
+ }, forwardRef) => {
234
+ const gLights = React.useRef(null);
235
+ const length = new THREE.Vector3(...position).length();
236
+ const parent = React.useContext(accumulativeContext);
237
+ const count = React.useRef(0);
238
+ const actualCount = parent ? parent.count : count;
239
+ const actualFrames = parent ? parent.frames : frames;
240
+ let light;
241
+ useFrame(() => {
242
+ if (actualCount.current < actualFrames) {
243
+ for (let l = 0; l < gLights.current.children.length; l++) {
244
+ light = gLights.current.children[l];
245
+
246
+ if (Math.random() > ambient) {
247
+ light.position.set(position[0] + THREE.MathUtils.randFloatSpread(radius), position[1] + THREE.MathUtils.randFloatSpread(radius), position[2] + THREE.MathUtils.randFloatSpread(radius));
248
+ } else {
249
+ let lambda = Math.acos(2 * Math.random() - 1) - Math.PI / 2.0;
250
+ let phi = 2 * Math.PI * Math.random();
251
+ light.position.set(Math.cos(lambda) * Math.cos(phi) * length, Math.abs(Math.cos(lambda) * Math.sin(phi) * length), Math.sin(lambda) * length);
252
+ }
253
+ } // Do not count up if a perent exists
254
+
255
+
256
+ if (!parent) actualCount.current++;
257
+ }
258
+ });
259
+ return /*#__PURE__*/React.createElement("group", _extends({
260
+ ref: mergeRefs([gLights, forwardRef])
261
+ }, props), Array.from({
262
+ length: amount
263
+ }, (_, index) => /*#__PURE__*/React.createElement("directionalLight", {
264
+ key: index,
265
+ castShadow: castShadow,
266
+ "shadow-bias": bias,
267
+ "shadow-mapSize": [mapSize, mapSize],
268
+ intensity: intensity / amount
269
+ }, /*#__PURE__*/React.createElement("orthographicCamera", {
270
+ attach: "shadow-camera",
271
+ args: [-size, size, size, -size, near, far]
272
+ }))));
273
+ });
274
+
275
+ export { AccumulativeShadows, RandomizedLight, accumulativeContext };
package/core/index.cjs.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./Billboard.cjs.js"),r=require("./QuadraticBezierLine.cjs.js"),s=require("./CubicBezierLine.cjs.js"),t=require("./CatmullRomLine.cjs.js"),o=require("./Line.cjs.js"),i=require("./PositionalAudio.cjs.js"),u=require("./Text.cjs.js"),a=require("./Text3D.cjs.js"),n=require("./Effects.cjs.js"),j=require("./GradientTexture.cjs.js"),c=require("./Image.cjs.js"),p=require("./Edges.cjs.js"),x=require("./Trail.cjs.js"),l=require("./Sampler.cjs.js"),q=require("./ComputedAttribute.cjs.js"),d=require("./Clone.cjs.js"),C=require("./MarchingCubes.cjs.js"),m=require("./OrthographicCamera.cjs.js"),h=require("./PerspectiveCamera.cjs.js"),b=require("./CubeCamera.cjs.js"),M=require("./DeviceOrientationControls.cjs.js"),B=require("./FlyControls.cjs.js"),S=require("./MapControls.cjs.js"),P=require("./OrbitControls.cjs.js"),T=require("./TrackballControls.cjs.js"),g=require("./ArcballControls.cjs.js"),f=require("./TransformControls.cjs.js"),v=require("./PointerLockControls.cjs.js"),L=require("./FirstPersonControls.cjs.js"),k=require("./GizmoHelper.cjs.js"),A=require("./GizmoViewcube.cjs.js"),E=require("./GizmoViewport.cjs.js"),D=require("./useCubeTexture.cjs.js"),G=require("./useFBX.cjs.js"),F=require("./useGLTF.cjs.js"),O=require("./useProgress.cjs.js"),w=require("./useTexture.cjs.js"),z=require("./useKTX2.cjs.js"),R=require("./Stats.cjs.js"),I=require("./useDepthBuffer.cjs.js"),y=require("./useAspect.cjs.js"),H=require("./useCamera.cjs.js"),V=require("./useDetectGPU.cjs.js"),Q=require("./useHelper.cjs.js"),X=require("./useBVH.cjs.js"),K=require("./useContextBridge.cjs.js"),W=require("./useAnimations.cjs.js"),N=require("./useFBO.cjs.js"),U=require("./useIntersect.cjs.js"),_=require("./useBoxProjectedEnv.cjs.js"),J=require("./BBAnchor.cjs.js"),Y=require("./CurveModifier.cjs.js"),Z=require("./MeshDistortMaterial.cjs.js"),$=require("./MeshWobbleMaterial.cjs.js"),ee=require("./MeshReflectorMaterial.cjs.js"),re=require("./PointMaterial.cjs.js"),se=require("./shaderMaterial.cjs.js"),te=require("./softShadows.cjs.js"),oe=require("./shapes.cjs.js"),ie=require("./RoundedBox.cjs.js"),ue=require("./ScreenQuad.cjs.js"),ae=require("./Center.cjs.js"),ne=require("./Bounds.cjs.js"),je=require("./CameraShake.cjs.js"),ce=require("./Float.cjs.js"),pe=require("./Stage.cjs.js"),xe=require("./Backdrop.cjs.js"),le=require("./Shadow.cjs.js"),qe=require("./ContactShadows.cjs.js"),de=require("./Reflector.cjs.js"),Ce=require("./SpotLight.cjs.js"),me=require("./Environment.cjs.js"),he=require("./Lightformer.cjs.js"),be=require("./Sky.cjs.js"),Me=require("./Stars.cjs.js"),Be=require("./Cloud.cjs.js"),Se=require("./Sparkles.cjs.js"),Pe=require("./useMatcapTexture.cjs.js"),Te=require("./useNormalTexture.cjs.js"),ge=require("./Points.cjs.js"),fe=require("./Instances.cjs.js"),ve=require("./Segments.cjs.js"),Le=require("./Detailed.cjs.js"),ke=require("./Preload.cjs.js"),Ae=require("./BakeShadows.cjs.js"),Ee=require("./meshBounds.cjs.js"),De=require("./AdaptiveDpr.cjs.js"),Ge=require("./AdaptiveEvents.cjs.js"),Fe=require("./RenderTexture.cjs.js"),Oe=require("./Mask.cjs.js");require("@babel/runtime/helpers/extends"),require("react"),require("@react-three/fiber"),require("react-merge-refs"),require("three"),require("three-stdlib"),require("troika-three-text"),require("suspend-react"),require("meshline"),require("lodash.pick"),require("lodash.omit"),require("zustand"),require("stats.js"),require("../helpers/useEffectfulState.cjs.js"),require("detect-gpu"),require("three-mesh-bvh"),require("../materials/BlurPass.cjs.js"),require("../materials/ConvolutionMaterial.cjs.js"),require("../materials/MeshReflectorMaterial.cjs.js"),require("../helpers/environment-assets.cjs.js"),require("../materials/SpotLightMaterial.cjs.js"),require("../helpers/Position.cjs.js"),require("react-composer"),exports.Billboard=e.Billboard,exports.QuadraticBezierLine=r.QuadraticBezierLine,exports.CubicBezierLine=s.CubicBezierLine,exports.CatmullRomLine=t.CatmullRomLine,exports.Line=o.Line,exports.PositionalAudio=i.PositionalAudio,exports.Text=u.Text,exports.Text3D=a.Text3D,exports.Effects=n.Effects,exports.isWebGL2Available=n.isWebGL2Available,exports.GradientTexture=j.GradientTexture,exports.Image=c.Image,exports.Edges=p.Edges,exports.Trail=x.Trail,exports.useTrail=x.useTrail,exports.Sampler=l.Sampler,exports.ComputedAttribute=q.ComputedAttribute,exports.Clone=d.Clone,exports.MarchingCube=C.MarchingCube,exports.MarchingCubes=C.MarchingCubes,exports.MarchingPlane=C.MarchingPlane,exports.OrthographicCamera=m.OrthographicCamera,exports.PerspectiveCamera=h.PerspectiveCamera,exports.CubeCamera=b.CubeCamera,exports.DeviceOrientationControls=M.DeviceOrientationControls,exports.FlyControls=B.FlyControls,exports.MapControls=S.MapControls,exports.OrbitControls=P.OrbitControls,exports.TrackballControls=T.TrackballControls,exports.ArcballControls=g.ArcballControls,exports.TransformControls=f.TransformControls,exports.PointerLockControls=v.PointerLockControls,exports.FirstPersonControls=L.FirstPersonControls,exports.GizmoHelper=k.GizmoHelper,exports.useGizmoContext=k.useGizmoContext,exports.GizmoViewcube=A.GizmoViewcube,exports.GizmoViewport=E.GizmoViewport,exports.useCubeTexture=D.useCubeTexture,exports.useFBX=G.useFBX,exports.useGLTF=F.useGLTF,exports.useProgress=O.useProgress,exports.IsObject=w.IsObject,exports.useTexture=w.useTexture,exports.useKTX2=z.useKTX2,exports.Stats=R.Stats,exports.useDepthBuffer=I.useDepthBuffer,exports.useAspect=y.useAspect,exports.useCamera=H.useCamera,exports.useDetectGPU=V.useDetectGPU,exports.useHelper=Q.useHelper,exports.useBVH=X.useBVH,exports.useContextBridge=K.useContextBridge,exports.useAnimations=W.useAnimations,exports.useFBO=N.useFBO,exports.useIntersect=U.useIntersect,exports.useBoxProjectedEnv=_.useBoxProjectedEnv,exports.BBAnchor=J.BBAnchor,exports.CurveModifier=Y.CurveModifier,exports.MeshDistortMaterial=Z.MeshDistortMaterial,exports.MeshWobbleMaterial=$.MeshWobbleMaterial,exports.MeshReflectorMaterial=ee.MeshReflectorMaterial,exports.PointMaterial=re.PointMaterial,exports.PointMaterialImpl=re.PointMaterialImpl,exports.shaderMaterial=se.shaderMaterial,exports.softShadows=te.softShadows,exports.Box=oe.Box,exports.Capsule=oe.Capsule,exports.Circle=oe.Circle,exports.Cone=oe.Cone,exports.Cylinder=oe.Cylinder,exports.Dodecahedron=oe.Dodecahedron,exports.Extrude=oe.Extrude,exports.Icosahedron=oe.Icosahedron,exports.Lathe=oe.Lathe,exports.Octahedron=oe.Octahedron,exports.Plane=oe.Plane,exports.Polyhedron=oe.Polyhedron,exports.Ring=oe.Ring,exports.Sphere=oe.Sphere,exports.Tetrahedron=oe.Tetrahedron,exports.Torus=oe.Torus,exports.TorusKnot=oe.TorusKnot,exports.Tube=oe.Tube,exports.RoundedBox=ie.RoundedBox,exports.ScreenQuad=ue.ScreenQuad,exports.Center=ae.Center,exports.Bounds=ne.Bounds,exports.useBounds=ne.useBounds,exports.CameraShake=je.CameraShake,exports.Float=ce.Float,exports.Stage=pe.Stage,exports.Backdrop=xe.Backdrop,exports.Shadow=le.Shadow,exports.ContactShadows=qe.ContactShadows,exports.Reflector=de.Reflector,exports.SpotLight=Ce.SpotLight,exports.Environment=me.Environment,exports.EnvironmentCube=me.EnvironmentCube,exports.EnvironmentMap=me.EnvironmentMap,exports.EnvironmentPortal=me.EnvironmentPortal,exports.useEnvironment=me.useEnvironment,exports.Lightformer=he.Lightformer,exports.Sky=be.Sky,exports.calcPosFromAngles=be.calcPosFromAngles,exports.Stars=Me.Stars,exports.Cloud=Be.Cloud,exports.Sparkles=Se.Sparkles,exports.useMatcapTexture=Pe.useMatcapTexture,exports.useNormalTexture=Te.useNormalTexture,exports.Point=ge.Point,exports.Points=ge.Points,exports.PointsBuffer=ge.PointsBuffer,exports.Instance=fe.Instance,exports.Instances=fe.Instances,exports.Merged=fe.Merged,exports.Segment=ve.Segment,exports.SegmentObject=ve.SegmentObject,exports.Segments=ve.Segments,exports.Detailed=Le.Detailed,exports.Preload=ke.Preload,exports.BakeShadows=Ae.BakeShadows,exports.meshBounds=Ee.meshBounds,exports.AdaptiveDpr=De.AdaptiveDpr,exports.AdaptiveEvents=Ge.AdaptiveEvents,exports.RenderTexture=Fe.RenderTexture,exports.Mask=Oe.Mask,exports.useMask=Oe.useMask;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./Billboard.cjs.js"),r=require("./QuadraticBezierLine.cjs.js"),s=require("./CubicBezierLine.cjs.js"),t=require("./CatmullRomLine.cjs.js"),o=require("./Line.cjs.js"),i=require("./PositionalAudio.cjs.js"),u=require("./Text.cjs.js"),a=require("./Text3D.cjs.js"),n=require("./Effects.cjs.js"),c=require("./GradientTexture.cjs.js"),j=require("./Image.cjs.js"),p=require("./Edges.cjs.js"),x=require("./Trail.cjs.js"),l=require("./Sampler.cjs.js"),d=require("./ComputedAttribute.cjs.js"),q=require("./Clone.cjs.js"),m=require("./MarchingCubes.cjs.js"),C=require("./OrthographicCamera.cjs.js"),h=require("./PerspectiveCamera.cjs.js"),b=require("./CubeCamera.cjs.js"),M=require("./DeviceOrientationControls.cjs.js"),B=require("./FlyControls.cjs.js"),S=require("./MapControls.cjs.js"),g=require("./OrbitControls.cjs.js"),P=require("./TrackballControls.cjs.js"),T=require("./ArcballControls.cjs.js"),v=require("./TransformControls.cjs.js"),f=require("./PointerLockControls.cjs.js"),A=require("./FirstPersonControls.cjs.js"),L=require("./GizmoHelper.cjs.js"),k=require("./GizmoViewcube.cjs.js"),E=require("./GizmoViewport.cjs.js"),D=require("./useCubeTexture.cjs.js"),G=require("./useFBX.cjs.js"),w=require("./useGLTF.cjs.js"),z=require("./useProgress.cjs.js"),F=require("./useTexture.cjs.js"),R=require("./useKTX2.cjs.js"),O=require("./Stats.cjs.js"),I=require("./useDepthBuffer.cjs.js"),y=require("./useAspect.cjs.js"),H=require("./useCamera.cjs.js"),V=require("./useDetectGPU.cjs.js"),Q=require("./useHelper.cjs.js"),X=require("./useBVH.cjs.js"),K=require("./useContextBridge.cjs.js"),W=require("./useAnimations.cjs.js"),N=require("./useFBO.cjs.js"),U=require("./useIntersect.cjs.js"),_=require("./useBoxProjectedEnv.cjs.js"),J=require("./BBAnchor.cjs.js"),Y=require("./CurveModifier.cjs.js"),Z=require("./MeshDistortMaterial.cjs.js"),$=require("./MeshWobbleMaterial.cjs.js"),ee=require("./MeshReflectorMaterial.cjs.js"),re=require("./PointMaterial.cjs.js"),se=require("./shaderMaterial.cjs.js"),te=require("./softShadows.cjs.js"),oe=require("./shapes.cjs.js"),ie=require("./RoundedBox.cjs.js"),ue=require("./ScreenQuad.cjs.js"),ae=require("./Center.cjs.js"),ne=require("./Bounds.cjs.js"),ce=require("./CameraShake.cjs.js"),je=require("./Float.cjs.js"),pe=require("./Stage.cjs.js"),xe=require("./Backdrop.cjs.js"),le=require("./Shadow.cjs.js"),de=require("./ContactShadows.cjs.js"),qe=require("./AccumulativeShadows.cjs.js"),me=require("./Reflector.cjs.js"),Ce=require("./SpotLight.cjs.js"),he=require("./Environment.cjs.js"),be=require("./Lightformer.cjs.js"),Me=require("./Sky.cjs.js"),Be=require("./Stars.cjs.js"),Se=require("./Cloud.cjs.js"),ge=require("./Sparkles.cjs.js"),Pe=require("./useMatcapTexture.cjs.js"),Te=require("./useNormalTexture.cjs.js"),ve=require("./Points.cjs.js"),fe=require("./Instances.cjs.js"),Ae=require("./Segments.cjs.js"),Le=require("./Detailed.cjs.js"),ke=require("./Preload.cjs.js"),Ee=require("./BakeShadows.cjs.js"),De=require("./meshBounds.cjs.js"),Ge=require("./AdaptiveDpr.cjs.js"),we=require("./AdaptiveEvents.cjs.js"),ze=require("./RenderTexture.cjs.js"),Fe=require("./Mask.cjs.js");require("@babel/runtime/helpers/extends"),require("react"),require("@react-three/fiber"),require("react-merge-refs"),require("three"),require("three-stdlib"),require("troika-three-text"),require("suspend-react"),require("meshline"),require("lodash.pick"),require("lodash.omit"),require("zustand"),require("stats.js"),require("../helpers/useEffectfulState.cjs.js"),require("detect-gpu"),require("three-mesh-bvh"),require("../materials/BlurPass.cjs.js"),require("../materials/ConvolutionMaterial.cjs.js"),require("../materials/MeshReflectorMaterial.cjs.js"),require("../helpers/environment-assets.cjs.js"),require("../materials/SpotLightMaterial.cjs.js"),require("../helpers/Position.cjs.js"),require("react-composer"),exports.Billboard=e.Billboard,exports.QuadraticBezierLine=r.QuadraticBezierLine,exports.CubicBezierLine=s.CubicBezierLine,exports.CatmullRomLine=t.CatmullRomLine,exports.Line=o.Line,exports.PositionalAudio=i.PositionalAudio,exports.Text=u.Text,exports.Text3D=a.Text3D,exports.Effects=n.Effects,exports.isWebGL2Available=n.isWebGL2Available,exports.GradientTexture=c.GradientTexture,exports.Image=j.Image,exports.Edges=p.Edges,exports.Trail=x.Trail,exports.useTrail=x.useTrail,exports.Sampler=l.Sampler,exports.ComputedAttribute=d.ComputedAttribute,exports.Clone=q.Clone,exports.MarchingCube=m.MarchingCube,exports.MarchingCubes=m.MarchingCubes,exports.MarchingPlane=m.MarchingPlane,exports.OrthographicCamera=C.OrthographicCamera,exports.PerspectiveCamera=h.PerspectiveCamera,exports.CubeCamera=b.CubeCamera,exports.DeviceOrientationControls=M.DeviceOrientationControls,exports.FlyControls=B.FlyControls,exports.MapControls=S.MapControls,exports.OrbitControls=g.OrbitControls,exports.TrackballControls=P.TrackballControls,exports.ArcballControls=T.ArcballControls,exports.TransformControls=v.TransformControls,exports.PointerLockControls=f.PointerLockControls,exports.FirstPersonControls=A.FirstPersonControls,exports.GizmoHelper=L.GizmoHelper,exports.useGizmoContext=L.useGizmoContext,exports.GizmoViewcube=k.GizmoViewcube,exports.GizmoViewport=E.GizmoViewport,exports.useCubeTexture=D.useCubeTexture,exports.useFBX=G.useFBX,exports.useGLTF=w.useGLTF,exports.useProgress=z.useProgress,exports.IsObject=F.IsObject,exports.useTexture=F.useTexture,exports.useKTX2=R.useKTX2,exports.Stats=O.Stats,exports.useDepthBuffer=I.useDepthBuffer,exports.useAspect=y.useAspect,exports.useCamera=H.useCamera,exports.useDetectGPU=V.useDetectGPU,exports.useHelper=Q.useHelper,exports.useBVH=X.useBVH,exports.useContextBridge=K.useContextBridge,exports.useAnimations=W.useAnimations,exports.useFBO=N.useFBO,exports.useIntersect=U.useIntersect,exports.useBoxProjectedEnv=_.useBoxProjectedEnv,exports.BBAnchor=J.BBAnchor,exports.CurveModifier=Y.CurveModifier,exports.MeshDistortMaterial=Z.MeshDistortMaterial,exports.MeshWobbleMaterial=$.MeshWobbleMaterial,exports.MeshReflectorMaterial=ee.MeshReflectorMaterial,exports.PointMaterial=re.PointMaterial,exports.PointMaterialImpl=re.PointMaterialImpl,exports.shaderMaterial=se.shaderMaterial,exports.softShadows=te.softShadows,exports.Box=oe.Box,exports.Capsule=oe.Capsule,exports.Circle=oe.Circle,exports.Cone=oe.Cone,exports.Cylinder=oe.Cylinder,exports.Dodecahedron=oe.Dodecahedron,exports.Extrude=oe.Extrude,exports.Icosahedron=oe.Icosahedron,exports.Lathe=oe.Lathe,exports.Octahedron=oe.Octahedron,exports.Plane=oe.Plane,exports.Polyhedron=oe.Polyhedron,exports.Ring=oe.Ring,exports.Sphere=oe.Sphere,exports.Tetrahedron=oe.Tetrahedron,exports.Torus=oe.Torus,exports.TorusKnot=oe.TorusKnot,exports.Tube=oe.Tube,exports.RoundedBox=ie.RoundedBox,exports.ScreenQuad=ue.ScreenQuad,exports.Center=ae.Center,exports.Bounds=ne.Bounds,exports.useBounds=ne.useBounds,exports.CameraShake=ce.CameraShake,exports.Float=je.Float,exports.Stage=pe.Stage,exports.Backdrop=xe.Backdrop,exports.Shadow=le.Shadow,exports.ContactShadows=de.ContactShadows,exports.AccumulativeShadows=qe.AccumulativeShadows,exports.RandomizedLight=qe.RandomizedLight,exports.accumulativeContext=qe.accumulativeContext,exports.Reflector=me.Reflector,exports.SpotLight=Ce.SpotLight,exports.Environment=he.Environment,exports.EnvironmentCube=he.EnvironmentCube,exports.EnvironmentMap=he.EnvironmentMap,exports.EnvironmentPortal=he.EnvironmentPortal,exports.useEnvironment=he.useEnvironment,exports.Lightformer=be.Lightformer,exports.Sky=Me.Sky,exports.calcPosFromAngles=Me.calcPosFromAngles,exports.Stars=Be.Stars,exports.Cloud=Se.Cloud,exports.Sparkles=ge.Sparkles,exports.useMatcapTexture=Pe.useMatcapTexture,exports.useNormalTexture=Te.useNormalTexture,exports.Point=ve.Point,exports.Points=ve.Points,exports.PointsBuffer=ve.PointsBuffer,exports.Instance=fe.Instance,exports.Instances=fe.Instances,exports.Merged=fe.Merged,exports.Segment=Ae.Segment,exports.SegmentObject=Ae.SegmentObject,exports.Segments=Ae.Segments,exports.Detailed=Le.Detailed,exports.Preload=ke.Preload,exports.BakeShadows=Ee.BakeShadows,exports.meshBounds=De.meshBounds,exports.AdaptiveDpr=Ge.AdaptiveDpr,exports.AdaptiveEvents=we.AdaptiveEvents,exports.RenderTexture=ze.RenderTexture,exports.Mask=Fe.Mask,exports.useMask=Fe.useMask;
package/core/index.d.ts CHANGED
@@ -67,6 +67,7 @@ export * from './Stage';
67
67
  export * from './Backdrop';
68
68
  export * from './Shadow';
69
69
  export * from './ContactShadows';
70
+ export * from './AccumulativeShadows';
70
71
  export * from './Reflector';
71
72
  export * from './SpotLight';
72
73
  export * from './Environment';
package/core/index.js CHANGED
@@ -67,6 +67,7 @@ export { Stage } from './Stage.js';
67
67
  export { Backdrop } from './Backdrop.js';
68
68
  export { Shadow } from './Shadow.js';
69
69
  export { ContactShadows } from './ContactShadows.js';
70
+ export { AccumulativeShadows, RandomizedLight, accumulativeContext } from './AccumulativeShadows.js';
70
71
  export { Reflector } from './Reflector.js';
71
72
  export { SpotLight } from './SpotLight.js';
72
73
  export { Environment, EnvironmentCube, EnvironmentMap, EnvironmentPortal, useEnvironment } from './Environment.js';