@react-three/drei 9.51.7 → 9.51.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1490,13 +1490,13 @@ type MeshTransmissionMaterialProps = {
1490
1490
  roughness?: number
1491
1491
  /** RGB color shift, default: 0.3 */
1492
1492
  rgbShift?: number
1493
- /** RGB shift noise, default: 0.03 */
1493
+ /** Noise, default: 0.03 */
1494
1494
  noise?: number
1495
1495
  /** Color saturation, default: 1 */
1496
1496
  saturation?: number
1497
1497
  /** Color contrast, default: 1 */
1498
1498
  contrast?: number
1499
- /** Resolution of the local buffer, default: undefined (full canvas width/height) */
1499
+ /** Resolution of the local buffer, default: 1024 */
1500
1500
  resolution?: number
1501
1501
  /** Refraction samples, default: 10 */
1502
1502
  samples?: number
@@ -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"),require("./useFBO.cjs.js");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,autoClear:g=!0,onUpdate:b,onTarget:y,children:w})=>{const j=r.useThree((({size:e})=>e)),C=r.useThree((({camera:e})=>e)),q=r.useThree((({controls:e})=>e)),v=r.useThree((({gl:e})=>e)),O=r.useThree((({scene:e})=>e)),x=r.useThree((({invalidate:e})=>e)),T=o.useRef(),k=o.useRef(),P=o.useRef(null),[R]=o.useState((()=>new t.Scene)),E=o.useRef(!1),M=o.useRef(0),z=o.useRef(new t.Vector3(0,0,0)),Q=o.useRef(new t.Vector3(0,0,0));o.useEffect((()=>{Q.current.copy(C.up)}),[C]);const S=o.useCallback((e=>{E.current=!0,(q||y)&&(z.current=(null==q?void 0:q.target)||(null==y?void 0:y())),M.current=C.position.distanceTo(f),p.copy(C.quaternion),h.copy(e).multiplyScalar(M.current).add(f),s.lookAt(h),d.copy(s.quaternion),x()}),[q,C,y,x]);o.useEffect((()=>(O.background&&(T.current=O.background,O.background=null,R.background=T.current),()=>{T.current&&(O.background=T.current)})),[]),r.useFrame(((e,r)=>{if(P.current&&k.current){var t;if(E.current)if(p.angleTo(d)<.01)E.current=!1,"minPolarAngle"in q&&C.up.copy(Q.current);else{const e=r*i;p.rotateTowards(d,e),C.position.set(0,0,1).applyQuaternion(p).multiplyScalar(M.current).add(z.current),C.up.set(0,1,0).applyQuaternion(p).normalize(),C.quaternion.copy(p),b?b():q&&q.update(),x()}l.copy(C.matrix).invert(),null==(t=k.current)||t.quaternion.setFromRotationMatrix(l);const e=v.autoClear;g&&(v.autoClear=!1),v.clearDepth(),v.render(R,P.current),v.autoClear=e}}),m);const V=u.useCamera(P),W=o.useMemo((()=>({tweenCamera:S,raycast:V})),[S]),[_,D]=a,F=e.endsWith("-center")?0:e.endsWith("-left")?-j.width/2+_:j.width/2-_,A=e.startsWith("center-")?0:e.startsWith("top-")?j.height/2-D:-j.height/2+D;return r.createPortal(o.createElement(c.Provider,{value:W},o.createElement(n.OrthographicCamera,{ref:P,position:[0,0,200]}),o.createElement("group",{ref:k,position:[F,A,0]},w)),R)},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"),o=require("./Hud.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"),require("./useFBO.cjs.js");var i=u(e);const a=i.createContext({}),c=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=1,onUpdate:y,onTarget:g,children:b})=>{const j=r.useThree((e=>e.size)),w=r.useThree((e=>e.camera)),q=r.useThree((e=>e.controls)),v=r.useThree((e=>e.invalidate)),O=i.useRef(),x=i.useRef(null),P=i.useRef(!1),T=i.useRef(0),C=i.useRef(new t.Vector3(0,0,0)),R=i.useRef(new t.Vector3(0,0,0));i.useEffect((()=>{R.current.copy(w.up)}),[w]);const E=i.useCallback((e=>{P.current=!0,(q||g)&&(C.current=(null==q?void 0:q.target)||(null==g?void 0:g())),T.current=w.position.distanceTo(f),p.copy(w.quaternion),h.copy(e).multiplyScalar(T.current).add(f),s.lookAt(h),d.copy(s.quaternion),v()}),[q,w,g,v]);r.useFrame(((e,r)=>{if(x.current&&O.current){var t;if(P.current)if(p.angleTo(d)<.01)P.current=!1,"minPolarAngle"in q&&w.up.copy(R.current);else{const e=r*c;p.rotateTowards(d,e),w.position.set(0,0,1).applyQuaternion(p).multiplyScalar(T.current).add(C.current),w.up.set(0,1,0).applyQuaternion(p).normalize(),w.quaternion.copy(p),y?y():q&&q.update(),v()}l.copy(w.matrix).invert(),null==(t=O.current)||t.quaternion.setFromRotationMatrix(l)}}));const M=i.useMemo((()=>({tweenCamera:E})),[E]),[z,k]=u,Q=e.endsWith("-center")?0:e.endsWith("-left")?-j.width/2+z:j.width/2-z,V=e.startsWith("center-")?0:e.startsWith("top-")?j.height/2-k:-j.height/2+k;return i.createElement(o.Hud,{renderPriority:m},i.createElement(a.Provider,{value:M},i.createElement(n.OrthographicCamera,{makeDefault:!0,ref:x,position:[0,0,200]}),i.createElement("group",{ref:O,position:[Q,V,0]},b)))},exports.useGizmoContext=()=>i.useContext(a);
@@ -1,7 +1,6 @@
1
- import { Intersection, Raycaster, Vector3 } from 'three';
1
+ import { Vector3 } from 'three';
2
2
  declare type GizmoHelperContext = {
3
3
  tweenCamera: (direction: Vector3) => void;
4
- raycast: (raycaster: Raycaster, intersects: Intersection[]) => void;
5
4
  };
