@react-three/drei 9.56.16 → 9.56.18
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 +24 -2
- package/core/PointMaterial.cjs.js +1 -1
- package/core/PointMaterial.js +2 -0
- package/core/RenderTexture.cjs.js +1 -1
- package/core/RenderTexture.d.ts +4 -1
- package/core/RenderTexture.js +7 -1
- package/core/Sparkles.cjs.js +1 -1
- package/core/Sparkles.d.ts +1 -1
- package/core/Sparkles.js +41 -10
- package/index.cjs.js +1 -1
- package/package.json +1 -1
- package/helpers/glsl/Sparkles.frag.glsl.js +0 -3
- package/helpers/glsl/Sparkles.vert.glsl.js +0 -3
package/README.md
CHANGED
|
@@ -2793,11 +2793,19 @@ return (
|
|
|
2793
2793
|
This component allows you to render a live scene into a texture which you can then apply to a material. The contents of it run inside a portal and are separate from the rest of the canvas, therefore you can have events in there, environment maps, etc.
|
|
2794
2794
|
|
|
2795
2795
|
```tsx
|
|
2796
|
-
|
|
2796
|
+
type Props = JSX.IntrinsicElements['texture'] & {
|
|
2797
2797
|
/** Optional width of the texture, defaults to viewport bounds */
|
|
2798
2798
|
width?: number
|
|
2799
2799
|
/** Optional height of the texture, defaults to viewport bounds */
|
|
2800
2800
|
height?: number
|
|
2801
|
+
/** Optional fbo samples */
|
|
2802
|
+
samples?: number
|
|
2803
|
+
/** Optional stencil buffer, defaults to false */
|
|
2804
|
+
stencilBuffer?: boolean
|
|
2805
|
+
/** Optional depth buffer, defaults to true */
|
|
2806
|
+
depthBuffer?: boolean
|
|
2807
|
+
/** Optional generate mipmaps, defaults to false */
|
|
2808
|
+
generateMipmaps?: boolean
|
|
2801
2809
|
/** Optional render priority, defaults to 0 */
|
|
2802
2810
|
renderPriority?: number
|
|
2803
2811
|
/** Optional event priority, defaults to 0 */
|
|
@@ -2808,7 +2816,7 @@ This component allows you to render a live scene into a texture which you can th
|
|
|
2808
2816
|
compute?: (event: any, state: any, previous: any) => false | undefined
|
|
2809
2817
|
/** Children will be rendered into a portal */
|
|
2810
2818
|
children: React.ReactNode
|
|
2811
|
-
|
|
2819
|
+
}
|
|
2812
2820
|
```
|
|
2813
2821
|
|
|
2814
2822
|
```jsx
|
|
@@ -3582,6 +3590,20 @@ Floating, glowing particles.
|
|
|
3582
3590
|
/>
|
|
3583
3591
|
```
|
|
3584
3592
|
|
|
3593
|
+
Custom shaders are allowed. Sparkles will use the following attributes and uniforms:
|
|
3594
|
+
|
|
3595
|
+
```glsl
|
|
3596
|
+
attribute float size;
|
|
3597
|
+
attribute float speed;
|
|
3598
|
+
attribute float opacity;
|
|
3599
|
+
attribute vec3 noise;
|
|
3600
|
+
attribute vec3 color;
|
|
3601
|
+
```
|
|
3602
|
+
|
|
3603
|
+
```json
|
|
3604
|
+
{ "time": 0, "pixelRatio": 1 }
|
|
3605
|
+
```
|
|
3606
|
+
|
|
3585
3607
|
#### Cloud
|
|
3586
3608
|
|
|
3587
3609
|
[](https://drei.pmnd.rs/?path=/story/staging-cloud--cloud-st) 
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react");function
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react");function n(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=n(e),l=a(t),i=a(r);class u extends l.PointsMaterial{constructor(e){super(e),this.onBeforeCompile=(e,t)=>{const{isWebGL2:r}=t.capabilities;e.fragmentShader=e.fragmentShader.replace("#include <output_fragment>",`\n ${r?"#include <output_fragment>":"#extension GL_OES_standard_derivatives : enable\n#include <output_fragment>"}\n vec2 cxy = 2.0 * gl_PointCoord - 1.0;\n float r = dot(cxy, cxy);\n float delta = fwidth(r); \n float mask = 1.0 - smoothstep(1.0 - delta, 1.0 + delta, r);\n gl_FragColor = vec4(gl_FragColor.rgb, mask * gl_FragColor.a );\n #include <tonemapping_fragment>\n #include <encodings_fragment>\n `)}}}const c=i.forwardRef(((e,t)=>{const[r]=i.useState((()=>new u(null)));return i.createElement("primitive",o.default({},e,{object:r,ref:t,attach:"material"}))}));exports.PointMaterial=c,exports.PointMaterialImpl=u;
|
package/core/PointMaterial.js
CHANGED
|
@@ -17,6 +17,8 @@ class PointMaterialImpl extends THREE.PointsMaterial {
|
|
|
17
17
|
float delta = fwidth(r);
|
|
18
18
|
float mask = 1.0 - smoothstep(1.0 - delta, 1.0 + delta, r);
|
|
19
19
|
gl_FragColor = vec4(gl_FragColor.rgb, mask * gl_FragColor.a );
|
|
20
|
+
#include <tonemapping_fragment>
|
|
21
|
+
#include <encodings_fragment>
|
|
20
22
|
`);
|
|
21
23
|
};
|
|
22
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("three"),t=require("react"),n=require("@react-three/fiber"),a=require("./useFBO.cjs.js");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function i(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var c=u(e),s=i(r),o=i(t);const l=o.forwardRef((({children:e,compute:r,width:t,height:u,samples:i=8,renderPriority:l=0,eventPriority:d=0,frames:
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("three"),t=require("react"),n=require("@react-three/fiber"),a=require("./useFBO.cjs.js");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function i(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var c=u(e),s=i(r),o=i(t);const l=o.forwardRef((({children:e,compute:r,width:t,height:u,samples:i=8,renderPriority:l=0,eventPriority:d=0,frames:p=1/0,stencilBuffer:m=!1,depthBuffer:b=!0,generateMipmaps:v=!1,...g},h)=>{const{size:y,viewport:j}=n.useThree(),O=a.useFBO((t||y.width)*j.dpr,(u||y.height)*j.dpr,{samples:i,stencilBuffer:m,depthBuffer:b,generateMipmaps:v}),[x]=o.useState((()=>new s.Scene)),P=o.useCallback(((e,r,t)=>{var n,a;let u=null==(n=O.texture)?void 0:n.__r3f.parent;for(;u&&!(u instanceof s.Object3D);)u=u.__r3f.parent;if(!u)return!1;t.raycaster.camera||t.events.compute(e,t,null==(a=t.previousRoot)?void 0:a.getState());const[i]=t.raycaster.intersectObject(u);if(!i)return!1;const c=i.uv;if(!c)return!1;r.raycaster.setFromCamera(r.pointer.set(2*c.x-1,2*c.y-1),r.camera)}),[]);return o.useImperativeHandle(h,(()=>O.texture),[O]),o.createElement(o.Fragment,null,n.createPortal(o.createElement(f,{renderPriority:l,frames:p,fbo:O},e),x,{events:{compute:r||P,priority:d}}),o.createElement("primitive",c.default({object:O.texture},g)))}));function f({frames:e,renderPriority:r,children:t,fbo:a}){let u=0;return n.useFrame((r=>{(e===1/0||u<e)&&(r.gl.setRenderTarget(a),r.gl.render(r.scene,r.camera),r.gl.setRenderTarget(null),u++)}),r),o.createElement(o.Fragment,null,t)}exports.RenderTexture=l;
|
package/core/RenderTexture.d.ts
CHANGED
|
@@ -4,9 +4,12 @@ export declare const RenderTexture: React.ForwardRefExoticComponent<Pick<import(
|
|
|
4
4
|
width?: number | undefined;
|
|
5
5
|
height?: number | undefined;
|
|
6
6
|
samples?: number | undefined;
|
|
7
|
+
stencilBuffer?: boolean | undefined;
|
|
8
|
+
depthBuffer?: boolean | undefined;
|
|
9
|
+
generateMipmaps?: boolean | undefined;
|
|
7
10
|
renderPriority?: number | undefined;
|
|
8
11
|
eventPriority?: number | undefined;
|
|
9
12
|
frames?: number | undefined;
|
|
10
13
|
compute?: ((event: any, state: any, previous: any) => false | undefined) | undefined;
|
|
11
14
|
children: React.ReactNode;
|
|
12
|
-
}, "attach" | "args" | "children" | "key" | "onUpdate" | "rotation" | "matrix" | "dispose" | "type" | "id" | "uuid" | "name" | "matrixAutoUpdate" | "userData" | "updateMatrix" | "toJSON" | "clone" | "copy" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | "center" | "source" | "repeat" | "image" | "needsUpdate" | "version" | "offset" | "width" | "height" | "sourceFile" | "mipmaps" | "mapping" | "wrapS" | "wrapT" | "magFilter" | "minFilter" | "anisotropy" | "format" | "internalFormat" | "generateMipmaps" | "premultiplyAlpha" | "flipY" | "unpackAlignment" | "encoding" | "isRenderTargetTexture" | "needsPMREMUpdate" | "isTexture" | "transformUv" | "compute" | "samples" | "frames" | "renderPriority" | "eventPriority"> & React.RefAttributes<unknown>>;
|
|
15
|
+
}, "attach" | "args" | "children" | "key" | "onUpdate" | "rotation" | "matrix" | "dispose" | "type" | "id" | "uuid" | "name" | "matrixAutoUpdate" | "userData" | "updateMatrix" | "toJSON" | "clone" | "copy" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | "center" | "source" | "repeat" | "image" | "needsUpdate" | "version" | "offset" | "width" | "height" | "sourceFile" | "mipmaps" | "mapping" | "wrapS" | "wrapT" | "magFilter" | "minFilter" | "anisotropy" | "format" | "internalFormat" | "generateMipmaps" | "premultiplyAlpha" | "flipY" | "unpackAlignment" | "encoding" | "isRenderTargetTexture" | "needsPMREMUpdate" | "isTexture" | "transformUv" | "compute" | "depthBuffer" | "stencilBuffer" | "samples" | "frames" | "renderPriority" | "eventPriority"> & React.RefAttributes<unknown>>;
|
package/core/RenderTexture.js
CHANGED
|
@@ -13,6 +13,9 @@ const RenderTexture = /*#__PURE__*/React.forwardRef(({
|
|
|
13
13
|
renderPriority = 0,
|
|
14
14
|
eventPriority = 0,
|
|
15
15
|
frames = Infinity,
|
|
16
|
+
stencilBuffer = false,
|
|
17
|
+
depthBuffer = true,
|
|
18
|
+
generateMipmaps = false,
|
|
16
19
|
...props
|
|
17
20
|
}, forwardRef) => {
|
|
18
21
|
const {
|
|
@@ -20,7 +23,10 @@ const RenderTexture = /*#__PURE__*/React.forwardRef(({
|
|
|
20
23
|
viewport
|
|
21
24
|
} = useThree();
|
|
22
25
|
const fbo = useFBO((width || size.width) * viewport.dpr, (height || size.height) * viewport.dpr, {
|
|
23
|
-
samples
|
|
26
|
+
samples,
|
|
27
|
+
stencilBuffer,
|
|
28
|
+
depthBuffer,
|
|
29
|
+
generateMipmaps
|
|
24
30
|
});
|
|
25
31
|
const [vScene] = React.useState(() => new THREE.Scene());
|
|
26
32
|
const uvCompute = React.useCallback((event, state, previous) => {
|
package/core/Sparkles.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("three"),o=require("@react-three/fiber"),i=require("./shaderMaterial.cjs.js");function
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("three"),o=require("@react-three/fiber"),i=require("./shaderMaterial.cjs.js");function n(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 o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,o.get?o:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var l=n(e),s=a(t),c=a(r);const u=i.shaderMaterial({time:0,pixelRatio:1}," uniform float pixelRatio;\n uniform float time;\n attribute float size; \n attribute float speed; \n attribute float opacity;\n attribute vec3 noise;\n attribute vec3 color;\n varying vec3 vColor;\n varying float vOpacity;\n void main() {\n vec4 modelPosition = modelMatrix * vec4(position, 1.0);\n modelPosition.y += sin(time * speed + modelPosition.x * noise.x * 100.0) * 0.2;\n modelPosition.z += cos(time * speed + modelPosition.x * noise.y * 100.0) * 0.2;\n modelPosition.x += cos(time * speed + modelPosition.x * noise.z * 100.0) * 0.2;\n vec4 viewPosition = viewMatrix * modelPosition;\n vec4 projectionPostion = projectionMatrix * viewPosition;\n gl_Position = projectionPostion;\n gl_PointSize = size * 25. * pixelRatio;\n gl_PointSize *= (1.0 / - viewPosition.z);\n vColor = color;\n vOpacity = opacity;\n }"," varying vec3 vColor;\n varying float vOpacity;\n void main() {\n float distanceToCenter = distance(gl_PointCoord, vec2(0.5));\n float strength = 0.05 / distanceToCenter - 0.1;\n gl_FragColor = vec4(vColor, strength * vOpacity);\n #include <tonemapping_fragment>\n #include <encodings_fragment>\n }"),f=e=>e&&e.constructor===Float32Array,m=e=>e instanceof c.Vector2||e instanceof c.Vector3||e instanceof c.Vector4,d=e=>Array.isArray(e)?e:m(e)?e.toArray():[e,e,e];function p(e,t,r){return s.useMemo((()=>{if(void 0!==t){if(f(t))return t;if(t instanceof c.Color){const r=Array.from({length:3*e},(()=>{return[(e=t).r,e.g,e.b];var e})).flat();return Float32Array.from(r)}if(m(t)||Array.isArray(t)){const r=Array.from({length:3*e},(()=>d(t))).flat();return Float32Array.from(r)}return Float32Array.from({length:e},(()=>t))}return Float32Array.from({length:e},r)}),[t])}const v=s.forwardRef((({noise:e=1,count:t=100,speed:r=1,opacity:i=1,scale:n=1,size:a,color:m,children:v,...b},y)=>{s.useMemo((()=>o.extend({SparklesImplMaterial:u})),[]);const g=s.useRef(null),h=o.useThree((e=>e.viewport.dpr)),A=s.useMemo((()=>Float32Array.from(Array.from({length:t},(()=>d(n).map(c.MathUtils.randFloatSpread))).flat())),[t,n]),P=p(t,a,Math.random),x=p(t,i),M=p(t,r),j=p(3*t,e),O=p(void 0===m?3*t:t,f(m)?m:new c.Color(m),(()=>1));return console.log(O),o.useFrame((e=>{g.current&&g.current.material&&(g.current.material.time=e.clock.elapsedTime)})),s.useImperativeHandle(y,(()=>g.current),[]),s.createElement("points",l.default({key:`particle-${t}-${JSON.stringify(n)}`},b,{ref:g}),s.createElement("bufferGeometry",null,s.createElement("bufferAttribute",{attach:"attributes-position",args:[A,3]}),s.createElement("bufferAttribute",{attach:"attributes-size",args:[P,1]}),s.createElement("bufferAttribute",{attach:"attributes-opacity",args:[x,1]}),s.createElement("bufferAttribute",{attach:"attributes-speed",args:[M,1]}),s.createElement("bufferAttribute",{attach:"attributes-color",args:[O,3]}),s.createElement("bufferAttribute",{attach:"attributes-noise",args:[j,3]})),v||s.createElement("sparklesImplMaterial",{transparent:!0,pixelRatio:h,depthWrite:!1}))}));exports.Sparkles=v;
|
package/core/Sparkles.d.ts
CHANGED
package/core/Sparkles.js
CHANGED
|
@@ -3,13 +3,40 @@ import * as React from 'react';
|
|
|
3
3
|
import * as THREE from 'three';
|
|
4
4
|
import { extend, useThree, useFrame } from '@react-three/fiber';
|
|
5
5
|
import { shaderMaterial } from './shaderMaterial.js';
|
|
6
|
-
import fragShader from '../helpers/glsl/Sparkles.frag.glsl.js';
|
|
7
|
-
import vertShader from '../helpers/glsl/Sparkles.vert.glsl.js';
|
|
8
6
|
|
|
9
|
-
const
|
|
7
|
+
const SparklesImplMaterial = shaderMaterial({
|
|
10
8
|
time: 0,
|
|
11
9
|
pixelRatio: 1
|
|
12
|
-
},
|
|
10
|
+
}, ` uniform float pixelRatio;
|
|
11
|
+
uniform float time;
|
|
12
|
+
attribute float size;
|
|
13
|
+
attribute float speed;
|
|
14
|
+
attribute float opacity;
|
|
15
|
+
attribute vec3 noise;
|
|
16
|
+
attribute vec3 color;
|
|
17
|
+
varying vec3 vColor;
|
|
18
|
+
varying float vOpacity;
|
|
19
|
+
void main() {
|
|
20
|
+
vec4 modelPosition = modelMatrix * vec4(position, 1.0);
|
|
21
|
+
modelPosition.y += sin(time * speed + modelPosition.x * noise.x * 100.0) * 0.2;
|
|
22
|
+
modelPosition.z += cos(time * speed + modelPosition.x * noise.y * 100.0) * 0.2;
|
|
23
|
+
modelPosition.x += cos(time * speed + modelPosition.x * noise.z * 100.0) * 0.2;
|
|
24
|
+
vec4 viewPosition = viewMatrix * modelPosition;
|
|
25
|
+
vec4 projectionPostion = projectionMatrix * viewPosition;
|
|
26
|
+
gl_Position = projectionPostion;
|
|
27
|
+
gl_PointSize = size * 25. * pixelRatio;
|
|
28
|
+
gl_PointSize *= (1.0 / - viewPosition.z);
|
|
29
|
+
vColor = color;
|
|
30
|
+
vOpacity = opacity;
|
|
31
|
+
}`, ` varying vec3 vColor;
|
|
32
|
+
varying float vOpacity;
|
|
33
|
+
void main() {
|
|
34
|
+
float distanceToCenter = distance(gl_PointCoord, vec2(0.5));
|
|
35
|
+
float strength = 0.05 / distanceToCenter - 0.1;
|
|
36
|
+
gl_FragColor = vec4(vColor, strength * vOpacity);
|
|
37
|
+
#include <tonemapping_fragment>
|
|
38
|
+
#include <encodings_fragment>
|
|
39
|
+
}`);
|
|
13
40
|
|
|
14
41
|
const isFloat32Array = def => def && def.constructor === Float32Array;
|
|
15
42
|
|
|
@@ -60,12 +87,13 @@ const Sparkles = /*#__PURE__*/React.forwardRef(({
|
|
|
60
87
|
scale = 1,
|
|
61
88
|
size,
|
|
62
89
|
color,
|
|
90
|
+
children,
|
|
63
91
|
...props
|
|
64
92
|
}, forwardRef) => {
|
|
65
93
|
React.useMemo(() => extend({
|
|
66
|
-
|
|
94
|
+
SparklesImplMaterial
|
|
67
95
|
}), []);
|
|
68
|
-
const
|
|
96
|
+
const ref = React.useRef(null);
|
|
69
97
|
const dpr = useThree(state => state.viewport.dpr);
|
|
70
98
|
const positions = React.useMemo(() => Float32Array.from(Array.from({
|
|
71
99
|
length: count
|
|
@@ -75,11 +103,15 @@ const Sparkles = /*#__PURE__*/React.forwardRef(({
|
|
|
75
103
|
const speeds = usePropAsIsOrAsAttribute(count, speed);
|
|
76
104
|
const noises = usePropAsIsOrAsAttribute(count * 3, noise);
|
|
77
105
|
const colors = usePropAsIsOrAsAttribute(color === undefined ? count * 3 : count, !isFloat32Array(color) ? new THREE.Color(color) : color, () => 1);
|
|
78
|
-
|
|
106
|
+
console.log(colors);
|
|
107
|
+
useFrame(state => {
|
|
108
|
+
if (ref.current && ref.current.material) ref.current.material.time = state.clock.elapsedTime;
|
|
109
|
+
});
|
|
110
|
+
React.useImperativeHandle(forwardRef, () => ref.current, []);
|
|
79
111
|
return /*#__PURE__*/React.createElement("points", _extends({
|
|
80
112
|
key: `particle-${count}-${JSON.stringify(scale)}`
|
|
81
113
|
}, props, {
|
|
82
|
-
ref:
|
|
114
|
+
ref: ref
|
|
83
115
|
}), /*#__PURE__*/React.createElement("bufferGeometry", null, /*#__PURE__*/React.createElement("bufferAttribute", {
|
|
84
116
|
attach: "attributes-position",
|
|
85
117
|
args: [positions, 3]
|
|
@@ -98,8 +130,7 @@ const Sparkles = /*#__PURE__*/React.forwardRef(({
|
|
|
98
130
|
}), /*#__PURE__*/React.createElement("bufferAttribute", {
|
|
99
131
|
attach: "attributes-noise",
|
|
100
132
|
args: [noises, 3]
|
|
101
|
-
})), /*#__PURE__*/React.createElement("
|
|
102
|
-
ref: matRef,
|
|
133
|
+
})), children ? children : /*#__PURE__*/React.createElement("sparklesImplMaterial", {
|
|
103
134
|
transparent: true,
|
|
104
135
|
pixelRatio: dpr,
|
|
105
136
|
depthWrite: false
|