@react-three/drei 9.0.0-beta.3 → 9.0.0-beta.4

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.
Files changed (107) hide show
  1. package/README.md +293 -26
  2. package/core/ArcballControls.cjs.js +1 -1
  3. package/core/ArcballControls.js +13 -25
  4. package/core/Bounds.cjs.js +1 -1
  5. package/core/Bounds.d.ts +2 -1
  6. package/core/Bounds.js +25 -14
  7. package/core/Clone.cjs.js +1 -0
  8. package/core/Clone.d.ts +11 -0
  9. package/core/Clone.js +92 -0
  10. package/core/Cloud.cjs.js +1 -1
  11. package/core/Cloud.d.ts +3 -1
  12. package/core/Cloud.js +4 -1
  13. package/core/ComputedAttribute.cjs.js +1 -0
  14. package/core/ComputedAttribute.d.ts +9 -0
  15. package/core/ComputedAttribute.js +34 -0
  16. package/core/ContactShadows.cjs.js +1 -1
  17. package/core/ContactShadows.d.ts +3 -1
  18. package/core/ContactShadows.js +15 -2
  19. package/core/CubeCamera.cjs.js +1 -1
  20. package/core/CubeCamera.js +6 -6
  21. package/core/DeviceOrientationControls.cjs.js +1 -1
  22. package/core/DeviceOrientationControls.js +2 -6
  23. package/core/Effects.cjs.js +1 -1
  24. package/core/Effects.d.ts +3 -2
  25. package/core/Effects.js +2 -2
  26. package/core/Environment.cjs.js +1 -1
  27. package/core/Environment.d.ts +13 -3
  28. package/core/Environment.js +96 -33
  29. package/core/FirstPersonControls.cjs.js +1 -1
  30. package/core/FirstPersonControls.js +2 -6
  31. package/core/Float.cjs.js +1 -1
  32. package/core/Float.d.ts +1 -1
  33. package/core/Float.js +5 -4
  34. package/core/GizmoHelper.cjs.js +1 -1
  35. package/core/GizmoHelper.d.ts +2 -1
  36. package/core/GizmoHelper.js +31 -41
  37. package/core/Image.cjs.js +1 -1
  38. package/core/Image.d.ts +5 -3
  39. package/core/Image.js +6 -1
  40. package/core/Instances.cjs.js +1 -1
  41. package/core/Instances.d.ts +1 -1
  42. package/core/Instances.js +5 -11
  43. package/core/Lightformer.cjs.js +1 -0
  44. package/core/Lightformer.d.ts +41 -0
  45. package/core/Lightformer.js +51 -0
  46. package/core/MeshReflectorMaterial.cjs.js +1 -1
  47. package/core/MeshReflectorMaterial.d.ts +1 -2
  48. package/core/MeshReflectorMaterial.js +4 -5
  49. package/core/OrbitControls.cjs.js +1 -1
  50. package/core/OrbitControls.js +18 -31
  51. package/core/PointMaterial.cjs.js +1 -1
  52. package/core/PointMaterial.d.ts +5 -8
  53. package/core/PointMaterial.js +16 -34
  54. package/core/PointerLockControls.cjs.js +1 -1
  55. package/core/PointerLockControls.d.ts +3 -1
  56. package/core/PointerLockControls.js +36 -22
  57. package/core/Points.cjs.js +1 -1
  58. package/core/Points.d.ts +3 -3
  59. package/core/Points.js +11 -30
  60. package/core/Reflector.d.ts +1 -1
  61. package/core/Sampler.cjs.js +1 -0
  62. package/core/Sampler.d.ts +21 -0
  63. package/core/Sampler.js +65 -0
  64. package/core/SpotLight.d.ts +1 -1
  65. package/core/Stage.cjs.js +1 -1
  66. package/core/Stage.js +1 -2
  67. package/core/Stars.cjs.js +1 -1
  68. package/core/Stars.js +3 -0
  69. package/core/Stats.cjs.js +1 -1
  70. package/core/Stats.js +1 -1
  71. package/core/Text.cjs.js +1 -1
  72. package/core/Text.d.ts +2 -1
  73. package/core/Text.js +3 -2
  74. package/core/TrackballControls.cjs.js +1 -1
  75. package/core/TrackballControls.js +7 -5
  76. package/core/Trail.cjs.js +1 -0
  77. package/core/Trail.d.ts +21 -0
  78. package/core/Trail.js +160 -0
  79. package/core/TransformControls.cjs.js +1 -1
  80. package/core/TransformControls.js +7 -13
  81. package/core/index.cjs.js +1 -1
  82. package/core/index.d.ts +6 -0
  83. package/core/index.js +9 -2
  84. package/core/useBoxProjectedEnv.cjs.js +1 -0
  85. package/core/useBoxProjectedEnv.d.ts +8 -0
  86. package/core/useBoxProjectedEnv.js +98 -0
  87. package/core/useFBO.cjs.js +1 -1
  88. package/core/useFBO.d.ts +1 -1
  89. package/core/useFBO.js +22 -24
  90. package/core/useGLTF.d.ts +1 -1
  91. package/core/useHelper.d.ts +3 -1
  92. package/index.cjs.js +1 -1
  93. package/index.js +7 -1
  94. package/materials/ConvolutionMaterial.cjs.js +1 -1
  95. package/materials/ConvolutionMaterial.js +2 -0
  96. package/materials/MeshReflectorMaterial.cjs.js +1 -1
  97. package/materials/MeshReflectorMaterial.d.ts +0 -3
  98. package/materials/MeshReflectorMaterial.js +8 -34
  99. package/materials/SpotLightMaterial.cjs.js +1 -1
  100. package/materials/SpotLightMaterial.js +3 -0
  101. package/native/index.cjs.js +1 -1
  102. package/native/index.js +9 -2
  103. package/package.json +6 -5
  104. package/web/ScrollControls.cjs.js +1 -1
  105. package/web/ScrollControls.js +2 -2
  106. package/web/index.cjs.js +1 -1
  107. package/web/index.js +9 -2
package/core/Float.d.ts CHANGED
@@ -5,4 +5,4 @@ export declare type FloatProps = JSX.IntrinsicElements['group'] & {
5
5
  floatIntensity?: number;
6
6
  children?: React.ReactNode;
7
7
  };
8
- export declare function Float({ children, speed, rotationIntensity, floatIntensity, ...props }: FloatProps): JSX.Element;
8
+ export declare const Float: React.ForwardRefExoticComponent<Pick<FloatProps, "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 | "speed" | "rotationIntensity" | "floatIntensity"> & React.RefAttributes<import("three").Group>>;
package/core/Float.js CHANGED
@@ -1,13 +1,14 @@
1
1
  import * as React from 'react';
2
2
  import { useFrame } from '@react-three/fiber';
3
+ import mergeRefs from 'react-merge-refs';
3
4
 
