@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 +77 -0
- package/core/AccumulativeShadows.cjs.js +1 -0
- package/core/AccumulativeShadows.d.ts +67 -0
- package/core/AccumulativeShadows.js +275 -0
- package/core/index.cjs.js +1 -1
- package/core/index.d.ts +1 -0
- package/core/index.js +1 -0
- package/index.cjs.js +1 -1
- package/index.js +1 -0
- package/native/index.cjs.js +1 -1
- package/native/index.js +1 -0
- package/package.json +1 -1
- package/web/index.cjs.js +1 -1
- package/web/index.js +1 -0
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"),
|
|
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
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';
|