6
5
  export declare const useGizmoContext: () => GizmoHelperContext;
7
6
  export declare type GizmoHelperProps = JSX.IntrinsicElements['group'] & {
@@ -12,5 +11,5 @@ export declare type GizmoHelperProps = JSX.IntrinsicElements['group'] & {
12
11
  onUpdate?: () => void;
13
12
  onTarget?: () => Vector3;
14
13
  };
15
- export declare const GizmoHelper: ({ alignment, margin, renderPriority, autoClear, onUpdate, onTarget, children: GizmoHelperComponent, }: GizmoHelperProps) => any;
14
+ export declare const GizmoHelper: ({ alignment, margin, renderPriority, onUpdate, onTarget, children, }: GizmoHelperProps) => any;
16
15
  export {};
@@ -1,8 +1,8 @@
1
1
  import * as React from 'react';
2
- import { useThree, useFrame, createPortal } from '@react-three/fiber';
3
- import { Object3D, Matrix4, Quaternion, Vector3, Scene } from 'three';
2
+ import { useThree, useFrame } from '@react-three/fiber';
3
+ import { Object3D, Matrix4, Quaternion, Vector3 } from 'three';
4
4
  import { OrthographicCamera } from './OrthographicCamera.js';
5
- import { useCamera } from './useCamera.js';
5
+ import { Hud } from './Hud.js';
6
6
 
7
7
  const Context = /*#__PURE__*/React.createContext({});
8
8
  const useGizmoContext = () => {
@@ -23,35 +23,18 @@ const isOrbitControls = controls => {
23
23
  const GizmoHelper = ({
24
24
  alignment = 'bottom-right',
25
25
  margin = [80, 80],
26
- renderPriority = 0,
27
- autoClear = true,
26
+ renderPriority = 1,
28
27
  onUpdate,
29
28
  onTarget,
30
- children: GizmoHelperComponent
29
+ children
31
30
  }) => {
32
- const size = useThree(({
33
- size
34
- }) => size);
35
- const mainCamera = useThree(({
36
- camera
37
- }) => camera); // @ts-expect-error new in @react-three/fiber@7.0.5
31
+ const size = useThree(state => state.size);
32
+ const mainCamera = useThree(state => state.camera); // @ts-ignore
38
33
 
39
- const defaultControls = useThree(({
40
- controls
41
- }) => controls);
42
- const gl = useThree(({
43
- gl
44
- }) => gl);
45
- const scene = useThree(({
46
- scene
47
- }) => scene);
48
- const invalidate = useThree(({
49
- invalidate
50
- }) => invalidate);
51
- const backgroundRef = React.useRef();
34
+ const defaultControls = useThree(state => state.controls);
35
+ const invalidate = useThree(state => state.invalidate);
52
36
  const gizmoRef = React.useRef();
53
37
  const virtualCam = React.useRef(null);
54
- const [virtualScene] = React.useState(() => new Scene());
55
38
  const animating = React.useRef(false);
56
39
  const radius = React.useRef(0);
57
40
  const focusPoint = React.useRef(new Vector3(0, 0, 0));
@@ -71,19 +54,6 @@ const GizmoHelper = ({
71
54
  q2.copy(dummy.quaternion);
72
55
  invalidate();
73
56
  }, [defaultControls, mainCamera, onTarget, invalidate]);
74
- React.useEffect(() => {
75
- if (scene.background) {
76
- //Interchange the actual scene background with the virtual scene
77
- backgroundRef.current = scene.background;
78
- scene.background = null;
79
- virtualScene.background = backgroundRef.current;
80
- }
81
-
82
- return () => {
83
- // reset on unmount
84
- if (backgroundRef.current) scene.background = backgroundRef.current;
85
- };
86
- }, []);
87
57
  useFrame((_, delta) => {
88
58
  if (virtualCam.current && gizmoRef.current) {
89
59
  var _gizmoRef$current;
@@ -113,33 +83,28 @@ const GizmoHelper = ({
113
83
 
114
84
 
115
85
  matrix.copy(mainCamera.matrix).invert();
116
- (_gizmoRef$current = gizmoRef.current) == null ? void 0 : _gizmoRef$current.quaternion.setFromRotationMatrix(matrix); // Render virtual camera
117
-
118
- const oldClear = gl.autoClear;
119
- if (autoClear) gl.autoClear = false;
120
- gl.clearDepth();
121
- gl.render(virtualScene, virtualCam.current);
122
- gl.autoClear = oldClear;
86
+ (_gizmoRef$current = gizmoRef.current) == null ? void 0 : _gizmoRef$current.quaternion.setFromRotationMatrix(matrix);
123
87
  }
124
- }, renderPriority);
125
- const raycast = useCamera(virtualCam);
88
+ });
126
89
  const gizmoHelperContext = React.useMemo(() => ({
127
- tweenCamera,
128
- raycast
90
+ tweenCamera
129
91
  }), [tweenCamera]); // Position gizmo component within scene
130
92
 
131
93
  const [marginX, marginY] = margin;
132
94
  const x = alignment.endsWith('-center') ? 0 : alignment.endsWith('-left') ? -size.width / 2 + marginX : size.width / 2 - marginX;
133
95
  const y = alignment.startsWith('center-') ? 0 : alignment.startsWith('top-') ? size.height / 2 - marginY : -size.height / 2 + marginY;
134
- return createPortal( /*#__PURE__*/React.createElement(Context.Provider, {
96
+ return /*#__PURE__*/React.createElement(Hud, {
97
+ renderPriority: renderPriority
98
+ }, /*#__PURE__*/React.createElement(Context.Provider, {
135
99
  value: gizmoHelperContext
136
100
  }, /*#__PURE__*/React.createElement(OrthographicCamera, {
101
+ makeDefault: true,
137
102
  ref: virtualCam,
138
103
  position: [0, 0, 200]
139
104
  }), /*#__PURE__*/React.createElement("group", {
140
105
  ref: gizmoRef,
141
106
  position: [x, y, 0]
142
- }, GizmoHelperComponent)), virtualScene);
107
+ }, children)));
143
108
  };
144
109
 
145
110
  export { GizmoHelper, useGizmoContext };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("@react-three/fiber"),o=require("./GizmoHelper.cjs.js"),a=require("three");function n(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 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)}require("./OrthographicCamera.cjs.js"),require("react-merge-refs"),require("./useFBO.cjs.js"),require("./useCamera.cjs.js");var s=n(e),c=i(t);const l="#f0f0f0",u="#999",p="black",m="black",f=["Right","Left","Top","Bottom","Front","Back"],h=e=>new a.Vector3(...e).multiplyScalar(.38),y=[[1,1,1],[1,1,-1],[1,-1,1],[1,-1,-1],[-1,1,1],[-1,1,-1],[-1,-1,1],[-1,-1,-1]].map(h),d=[.25,.25,.25],g=[[1,1,0],[1,0,1],[1,0,-1],[1,-1,0],[0,1,1],[0,1,-1],[0,-1,1],[0,-1,-1],[-1,1,0],[-1,0,1],[-1,0,-1],[-1,-1,0]].map(h),b=g.map((e=>e.toArray().map((e=>0==e?.5:.25)))),x=({hover:e,index:t,font:o="20px Inter var, Arial, sans-serif",faces:n=f,color:i=l,hoverColor:s=u,textColor:h=p,strokeColor:y=m,opacity:d=1})=>{const g=r.useThree((e=>e.gl)),b=c.useMemo((()=>{const e=document.createElement("canvas");e.width=128,e.height=128;const r=e.getContext("2d");return r.fillStyle=i,r.fillRect(0,0,e.width,e.height),r.strokeStyle=y,r.strokeRect(0,0,e.width,e.height),r.font=o,r.textAlign="center",r.fillStyle=h,r.fillText(n[t].toUpperCase(),64,76),new a.CanvasTexture(e)}),[t,n,o,i,h,y]);return c.createElement("meshLambertMaterial",{map:b,"map-encoding":g.outputEncoding,"map-anisotropy":g.capabilities.getMaxAnisotropy()||1,attach:`material-${t}`,color:e?s:"white",transparent:!0,opacity:d})},C=e=>{const{tweenCamera:t,raycast:r}=o.useGizmoContext(),[a,n]=c.useState(null);return c.createElement("mesh",{raycast:r,onPointerOut:e=>{e.stopPropagation(),n(null)},onPointerMove:e=>{e.stopPropagation(),n(Math.floor(e.faceIndex/2))},onClick:e.onClick||(e=>{e.stopPropagation(),t(e.face.normal)})},[...Array(6)].map(((t,r)=>c.createElement(x,s.default({key:r,index:r,hover:a===r},e)))),c.createElement("boxGeometry",null))},E=({onClick:e,dimensions:t,position:r,hoverColor:a=u})=>{const{tweenCamera:n,raycast:i}=o.useGizmoContext(),[s,l]=c.useState(!1);return c.createElement("mesh",{scale:1.01,position:r,raycast:i,onPointerOver:e=>{e.stopPropagation(),l(!0)},onPointerOut:e=>{e.stopPropagation(),l(!1)},onClick:e||(e=>{e.stopPropagation(),n(r)})},c.createElement("meshBasicMaterial",{color:s?a:"white",transparent:!0,opacity:.6,visible:s}),c.createElement("boxGeometry",{args:t}))};exports.GizmoViewcube=e=>c.createElement("group",{scale:[60,60,60]},c.createElement(C,e),g.map(((t,r)=>c.createElement(E,s.default({key:r,position:t,dimensions:b[r]},e)))),y.map(((t,r)=>c.createElement(E,s.default({key:r,position:t,dimensions:d},e)))),c.createElement("ambientLight",{intensity:.5}),c.createElement("pointLight",{position:[10,10,10],intensity:.5}));
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("@react-three/fiber"),o=require("./GizmoHelper.cjs.js"),n=require("three");function a(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 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)}require("./OrthographicCamera.cjs.js"),require("react-merge-refs"),require("./useFBO.cjs.js"),require("./Hud.cjs.js");var l=a(e),s=i(t);const c="#f0f0f0",u="#999",p="black",m="black",f=["Right","Left","Top","Bottom","Front","Back"],h=e=>new n.Vector3(...e).multiplyScalar(.38),d=[[1,1,1],[1,1,-1],[1,-1,1],[1,-1,-1],[-1,1,1],[-1,1,-1],[-1,-1,1],[-1,-1,-1]].map(h),g=[.25,.25,.25],y=[[1,1,0],[1,0,1],[1,0,-1],[1,-1,0],[0,1,1],[0,1,-1],[0,-1,1],[0,-1,-1],[-1,1,0],[-1,0,1],[-1,0,-1],[-1,-1,0]].map(h),b=y.map((e=>e.toArray().map((e=>0==e?.5:.25)))),x=({hover:e,index:t,font:o="20px Inter var, Arial, sans-serif",faces:a=f,color:i=c,hoverColor:l=u,textColor:h=p,strokeColor:d=m,opacity:g=1})=>{const y=r.useThree((e=>e.gl)),b=s.useMemo((()=>{const e=document.createElement("canvas");e.width=128,e.height=128;const r=e.getContext("2d");return r.fillStyle=i,r.fillRect(0,0,e.width,e.height),r.strokeStyle=d,r.strokeRect(0,0,e.width,e.height),r.font=o,r.textAlign="center",r.fillStyle=h,r.fillText(a[t].toUpperCase(),64,76),new n.CanvasTexture(e)}),[t,a,o,i,h,d]);return s.createElement("meshLambertMaterial",{map:b,"map-encoding":y.outputEncoding,"map-anisotropy":y.capabilities.getMaxAnisotropy()||1,attach:`material-${t}`,color:e?l:"white",transparent:!0,opacity:g})},C=e=>{const{tweenCamera:t}=o.useGizmoContext(),[r,n]=s.useState(null);return s.createElement("mesh",{onPointerOut:e=>{e.stopPropagation(),n(null)},onPointerMove:e=>{e.stopPropagation(),n(Math.floor(e.faceIndex/2))},onClick:e.onClick||(e=>{e.stopPropagation(),t(e.face.normal)})},[...Array(6)].map(((t,o)=>s.createElement(x,l.default({key:o,index:o,hover:r===o},e)))),s.createElement("boxGeometry",null))},E=({onClick:e,dimensions:t,position:r,hoverColor:n=u})=>{const{tweenCamera:a}=o.useGizmoContext(),[i,l]=s.useState(!1);return s.createElement("mesh",{scale:1.01,position:r,onPointerOver:e=>{e.stopPropagation(),l(!0)},onPointerOut:e=>{e.stopPropagation(),l(!1)},onClick:e||(e=>{e.stopPropagation(),a(r)})},s.createElement("meshBasicMaterial",{color:i?n:"white",transparent:!0,opacity:.6,visible:i}),s.createElement("boxGeometry",{args:t}))};exports.GizmoViewcube=e=>s.createElement("group",{scale:[60,60,60]},s.createElement(C,e),y.map(((t,r)=>s.createElement(E,l.default({key:r,position:t,dimensions:b[r]},e)))),d.map(((t,r)=>s.createElement(E,l.default({key:r,position:t,dimensions:g},e)))),s.createElement("ambientLight",{intensity:.5}),s.createElement("pointLight",{position:[10,10,10],intensity:.5}));
@@ -59,8 +59,7 @@ const FaceMaterial = ({
59
59
 
60
60
  const FaceCube = props => {
61
61
  const {
62
- tweenCamera,
63
- raycast
62
+ tweenCamera
64
63
  } = useGizmoContext();
65
64
  const [hover, setHover] = React.useState(null);
66
65
 
@@ -80,7 +79,6 @@ const FaceCube = props => {
80
79
  };
81
80
 
82
81
  return /*#__PURE__*/React.createElement("mesh", {
83
- raycast: raycast,
84
82
  onPointerOut: handlePointerOut,
85
83
  onPointerMove: handlePointerMove,
86
84
  onClick: props.onClick || handleClick
@@ -98,8 +96,7 @@ const EdgeCube = ({
98
96
  hoverColor = colors.hover
99
97
  }) => {
100
98
  const {
101
- tweenCamera,
102
- raycast
99
+ tweenCamera
103
100
  } = useGizmoContext();
104
101
  const [hover, setHover] = React.useState(false);
105
102
 
@@ -121,7 +118,6 @@ const EdgeCube = ({
121
118
  return /*#__PURE__*/React.createElement("mesh", {
122
119
  scale: 1.01,
123
120
  position: position,
124
- raycast: raycast,
125
121
  onPointerOver: handlePointerOver,
126
122
  onPointerOut: handlePointerOut,
127
123
  onClick: onClick || handleClick
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("@react-three/fiber"),a=require("three"),o=require("./GizmoHelper.cjs.js");function n(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("./OrthographicCamera.cjs.js"),require("react-merge-refs"),require("./useFBO.cjs.js"),require("./useCamera.cjs.js");var i=n(e),c=l(t);function s({scale:e=[.8,.05,.05],color:t,rotation:r}){return c.createElement("group",{rotation:r},c.createElement("mesh",{position:[.4,0,0]},c.createElement("boxGeometry",{args:e}),c.createElement("meshBasicMaterial",{color:t,toneMapped:!1})))}function u({onClick:e,font:t,disabled:o,arcStyle:n,label:l,labelColor:s,axisHeadScale:u=1,...p}){const f=r.useThree((e=>e.gl)),m=c.useMemo((()=>{const e=document.createElement("canvas");e.width=64,e.height=64;const r=e.getContext("2d");return r.beginPath(),r.arc(32,32,16,0,2*Math.PI),r.closePath(),r.fillStyle=n,r.fill(),l&&(r.font=t,r.textAlign="center",r.fillStyle=s,r.fillText(l,32,41)),new a.CanvasTexture(e)}),[n,l,s,t]),[d,b]=c.useState(!1),g=(l?1:.75)*(d?1.2:1)*u;return c.createElement("sprite",i.default({scale:g,onPointerOver:o?void 0:e=>{e.stopPropagation(),b(!0)},onPointerOut:o?void 0:e||(e=>{e.stopPropagation(),b(!1)})},p),c.createElement("spriteMaterial",{map:m,"map-encoding":f.outputEncoding,"map-anisotropy":f.capabilities.getMaxAnisotropy()||1,alphaTest:.3,opacity:l?1:.75,toneMapped:!1}))}exports.GizmoViewport=({hideNegativeAxes:e,hideAxisHeads:t,disabled:r,font:a="18px Inter var, Arial, sans-serif",axisColors:n=["#ff2060","#20df80","#2080ff"],axisHeadScale:l=1,axisScale:p,labels:f=["X","Y","Z"],labelColor:m="#000",onClick:d,...b})=>{const[g,E,h]=n,{tweenCamera:y,raycast:x}=o.useGizmoContext(),j={font:a,disabled:r,labelColor:m,raycast:x,onClick:d,axisHeadScale:l,onPointerDown:r?void 0:e=>{y(e.object.position),e.stopPropagation()}};return c.createElement("group",i.default({scale:40},b),c.createElement(s,{color:g,rotation:[0,0,0],scale:p}),c.createElement(s,{color:E,rotation:[0,0,Math.PI/2],scale:p}),c.createElement(s,{color:h,rotation:[0,-Math.PI/2,0],scale:p}),!t&&c.createElement(c.Fragment,null,c.createElement(u,i.default({arcStyle:g,position:[1,0,0],label:f[0]},j)),c.createElement(u,i.default({arcStyle:E,position:[0,1,0],label:f[1]},j)),c.createElement(u,i.default({arcStyle:h,position:[0,0,1],label:f[2]},j)),!e&&c.createElement(c.Fragment,null,c.createElement(u,i.default({arcStyle:g,position:[-1,0,0]},j)),c.createElement(u,i.default({arcStyle:E,position:[0,-1,0]},j)),c.createElement(u,i.default({arcStyle:h,position:[0,0,-1]},j)))),c.createElement("ambientLight",{intensity:.5}),c.createElement("pointLight",{position:[10,10,10],intensity:.5}))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("@react-three/fiber"),a=require("three"),o=require("./GizmoHelper.cjs.js");function n(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("./OrthographicCamera.cjs.js"),require("react-merge-refs"),require("./useFBO.cjs.js"),require("./Hud.cjs.js");var i=n(e),c=l(t);function s({scale:e=[.8,.05,.05],color:t,rotation:r}){return c.createElement("group",{rotation:r},c.createElement("mesh",{position:[.4,0,0]},c.createElement("boxGeometry",{args:e}),c.createElement("meshBasicMaterial",{color:t,toneMapped:!1})))}function u({onClick:e,font:t,disabled:o,arcStyle:n,label:l,labelColor:s,axisHeadScale:u=1,...p}){const d=r.useThree((e=>e.gl)),f=c.useMemo((()=>{const e=document.createElement("canvas");e.width=64,e.height=64;const r=e.getContext("2d");return r.beginPath(),r.arc(32,32,16,0,2*Math.PI),r.closePath(),r.fillStyle=n,r.fill(),l&&(r.font=t,r.textAlign="center",r.fillStyle=s,r.fillText(l,32,41)),new a.CanvasTexture(e)}),[n,l,s,t]),[m,b]=c.useState(!1),g=(l?1:.75)*(m?1.2:1)*u;return c.createElement("sprite",i.default({scale:g,onPointerOver:o?void 0:e=>{e.stopPropagation(),b(!0)},onPointerOut:o?void 0:e||(e=>{e.stopPropagation(),b(!1)})},p),c.createElement("spriteMaterial",{map:f,"map-encoding":d.outputEncoding,"map-anisotropy":d.capabilities.getMaxAnisotropy()||1,alphaTest:.3,opacity:l?1:.75,toneMapped:!1}))}exports.GizmoViewport=({hideNegativeAxes:e,hideAxisHeads:t,disabled:r,font:a="18px Inter var, Arial, sans-serif",axisColors:n=["#ff2060","#20df80","#2080ff"],axisHeadScale:l=1,axisScale:p,labels:d=["X","Y","Z"],labelColor:f="#000",onClick:m,...b})=>{const[g,E,h]=n,{tweenCamera:y}=o.useGizmoContext(),x={font:a,disabled:r,labelColor:f,onClick:m,axisHeadScale:l,onPointerDown:r?void 0:e=>{y(e.object.position),e.stopPropagation()}};return c.createElement("group",i.default({scale:40},b),c.createElement(s,{color:g,rotation:[0,0,0],scale:p}),c.createElement(s,{color:E,rotation:[0,0,Math.PI/2],scale:p}),c.createElement(s,{color:h,rotation:[0,-Math.PI/2,0],scale:p}),!t&&c.createElement(c.Fragment,null,c.createElement(u,i.default({arcStyle:g,position:[1,0,0],label:d[0]},x)),c.createElement(u,i.default({arcStyle:E,position:[0,1,0],label:d[1]},x)),c.createElement(u,i.default({arcStyle:h,position:[0,0,1],label:d[2]},x)),!e&&c.createElement(c.Fragment,null,c.createElement(u,i.default({arcStyle:g,position:[-1,0,0]},x)),c.createElement(u,i.default({arcStyle:E,position:[0,-1,0]},x)),c.createElement(u,i.default({arcStyle:h,position:[0,0,-1]},x)))),c.createElement("ambientLight",{intensity:.5}),c.createElement("pointLight",{position:[10,10,10],intensity:.5}))};
@@ -94,14 +94,12 @@ const GizmoViewport = ({
94
94
  }) => {
95
95
  const [colorX, colorY, colorZ] = axisColors;
96
96
  const {
97
- tweenCamera,
98
- raycast
97
+ tweenCamera
99
98
  } = useGizmoContext();
100
99
  const axisHeadProps = {
101
100
  font,
102
101
  disabled,
103
102
  labelColor,
104
- raycast,
105
103
  onClick,
106
104
  axisHeadScale,
107
105
  onPointerDown: !disabled ? e => {
package/core/Hud.cjs.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three"),r=require("react"),t=require("@react-three/fiber");function n(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 a=n(e),u=n(r);function c({defaultScene:e,defaultCamera:r,renderPriority:n=1}){const{gl:a,scene:c,camera:l}=t.useThree();return t.useFrame((()=>{1===n&&(a.autoClear=!0,a.render(e,r)),a.autoClear=!1,a.clearDepth(),a.render(c,l)}),n),u.createElement(u.Fragment,null)}exports.Hud=function({children:e,renderPriority:r=1}){const{scene:n,camera:l}=t.useThree(),[i]=u.useState((()=>new a.Scene));return u.createElement(u.Fragment,null,t.createPortal(u.createElement(u.Fragment,null,e,u.createElement(c,{defaultScene:n,defaultCamera:l,renderPriority:r})),i,{events:{priority:r+1}}))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three"),r=require("react"),t=require("@react-three/fiber");function n(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 a=n(e),u=n(r);function c({defaultScene:e,defaultCamera:r,renderPriority:n=1}){const{gl:a,scene:c,camera:l}=t.useThree();let o;return t.useFrame((()=>{o=a.autoClear,1===n&&(a.autoClear=!0,a.render(e,r)),a.autoClear=!1,a.clearDepth(),a.render(c,l),a.autoClear=o}),n),u.createElement(u.Fragment,null)}exports.Hud=function({children:e,renderPriority:r=1}){const{scene:n,camera:l}=t.useThree(),[o]=u.useState((()=>new a.Scene));return u.createElement(u.Fragment,null,t.createPortal(u.createElement(u.Fragment,null,e,u.createElement(c,{defaultScene:n,defaultCamera:l,renderPriority:r})),o,{events:{priority:r+1}}))};
package/core/Hud.js CHANGED
@@ -12,7 +12,10 @@ function RenderHud({
12
12
  scene,
13
13
  camera
14
14
  } = useThree();
15
+ let oldCLear;
15
16
  useFrame(() => {
17
+ oldCLear = gl.autoClear;
18
+
16
19
  if (renderPriority === 1) {
17
20
  // Clear scene and render the default scene
18
21
  gl.autoClear = true;
@@ -22,7 +25,9 @@ function RenderHud({
22
25
 
23
26
  gl.autoClear = false;
24
27
  gl.clearDepth();
25
- gl.render(scene, camera);
28
+ gl.render(scene, camera); // Restore default
29
+
30
+ gl.autoClear = oldCLear;
26
31
  }, renderPriority);
27
32
  return /*#__PURE__*/React.createElement(React.Fragment, null);
28
33
  }
@@ -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 o(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 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 i=o(e),u=s(r),l=s(t);class f extends u.MeshPhysicalMaterial{constructor({samples:e=5,...r}={}){super(r),this.uniforms={refraction:{value:0},rgbShift:{value:.3},noise:{value:.03},saturation:{value:1},contrast:{value:1},buffer:{value:null},resolution:{value:new u.Vector2}},this.onBeforeCompile=r=>{r.uniforms={...r.uniforms,...this.uniforms},r.fragmentShader="uniform float rgbShift;\n uniform vec2 resolution;\n uniform vec3 refractionColor;\n uniform float refraction;\n uniform float noise;\n uniform float saturation;\n uniform float contrast;\n uniform sampler2D buffer;\n \n vec3 sat(vec3 rgb, float adjustment) {\n const vec3 W = vec3(0.2125, 0.7154, 0.0721);\n vec3 intensity = vec3(dot(rgb, W));\n return mix(intensity, rgb, adjustment);\n }\n"+r.fragmentShader,r.fragmentShader=r.fragmentShader.replace("#include <transmission_pars_fragment>",""),r.fragmentShader=r.fragmentShader.replace("#include <transmission_fragment>",""),r.fragmentShader=r.fragmentShader.replace("vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;",`vec2 uv = gl_FragCoord.xy / resolution.xy;\n vec2 refractNormal = vNormal.xy * (1.0 - vNormal.z * 0.85);\n vec3 refractCol = vec3(0.0); \n float randomCoords = rand(uv);\n vec2 randomCoords2;\n float roughBlur = roughness * roughness;\n float slide;\n #pragma unroll_loop_start\n for (int i = 0; i < ${e}; i ++) {\n slide = float(UNROLLED_LOOP_INDEX) / float(${e}) * 0.1 + randomCoords * noise;\n randomCoords2 = vec2(rand(uv + randomCoords + 0.1 * float(UNROLLED_LOOP_INDEX)), rand(uv - randomCoords - 0.1 * float(UNROLLED_LOOP_INDEX))) - 0.5;\n randomCoords2 = normalize(randomCoords2) * sqrt(rand(uv + 0.12 * float(UNROLLED_LOOP_INDEX)));\n refractCol.r += texture2D(buffer, uv - refractNormal * (refraction + slide * 1.0) * rgbShift + randomCoords2 * roughBlur).r;\n refractCol.g += texture2D(buffer, uv - refractNormal * (refraction + slide * 2.0) * rgbShift + randomCoords2 * roughBlur).g;\n refractCol.b += texture2D(buffer, uv - refractNormal * (refraction + slide * 3.0) * rgbShift + randomCoords2 * roughBlur).b;\n refractCol = sat(refractCol, saturation);\n }\n #pragma unroll_loop_end\n refractCol /= float(${e});\n vec3 outgoingLight = (refractCol * totalDiffuse * contrast) + totalSpecular + totalEmissiveRadiance;`)},Object.keys(this.uniforms).forEach((e=>Object.defineProperty(this,e,{get:()=>this.uniforms[e].value,set:r=>this.uniforms[e].value=r})))}}const c=l.forwardRef((({buffer:e,samples:r=10,resolution:t,background:o,...s},u)=>{n.extend({MeshTransmissionMaterial:f});const c=l.useRef(null),{size:d,viewport:m}=n.useThree(),g=a.useFBO(t,t,{samples:0}),v=l.useMemo((()=>({samples:r})),[r]);let h,b,p;return n.useFrame((r=>{e||(p=c.current.__r3f.parent,p&&(b=p.visible,p.visible=!1,r.gl.setRenderTarget(g),h=r.scene.background,o&&(r.scene.background=o),r.gl.render(r.scene,r.camera),r.scene.background=h,r.gl.setRenderTarget(null),p.visible=b))})),l.useImperativeHandle(u,(()=>c.current),[]),l.createElement("meshTransmissionMaterial",i.default({args:[v],ref:c,buffer:e||g.texture,resolution:[d.width*m.dpr,d.height*m.dpr]},s))}));exports.MeshTransmissionMaterial=c;
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"),o=require("./useFBO.cjs.js");function a(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 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 i=a(e),u=s(r),l=s(t);class f extends u.MeshPhysicalMaterial{constructor({samples:e=5,...r}={}){super(r),this.uniforms={refraction:{value:0},rgbShift:{value:.3},noise:{value:.03},saturation:{value:1},contrast:{value:1},buffer:{value:null},resolution:{value:new u.Vector2}},this.onBeforeCompile=r=>{r.uniforms={...r.uniforms,...this.uniforms},r.fragmentShader="uniform float rgbShift;\n uniform vec2 resolution;\n uniform vec3 refractionColor;\n uniform float refraction;\n uniform float noise;\n uniform float saturation;\n uniform float contrast;\n uniform sampler2D buffer;\n \n vec3 sat(vec3 rgb, float adjustment) {\n const vec3 W = vec3(0.2125, 0.7154, 0.0721);\n vec3 intensity = vec3(dot(rgb, W));\n return mix(intensity, rgb, adjustment);\n }\n"+r.fragmentShader,r.fragmentShader=r.fragmentShader.replace("#include <transmission_pars_fragment>",""),r.fragmentShader=r.fragmentShader.replace("#include <transmission_fragment>",""),r.fragmentShader=r.fragmentShader.replace("vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;",`vec2 uv = gl_FragCoord.xy / resolution.xy;\n vec2 refractNormal = vNormal.xy * (1.0 - vNormal.z * 0.85);\n vec3 refractCol = vec3(0.0); \n float randomCoords = rand(uv);\n vec2 randomCoords2;\n float roughBlur = roughness * roughness;\n float slide;\n #pragma unroll_loop_start\n for (int i = 0; i < ${e}; i ++) {\n slide = float(UNROLLED_LOOP_INDEX) / float(${e}) * 0.1 + randomCoords * noise;\n randomCoords2 = vec2(rand(uv + randomCoords + 0.1 * float(UNROLLED_LOOP_INDEX)), rand(uv - randomCoords - 0.1 * float(UNROLLED_LOOP_INDEX))) - 0.5;\n randomCoords2 = normalize(randomCoords2) * sqrt(rand(uv + 0.12 * float(UNROLLED_LOOP_INDEX)));\n refractCol.r += texture2D(buffer, uv - refractNormal * (refraction + slide * 1.0) * rgbShift + randomCoords2 * roughBlur).r;\n refractCol.g += texture2D(buffer, uv - refractNormal * (refraction + slide * 2.0) * rgbShift + randomCoords2 * roughBlur).g;\n refractCol.b += texture2D(buffer, uv - refractNormal * (refraction + slide * 3.0) * rgbShift + randomCoords2 * roughBlur).b;\n refractCol = sat(refractCol, saturation);\n }\n #pragma unroll_loop_end\n refractCol /= float(${e});\n vec3 outgoingLight = (refractCol * totalDiffuse * contrast) + totalSpecular + totalEmissiveRadiance;`)},Object.keys(this.uniforms).forEach((e=>Object.defineProperty(this,e,{get:()=>this.uniforms[e].value,set:r=>this.uniforms[e].value=r})))}}const c=l.forwardRef((({buffer:e,samples:r=10,resolution:t=1024,background:a,...s},u)=>{n.extend({MeshTransmissionMaterial:f});const c=l.useRef(null),{size:d,viewport:m}=n.useThree(),g=o.useFBO(t),v=l.useMemo((()=>({samples:r})),[r]);let h,b,p;return n.useFrame((r=>{e||(p=c.current.__r3f.parent,p&&(b=p.visible,p.visible=!1,r.gl.setRenderTarget(g),h=r.scene.background,a&&(r.scene.background=a),r.gl.render(r.scene,r.camera),r.scene.background=h,r.gl.setRenderTarget(null),p.visible=b))})),l.useImperativeHandle(u,(()=>c.current),[]),l.createElement("meshTransmissionMaterial",i.default({args:[v],ref:c,buffer:e||g.texture,resolution:[d.width*m.dpr,d.height*m.dpr]},s))}));exports.MeshTransmissionMaterial=c;
@@ -8,7 +8,7 @@ declare type MeshTransmissionMaterialType = Omit<JSX.IntrinsicElements['meshPhys
8
8
  noise?: number;
9
9
  saturation?: number;
10
10
  contrast?: number;
11
- resolution?: ReactThreeFiber.Vector2 | null;
11
+ resolution?: ReactThreeFiber.Vector2;
12
12
  buffer?: THREE.Texture;
13
13
  args?: [{
14
14
  samples: number;
@@ -90,7 +90,7 @@ class MeshTransmissionMaterialImpl extends THREE.MeshPhysicalMaterial {
90
90
  const MeshTransmissionMaterial = /*#__PURE__*/React.forwardRef(({
91
91
  buffer,
92
92
  samples = 10,
93
- resolution,
93
+ resolution = 1024,
94
94
  background,
95
95
  ...props
96
96
  }, fref) => {
@@ -102,9 +102,7 @@ const MeshTransmissionMaterial = /*#__PURE__*/React.forwardRef(({
102
102
  size,
103
103
  viewport
104
104
  } = useThree();
105
- const fbo = useFBO(resolution, resolution, {
106
- samples: 0
107
- });
105
+ const fbo = useFBO(resolution);
108
106
  const config = React.useMemo(() => ({
109
107
  samples
110
108
  }), [samples]);