4
- function Float({
5
+ const Float = /*#__PURE__*/React.forwardRef(({
5
6
  children,
6
7
  speed = 1,
7
8
  rotationIntensity = 1,
8
9
  floatIntensity = 1,
9
10
  ...props
10
- }) {
11
+ }, forwardRef) => {
11
12
  const ref = React.useRef(null);
12
13
  const offset = React.useRef(Math.random() * 10000);
13
14
  useFrame(state => {
@@ -18,8 +19,8 @@ function Float({
18
19
  ref.current.position.y = Math.sin(t / 4 * speed) / 10 * floatIntensity;
19
20
  });
20
21
  return /*#__PURE__*/React.createElement("group", props, /*#__PURE__*/React.createElement("group", {
21
- ref: ref
22
+ ref: mergeRefs([ref, forwardRef])
22
23
  }, children));
23
- }
24
+ });
24
25
 
25
26
  export { Float };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("@react-three/fiber"),t=require("three"),n=require("./OrthographicCamera.cjs.js"),u=require("./useCamera.cjs.js");function a(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)}require("@babel/runtime/helpers/extends"),require("react-merge-refs");var o=a(e);const c=o.createContext({}),i=2*Math.PI,s=new t.Object3D,l=new t.Matrix4,[p,d]=[new t.Quaternion,new t.Quaternion],f=new t.Vector3,h=new t.Vector3;exports.GizmoHelper=({alignment:e="bottom-right",margin:a=[80,80],renderPriority:m=0,onUpdate:g,onTarget:b,children:y})=>{const v=r.useThree((({size:e})=>e)),w=r.useThree((({camera:e})=>e)),j=r.useThree((({controls:e})=>e)),q=r.useThree((({gl:e})=>e)),x=r.useThree((({scene:e})=>e)),O=r.useThree((({invalidate:e})=>e)),T=o.useRef(),C=o.useRef(),k=o.useRef(null),[P]=o.useState((()=>new t.Scene)),R=o.useRef(!1),z=o.useRef(0),E=o.useRef(new t.Vector3(0,0,0));o.useEffect((()=>(x.background&&(T.current=x.background,x.background=null,P.background=T.current),()=>{T.current&&(x.background=T.current)})),[]);r.useFrame(((e,r)=>{var t;k.current&&C.current&&((e=>{if(!R.current)return;if(p.angleTo(d)<.01)return void(R.current=!1);const r=e*i;p.rotateTowards(d,r),w.position.set(0,0,1).applyQuaternion(p).multiplyScalar(z.current).add(E.current),w.up.set(0,1,0).applyQuaternion(p).normalize(),w.quaternion.copy(p),g?g():j&&j.update(),O()})(r),l.copy(w.matrix).invert(),null==(t=C.current)||t.quaternion.setFromRotationMatrix(l),q.autoClear=!1,q.clearDepth(),q.render(P,k.current))}),m);const M={tweenCamera:e=>{R.current=!0,(j||b)&&(E.current=(null==j?void 0:j.target)||(null==b?void 0:b())),z.current=w.position.distanceTo(f),p.copy(w.quaternion),h.copy(e).multiplyScalar(z.current).add(f),s.lookAt(h),d.copy(s.quaternion),O()},raycast:u.useCamera(k)},[D,Q]=a,S=e.endsWith("-left")?-v.width/2+D:v.width/2-D,_=e.startsWith("top-")?v.height/2-Q:-v.height/2+Q;return r.createPortal(o.createElement(c.Provider,{value:M},o.createElement(n.OrthographicCamera,{ref:k,makeDefault:!1,position:[0,0,200]}),o.createElement("group",{ref:C,position:[S,_,0]},y)),P)},exports.useGizmoContext=()=>o.useContext(c);
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("@react-three/fiber"),t=require("three"),n=require("./OrthographicCamera.cjs.js"),a=require("./useCamera.cjs.js");function u(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)}require("@babel/runtime/helpers/extends"),require("react-merge-refs");var o=u(e);const c=o.createContext({}),i=2*Math.PI,s=new t.Object3D,l=new t.Matrix4,[p,d]=[new t.Quaternion,new t.Quaternion],f=new t.Vector3,h=new t.Vector3;exports.GizmoHelper=({alignment:e="bottom-right",margin:u=[80,80],renderPriority:m=0,autoClear:g=!0,onUpdate:b,onTarget:y,children:w})=>{const v=r.useThree((({size:e})=>e)),j=r.useThree((({camera:e})=>e)),q=r.useThree((({controls:e})=>e)),C=r.useThree((({gl:e})=>e)),x=r.useThree((({scene:e})=>e)),O=r.useThree((({invalidate:e})=>e)),T=o.useRef(),k=o.useRef(),P=o.useRef(null),[R]=o.useState((()=>new t.Scene)),M=o.useRef(!1),z=o.useRef(0),E=o.useRef(new t.Vector3(0,0,0)),Q=o.useCallback((e=>{M.current=!0,(q||y)&&(E.current=(null==q?void 0:q.target)||(null==y?void 0:y())),z.current=j.position.distanceTo(f),p.copy(j.quaternion),h.copy(e).multiplyScalar(z.current).add(f),s.lookAt(h),d.copy(s.quaternion),O()}),[q,j,y,O]);o.useEffect((()=>(x.background&&(T.current=x.background,x.background=null,R.background=T.current),()=>{T.current&&(x.background=T.current)})),[]),r.useFrame(((e,r)=>{if(P.current&&k.current){var t;if(M.current)if(p.angleTo(d)<.01)M.current=!1;else{const e=r*i;p.rotateTowards(d,e),j.position.set(0,0,1).applyQuaternion(p).multiplyScalar(z.current).add(E.current),j.up.set(0,1,0).applyQuaternion(p).normalize(),j.quaternion.copy(p),b?b():q&&q.update(),O()}l.copy(j.matrix).invert(),null==(t=k.current)||t.quaternion.setFromRotationMatrix(l),g&&(C.autoClear=!1),C.clearDepth(),C.render(R,P.current)}}),m);const S=a.useCamera(P),_=o.useMemo((()=>({tweenCamera:Q,raycast:S})),[Q]),[D,V]=u,F=e.endsWith("-left")?-v.width/2+D:v.width/2-D,G=e.startsWith("top-")?v.height/2-V:-v.height/2+V;return r.createPortal(o.createElement(c.Provider,{value:_},o.createElement(n.OrthographicCamera,{ref:P,position:[0,0,200]}),o.createElement("group",{ref:k,position:[F,G,0]},w)),R)},exports.useGizmoContext=()=>o.useContext(c);
@@ -8,8 +8,9 @@ export declare type GizmoHelperProps = JSX.IntrinsicElements['group'] & {
8
8
  alignment?: 'top-left' | 'top-right' | 'bottom-right' | 'bottom-left';
9
9
  margin?: [number, number];
10
10
  renderPriority?: number;
11
+ autoClear?: boolean;
11
12
  onUpdate?: () => void;
12
13
  onTarget?: () => Vector3;
13
14
  };
14
- export declare const GizmoHelper: ({ alignment, margin, renderPriority, onUpdate, onTarget, children: GizmoHelperComponent, }: GizmoHelperProps) => any;
15
+ export declare const GizmoHelper: ({ alignment, margin, renderPriority, autoClear, onUpdate, onTarget, children: GizmoHelperComponent, }: GizmoHelperProps) => any;
15
16
  export {};
@@ -19,6 +19,7 @@ const GizmoHelper = ({
19
19
  alignment = 'bottom-right',
20
20
  margin = [80, 80],
21
21
  renderPriority = 0,
22
+ autoClear = true,
22
23
  onUpdate,
23
24
  onTarget,
24
25
  children: GizmoHelperComponent
@@ -49,8 +50,7 @@ const GizmoHelper = ({
49
50
  const animating = React.useRef(false);
50
51
  const radius = React.useRef(0);
51
52
  const focusPoint = React.useRef(new Vector3(0, 0, 0));
52
-
53
- const tweenCamera = direction => {
53
+ const tweenCamera = React.useCallback(direction => {
54
54
  animating.current = true;
55
55
  if (defaultControls || onTarget) focusPoint.current = (defaultControls == null ? void 0 : defaultControls.target) || (onTarget == null ? void 0 : onTarget());
56
56
  radius.current = mainCamera.position.distanceTo(target); // Rotate from current camera orientation
@@ -61,27 +61,7 @@ const GizmoHelper = ({
61
61
  dummy.lookAt(targetPosition);
62
62
  q2.copy(dummy.quaternion);
63
63
  invalidate();
64
- };
65
-
66
- const animateStep = delta => {
67
- if (!animating.current) return;
68
-
69
- if (q1.angleTo(q2) < 0.01) {
70
- animating.current = false;
71
- return;
72
- }
73
-
74
- const step = delta * turnRate; // animate position by doing a slerp and then scaling the position on the unit sphere
75
-
76
- q1.rotateTowards(q2, step); // animate orientation
77
-
78
- mainCamera.position.set(0, 0, 1).applyQuaternion(q1).multiplyScalar(radius.current).add(focusPoint.current);
79
- mainCamera.up.set(0, 1, 0).applyQuaternion(q1).normalize();
80
- mainCamera.quaternion.copy(q1);
81
- if (onUpdate) onUpdate();else if (defaultControls) defaultControls.update();
82
- invalidate();
83
- };
84
-
64
+ }, [defaultControls, mainCamera, onTarget, invalidate]);
85
65
  React.useEffect(() => {
86
66
  if (scene.background) {
87
67
  //Interchange the actual scene background with the virtual scene
@@ -92,33 +72,44 @@ const GizmoHelper = ({
92
72
 
93
73
  return () => {
94
74
  // reset on unmount
95
- if (backgroundRef.current) {
96
- scene.background = backgroundRef.current;
97
- }
75
+ if (backgroundRef.current) scene.background = backgroundRef.current;
98
76
  };
99
77
  }, []);
78
+ useFrame((_, delta) => {
79
+ if (virtualCam.current && gizmoRef.current) {
80
+ var _gizmoRef$current;
100
81
 
101
- const beforeRender = () => {
102
- var _gizmoRef$current;
82
+ // Animate step
83
+ if (animating.current) {
84
+ if (q1.angleTo(q2) < 0.01) {
85
+ animating.current = false;
86
+ } else {
87
+ const step = delta * turnRate; // animate position by doing a slerp and then scaling the position on the unit sphere
103
88
 
104
- // Sync gizmo with main camera orientation
105
- matrix.copy(mainCamera.matrix).invert();
106
- (_gizmoRef$current = gizmoRef.current) == null ? void 0 : _gizmoRef$current.quaternion.setFromRotationMatrix(matrix);
107
- };
89
+ q1.rotateTowards(q2, step); // animate orientation
108
90
 
109
- useFrame((_, delta) => {
110
- if (virtualCam.current && gizmoRef.current) {
111
- animateStep(delta);
112
- beforeRender();
113
- gl.autoClear = false;
91
+ mainCamera.position.set(0, 0, 1).applyQuaternion(q1).multiplyScalar(radius.current).add(focusPoint.current);
92
+ mainCamera.up.set(0, 1, 0).applyQuaternion(q1).normalize();
93
+ mainCamera.quaternion.copy(q1);
94
+ if (onUpdate) onUpdate();else if (defaultControls) defaultControls.update();
95
+ invalidate();
96
+ }
97
+ } // Sync Gizmo with main camera orientation
98
+
99
+
100
+ matrix.copy(mainCamera.matrix).invert();
101
+ (_gizmoRef$current = gizmoRef.current) == null ? void 0 : _gizmoRef$current.quaternion.setFromRotationMatrix(matrix); // Render virtual camera
102
+
103
+ if (autoClear) gl.autoClear = false;
114
104
  gl.clearDepth();
115
105
  gl.render(virtualScene, virtualCam.current);
116
106
  }
117
107
  }, renderPriority);
118
- const gizmoHelperContext = {
108
+ const raycast = useCamera(virtualCam);
109
+ const gizmoHelperContext = React.useMemo(() => ({
119
110
  tweenCamera,
120
- raycast: useCamera(virtualCam)
121
- }; // Position gizmo component within scene
111
+ raycast
112
+ }), [tweenCamera]); // Position gizmo component within scene
122
113
 
123
114
  const [marginX, marginY] = margin;
124
115
  const x = alignment.endsWith('-left') ? -size.width / 2 + marginX : size.width / 2 - marginX;
@@ -127,7 +118,6 @@ const GizmoHelper = ({
127
118
  value: gizmoHelperContext
128
119
  }, /*#__PURE__*/React.createElement(OrthographicCamera, {
129
120
  ref: virtualCam,
130
- makeDefault: false,
131
121
  position: [0, 0, 200]
132
122
  }), /*#__PURE__*/React.createElement("group", {
133
123
  ref: gizmoRef,
package/core/Image.cjs.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("react"),n=require("three"),t=require("@react-three/fiber"),a=require("./shaderMaterial.cjs.js"),o=require("./useTexture.cjs.js");function c(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(n){if("default"!==n){var t=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(r,n,t.get?t:{enumerable:!0,get:function(){return e[n]}})}})),r.default=e,Object.freeze(r)}var s=c(e),l=i(r),u=i(n);const v=a.shaderMaterial({color:new u.Color("white"),scale:[1,1],imageBounds:[1,1],map:null,zoom:1,grayscale:0},"\n varying vec2 vUv;\n void main() {\n gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.);\n vUv = uv;\n }\n","\n // mostly from https://gist.github.com/statico/df64c5d167362ecf7b34fca0b1459a44\n varying vec2 vUv;\n uniform vec2 scale;\n uniform vec2 imageBounds;\n uniform vec3 color;\n uniform sampler2D map;\n uniform float zoom;\n uniform float grayscale;\n const vec3 luma = vec3(.299, 0.587, 0.114);\n vec4 toGrayscale(vec4 color, float intensity) {\n return vec4(mix(color.rgb, vec3(dot(color.rgb, luma)), intensity), color.a);\n }\n vec2 aspect(vec2 size) {\n return size / min(size.x, size.y);\n }\n void main() {\n vec2 s = aspect(scale);\n vec2 i = aspect(imageBounds);\n float rs = s.x / s.y;\n float ri = i.x / i.y;\n vec2 new = rs < ri ? vec2(i.x * s.y / i.y, s.y) : vec2(s.x, i.y * s.x / i.x);\n vec2 offset = (rs < ri ? vec2((new.x - s.x) / 2.0, 0.0) : vec2(0.0, (new.y - s.y) / 2.0)) / new;\n vec2 uv = vUv * s / new + offset;\n vec2 zUv = (uv - vec2(0.5, 0.5)) / zoom + vec2(0.5, 0.5);\n gl_FragColor = toGrayscale(texture2D(map, zUv) * vec4(color, 1.0), grayscale);\n }\n"),m=l.forwardRef((({children:e,color:r,segments:n=1,scale:a=1,zoom:c=1,grayscale:i=0,url:u,...m},f)=>{t.extend({ImageMaterial:v});const g=o.useTexture(u),y=Array.isArray(a)?[a[0],a[1]]:[a,a],d=[g.image.width,g.image.height];return l.createElement("mesh",s.default({ref:f,scale:a},m),l.createElement("planeGeometry",{args:[1,1,n,n]}),l.createElement("imageMaterial",{color:r,map:g,zoom:c,grayscale:i,scale:y,imageBounds:d}),e)}));exports.Image=m;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("react"),n=require("three"),t=require("@react-three/fiber"),a=require("./shaderMaterial.cjs.js"),o=require("./useTexture.cjs.js");function c(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(n){if("default"!==n){var t=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(r,n,t.get?t:{enumerable:!0,get:function(){return e[n]}})}})),r.default=e,Object.freeze(r)}var s=c(e),l=i(r),u=i(n);const v=a.shaderMaterial({color:new u.Color("white"),scale:[1,1],imageBounds:[1,1],map:null,zoom:1,grayscale:0},"\n varying vec2 vUv;\n void main() {\n gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.);\n vUv = uv;\n }\n","\n // mostly from https://gist.github.com/statico/df64c5d167362ecf7b34fca0b1459a44\n varying vec2 vUv;\n uniform vec2 scale;\n uniform vec2 imageBounds;\n uniform vec3 color;\n uniform sampler2D map;\n uniform float zoom;\n uniform float grayscale;\n const vec3 luma = vec3(.299, 0.587, 0.114);\n vec4 toGrayscale(vec4 color, float intensity) {\n return vec4(mix(color.rgb, vec3(dot(color.rgb, luma)), intensity), color.a);\n }\n vec2 aspect(vec2 size) {\n return size / min(size.x, size.y);\n }\n void main() {\n vec2 s = aspect(scale);\n vec2 i = aspect(imageBounds);\n float rs = s.x / s.y;\n float ri = i.x / i.y;\n vec2 new = rs < ri ? vec2(i.x * s.y / i.y, s.y) : vec2(s.x, i.y * s.x / i.x);\n vec2 offset = (rs < ri ? vec2((new.x - s.x) / 2.0, 0.0) : vec2(0.0, (new.y - s.y) / 2.0)) / new;\n vec2 uv = vUv * s / new + offset;\n vec2 zUv = (uv - vec2(0.5, 0.5)) / zoom + vec2(0.5, 0.5);\n gl_FragColor = toGrayscale(texture2D(map, zUv) * vec4(color, 1.0), grayscale);\n \n #include <tonemapping_fragment>\n #include <encodings_fragment>\n }\n"),m=l.forwardRef((({children:e,color:r,segments:n=1,scale:a=1,zoom:c=1,grayscale:i=0,url:u,toneMapped:m,...f},g)=>{t.extend({ImageMaterial:v});const d=o.useTexture(u),y=Array.isArray(a)?[a[0],a[1]]:[a,a],p=[d.image.width,d.image.height];return l.createElement("mesh",s.default({ref:g,scale:a},f),l.createElement("planeGeometry",{args:[1,1,n,n]}),l.createElement("imageMaterial",{color:r,map:d,zoom:c,grayscale:i,scale:y,imageBounds:p,toneMapped:m}),e)}));exports.Image=m;
package/core/Image.d.ts CHANGED
@@ -3,10 +3,11 @@ import * as THREE from 'three';
3
3
  import { Color } from '@react-three/fiber';
4
4
  export declare type ImageProps = JSX.IntrinsicElements['mesh'] & {
5
5
  segments?: number;
6
- scale?: number;
6
+ scale?: number | [number, number];
7
7
  color?: Color;
8
8
  zoom?: number;
9
9
  grayscale?: number;
10
+ toneMapped?: boolean;
10
11
  url: string;
11
12
  };
12
13
  declare type ImageMaterialType = JSX.IntrinsicElements['shaderMaterial'] & {
@@ -44,10 +45,11 @@ export declare const Image: React.ForwardRefExoticComponent<Pick<Omit<import("@r
44
45
  dispose?: (() => void) | null | undefined;
45
46
  } & import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers & {
46
47
  segments?: number | undefined;
47
- scale?: number | undefined;
48
+ scale?: number | [number, number] | undefined;
48
49
  color?: Color | undefined;
49
50
  zoom?: number | undefined;
50
51
  grayscale?: number | undefined;
52
+ toneMapped?: boolean | undefined;
51
53
  url: string;
52
- }, "visible" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "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 | "zoom" | "material" | "url" | "geometry" | "morphTargetInfluences" | "morphTargetDictionary" | "isMesh" | "updateMorphTargets" | "segments" | "grayscale"> & React.RefAttributes<THREE.Mesh<THREE.BufferGeometry, THREE.Material | THREE.Material[]>>>;
54
+ }, "visible" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "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 | "zoom" | "material" | "url" | "toneMapped" | "geometry" | "morphTargetInfluences" | "morphTargetDictionary" | "isMesh" | "updateMorphTargets" | "segments" | "grayscale"> & React.RefAttributes<THREE.Mesh<THREE.BufferGeometry, THREE.Material | THREE.Material[]>>>;
53
55
  export {};
package/core/Image.js CHANGED
@@ -48,6 +48,9 @@ const ImageMaterialImpl = shaderMaterial({
48
48
  vec2 uv = vUv * s / new + offset;
49
49
  vec2 zUv = (uv - vec2(0.5, 0.5)) / zoom + vec2(0.5, 0.5);
50
50
  gl_FragColor = toGrayscale(texture2D(map, zUv) * vec4(color, 1.0), grayscale);
51
+
52
+ #include <tonemapping_fragment>
53
+ #include <encodings_fragment>
51
54
  }
52
55
  `);
53
56
  const Image = /*#__PURE__*/React.forwardRef(({
@@ -58,6 +61,7 @@ const Image = /*#__PURE__*/React.forwardRef(({
58
61
  zoom = 1,
59
62
  grayscale = 0,
60
63
  url,
64
+ toneMapped,
61
65
  ...props
62
66
  }, ref) => {
63
67
  extend({
@@ -77,7 +81,8 @@ const Image = /*#__PURE__*/React.forwardRef(({
77
81
  zoom: zoom,
78
82
  grayscale: grayscale,
79
83
  scale: planeBounds,
80
- imageBounds: imageBounds
84
+ imageBounds: imageBounds,
85
+ toneMapped: toneMapped
81
86
  }), children);
82
87
  });
83
88
 
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react"),n=require("@react-three/fiber"),a=require("react-merge-refs"),c=require("react-composer"),u=require("../helpers/Position.cjs.js");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function i(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 s=o(e),l=i(t),f=i(r),d=o(a),m=o(c);let y,p;const x=f.createContext(null),g=new l.Matrix4,b=new l.Matrix4,h=new l.Matrix4,M=new l.Color,w=new l.Vector3,A=new l.Quaternion,E=new l.Vector3,j=f.forwardRef((({context:e,children:t,...r},a)=>{f.useMemo((()=>n.extend({Position:u.Position})),[]);const c=f.useRef(),{subscribe:o,getParent:i}=f.useContext(e||x);return f.useLayoutEffect((()=>o(c)),[]),f.createElement("position",s.default({instance:i(),instanceKey:c,ref:d.default([a,c])},r),t)})),v=f.forwardRef((({children:e,range:t,limit:r=1e3,frames:a=1/0,...c},u)=>{const[{context:o,instance:i}]=f.useState((()=>{const e=f.createContext(null);return{context:e,instance:f.forwardRef(((t,r)=>f.createElement(j,s.default({context:e},t,{ref:r}))))}})),m=f.useRef(null),[v,O]=f.useState([]),[[P,q]]=f.useState((()=>{const e=new Float32Array(16*r);for(y=0;y<r;y++)h.identity().toArray(e,16*y);return[e,new Float32Array([...new Array(3*r)].map((()=>1)))]}));f.useLayoutEffect((()=>{m.current.count=m.current.instanceMatrix.updateRange.count=m.current.instanceColor.updateRange.count=Math.min(r,void 0!==t?t:r,v.length)}),[v,t]),f.useEffect((()=>{m.current.instanceMatrix.needsUpdate=!0}));let C=0;n.useFrame((()=>{if(a===1/0||C<a){for(m.current.updateMatrix(),m.current.updateMatrixWorld(),g.copy(m.current.matrixWorld).invert(),y=0;y<v.length;y++)p=v[y].current,p.matrixWorld.decompose(w,A,E),b.compose(w,A,E).premultiply(g),b.equals(h.fromArray(P,16*y))||(b.toArray(P,16*y),m.current.instanceMatrix.needsUpdate=!0),p.color.equals(M.fromArray(q,3*y))||(p.color.toArray(q,3*y),m.current.instanceColor.needsUpdate=!0);C++}}));const R=f.useMemo((()=>({getParent:()=>m,subscribe:e=>(O((t=>[...t,e])),()=>O((t=>t.filter((t=>t.current!==e.current)))))})),[]);return f.createElement("instancedMesh",s.default({userData:{instances:v},matrixAutoUpdate:!1,ref:d.default([u,m]),args:[null,null,0],raycast:()=>null},c),f.createElement("instancedBufferAttribute",{attach:"instanceMatrix",count:P.length/16,array:P,itemSize:16,usage:l.DynamicDrawUsage}),f.createElement("instancedBufferAttribute",{attach:"instanceColor",count:q.length/3,array:q,itemSize:3,usage:l.DynamicDrawUsage}),"function"==typeof e?f.createElement(o.Provider,{value:R},e(i)):f.createElement(x.Provider,{value:R},e))}));exports.Instance=j,exports.Instances=v,exports.Merged=function({meshes:e,children:t,...r}){const n=Array.isArray(e);if(!n)for(const t of Object.keys(e))e[t].isMesh||delete e[t];return f.createElement(m.default,{components:(n?e:Object.values(e)).map((({geometry:e,material:t})=>f.createElement(v,s.default({key:e.uuid,geometry:e,material:t},r))))},(r=>n?t(...r):t(Object.keys(e).filter((t=>e[t].isMesh)).reduce(((e,t,n)=>({...e,[t]:r[n]})),{}))))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react"),n=require("@react-three/fiber"),a=require("react-merge-refs"),c=require("react-composer"),u=require("../helpers/Position.cjs.js");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function i(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 s=o(e),l=i(t),f=i(r),d=o(a),m=o(c);let p,y;const x=f.createContext(null),g=new l.Matrix4,b=new l.Matrix4,h=new l.Matrix4;new l.Color;const M=new l.Vector3,w=new l.Quaternion,E=new l.Vector3,j=f.forwardRef((({context:e,children:t,...r},a)=>{f.useMemo((()=>n.extend({Position:u.Position})),[]);const c=f.useRef(),{subscribe:o,getParent:i}=f.useContext(e||x);return f.useLayoutEffect((()=>o(c)),[]),f.createElement("position",s.default({instance:i(),instanceKey:c,ref:d.default([a,c])},r),t)})),v=f.forwardRef((({children:e,range:t,limit:r=1e3,frames:a=1/0,...c},u)=>{const[{context:o,instance:i}]=f.useState((()=>{const e=f.createContext(null);return{context:e,instance:f.forwardRef(((t,r)=>f.createElement(j,s.default({context:e},t,{ref:r}))))}})),m=f.useRef(null),[v,A]=f.useState([]),[[O,P]]=f.useState((()=>{const e=new Float32Array(16*r);for(p=0;p<r;p++)h.identity().toArray(e,16*p);return[e,new Float32Array([...new Array(3*r)].map((()=>1)))]}));f.useLayoutEffect((()=>{m.current.count=m.current.instanceMatrix.updateRange.count=m.current.instanceColor.updateRange.count=Math.min(r,void 0!==t?t:r,v.length)}),[v,t]),f.useEffect((()=>{m.current.instanceMatrix.needsUpdate=!0}));let q=0;n.useFrame((()=>{if(a===1/0||q<a){for(m.current.updateMatrix(),m.current.updateMatrixWorld(),g.copy(m.current.matrixWorld).invert(),p=0;p<v.length;p++)y=v[p].current,y.matrixWorld.decompose(M,w,E),b.compose(M,w,E).premultiply(g),b.toArray(O,16*p),m.current.instanceMatrix.needsUpdate=!0,y.color.toArray(P,3*p),m.current.instanceColor.needsUpdate=!0;q++}}));const C=f.useMemo((()=>({getParent:()=>m,subscribe:e=>(A((t=>[...t,e])),()=>A((t=>t.filter((t=>t.current!==e.current)))))})),[]);return f.createElement("instancedMesh",s.default({userData:{instances:v},matrixAutoUpdate:!1,ref:d.default([u,m]),args:[null,null,0],raycast:()=>null},c),f.createElement("instancedBufferAttribute",{attach:"instanceMatrix",count:O.length/16,array:O,itemSize:16,usage:l.DynamicDrawUsage}),f.createElement("instancedBufferAttribute",{attach:"instanceColor",count:P.length/3,array:P,itemSize:3,usage:l.DynamicDrawUsage}),"function"==typeof e?f.createElement(o.Provider,{value:C},e(i)):f.createElement(x.Provider,{value:C},e))}));exports.Instance=j,exports.Instances=v,exports.Merged=function({meshes:e,children:t,...r}){const n=Array.isArray(e);if(!n)for(const t of Object.keys(e))e[t].isMesh||delete e[t];return f.createElement(m.default,{components:(n?e:Object.values(e)).map((({geometry:e,material:t})=>f.createElement(v,s.default({key:e.uuid,geometry:e,material:t},r))))},(r=>n?t(...r):t(Object.keys(e).filter((t=>e[t].isMesh)).reduce(((e,t,n)=>({...e,[t]:r[n]})),{}))))};
@@ -35,7 +35,7 @@ declare const Instance: React.ForwardRefExoticComponent<Pick<Omit<import("@react
35
35
  } & import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers & {
36
36
  context?: React.Context<Api> | undefined;
37
37
  }, "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 | "geometry" | "context" | "instance" | "instanceKey"> & React.RefAttributes<unknown>>;
38
- declare const Instances: React.ForwardRefExoticComponent<Pick<InstancesProps, "visible" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "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 | "range" | "material" | "geometry" | "morphTargetInfluences" | "morphTargetDictionary" | "isMesh" | "updateMorphTargets" | "instanceMatrix" | "frames" | "count" | "instanceColor" | "isInstancedMesh" | "getColorAt" | "getMatrixAt" | "setColorAt" | "setMatrixAt" | "limit"> & React.RefAttributes<InstancedMesh>>;
38
+ declare const Instances: React.ForwardRefExoticComponent<Pick<InstancesProps, "visible" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "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 | "range" | "material" | "geometry" | "morphTargetInfluences" | "morphTargetDictionary" | "isMesh" | "updateMorphTargets" | "instanceMatrix" | "count" | "frames" | "instanceColor" | "isInstancedMesh" | "getColorAt" | "getMatrixAt" | "setColorAt" | "setMatrixAt" | "limit"> & React.RefAttributes<InstancedMesh>>;
39
39
  declare function Merged({ meshes, children, ...props }: {
40
40
  [x: string]: any;
41
41
  meshes: any;
package/core/Instances.js CHANGED
@@ -11,7 +11,7 @@ const globalContext = /*#__PURE__*/React.createContext(null);
11
11
  const parentMatrix = new THREE.Matrix4();
12
12
  const instanceMatrix = new THREE.Matrix4();
13
13
  const tempMatrix = new THREE.Matrix4();
14
- const color = new THREE.Color();
14
+ new THREE.Color();
15
15
  const translation = new THREE.Vector3();
16
16
  const rotation = new THREE.Quaternion();
17
17
  const scale = new THREE.Vector3();
@@ -85,16 +85,10 @@ const Instances = /*#__PURE__*/React.forwardRef(({
85
85
 
86
86
  instanceRef.matrixWorld.decompose(translation, rotation, scale);
87
87
  instanceMatrix.compose(translation, rotation, scale).premultiply(parentMatrix);
88
-
89
- if (!instanceMatrix.equals(tempMatrix.fromArray(matrices, i * 16))) {
90
- instanceMatrix.toArray(matrices, i * 16);
91
- parentRef.current.instanceMatrix.needsUpdate = true;
92
- }
93
-
94
- if (!instanceRef.color.equals(color.fromArray(colors, i * 3))) {
95
- instanceRef.color.toArray(colors, i * 3);
96
- parentRef.current.instanceColor.needsUpdate = true;
97
- }
88
+ instanceMatrix.toArray(matrices, i * 16);
89
+ parentRef.current.instanceMatrix.needsUpdate = true;
90
+ instanceRef.color.toArray(colors, i * 3);
91
+ parentRef.current.instanceColor.needsUpdate = true;
98
92
  }
99
93
 
100
94
  count++;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("@react-three/fiber"),t=require("react"),a=require("three"),l=require("react-merge-refs");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function c(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 u=n(e),i=c(t),o=c(a),s=n(l);const f=i.forwardRef((({args:e,map:t,toneMapped:a=!1,color:l="white",form:n="rect",intensity:c=1,scale:f=1,target:m,children:p,...d},y)=>{const g=i.useRef(null);return i.useLayoutEffect((()=>{p||d.material||(r.applyProps(g.current.material,{color:l}),g.current.material.color.multiplyScalar(c))}),[l,c,p,d.material]),i.useLayoutEffect((()=>{m&&g.current.lookAt(Array.isArray(m)?new o.Vector3(...m):m)}),[m]),f=Array.isArray(f)&&2===f.length?[f[0],f[1],1]:f,i.createElement("mesh",u.default({ref:s.default([g,y]),scale:f},d),"circle"===n?i.createElement("ringGeometry",{args:[0,1,64]}):"ring"===n?i.createElement("ringGeometry",{args:[.5,1,64]}):"rect"===n?i.createElement("planeGeometry",null):i.createElement(n,{args:e}),p||(d.material?null:i.createElement("meshBasicMaterial",{toneMapped:a,map:t,side:o.DoubleSide})))}));exports.Lightformer=f;
@@ -0,0 +1,41 @@
1
+ import { ReactThreeFiber } from '@react-three/fiber';
2
+ import * as React from 'react';
3
+ import * as THREE from 'three';
4
+ export declare type LightProps = JSX.IntrinsicElements['mesh'] & {
5
+ args?: any[];
6
+ map?: THREE.Texture;
7
+ toneMapped?: boolean;
8
+ color?: ReactThreeFiber.Color;
9
+ form?: 'circle' | 'ring' | 'rect' | any;
10
+ scale?: number | [number, number, number] | [number, number];
11
+ intensity?: number;
12
+ target?: [number, number, number] | THREE.Vector3;
13
+ };
14
+ export declare const Lightformer: React.ForwardRefExoticComponent<Pick<Omit<ReactThreeFiber.ExtendedColors<ReactThreeFiber.Overwrite<Partial<THREE.Mesh<THREE.BufferGeometry, THREE.Material | THREE.Material[]>>, ReactThreeFiber.NodeProps<THREE.Mesh<THREE.BufferGeometry, THREE.Material | THREE.Material[]>, typeof THREE.Mesh>>>, ReactThreeFiber.NonFunctionKeys<{
15
+ position?: ReactThreeFiber.Vector3 | undefined;
16
+ up?: ReactThreeFiber.Vector3 | undefined;
17
+ scale?: ReactThreeFiber.Vector3 | undefined;
18
+ rotation?: ReactThreeFiber.Euler | undefined;
19
+ matrix?: ReactThreeFiber.Matrix4 | undefined;
20
+ quaternion?: ReactThreeFiber.Quaternion | undefined;
21
+ layers?: ReactThreeFiber.Layers | undefined;
22
+ dispose?: (() => void) | null | undefined;
23
+ }>> & {
24
+ position?: ReactThreeFiber.Vector3 | undefined;
25
+ up?: ReactThreeFiber.Vector3 | undefined;
26
+ scale?: ReactThreeFiber.Vector3 | undefined;
27
+ rotation?: ReactThreeFiber.Euler | undefined;
28
+ matrix?: ReactThreeFiber.Matrix4 | undefined;
29
+ quaternion?: ReactThreeFiber.Quaternion | undefined;
30
+ layers?: ReactThreeFiber.Layers | undefined;
31
+ dispose?: (() => void) | null | undefined;
32
+ } & import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers & {
33
+ args?: any[] | undefined;
34
+ map?: THREE.Texture | undefined;
35
+ toneMapped?: boolean | undefined;
36
+ color?: ReactThreeFiber.Color | undefined;
37
+ form?: 'circle' | 'ring' | 'rect' | any;
38
+ scale?: number | [number, number] | [number, number, number] | undefined;
39
+ intensity?: number | undefined;
40
+ target?: THREE.Vector3 | [number, number, number] | undefined;
41
+ }, "visible" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "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 | "form" | "map" | "material" | "target" | "toneMapped" | "geometry" | "morphTargetInfluences" | "morphTargetDictionary" | "isMesh" | "updateMorphTargets" | "intensity"> & React.RefAttributes<unknown>>;
@@ -0,0 +1,51 @@
1
+ import _extends from '@babel/runtime/helpers/esm/extends';
2
+ import { applyProps } from '@react-three/fiber';
3
+ import * as React from 'react';
4
+ import * as THREE from 'three';
5
+ import mergeRefs from 'react-merge-refs';
6
+
7
+ const Lightformer = /*#__PURE__*/React.forwardRef(({
8
+ args,
9
+ map,
10
+ toneMapped = false,
11
+ color = 'white',
12
+ form: Form = 'rect',
13
+ intensity = 1,
14
+ scale = 1,
15
+ target,
16
+ children,
17
+ ...props
18
+ }, forwardRef) => {
19
+ // Apply emissive power
20
+ const ref = React.useRef(null);
21
+ React.useLayoutEffect(() => {
22
+ if (!children && !props.material) {
23
+ applyProps(ref.current.material, {
24
+ color
25
+ });
26
+ ref.current.material.color.multiplyScalar(intensity);
27
+ }
28
+ }, [color, intensity, children, props.material]); // Target light
29
+
30
+ React.useLayoutEffect(() => {
31
+ if (target) ref.current.lookAt(Array.isArray(target) ? new THREE.Vector3(...target) : target);
32
+ }, [target]); // Fix 2-dimensional scale
33
+
34
+ scale = Array.isArray(scale) && scale.length === 2 ? [scale[0], scale[1], 1] : scale;
35
+ return /*#__PURE__*/React.createElement("mesh", _extends({
36
+ ref: mergeRefs([ref, forwardRef]),
37
+ scale: scale
38
+ }, props), Form === 'circle' ? /*#__PURE__*/React.createElement("ringGeometry", {
39
+ args: [0, 1, 64]
40
+ }) : Form === 'ring' ? /*#__PURE__*/React.createElement("ringGeometry", {
41
+ args: [0.5, 1, 64]
42
+ }) : Form === 'rect' ? /*#__PURE__*/React.createElement("planeGeometry", null) : /*#__PURE__*/React.createElement(Form, {
43
+ args: args
44
+ }), children ? children : !props.material ? /*#__PURE__*/React.createElement("meshBasicMaterial", {
45
+ toneMapped: toneMapped,
46
+ map: map,
47
+ side: THREE.DoubleSide
48
+ }) : null);
49
+ });
50
+
51
+ export { Lightformer };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("three"),a=require("@react-three/fiber"),n=require("react-merge-refs"),i=require("../materials/BlurPass.cjs.js"),o=require("../materials/MeshReflectorMaterial.cjs.js");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function l(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var a=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,a.get?a:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}require("../materials/ConvolutionMaterial.cjs.js");var u=s(e),d=l(t),c=s(n);a.extend({MeshReflectorMaterialImpl:o.MeshReflectorMaterial});const p=d.forwardRef((({mixBlur:e=0,mixStrength:t=1,resolution:n=256,blur:o=[0,0],minDepthThreshold:s=.9,maxDepthThreshold:l=1,depthScale:p=0,depthToBlurRatioBias:m=.25,mirror:h=0,debug:f=0,distortion:x=1,mixContrast:M=1,distortionMap:S,reflectorOffset:T=0,...b},y)=>{const w=a.useThree((({gl:e})=>e)),g=a.useThree((({camera:e})=>e)),R=a.useThree((({scene:e})=>e)),v=(o=Array.isArray(o)?o:[o,o])[0]+o[1]>0,j=d.useRef(null),[D]=d.useState((()=>new r.Plane)),[B]=d.useState((()=>new r.Vector3)),[_]=d.useState((()=>new r.Vector3)),[O]=d.useState((()=>new r.Vector3)),[P]=d.useState((()=>new r.Matrix4)),[U]=d.useState((()=>new r.Vector3(0,0,-1))),[E]=d.useState((()=>new r.Vector4)),[V]=d.useState((()=>new r.Vector3)),[W]=d.useState((()=>new r.Vector3)),[F]=d.useState((()=>new r.Vector4)),[q]=d.useState((()=>new r.Matrix4)),[I]=d.useState((()=>new r.PerspectiveCamera)),C=d.useCallback((()=>{var e;const t=j.current.parent||(null==(e=j.current)?void 0:e.__r3f.parent);if(!t)return;if(_.setFromMatrixPosition(t.matrixWorld),O.setFromMatrixPosition(g.matrixWorld),P.extractRotation(t.matrixWorld),B.set(0,0,1),B.applyMatrix4(P),_.addScaledVector(B,T),V.subVectors(_,O),V.dot(B)>0)return;V.reflect(B).negate(),V.add(_),P.extractRotation(g.matrixWorld),U.set(0,0,-1),U.applyMatrix4(P),U.add(O),W.subVectors(_,U),W.reflect(B).negate(),W.add(_),I.position.copy(V),I.up.set(0,1,0),I.up.applyMatrix4(P),I.up.reflect(B),I.lookAt(W),I.far=g.far,I.updateMatrixWorld(),I.projectionMatrix.copy(g.projectionMatrix),q.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),q.multiply(I.projectionMatrix),q.multiply(I.matrixWorldInverse),q.multiply(t.matrixWorld),D.setFromNormalAndCoplanarPoint(B,_),D.applyMatrix4(I.matrixWorldInverse),E.set(D.normal.x,D.normal.y,D.normal.z,D.constant);const r=I.projectionMatrix;F.x=(Math.sign(E.x)+r.elements[8])/r.elements[0],F.y=(Math.sign(E.y)+r.elements[9])/r.elements[5],F.z=-1,F.w=(1+r.elements[10])/r.elements[14],E.multiplyScalar(2/E.dot(F)),r.elements[2]=E.x,r.elements[6]=E.y,r.elements[10]=E.z+1,r.elements[14]=E.w}),[g,T]),[k,L,z,A]=d.useMemo((()=>{const a={minFilter:r.LinearFilter,magFilter:r.LinearFilter,encoding:w.outputEncoding},u=new r.WebGLRenderTarget(n,n,a);u.depthBuffer=!0,u.depthTexture=new r.DepthTexture(n,n),u.depthTexture.format=r.DepthFormat,u.depthTexture.type=r.UnsignedShortType;const d=new r.WebGLRenderTarget(n,n,a);return[u,d,new i.BlurPass({gl:w,resolution:n,width:o[0],height:o[1],minDepthThreshold:s,maxDepthThreshold:l,depthScale:p,depthToBlurRatioBias:m}),{mirror:h,textureMatrix:q,mixBlur:e,tDiffuse:u.texture,tDepth:u.depthTexture,tDiffuseBlur:d.texture,hasBlur:v,mixStrength:t,minDepthThreshold:s,maxDepthThreshold:l,depthScale:p,depthToBlurRatioBias:m,transparent:!0,debug:f,distortion:x,distortionMap:S,mixContrast:M,"defines-USE_BLUR":v?"":void 0,"defines-USE_DEPTH":p>0?"":void 0,"defines-USE_DISTORTION":S?"":void 0}]}),[w,o,q,n,h,v,e,t,s,l,p,m,f,x,S,M]);return a.useFrame((()=>{var e;const t=j.current.parent||(null==(e=j.current)?void 0:e.__r3f.parent);if(!t)return;t.visible=!1;const r=w.xr.enabled,a=w.shadowMap.autoUpdate;C(),w.xr.enabled=!1,w.shadowMap.autoUpdate=!1,w.setRenderTarget(k),w.state.buffers.depth.setMask(!0),w.autoClear||w.clear(),w.render(R,I),v&&z.render(w,k,L),w.xr.enabled=r,w.shadowMap.autoUpdate=a,t.visible=!0,w.setRenderTarget(null)})),d.createElement("meshReflectorMaterialImpl",u.default({attach:"material",key:"key"+A["defines-USE_BLUR"]+A["defines-USE_DEPTH"]+A["defines-USE_DISTORTION"],ref:c.default([j,y])},A,b))}));exports.MeshReflectorMaterial=p;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("three"),a=require("@react-three/fiber"),n=require("react-merge-refs"),o=require("../materials/BlurPass.cjs.js"),i=require("../materials/MeshReflectorMaterial.cjs.js");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function l(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var a=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,a.get?a:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}require("../materials/ConvolutionMaterial.cjs.js");var u=s(e),d=l(t),c=s(n);a.extend({MeshReflectorMaterialImpl:i.MeshReflectorMaterial});const p=d.forwardRef((({mixBlur:e=0,mixStrength:t=1,resolution:n=256,blur:i=[0,0],minDepthThreshold:s=.9,maxDepthThreshold:l=1,depthScale:p=0,depthToBlurRatioBias:m=.25,mirror:h=0,distortion:f=1,mixContrast:x=1,distortionMap:M,reflectorOffset:T=0,...S},y)=>{const w=a.useThree((({gl:e})=>e)),b=a.useThree((({camera:e})=>e)),g=a.useThree((({scene:e})=>e)),R=(i=Array.isArray(i)?i:[i,i])[0]+i[1]>0,v=d.useRef(null),[j]=d.useState((()=>new r.Plane)),[D]=d.useState((()=>new r.Vector3)),[B]=d.useState((()=>new r.Vector3)),[_]=d.useState((()=>new r.Vector3)),[O]=d.useState((()=>new r.Matrix4)),[P]=d.useState((()=>new r.Vector3(0,0,-1))),[U]=d.useState((()=>new r.Vector4)),[E]=d.useState((()=>new r.Vector3)),[V]=d.useState((()=>new r.Vector3)),[F]=d.useState((()=>new r.Vector4)),[W]=d.useState((()=>new r.Matrix4)),[q]=d.useState((()=>new r.PerspectiveCamera)),I=d.useCallback((()=>{var e;const t=v.current.parent||(null==(e=v.current)?void 0:e.__r3f.parent);if(!t)return;if(B.setFromMatrixPosition(t.matrixWorld),_.setFromMatrixPosition(b.matrixWorld),O.extractRotation(t.matrixWorld),D.set(0,0,1),D.applyMatrix4(O),B.addScaledVector(D,T),E.subVectors(B,_),E.dot(D)>0)return;E.reflect(D).negate(),E.add(B),O.extractRotation(b.matrixWorld),P.set(0,0,-1),P.applyMatrix4(O),P.add(_),V.subVectors(B,P),V.reflect(D).negate(),V.add(B),q.position.copy(E),q.up.set(0,1,0),q.up.applyMatrix4(O),q.up.reflect(D),q.lookAt(V),q.far=b.far,q.updateMatrixWorld(),q.projectionMatrix.copy(b.projectionMatrix),W.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),W.multiply(q.projectionMatrix),W.multiply(q.matrixWorldInverse),W.multiply(t.matrixWorld),j.setFromNormalAndCoplanarPoint(D,B),j.applyMatrix4(q.matrixWorldInverse),U.set(j.normal.x,j.normal.y,j.normal.z,j.constant);const r=q.projectionMatrix;F.x=(Math.sign(U.x)+r.elements[8])/r.elements[0],F.y=(Math.sign(U.y)+r.elements[9])/r.elements[5],F.z=-1,F.w=(1+r.elements[10])/r.elements[14],U.multiplyScalar(2/U.dot(F)),r.elements[2]=U.x,r.elements[6]=U.y,r.elements[10]=U.z+1,r.elements[14]=U.w}),[b,T]),[C,k,L,z]=d.useMemo((()=>{const a={minFilter:r.LinearFilter,magFilter:r.LinearFilter,encoding:w.outputEncoding,type:r.HalfFloatType},u=new r.WebGLRenderTarget(n,n,a);u.depthBuffer=!0,u.depthTexture=new r.DepthTexture(n,n),u.depthTexture.format=r.DepthFormat,u.depthTexture.type=r.UnsignedShortType;const d=new r.WebGLRenderTarget(n,n,a);return[u,d,new o.BlurPass({gl:w,resolution:n,width:i[0],height:i[1],minDepthThreshold:s,maxDepthThreshold:l,depthScale:p,depthToBlurRatioBias:m}),{mirror:h,textureMatrix:W,mixBlur:e,tDiffuse:u.texture,tDepth:u.depthTexture,tDiffuseBlur:d.texture,hasBlur:R,mixStrength:t,minDepthThreshold:s,maxDepthThreshold:l,depthScale:p,depthToBlurRatioBias:m,transparent:!0,distortion:f,distortionMap:M,mixContrast:x,"defines-USE_BLUR":R?"":void 0,"defines-USE_DEPTH":p>0?"":void 0,"defines-USE_DISTORTION":M?"":void 0}]}),[w,i,W,n,h,R,e,t,s,l,p,m,f,M,x]);return a.useFrame((()=>{var e;const t=v.current.parent||(null==(e=v.current)?void 0:e.__r3f.parent);if(!t)return;t.visible=!1;const r=w.xr.enabled,a=w.shadowMap.autoUpdate;I(),w.xr.enabled=!1,w.shadowMap.autoUpdate=!1,w.setRenderTarget(C),w.state.buffers.depth.setMask(!0),w.autoClear||w.clear(),w.render(g,q),R&&L.render(w,C,k),w.xr.enabled=r,w.shadowMap.autoUpdate=a,t.visible=!0,w.setRenderTarget(null)})),d.createElement("meshReflectorMaterialImpl",u.default({attach:"material",key:"key"+z["defines-USE_BLUR"]+z["defines-USE_DEPTH"]+z["defines-USE_DISTORTION"],ref:c.default([v,y])},z,S))}));exports.MeshReflectorMaterial=p;
@@ -11,7 +11,6 @@ export declare type Props = JSX.IntrinsicElements['meshStandardMaterial'] & {
11
11
  maxDepthThreshold?: number;
12
12
  depthScale?: number;
13
13
  depthToBlurRatioBias?: number;
14
- debug?: number;
15
14
  distortionMap?: Texture;
16
15
  distortion?: number;
17
16
  mixContrast?: number;
@@ -24,4 +23,4 @@ declare global {
24
23
  }
25
24
  }
26
25
  }
27
- export declare const MeshReflectorMaterial: React.ForwardRefExoticComponent<Pick<Props, "attach" | "args" | "children" | "key" | "onUpdate" | "blur" | "resolution" | keyof import("three").MeshStandardMaterial | "minDepthThreshold" | "maxDepthThreshold" | "depthScale" | "depthToBlurRatioBias" | "mixBlur" | "mixStrength" | "mirror" | "debug" | "distortion" | "mixContrast" | "distortionMap" | "reflectorOffset"> & React.RefAttributes<MeshReflectorMaterialImpl>>;
26
+ export declare const MeshReflectorMaterial: React.ForwardRefExoticComponent<Pick<Props, "attach" | "args" | "children" | "key" | "onUpdate" | "blur" | "resolution" | keyof import("three").MeshStandardMaterial | "minDepthThreshold" | "maxDepthThreshold" | "depthScale" | "depthToBlurRatioBias" | "mixBlur" | "mixStrength" | "mirror" | "distortion" | "mixContrast" | "distortionMap" | "reflectorOffset"> & React.RefAttributes<MeshReflectorMaterialImpl>>;
@@ -1,6 +1,6 @@
1
1
  import _extends from '@babel/runtime/helpers/esm/extends';
2
2
  import * as React from 'react';
3
- import { Plane, Vector3, Matrix4, Vector4, PerspectiveCamera, LinearFilter, WebGLRenderTarget, DepthTexture, DepthFormat, UnsignedShortType } from 'three';
3
+ import { Plane, Vector3, Matrix4, Vector4, PerspectiveCamera, LinearFilter, HalfFloatType, WebGLRenderTarget, DepthTexture, DepthFormat, UnsignedShortType } from 'three';
4
4
  import { extend, useThree, useFrame } from '@react-three/fiber';
5
5
  import mergeRefs from 'react-merge-refs';
6
6
  import { BlurPass } from '../materials/BlurPass.js';
@@ -19,7 +19,6 @@ const MeshReflectorMaterial = /*#__PURE__*/React.forwardRef(({
19
19
  depthScale = 0,
20
20
  depthToBlurRatioBias = 0.25,
21
21
  mirror = 0,
22
- debug = 0,
23
22
  distortion = 1,
24
23
  mixContrast = 1,
25
24
  distortionMap,
@@ -110,7 +109,8 @@ const MeshReflectorMaterial = /*#__PURE__*/React.forwardRef(({
110
109
  const parameters = {
111
110
  minFilter: LinearFilter,
112
111
  magFilter: LinearFilter,
113
- encoding: gl.outputEncoding
112
+ encoding: gl.outputEncoding,
113
+ type: HalfFloatType
114
114
  };
115
115
  const fbo1 = new WebGLRenderTarget(resolution, resolution, parameters);
116
116
  fbo1.depthBuffer = true;
@@ -142,7 +142,6 @@ const MeshReflectorMaterial = /*#__PURE__*/React.forwardRef(({
142
142
  depthScale,
143
143
  depthToBlurRatioBias,
144
144
  transparent: true,
145
- debug,
146
145
  distortion,
147
146
  distortionMap,
148
147
  mixContrast,
@@ -151,7 +150,7 @@ const MeshReflectorMaterial = /*#__PURE__*/React.forwardRef(({
151
150
  'defines-USE_DISTORTION': distortionMap ? '' : undefined
152
151
  };
153
152
  return [fbo1, fbo2, blurpass, reflectorProps];
154
- }, [gl, blur, textureMatrix, resolution, mirror, hasBlur, mixBlur, mixStrength, minDepthThreshold, maxDepthThreshold, depthScale, depthToBlurRatioBias, debug, distortion, distortionMap, mixContrast]);
153
+ }, [gl, blur, textureMatrix, resolution, mirror, hasBlur, mixBlur, mixStrength, minDepthThreshold, maxDepthThreshold, depthScale, depthToBlurRatioBias, distortion, distortionMap, mixContrast]);
155
154
  useFrame(() => {
156
155
  var _materialRef$current2;
157
156
 
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),r=require("react"),n=require("three-stdlib");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function s(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var a=o(e),u=s(r);const c=r.forwardRef((({makeDefault:e,camera:o,regress:s,domElement:c,enableDamping:i=!0,onChange:d,onStart:l,onEnd:f,...b},m)=>{const v=t.useThree((({invalidate:e})=>e)),p=t.useThree((({camera:e})=>e)),h=t.useThree((({gl:e})=>e)),E=t.useThree((({events:e})=>e)),g=t.useThree((({set:e})=>e)),O=t.useThree((({get:e})=>e)),j=t.useThree((({performance:e})=>e)),T=o||p,y=c||("boolean"!=typeof E.connected?E.connected:h.domElement),L=r.useMemo((()=>new n.OrbitControls(T)),[T]);return t.useFrame((()=>{L.enabled&&L.update()})),r.useEffect((()=>{const e=e=>{v(),s&&j.regress(),d&&d(e)};return L.connect(y),L.addEventListener("change",e),l&&L.addEventListener("start",l),f&&L.addEventListener("end",f),()=>{L.removeEventListener("change",e),l&&L.removeEventListener("start",l),f&&L.removeEventListener("end",f),L.dispose()}}),[y,d,l,f,s,L,v]),r.useEffect((()=>{if(e){const e=O().controls;return g({controls:L}),()=>g({controls:e})}}),[e,L]),u.createElement("primitive",a.default({ref:m,object:L,enableDamping:i},b))}));exports.OrbitControls=c;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),r=require("react"),n=require("three-stdlib");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var a=s(e),u=o(r);const c=u.forwardRef((({makeDefault:e,camera:r,regress:s,domElement:o,enableDamping:c=!0,onChange:i,onStart:f,onEnd:d,...l},m)=>{const b=t.useThree((e=>e.invalidate)),v=t.useThree((e=>e.camera)),h=t.useThree((e=>e.gl)),p=t.useThree((e=>e.events)),E=t.useThree((e=>e.set)),g=t.useThree((e=>e.get)),O=t.useThree((e=>e.performance)),j=r||v,T=o||p.connected||h.domElement,L=u.useMemo((()=>new n.OrbitControls(j)),[j]);return t.useFrame((()=>{L.enabled&&L.update()})),u.useEffect((()=>(L.connect(T),()=>{L.dispose()})),[T,s,L,b]),u.useEffect((()=>{const e=e=>{b(),s&&O.regress(),i&&i(e)};return L.addEventListener("change",e),f&&L.addEventListener("start",f),d&&L.addEventListener("end",d),()=>{f&&L.removeEventListener("start",f),d&&L.removeEventListener("end",d),L.removeEventListener("change",e)}}),[i,f,d]),u.useEffect((()=>{if(e){const e=g().controls;return E({controls:L}),()=>E({controls:e})}}),[e,L]),u.createElement("primitive",a.default({ref:m,object:L,enableDamping:c},l))}));exports.OrbitControls=c;