@react-three/postprocessing 2.9.0 → 2.9.2

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/dist/index.cjs CHANGED
@@ -1,743 +1,552 @@
1
1
  'use strict';
2
2
 
3
3
  var postprocessing = require('postprocessing');
4
- var _construct = require('@babel/runtime/helpers/construct');
5
- var _extends = require('@babel/runtime/helpers/extends');
6
- var _objectWithoutPropertiesLoose = require('@babel/runtime/helpers/objectWithoutPropertiesLoose');
7
- var React$1 = require('react');
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+ var React = require('react');
8
6
  var THREE = require('three');
9
7
  var fiber = require('@react-three/fiber');
10
8
  var threeStdlib = require('three-stdlib');
11
- var _inheritsLoose = require('@babel/runtime/helpers/inheritsLoose');
12
9
  var screenSpaceReflections = require('screen-space-reflections');
13
10
 
14
11
  function _interopNamespaceDefault(e) {
15
- var n = Object.create(null);
16
- if (e) {
17
- Object.keys(e).forEach(function (k) {
18
- if (k !== 'default') {
19
- var d = Object.getOwnPropertyDescriptor(e, k);
20
- Object.defineProperty(n, k, d.get ? d : {
21
- enumerable: true,
22
- get: function () { return e[k]; }
12
+ var n = Object.create(null);
13
+ if (e) {
14
+ Object.keys(e).forEach(function (k) {
15
+ if (k !== 'default') {
16
+ var d = Object.getOwnPropertyDescriptor(e, k);
17
+ Object.defineProperty(n, k, d.get ? d : {
18
+ enumerable: true,
19
+ get: function () { return e[k]; }
20
+ });
21
+ }
23
22
  });
24
- }
25
- });
26
- }
27
- n.default = e;
28
- return Object.freeze(n);
23
+ }
24
+ n.default = e;
25
+ return Object.freeze(n);
29
26
  }
30
27
 
31
28
  var THREE__namespace = /*#__PURE__*/_interopNamespaceDefault(THREE);
32
29
 
33
- var _excluded$9 = ["blendFunction", "opacity"];
34
- var resolveRef = function resolveRef(ref) {
35
- return typeof ref === 'object' && ref != null && 'current' in ref ? ref.current : ref;
36
- };
37
- var i = 0;
38
- var components = new WeakMap();
39
- var wrapEffect = function wrapEffect(effect, defaults) {
40
- return /* @__PURE__ */React$1.forwardRef(function Effect(_ref, ref) {
41
- var _ref$blendFunction = _ref.blendFunction,
42
- blendFunction = _ref$blendFunction === void 0 ? defaults == null ? void 0 : defaults.blendFunction : _ref$blendFunction,
43
- _ref$opacity = _ref.opacity,
44
- opacity = _ref$opacity === void 0 ? defaults == null ? void 0 : defaults.opacity : _ref$opacity,
45
- props = _objectWithoutPropertiesLoose(_ref, _excluded$9);
46
- var Component = components.get(effect);
30
+ const resolveRef = (ref) => typeof ref === 'object' && ref != null && 'current' in ref ? ref.current : ref;
31
+ let i = 0;
32
+ const components = new WeakMap();
33
+ const wrapEffect = (effect, defaults) =>
34
+ /* @__PURE__ */ React.forwardRef(function Effect({ blendFunction = defaults === null || defaults === void 0 ? void 0 : defaults.blendFunction, opacity = defaults === null || defaults === void 0 ? void 0 : defaults.opacity, ...props }, ref) {
35
+ let Component = components.get(effect);
47
36
  if (!Component) {
48
- var _extend;
49
- var key = "@react-three/postprocessing/" + effect.name + "-" + i++;
50
- fiber.extend((_extend = {}, _extend[key] = effect, _extend));
51
- components.set(effect, Component = key);
37
+ const key = `@react-three/postprocessing/${effect.name}-${i++}`;
38
+ fiber.extend({ [key]: effect });
39
+ components.set(effect, (Component = key));
52
40
  }
53
- var camera = fiber.useThree(function (state) {
54
- return state.camera;
55
- });
56
- var args = React$1.useMemo(function () {
57
- var _defaults$args, _props$args;
58
- return [].concat((_defaults$args = defaults == null ? void 0 : defaults.args) != null ? _defaults$args : [], (_props$args = props.args) != null ? _props$args : [_extends({}, defaults, props)]);
59
- },
41
+ const camera = fiber.useThree((state) => state.camera);
42
+ const args = React.useMemo(() => { var _a, _b; return [...((_a = defaults === null || defaults === void 0 ? void 0 : defaults.args) !== null && _a !== void 0 ? _a : []), ...((_b = props.args) !== null && _b !== void 0 ? _b : [{ ...defaults, ...props }])]; },
60
43
  // eslint-disable-next-line react-hooks/exhaustive-deps
61
44
  [JSON.stringify(props)]);
62
- return /*#__PURE__*/React$1.createElement(Component, _extends({
63
- camera: camera,
64
- "blendMode-blendFunction": blendFunction,
65
- "blendMode-opacity": opacity
66
- }, props, {
67
- ref: ref,
68
- args: args
69
- }));
70
- });
71
- };
72
- var useVector2 = function useVector2(props, key) {
73
- var value = props[key];
74
- return React$1.useMemo(function () {
75
- if (typeof value === 'number') return new THREE__namespace.Vector2(value, value);else if (value) return _construct(THREE__namespace.Vector2, value);else return new THREE__namespace.Vector2();
76
- }, [value]);
45
+ return (jsxRuntime.jsx(Component, { camera: camera, "blendMode-blendFunction": blendFunction, "blendMode-opacity": opacity, ...props, ref: ref, args: args }));
46
+ });
47
+ const useVector2 = (props, key) => {
48
+ const value = props[key];
49
+ return React.useMemo(() => {
50
+ if (typeof value === 'number')
51
+ return new THREE__namespace.Vector2(value, value);
52
+ else if (value)
53
+ return new THREE__namespace.Vector2(...value);
54
+ else
55
+ return new THREE__namespace.Vector2();
56
+ }, [value]);
77
57
  };
78
58
 
79
- var Bloom = wrapEffect(postprocessing.BloomEffect, {
80
- blendFunction: postprocessing.BlendFunction.ADD
59
+ const Bloom = wrapEffect(postprocessing.BloomEffect, {
60
+ blendFunction: postprocessing.BlendFunction.ADD,
81
61
  });
82
62
 
83
- var BrightnessContrast = wrapEffect(postprocessing.BrightnessContrastEffect);
84
-
85
- // type for function args should use constructor args
86
-
87
- var ChromaticAberration = /*#__PURE__*/React$1.forwardRef(function ChromaticAberration(props, ref) {
88
- var offset = useVector2(props, 'offset');
89
- var effect = React$1.useMemo(function () {
90
- return new postprocessing.ChromaticAberrationEffect(_extends({}, props, {
91
- offset: offset
92
- }));
93
- }, [offset, props]);
94
- return /*#__PURE__*/React$1.createElement("primitive", {
95
- ref: ref,
96
- object: effect,
97
- dispose: null
98
- });
63
+ const BrightnessContrast = wrapEffect(postprocessing.BrightnessContrastEffect);
64
+
65
+ const ChromaticAberration = React.forwardRef(function ChromaticAberration(props, ref) {
66
+ const offset = useVector2(props, 'offset');
67
+ const effect = React.useMemo(() => new postprocessing.ChromaticAberrationEffect({ ...props, offset }), [offset, props]);
68
+ return jsxRuntime.jsx("primitive", { ref: ref, object: effect, dispose: null });
99
69
  });
100
70
 
101
- var ColorAverage = /*#__PURE__*/React$1.forwardRef(function ColorAverage(_ref, ref) {
102
- var _ref$blendFunction = _ref.blendFunction,
103
- blendFunction = _ref$blendFunction === void 0 ? postprocessing.BlendFunction.NORMAL : _ref$blendFunction;
104
- /** Because ColorAverage blendFunction is not an object but a number, we have to define a custom prop "blendFunction" */
105
- var effect = React$1.useMemo(function () {
106
- return new postprocessing.ColorAverageEffect(blendFunction);
107
- }, [blendFunction]);
108
- return /*#__PURE__*/React$1.createElement("primitive", {
109
- ref: ref,
110
- object: effect,
111
- dispose: null
112
- });
71
+ const ColorAverage = React.forwardRef(function ColorAverage({ blendFunction = postprocessing.BlendFunction.NORMAL }, ref) {
72
+ /** Because ColorAverage blendFunction is not an object but a number, we have to define a custom prop "blendFunction" */
73
+ const effect = React.useMemo(() => new postprocessing.ColorAverageEffect(blendFunction), [blendFunction]);
74
+ return jsxRuntime.jsx("primitive", { ref: ref, object: effect, dispose: null });
113
75
  });
114
76
 
115
- var ColorDepth = wrapEffect(postprocessing.ColorDepthEffect);
116
-
117
- var Depth = wrapEffect(postprocessing.DepthEffect);
118
-
119
- var EffectComposerContext = /*#__PURE__*/React$1.createContext(null);
120
- var EffectComposer = /*#__PURE__*/React$1.memo( /*#__PURE__*/React$1.forwardRef(function (_ref, ref) {
121
- var children = _ref.children,
122
- _camera = _ref.camera,
123
- _scene = _ref.scene,
124
- resolutionScale = _ref.resolutionScale,
125
- _ref$enabled = _ref.enabled,
126
- enabled = _ref$enabled === void 0 ? true : _ref$enabled,
127
- _ref$renderPriority = _ref.renderPriority,
128
- renderPriority = _ref$renderPriority === void 0 ? 1 : _ref$renderPriority,
129
- _ref$autoClear = _ref.autoClear,
130
- autoClear = _ref$autoClear === void 0 ? true : _ref$autoClear,
131
- depthBuffer = _ref.depthBuffer,
132
- disableNormalPass = _ref.disableNormalPass,
133
- stencilBuffer = _ref.stencilBuffer,
134
- _ref$multisampling = _ref.multisampling,
135
- multisampling = _ref$multisampling === void 0 ? 8 : _ref$multisampling,
136
- _ref$frameBufferType = _ref.frameBufferType,
137
- frameBufferType = _ref$frameBufferType === void 0 ? THREE.HalfFloatType : _ref$frameBufferType;
138
- var _useThree = fiber.useThree(),
139
- gl = _useThree.gl,
140
- defaultScene = _useThree.scene,
141
- defaultCamera = _useThree.camera,
142
- size = _useThree.size;
143
- var scene = _scene || defaultScene;
144
- var camera = _camera || defaultCamera;
145
- var _useMemo = React$1.useMemo(function () {
146
- var webGL2Available = threeStdlib.isWebGL2Available();
147
- // Initialize composer
148
- var effectComposer = new postprocessing.EffectComposer(gl, {
149
- depthBuffer: depthBuffer,
150
- stencilBuffer: stencilBuffer,
151
- multisampling: multisampling > 0 && webGL2Available ? multisampling : 0,
152
- frameBufferType: frameBufferType
153
- });
154
-
155
- // Add render pass
156
- effectComposer.addPass(new postprocessing.RenderPass(scene, camera));
157
-
158
- // Create normal pass
159
- var downSamplingPass = null;
160
- var normalPass = null;
161
- if (!disableNormalPass) {
162
- normalPass = new postprocessing.NormalPass(scene, camera);
163
- normalPass.enabled = false;
164
- effectComposer.addPass(normalPass);
165
- if (resolutionScale !== undefined && webGL2Available) {
166
- downSamplingPass = new postprocessing.DepthDownsamplingPass({
167
- normalBuffer: normalPass.texture,
168
- resolutionScale: resolutionScale
169
- });
170
- downSamplingPass.enabled = false;
171
- effectComposer.addPass(downSamplingPass);
77
+ const ColorDepth = wrapEffect(postprocessing.ColorDepthEffect);
78
+
79
+ const Depth = wrapEffect(postprocessing.DepthEffect);
80
+
81
+ const EffectComposerContext = React.createContext(null);
82
+ const EffectComposer = React.memo(React.forwardRef(({ children, camera: _camera, scene: _scene, resolutionScale, enabled = true, renderPriority = 1, autoClear = true, depthBuffer, disableNormalPass, stencilBuffer, multisampling = 8, frameBufferType = THREE.HalfFloatType, }, ref) => {
83
+ const { gl, scene: defaultScene, camera: defaultCamera, size } = fiber.useThree();
84
+ const scene = _scene || defaultScene;
85
+ const camera = _camera || defaultCamera;
86
+ const [composer, normalPass, downSamplingPass] = React.useMemo(() => {
87
+ const webGL2Available = threeStdlib.isWebGL2Available();
88
+ // Initialize composer
89
+ const effectComposer = new postprocessing.EffectComposer(gl, {
90
+ depthBuffer,
91
+ stencilBuffer,
92
+ multisampling: multisampling > 0 && webGL2Available ? multisampling : 0,
93
+ frameBufferType,
94
+ });
95
+ // Add render pass
96
+ effectComposer.addPass(new postprocessing.RenderPass(scene, camera));
97
+ // Create normal pass
98
+ let downSamplingPass = null;
99
+ let normalPass = null;
100
+ if (!disableNormalPass) {
101
+ normalPass = new postprocessing.NormalPass(scene, camera);
102
+ normalPass.enabled = false;
103
+ effectComposer.addPass(normalPass);
104
+ if (resolutionScale !== undefined && webGL2Available) {
105
+ downSamplingPass = new postprocessing.DepthDownsamplingPass({ normalBuffer: normalPass.texture, resolutionScale });
106
+ downSamplingPass.enabled = false;
107
+ effectComposer.addPass(downSamplingPass);
108
+ }
172
109
  }
173
- }
174
- return [effectComposer, normalPass, downSamplingPass];
175
- }, [camera, gl, depthBuffer, stencilBuffer, multisampling, frameBufferType, scene, disableNormalPass, resolutionScale]),
176
- composer = _useMemo[0],
177
- normalPass = _useMemo[1],
178
- downSamplingPass = _useMemo[2];
179
- React$1.useEffect(function () {
180
- return composer == null ? void 0 : composer.setSize(size.width, size.height);
181
- }, [composer, size]);
182
- fiber.useFrame(function (_, delta) {
183
- if (enabled) {
184
- gl.autoClear = autoClear;
185
- composer.render(delta);
186
- }
187
- }, enabled ? renderPriority : 0);
188
- var group = React$1.useRef(null);
189
- var instance = fiber.useInstanceHandle(group);
190
- React$1.useLayoutEffect(function () {
191
- var effectPass;
192
- if (group.current && instance.current && composer) {
193
- effectPass = _construct(postprocessing.EffectPass, [camera].concat(instance.current.objects));
194
- effectPass.renderToScreen = true;
195
- composer.addPass(effectPass);
196
- if (normalPass) normalPass.enabled = true;
197
- if (downSamplingPass) downSamplingPass.enabled = true;
198
- }
199
- return function () {
200
- if (effectPass) composer == null ? void 0 : composer.removePass(effectPass);
201
- if (normalPass) normalPass.enabled = false;
202
- if (downSamplingPass) downSamplingPass.enabled = false;
203
- };
204
- }, [composer, children, camera, normalPass, downSamplingPass, instance]);
205
-
206
- // Memoize state, otherwise it would trigger all consumers on every render
207
- var state = React$1.useMemo(function () {
208
- return {
209
- composer: composer,
210
- normalPass: normalPass,
211
- downSamplingPass: downSamplingPass,
212
- resolutionScale: resolutionScale,
213
- camera: camera,
214
- scene: scene
215
- };
216
- }, [composer, normalPass, downSamplingPass, resolutionScale, camera, scene]);
217
-
218
- // Expose the composer
219
- React$1.useImperativeHandle(ref, function () {
220
- return composer;
221
- }, [composer]);
222
- return /*#__PURE__*/React$1.createElement(EffectComposerContext.Provider, {
223
- value: state
224
- }, /*#__PURE__*/React$1.createElement("group", {
225
- ref: group
226
- }, children));
110
+ return [effectComposer, normalPass, downSamplingPass];
111
+ }, [
112
+ camera,
113
+ gl,
114
+ depthBuffer,
115
+ stencilBuffer,
116
+ multisampling,
117
+ frameBufferType,
118
+ scene,
119
+ disableNormalPass,
120
+ resolutionScale,
121
+ ]);
122
+ React.useEffect(() => composer === null || composer === void 0 ? void 0 : composer.setSize(size.width, size.height), [composer, size]);
123
+ fiber.useFrame((_, delta) => {
124
+ if (enabled) {
125
+ gl.autoClear = autoClear;
126
+ composer.render(delta);
127
+ }
128
+ }, enabled ? renderPriority : 0);
129
+ const group = React.useRef(null);
130
+ const instance = fiber.useInstanceHandle(group);
131
+ React.useLayoutEffect(() => {
132
+ let effectPass;
133
+ if (group.current && instance.current && composer) {
134
+ effectPass = new postprocessing.EffectPass(camera, ...instance.current.objects);
135
+ effectPass.renderToScreen = true;
136
+ composer.addPass(effectPass);
137
+ if (normalPass)
138
+ normalPass.enabled = true;
139
+ if (downSamplingPass)
140
+ downSamplingPass.enabled = true;
141
+ }
142
+ return () => {
143
+ if (effectPass)
144
+ composer === null || composer === void 0 ? void 0 : composer.removePass(effectPass);
145
+ if (normalPass)
146
+ normalPass.enabled = false;
147
+ if (downSamplingPass)
148
+ downSamplingPass.enabled = false;
149
+ };
150
+ }, [composer, children, camera, normalPass, downSamplingPass, instance]);
151
+ // Memoize state, otherwise it would trigger all consumers on every render
152
+ const state = React.useMemo(() => ({ composer, normalPass, downSamplingPass, resolutionScale, camera, scene }), [composer, normalPass, downSamplingPass, resolutionScale, camera, scene]);
153
+ // Expose the composer
154
+ React.useImperativeHandle(ref, () => composer, [composer]);
155
+ return (jsxRuntime.jsx(EffectComposerContext.Provider, { value: state, children: jsxRuntime.jsx("group", { ref: group, children: children }) }));
227
156
  }));
228
157
 
229
- var _excluded$8 = ["target", "depthTexture"];
230
- var DepthOfField = /*#__PURE__*/React$1.forwardRef(function DepthOfField(_ref, ref) {
231
- var target = _ref.target,
232
- depthTexture = _ref.depthTexture,
233
- props = _objectWithoutPropertiesLoose(_ref, _excluded$8);
234
- var invalidate = fiber.useThree(function (state) {
235
- return state.invalidate;
236
- });
237
- var _useContext = React$1.useContext(EffectComposerContext),
238
- camera = _useContext.camera;
239
- var effect = React$1.useMemo(function () {
240
- return new postprocessing.DepthOfFieldEffect(camera, props);
241
- }, [camera, props]);
242
- React$1.useLayoutEffect(function () {
243
- if (target && typeof target !== 'number') {
244
- var vec = target instanceof THREE.Vector3 ? new THREE.Vector3().set(target.x, target.y, target.z) : new THREE.Vector3().set(target[0], target[1], target[2]);
245
- effect.target = vec;
246
- }
247
- if (depthTexture) effect.setDepthTexture(depthTexture.texture, depthTexture.packing);
248
- invalidate();
249
- }, [target, depthTexture, effect]);
250
- return /*#__PURE__*/React.createElement("primitive", {
251
- ref: ref,
252
- object: effect,
253
- dispose: null
254
- });
158
+ const DepthOfField = React.forwardRef(function DepthOfField({ target, depthTexture, ...props }, ref) {
159
+ const invalidate = fiber.useThree((state) => state.invalidate);
160
+ const { camera } = React.useContext(EffectComposerContext);
161
+ const effect = React.useMemo(() => {
162
+ const effect = new postprocessing.DepthOfFieldEffect(camera, props);
163
+ // Temporary fix that restores DOF 6.21.3 behavior, everything since then lets shapes leak through the blur
164
+ const maskMaterial = effect.maskPass.getFullscreenMaterial();
165
+ maskMaterial.maskFunction = postprocessing.MaskFunction.MULTIPLY_RGB_SET_ALPHA;
166
+ return effect;
167
+ }, [camera, props]);
168
+ React.useLayoutEffect(() => {
169
+ if (target && typeof target !== 'number') {
170
+ const vec = target instanceof THREE.Vector3
171
+ ? new THREE.Vector3().set(target.x, target.y, target.z)
172
+ : new THREE.Vector3().set(target[0], target[1], target[2]);
173
+ effect.target = vec;
174
+ }
175
+ if (depthTexture)
176
+ effect.setDepthTexture(depthTexture.texture, depthTexture.packing);
177
+ invalidate();
178
+ }, [target, depthTexture, effect]);
179
+ return jsxRuntime.jsx("primitive", { ref: ref, object: effect, dispose: null });
255
180
  });
256
181
 
257
- var DotScreen = wrapEffect(postprocessing.DotScreenEffect);
258
-
259
- var _excluded$7 = ["active"];
260
- var Glitch = /*#__PURE__*/React$1.forwardRef(function Glitch(_ref, ref) {
261
- var _ref$active = _ref.active,
262
- active = _ref$active === void 0 ? true : _ref$active,
263
- props = _objectWithoutPropertiesLoose(_ref, _excluded$7);
264
- var invalidate = fiber.useThree(function (state) {
265
- return state.invalidate;
266
- });
267
- var delay = useVector2(props, 'delay');
268
- var duration = useVector2(props, 'duration');
269
- var strength = useVector2(props, 'strength');
270
- var effect = React$1.useMemo(function () {
271
- return new postprocessing.GlitchEffect(_extends({}, props, {
272
- delay: delay,
273
- duration: duration,
274
- strength: strength
275
- }));
276
- }, [delay, duration, props, strength]);
277
- React$1.useLayoutEffect(function () {
278
- effect.mode = active ? props.mode || postprocessing.GlitchMode.SPORADIC : postprocessing.GlitchMode.DISABLED;
279
- invalidate();
280
- }, [active, effect, invalidate, props.mode]);
281
- return /*#__PURE__*/React.createElement("primitive", {
282
- ref: ref,
283
- object: effect,
284
- dispose: null
285
- });
182
+ const DotScreen = wrapEffect(postprocessing.DotScreenEffect);
183
+
184
+ const Glitch = React.forwardRef(function Glitch({ active = true, ...props }, ref) {
185
+ const invalidate = fiber.useThree((state) => state.invalidate);
186
+ const delay = useVector2(props, 'delay');
187
+ const duration = useVector2(props, 'duration');
188
+ const strength = useVector2(props, 'strength');
189
+ const effect = React.useMemo(() => new postprocessing.GlitchEffect({ ...props, delay, duration, strength }), [delay, duration, props, strength]);
190
+ React.useLayoutEffect(() => {
191
+ effect.mode = active ? props.mode || postprocessing.GlitchMode.SPORADIC : postprocessing.GlitchMode.DISABLED;
192
+ invalidate();
193
+ }, [active, effect, invalidate, props.mode]);
194
+ return jsxRuntime.jsx("primitive", { ref: ref, object: effect, dispose: null });
286
195
  });
287
196
 
288
- var GodRays = /*#__PURE__*/React$1.forwardRef(function GodRays(props, ref) {
289
- var _useContext = React$1.useContext(EffectComposerContext),
290
- camera = _useContext.camera;
291
- var effect = React$1.useMemo(function () {
292
- return new postprocessing.GodRaysEffect(camera, props.sun, props);
293
- }, [camera, props]);
294
- return /*#__PURE__*/React$1.createElement("primitive", {
295
- ref: ref,
296
- object: effect,
297
- dispose: null
298
- });
197
+ const GodRays = React.forwardRef(function GodRays(props, ref) {
198
+ const { camera } = React.useContext(EffectComposerContext);
199
+ const effect = React.useMemo(() => new postprocessing.GodRaysEffect(camera, props.sun, props), [camera, props]);
200
+ return jsxRuntime.jsx("primitive", { ref: ref, object: effect, dispose: null });
299
201
  });
300
202
 
301
- var _excluded$6 = ["size"];
302
- var Grid = /*#__PURE__*/React$1.forwardRef(function Grid(_ref, ref) {
303
- var size = _ref.size,
304
- props = _objectWithoutPropertiesLoose(_ref, _excluded$6);
305
- var invalidate = fiber.useThree(function (state) {
306
- return state.invalidate;
307
- });
308
- var effect = React$1.useMemo(function () {
309
- return new postprocessing.GridEffect(props);
310
- }, [props]);
311
- React$1.useLayoutEffect(function () {
312
- if (size) effect.setSize(size.width, size.height);
313
- invalidate();
314
- }, [effect, size]);
315
- return /*#__PURE__*/React$1.createElement("primitive", {
316
- ref: ref,
317
- object: effect,
318
- dispose: null
319
- });
203
+ const Grid = React.forwardRef(function Grid({ size, ...props }, ref) {
204
+ const invalidate = fiber.useThree((state) => state.invalidate);
205
+ const effect = React.useMemo(() => new postprocessing.GridEffect(props), [props]);
206
+ React.useLayoutEffect(() => {
207
+ if (size)
208
+ effect.setSize(size.width, size.height);
209
+ invalidate();
210
+ }, [effect, size]);
211
+ return jsxRuntime.jsx("primitive", { ref: ref, object: effect, dispose: null });
320
212
  });
321
213
 
322
- var HueSaturation = wrapEffect(postprocessing.HueSaturationEffect);
214
+ const HueSaturation = wrapEffect(postprocessing.HueSaturationEffect);
323
215
 
324
- var Noise = wrapEffect(postprocessing.NoiseEffect, {
325
- blendFunction: postprocessing.BlendFunction.COLOR_DODGE
326
- });
216
+ const Noise = wrapEffect(postprocessing.NoiseEffect, { blendFunction: postprocessing.BlendFunction.COLOR_DODGE });
327
217
 
328
- var _excluded$5 = ["enabled", "children"];
329
- var selectionContext = /*#__PURE__*/React$1.createContext(null);
330
- function Selection(_ref) {
331
- var children = _ref.children,
332
- _ref$enabled = _ref.enabled,
333
- enabled = _ref$enabled === void 0 ? true : _ref$enabled;
334
- var _useState = React$1.useState([]),
335
- selected = _useState[0],
336
- select = _useState[1];
337
- var value = React$1.useMemo(function () {
338
- return {
339
- selected: selected,
340
- select: select,
341
- enabled: enabled
342
- };
343
- }, [selected, select, enabled]);
344
- return /*#__PURE__*/React$1.createElement(selectionContext.Provider, {
345
- value: value
346
- }, children);
218
+ const selectionContext = React.createContext(null);
219
+ function Selection({ children, enabled = true }) {
220
+ const [selected, select] = React.useState([]);
221
+ const value = React.useMemo(() => ({ selected, select, enabled }), [selected, select, enabled]);
222
+ return jsxRuntime.jsx(selectionContext.Provider, { value: value, children: children });
347
223
  }
348
- function Select(_ref2) {
349
- var _ref2$enabled = _ref2.enabled,
350
- enabled = _ref2$enabled === void 0 ? false : _ref2$enabled,
351
- children = _ref2.children,
352
- props = _objectWithoutPropertiesLoose(_ref2, _excluded$5);
353
- var group = React$1.useRef(null);
354
- var api = React$1.useContext(selectionContext);
355
- React$1.useEffect(function () {
356
- if (api && enabled) {
357
- var changed = false;
358
- var current = [];
359
- group.current.traverse(function (o) {
360
- o.type === 'Mesh' && current.push(o);
361
- if (api.selected.indexOf(o) === -1) changed = true;
362
- });
363
- if (changed) {
364
- api.select(function (state) {
365
- return [].concat(state, current);
366
- });
367
- return function () {
368
- api.select(function (state) {
369
- return state.filter(function (selected) {
370
- return !current.includes(selected);
224
+ function Select({ enabled = false, children, ...props }) {
225
+ const group = React.useRef(null);
226
+ const api = React.useContext(selectionContext);
227
+ React.useEffect(() => {
228
+ if (api && enabled) {
229
+ let changed = false;
230
+ const current = [];
231
+ group.current.traverse((o) => {
232
+ o.type === 'Mesh' && current.push(o);
233
+ if (api.selected.indexOf(o) === -1)
234
+ changed = true;
371
235
  });
372
- });
373
- };
374
- }
375
- }
376
- }, [enabled, children]);
377
- return /*#__PURE__*/React$1.createElement("group", _extends({
378
- ref: group
379
- }, props), children);
236
+ if (changed) {
237
+ api.select((state) => [...state, ...current]);
238
+ return () => {
239
+ api.select((state) => state.filter((selected) => !current.includes(selected)));
240
+ };
241
+ }
242
+ }
243
+ }, [enabled, children, api]);
244
+ return (jsxRuntime.jsx("group", { ref: group, ...props, children: children }));
380
245
  }
381
246
 
382
- var _excluded$4 = ["selection", "selectionLayer", "blendFunction", "patternTexture", "edgeStrength", "pulseSpeed", "visibleEdgeColor", "hiddenEdgeColor", "width", "height", "kernelSize", "blur", "xRay"];
383
- var Outline = /*#__PURE__*/React$1.forwardRef(function Outline(_ref, forwardRef) {
384
- var _ref$selection = _ref.selection,
385
- selection = _ref$selection === void 0 ? [] : _ref$selection,
386
- _ref$selectionLayer = _ref.selectionLayer,
387
- selectionLayer = _ref$selectionLayer === void 0 ? 10 : _ref$selectionLayer,
388
- blendFunction = _ref.blendFunction,
389
- patternTexture = _ref.patternTexture,
390
- edgeStrength = _ref.edgeStrength,
391
- pulseSpeed = _ref.pulseSpeed,
392
- visibleEdgeColor = _ref.visibleEdgeColor,
393
- hiddenEdgeColor = _ref.hiddenEdgeColor,
394
- width = _ref.width,
395
- height = _ref.height,
396
- kernelSize = _ref.kernelSize,
397
- blur = _ref.blur,
398
- xRay = _ref.xRay,
399
- props = _objectWithoutPropertiesLoose(_ref, _excluded$4);
400
- var invalidate = fiber.useThree(function (state) {
401
- return state.invalidate;
402
- });
403
- var _useContext = React$1.useContext(EffectComposerContext),
404
- scene = _useContext.scene,
405
- camera = _useContext.camera;
406
- var effect = React$1.useMemo(function () {
407
- return new postprocessing.OutlineEffect(scene, camera, _extends({
408
- blendFunction: blendFunction,
409
- patternTexture: patternTexture,
410
- edgeStrength: edgeStrength,
411
- pulseSpeed: pulseSpeed,
412
- visibleEdgeColor: visibleEdgeColor,
413
- hiddenEdgeColor: hiddenEdgeColor,
414
- width: width,
415
- height: height,
416
- kernelSize: kernelSize,
417
- blur: blur,
418
- xRay: xRay
419
- }, props));
420
- }, [blendFunction, blur, camera, edgeStrength, height, hiddenEdgeColor, kernelSize, patternTexture, props, pulseSpeed, scene, visibleEdgeColor, width, xRay]);
421
- var api = React$1.useContext(selectionContext);
422
- React$1.useEffect(function () {
423
- // Do not allow array selection if declarative selection is active
424
- // TODO: array selection should probably be deprecated altogether
425
- if (!api && selection) {
426
- effect.selection.set(Array.isArray(selection) ? selection.map(resolveRef) : [resolveRef(selection)]);
427
- invalidate();
428
- return function () {
429
- effect.selection.clear();
430
- invalidate();
431
- };
432
- }
433
- }, [effect, selection, api, invalidate]);
434
- React$1.useEffect(function () {
435
- effect.selectionLayer = selectionLayer;
436
- invalidate();
437
- }, [effect, invalidate, selectionLayer]);
438
- React$1.useRef();
439
- React$1.useEffect(function () {
440
- if (api && api.enabled) {
441
- var _api$selected;
442
- if ((_api$selected = api.selected) != null && _api$selected.length) {
443
- effect.selection.set(api.selected);
247
+ const Outline = React.forwardRef(function Outline({ selection = [], selectionLayer = 10, blendFunction, patternTexture, edgeStrength, pulseSpeed, visibleEdgeColor, hiddenEdgeColor, width, height, kernelSize, blur, xRay, ...props }, forwardRef) {
248
+ const invalidate = fiber.useThree((state) => state.invalidate);
249
+ const { scene, camera } = React.useContext(EffectComposerContext);
250
+ const effect = React.useMemo(() => new postprocessing.OutlineEffect(scene, camera, {
251
+ blendFunction,
252
+ patternTexture,
253
+ edgeStrength,
254
+ pulseSpeed,
255
+ visibleEdgeColor,
256
+ hiddenEdgeColor,
257
+ width,
258
+ height,
259
+ kernelSize,
260
+ blur,
261
+ xRay,
262
+ ...props,
263
+ }), [
264
+ blendFunction,
265
+ blur,
266
+ camera,
267
+ edgeStrength,
268
+ height,
269
+ hiddenEdgeColor,
270
+ kernelSize,
271
+ patternTexture,
272
+ props,
273
+ pulseSpeed,
274
+ scene,
275
+ visibleEdgeColor,
276
+ width,
277
+ xRay,
278
+ ]);
279
+ const api = React.useContext(selectionContext);
280
+ React.useEffect(() => {
281
+ // Do not allow array selection if declarative selection is active
282
+ // TODO: array selection should probably be deprecated altogether
283
+ if (!api && selection) {
284
+ effect.selection.set(Array.isArray(selection) ? selection.map(resolveRef) : [resolveRef(selection)]);
285
+ invalidate();
286
+ return () => {
287
+ effect.selection.clear();
288
+ invalidate();
289
+ };
290
+ }
291
+ }, [effect, selection, api, invalidate]);
292
+ React.useEffect(() => {
293
+ effect.selectionLayer = selectionLayer;
444
294
  invalidate();
445
- return function () {
446
- effect.selection.clear();
447
- invalidate();
448
- };
449
- }
450
- }
451
- }, [api, effect.selection, invalidate]);
452
- return /*#__PURE__*/React.createElement("primitive", {
453
- ref: forwardRef,
454
- object: effect
455
- });
295
+ }, [effect, invalidate, selectionLayer]);
296
+ React.useRef();
297
+ React.useEffect(() => {
298
+ var _a;
299
+ if (api && api.enabled) {
300
+ if ((_a = api.selected) === null || _a === void 0 ? void 0 : _a.length) {
301
+ effect.selection.set(api.selected);
302
+ invalidate();
303
+ return () => {
304
+ effect.selection.clear();
305
+ invalidate();
306
+ };
307
+ }
308
+ }
309
+ }, [api, effect.selection, invalidate]);
310
+ return jsxRuntime.jsx("primitive", { ref: forwardRef, object: effect });
456
311
  });
457
312
 
458
- var Pixelation = /*#__PURE__*/React$1.forwardRef(function Pixelation(_ref, ref) {
459
- var _ref$granularity = _ref.granularity,
460
- granularity = _ref$granularity === void 0 ? 5 : _ref$granularity;
461
- /** Because GlitchEffect granularity is not an object but a number, we have to define a custom prop "granularity" */
462
- var effect = React$1.useMemo(function () {
463
- return new postprocessing.PixelationEffect(granularity);
464
- }, [granularity]);
465
- return /*#__PURE__*/React$1.createElement("primitive", {
466
- ref: ref,
467
- object: effect,
468
- dispose: null
469
- });
313
+ const Pixelation = React.forwardRef(function Pixelation({ granularity = 5 }, ref) {
314
+ /** Because GlitchEffect granularity is not an object but a number, we have to define a custom prop "granularity" */
315
+ const effect = React.useMemo(() => new postprocessing.PixelationEffect(granularity), [granularity]);
316
+ return jsxRuntime.jsx("primitive", { ref: ref, object: effect, dispose: null });
470
317
  });
471
318
 
472
- var Scanline = wrapEffect(postprocessing.ScanlineEffect, {
473
- blendFunction: postprocessing.BlendFunction.OVERLAY
474
- });
319
+ const Scanline = wrapEffect(postprocessing.ScanlineEffect, { blendFunction: postprocessing.BlendFunction.OVERLAY, density: 1.25 });
475
320
 
476
- var _excluded$3 = ["selection", "selectionLayer", "lights", "luminanceThreshold", "luminanceSmoothing", "intensity", "width", "height", "kernelSize", "mipmapBlur"];
477
- var addLight = function addLight(light, effect) {
478
- return light.layers.enable(effect.selection.layer);
479
- };
480
- var removeLight = function removeLight(light, effect) {
481
- return light.layers.disable(effect.selection.layer);
482
- };
483
- var SelectiveBloom = /*#__PURE__*/React$1.forwardRef(function SelectiveBloom(_ref, forwardRef) {
484
- var _ref$selection = _ref.selection,
485
- selection = _ref$selection === void 0 ? [] : _ref$selection,
486
- _ref$selectionLayer = _ref.selectionLayer,
487
- selectionLayer = _ref$selectionLayer === void 0 ? 10 : _ref$selectionLayer,
488
- _ref$lights = _ref.lights,
489
- lights = _ref$lights === void 0 ? [] : _ref$lights,
490
- luminanceThreshold = _ref.luminanceThreshold,
491
- luminanceSmoothing = _ref.luminanceSmoothing,
492
- intensity = _ref.intensity,
493
- width = _ref.width,
494
- height = _ref.height,
495
- kernelSize = _ref.kernelSize,
496
- mipmapBlur = _ref.mipmapBlur,
497
- props = _objectWithoutPropertiesLoose(_ref, _excluded$3);
498
- if (lights.length === 0) {
499
- console.warn('SelectiveBloom requires lights to work.');
500
- }
501
- var invalidate = fiber.useThree(function (state) {
502
- return state.invalidate;
503
- });
504
- var _useContext = React$1.useContext(EffectComposerContext),
505
- scene = _useContext.scene,
506
- camera = _useContext.camera;
507
- var effect = React$1.useMemo(function () {
508
- return new postprocessing.SelectiveBloomEffect(scene, camera, _extends({
509
- blendFunction: postprocessing.BlendFunction.ADD,
510
- luminanceThreshold: luminanceThreshold,
511
- luminanceSmoothing: luminanceSmoothing,
512
- intensity: intensity,
513
- width: width,
514
- height: height,
515
- kernelSize: kernelSize,
516
- mipmapBlur: mipmapBlur
517
- }, props));
518
- }, [scene, camera, luminanceThreshold, luminanceSmoothing, intensity, width, height, kernelSize, mipmapBlur, props]);
519
- var api = React$1.useContext(selectionContext);
520
- React$1.useEffect(function () {
521
- // Do not allow array selection if declarative selection is active
522
- // TODO: array selection should probably be deprecated altogether
523
- if (!api && selection) {
524
- effect.selection.set(Array.isArray(selection) ? selection.map(resolveRef) : [resolveRef(selection)]);
525
- invalidate();
526
- return function () {
527
- effect.selection.clear();
528
- invalidate();
529
- };
321
+ const addLight = (light, effect) => light.layers.enable(effect.selection.layer);
322
+ const removeLight = (light, effect) => light.layers.disable(effect.selection.layer);
323
+ const SelectiveBloom = React.forwardRef(function SelectiveBloom({ selection = [], selectionLayer = 10, lights = [], luminanceThreshold, luminanceSmoothing, intensity, width, height, kernelSize, mipmapBlur, ...props }, forwardRef) {
324
+ if (lights.length === 0) {
325
+ console.warn('SelectiveBloom requires lights to work.');
530
326
  }
531
- }, [effect, selection, api, invalidate]);
532
- React$1.useEffect(function () {
533
- effect.selection.layer = selectionLayer;
534
- invalidate();
535
- }, [effect, invalidate, selectionLayer]);
536
- React$1.useEffect(function () {
537
- if (lights && lights.length > 0) {
538
- lights.forEach(function (light) {
539
- return addLight(resolveRef(light), effect);
540
- });
541
- invalidate();
542
- return function () {
543
- lights.forEach(function (light) {
544
- return removeLight(resolveRef(light), effect);
545
- });
546
- invalidate();
547
- };
548
- }
549
- }, [effect, invalidate, lights, selectionLayer]);
550
- React$1.useRef();
551
- React$1.useEffect(function () {
552
- if (api && api.enabled) {
553
- var _api$selected;
554
- if ((_api$selected = api.selected) != null && _api$selected.length) {
555
- effect.selection.set(api.selected);
327
+ const invalidate = fiber.useThree((state) => state.invalidate);
328
+ const { scene, camera } = React.useContext(EffectComposerContext);
329
+ const effect = React.useMemo(() => new postprocessing.SelectiveBloomEffect(scene, camera, {
330
+ blendFunction: postprocessing.BlendFunction.ADD,
331
+ luminanceThreshold,
332
+ luminanceSmoothing,
333
+ intensity,
334
+ width,
335
+ height,
336
+ kernelSize,
337
+ mipmapBlur,
338
+ ...props,
339
+ }), [scene, camera, luminanceThreshold, luminanceSmoothing, intensity, width, height, kernelSize, mipmapBlur, props]);
340
+ const api = React.useContext(selectionContext);
341
+ React.useEffect(() => {
342
+ // Do not allow array selection if declarative selection is active
343
+ // TODO: array selection should probably be deprecated altogether
344
+ if (!api && selection) {
345
+ effect.selection.set(Array.isArray(selection) ? selection.map(resolveRef) : [resolveRef(selection)]);
346
+ invalidate();
347
+ return () => {
348
+ effect.selection.clear();
349
+ invalidate();
350
+ };
351
+ }
352
+ }, [effect, selection, api, invalidate]);
353
+ React.useEffect(() => {
354
+ effect.selection.layer = selectionLayer;
556
355
  invalidate();
557
- return function () {
558
- effect.selection.clear();
559
- invalidate();
560
- };
561
- }
562
- }
563
- }, [api, effect.selection, invalidate]);
564
- return /*#__PURE__*/React$1.createElement("primitive", {
565
- ref: forwardRef,
566
- object: effect,
567
- dispose: null
568
- });
356
+ }, [effect, invalidate, selectionLayer]);
357
+ React.useEffect(() => {
358
+ if (lights && lights.length > 0) {
359
+ lights.forEach((light) => addLight(resolveRef(light), effect));
360
+ invalidate();
361
+ return () => {
362
+ lights.forEach((light) => removeLight(resolveRef(light), effect));
363
+ invalidate();
364
+ };
365
+ }
366
+ }, [effect, invalidate, lights, selectionLayer]);
367
+ React.useEffect(() => {
368
+ var _a;
369
+ if (api && api.enabled) {
370
+ if ((_a = api.selected) === null || _a === void 0 ? void 0 : _a.length) {
371
+ effect.selection.set(api.selected);
372
+ invalidate();
373
+ return () => {
374
+ effect.selection.clear();
375
+ invalidate();
376
+ };
377
+ }
378
+ }
379
+ }, [api, effect.selection, invalidate]);
380
+ return jsxRuntime.jsx("primitive", { ref: forwardRef, object: effect, dispose: null });
569
381
  });
570
382
 
571
- var Sepia = wrapEffect(postprocessing.SepiaEffect);
572
-
573
- // first two args are camera and texture
383
+ const Sepia = wrapEffect(postprocessing.SepiaEffect);
574
384
 
575
- var SSAO = /*#__PURE__*/React$1.forwardRef(function SSAO(props, ref) {
576
- var _useContext = React$1.useContext(EffectComposerContext),
577
- camera = _useContext.camera,
578
- normalPass = _useContext.normalPass,
579
- downSamplingPass = _useContext.downSamplingPass,
580
- resolutionScale = _useContext.resolutionScale;
581
- var effect = React$1.useMemo(function () {
582
- if (normalPass === null && downSamplingPass === null) {
583
- console.error('Please enable the NormalPass in the EffectComposer in order to use SSAO.');
584
- return {};
585
- }
586
- return new postprocessing.SSAOEffect(camera, normalPass && !downSamplingPass ? normalPass.texture : null, _extends({
587
- blendFunction: postprocessing.BlendFunction.MULTIPLY,
588
- samples: 30,
589
- rings: 4,
590
- distanceThreshold: 1.0,
591
- distanceFalloff: 0.0,
592
- rangeThreshold: 0.5,
593
- rangeFalloff: 0.1,
594
- luminanceInfluence: 0.9,
595
- radius: 20,
596
- bias: 0.5,
597
- intensity: 1.0,
598
- color: undefined,
599
- // @ts-ignore
600
- normalDepthBuffer: downSamplingPass ? downSamplingPass.texture : null,
601
- resolutionScale: resolutionScale != null ? resolutionScale : 1,
602
- depthAwareUpsampling: true
603
- }, props));
604
- }, [camera, normalPass, props]);
605
- return /*#__PURE__*/React.createElement("primitive", {
606
- ref: ref,
607
- object: effect,
608
- dispose: null
609
- });
385
+ const SSAO = React.forwardRef(function SSAO(props, ref) {
386
+ const { camera, normalPass, downSamplingPass, resolutionScale } = React.useContext(EffectComposerContext);
387
+ const effect = React.useMemo(() => {
388
+ if (normalPass === null && downSamplingPass === null) {
389
+ console.error('Please enable the NormalPass in the EffectComposer in order to use SSAO.');
390
+ return {};
391
+ }
392
+ return new postprocessing.SSAOEffect(camera, normalPass && !downSamplingPass ? normalPass.texture : null, {
393
+ blendFunction: postprocessing.BlendFunction.MULTIPLY,
394
+ samples: 30,
395
+ rings: 4,
396
+ distanceThreshold: 1.0,
397
+ distanceFalloff: 0.0,
398
+ rangeThreshold: 0.5,
399
+ rangeFalloff: 0.1,
400
+ luminanceInfluence: 0.9,
401
+ radius: 20,
402
+ bias: 0.5,
403
+ intensity: 1.0,
404
+ color: undefined,
405
+ // @ts-ignore
406
+ normalDepthBuffer: downSamplingPass ? downSamplingPass.texture : null,
407
+ resolutionScale: resolutionScale !== null && resolutionScale !== void 0 ? resolutionScale : 1,
408
+ depthAwareUpsampling: true,
409
+ ...props,
410
+ });
411
+ }, [camera, normalPass, props]);
412
+ return jsxRuntime.jsx("primitive", { ref: ref, object: effect, dispose: null });
610
413
  });
611
414
 
612
- var SMAA = wrapEffect(postprocessing.SMAAEffect);
613
-
614
- var _excluded$2 = ["textureSrc", "texture"];
615
- var Texture = /*#__PURE__*/React$1.forwardRef(function Texture(_ref, ref) {
616
- var textureSrc = _ref.textureSrc,
617
- texture = _ref.texture,
618
- props = _objectWithoutPropertiesLoose(_ref, _excluded$2);
619
- var t = fiber.useLoader(THREE.TextureLoader, textureSrc);
620
- React$1.useLayoutEffect(function () {
621
- t.encoding = THREE.sRGBEncoding;
622
- t.wrapS = t.wrapT = THREE.RepeatWrapping;
623
- }, [t]);
624
- var effect = React$1.useMemo(function () {
625
- return new postprocessing.TextureEffect(_extends({}, props, {
626
- texture: t || texture
627
- }));
628
- }, [props, t, texture]);
629
- return /*#__PURE__*/React.createElement("primitive", {
630
- ref: ref,
631
- object: effect,
632
- dispose: null
633
- });
634
- });
415
+ const SMAA = wrapEffect(postprocessing.SMAAEffect);
635
416
 
636
- var ToneMapping = wrapEffect(postprocessing.ToneMappingEffect);
637
-
638
- var Vignette = wrapEffect(postprocessing.VignetteEffect);
639
-
640
- var ShockWave = wrapEffect(postprocessing.ShockWaveEffect);
641
-
642
- var _excluded$1 = ["lut", "tetrahedralInterpolation"];
643
- var LUT = /*#__PURE__*/React$1.forwardRef(function LUT(_ref, ref) {
644
- var lut = _ref.lut,
645
- tetrahedralInterpolation = _ref.tetrahedralInterpolation,
646
- props = _objectWithoutPropertiesLoose(_ref, _excluded$1);
647
- var effect = React$1.useMemo(function () {
648
- return new postprocessing.LUT3DEffect(lut, props);
649
- }, [lut, props]);
650
- var invalidate = fiber.useThree(function (state) {
651
- return state.invalidate;
652
- });
653
- React$1.useLayoutEffect(function () {
654
- if (tetrahedralInterpolation) effect.tetrahedralInterpolation = tetrahedralInterpolation;
655
- if (lut) effect.lut = lut;
656
- invalidate();
657
- }, [effect, invalidate, lut, tetrahedralInterpolation]);
658
- return /*#__PURE__*/React$1.createElement("primitive", {
659
- ref: ref,
660
- object: effect,
661
- dispose: null
662
- });
417
+ const Texture = React.forwardRef(function Texture({ textureSrc, texture, ...props }, ref) {
418
+ const t = fiber.useLoader(THREE.TextureLoader, textureSrc);
419
+ React.useLayoutEffect(() => {
420
+ t.encoding = THREE.sRGBEncoding;
421
+ t.wrapS = t.wrapT = THREE.RepeatWrapping;
422
+ }, [t]);
423
+ const effect = React.useMemo(() => new postprocessing.TextureEffect({ ...props, texture: t || texture }), [props, t, texture]);
424
+ return jsxRuntime.jsx("primitive", { ref: ref, object: effect, dispose: null });
663
425
  });
664
426
 
665
- var TiltShift = wrapEffect(postprocessing.TiltShiftEffect, {
666
- blendFunction: postprocessing.BlendFunction.ADD
667
- });
427
+ const ToneMapping = wrapEffect(postprocessing.ToneMappingEffect);
668
428
 
669
- var TiltShiftShader = {
670
- fragmentShader: "\n\n // original shader by Evan Wallace\n\n #define MAX_ITERATIONS 100\n\n uniform float blur;\n uniform float taper;\n uniform vec2 start;\n uniform vec2 end;\n uniform vec2 direction;\n uniform int samples;\n\n float random(vec3 scale, float seed) {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n }\n\n void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) {\n vec4 color = vec4(0.0);\n float total = 0.0;\n vec2 startPixel = vec2(start.x * resolution.x, start.y * resolution.y);\n vec2 endPixel = vec2(end.x * resolution.x, end.y * resolution.y);\n float f_samples = float(samples);\n float half_samples = f_samples / 2.0;\n\n // use screen diagonal to normalize blur radii\n float maxScreenDistance = distance(vec2(0.0), resolution); // diagonal distance\n float gradientRadius = taper * (maxScreenDistance);\n float blurRadius = blur * (maxScreenDistance / 16.0);\n\n /* randomize the lookup values to hide the fixed number of samples */\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(startPixel.y - endPixel.y, endPixel.x - startPixel.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(uv * resolution - startPixel, normal)) / gradientRadius) * blurRadius;\n\n #pragma unroll_loop_start\n for (int i = 0; i <= MAX_ITERATIONS; i++) {\n if (i >= samples) { break; } // return early if over sample count\n float f_i = float(i);\n float s_i = -half_samples + f_i;\n float percent = (s_i + offset - 0.5) / half_samples;\n float weight = 1.0 - abs(percent);\n vec4 sample_i = texture2D(inputBuffer, uv + normalize(direction) / resolution * percent * radius);\n /* switch to pre-multiplied alpha to correctly blur transparent images */\n sample_i.rgb *= sample_i.a;\n color += sample_i * weight;\n total += weight;\n }\n #pragma unroll_loop_end\n\n outputColor = color / total;\n\n /* switch back from pre-multiplied alpha */\n outputColor.rgb /= outputColor.a + 0.00001;\n }\n "
671
- };
672
- var TiltShiftEffect = /*#__PURE__*/function (_Effect) {
673
- _inheritsLoose(TiltShiftEffect, _Effect);
674
- function TiltShiftEffect(_temp) {
675
- var _ref = _temp === void 0 ? {} : _temp,
676
- _ref$blendFunction = _ref.blendFunction,
677
- blendFunction = _ref$blendFunction === void 0 ? postprocessing.BlendFunction.NORMAL : _ref$blendFunction,
678
- _ref$blur = _ref.blur,
679
- blur = _ref$blur === void 0 ? 0.15 : _ref$blur,
680
- _ref$taper = _ref.taper,
681
- taper = _ref$taper === void 0 ? 0.5 : _ref$taper,
682
- _ref$start = _ref.start,
683
- start = _ref$start === void 0 ? [0.5, 0.0] : _ref$start,
684
- _ref$end = _ref.end,
685
- end = _ref$end === void 0 ? [0.5, 1.0] : _ref$end,
686
- _ref$samples = _ref.samples,
687
- samples = _ref$samples === void 0 ? 10.0 : _ref$samples,
688
- _ref$direction = _ref.direction,
689
- direction = _ref$direction === void 0 ? [1, 1] : _ref$direction;
690
- return _Effect.call(this, 'TiltShiftEffect', TiltShiftShader.fragmentShader, {
691
- blendFunction: blendFunction,
692
- attributes: postprocessing.EffectAttribute.CONVOLUTION,
693
- uniforms: new Map([['blur', new THREE.Uniform(blur)], ['taper', new THREE.Uniform(taper)], ['start', new THREE.Uniform(start)], ['end', new THREE.Uniform(end)], ['samples', new THREE.Uniform(samples)], ['direction', new THREE.Uniform(direction)]])
694
- }) || this;
695
- }
696
- return TiltShiftEffect;
697
- }(postprocessing.Effect);
698
- var TiltShift2 = wrapEffect(TiltShiftEffect, {
699
- blendFunction: postprocessing.BlendFunction.NORMAL
700
- });
429
+ const Vignette = wrapEffect(postprocessing.VignetteEffect);
430
+
431
+ const ShockWave = wrapEffect(postprocessing.ShockWaveEffect);
701
432
 
702
- var _excluded = ["ENABLE_BLUR", "USE_MRT"];
703
-
704
- // first two args are camera and texture
705
-
706
- var SSR = /*#__PURE__*/React$1.forwardRef(function SSR(_ref, ref) {
707
- var _ref$ENABLE_BLUR = _ref.ENABLE_BLUR,
708
- ENABLE_BLUR = _ref$ENABLE_BLUR === void 0 ? true : _ref$ENABLE_BLUR,
709
- _ref$USE_MRT = _ref.USE_MRT,
710
- USE_MRT = _ref$USE_MRT === void 0 ? true : _ref$USE_MRT,
711
- props = _objectWithoutPropertiesLoose(_ref, _excluded);
712
- var _useThree = fiber.useThree(),
713
- invalidate = _useThree.invalidate;
714
- var _useContext = React$1.useContext(EffectComposerContext),
715
- scene = _useContext.scene,
716
- camera = _useContext.camera;
717
- var effect = React$1.useMemo(function () {
718
- return new screenSpaceReflections.SSREffect(scene, camera, _extends({
719
- ENABLE_BLUR: ENABLE_BLUR,
720
- USE_MRT: USE_MRT
721
- }, props));
722
- }, [scene, camera, ENABLE_BLUR, USE_MRT, props]);
723
- var api = React$1.useContext(selectionContext);
724
- React$1.useEffect(function () {
725
- if (api && api.enabled) {
726
- var _api$selected;
727
- if ((_api$selected = api.selected) != null && _api$selected.length) {
728
- effect.selection.set(api.selected);
433
+ const LUT = React.forwardRef(function LUT({ lut, tetrahedralInterpolation, ...props }, ref) {
434
+ const effect = React.useMemo(() => new postprocessing.LUT3DEffect(lut, props), [lut, props]);
435
+ const invalidate = fiber.useThree((state) => state.invalidate);
436
+ React.useLayoutEffect(() => {
437
+ if (tetrahedralInterpolation)
438
+ effect.tetrahedralInterpolation = tetrahedralInterpolation;
439
+ if (lut)
440
+ effect.lut = lut;
729
441
  invalidate();
730
- return function () {
731
- effect.selection.clear();
732
- invalidate();
733
- };
734
- }
442
+ }, [effect, invalidate, lut, tetrahedralInterpolation]);
443
+ return jsxRuntime.jsx("primitive", { ref: ref, object: effect, dispose: null });
444
+ });
445
+
446
+ const TiltShift = wrapEffect(postprocessing.TiltShiftEffect, { blendFunction: postprocessing.BlendFunction.ADD });
447
+
448
+ const TiltShiftShader = {
449
+ fragmentShader: `
450
+
451
+ // original shader by Evan Wallace
452
+
453
+ #define MAX_ITERATIONS 100
454
+
455
+ uniform float blur;
456
+ uniform float taper;
457
+ uniform vec2 start;
458
+ uniform vec2 end;
459
+ uniform vec2 direction;
460
+ uniform int samples;
461
+
462
+ float random(vec3 scale, float seed) {
463
+ /* use the fragment position for a different seed per-pixel */
464
+ return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);
465
+ }
466
+
467
+ void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) {
468
+ vec4 color = vec4(0.0);
469
+ float total = 0.0;
470
+ vec2 startPixel = vec2(start.x * resolution.x, start.y * resolution.y);
471
+ vec2 endPixel = vec2(end.x * resolution.x, end.y * resolution.y);
472
+ float f_samples = float(samples);
473
+ float half_samples = f_samples / 2.0;
474
+
475
+ // use screen diagonal to normalize blur radii
476
+ float maxScreenDistance = distance(vec2(0.0), resolution); // diagonal distance
477
+ float gradientRadius = taper * (maxScreenDistance);
478
+ float blurRadius = blur * (maxScreenDistance / 16.0);
479
+
480
+ /* randomize the lookup values to hide the fixed number of samples */
481
+ float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);
482
+ vec2 normal = normalize(vec2(startPixel.y - endPixel.y, endPixel.x - startPixel.x));
483
+ float radius = smoothstep(0.0, 1.0, abs(dot(uv * resolution - startPixel, normal)) / gradientRadius) * blurRadius;
484
+
485
+ #pragma unroll_loop_start
486
+ for (int i = 0; i <= MAX_ITERATIONS; i++) {
487
+ if (i >= samples) { break; } // return early if over sample count
488
+ float f_i = float(i);
489
+ float s_i = -half_samples + f_i;
490
+ float percent = (s_i + offset - 0.5) / half_samples;
491
+ float weight = 1.0 - abs(percent);
492
+ vec4 sample_i = texture2D(inputBuffer, uv + normalize(direction) / resolution * percent * radius);
493
+ /* switch to pre-multiplied alpha to correctly blur transparent images */
494
+ sample_i.rgb *= sample_i.a;
495
+ color += sample_i * weight;
496
+ total += weight;
497
+ }
498
+ #pragma unroll_loop_end
499
+
500
+ outputColor = color / total;
501
+
502
+ /* switch back from pre-multiplied alpha */
503
+ outputColor.rgb /= outputColor.a + 0.00001;
504
+ }
505
+ `,
506
+ };
507
+ class TiltShiftEffect extends postprocessing.Effect {
508
+ constructor({ blendFunction = postprocessing.BlendFunction.NORMAL, blur = 0.15, // [0, 1], can go beyond 1 for extra
509
+ taper = 0.5, // [0, 1], can go beyond 1 for extra
510
+ start = [0.5, 0.0], // [0,1] percentage x,y of screenspace
511
+ end = [0.5, 1.0], // [0,1] percentage x,y of screenspace
512
+ samples = 10.0, // number of blur samples
513
+ direction = [1, 1], // direction of blur
514
+ } = {}) {
515
+ super('TiltShiftEffect', TiltShiftShader.fragmentShader, {
516
+ blendFunction,
517
+ attributes: postprocessing.EffectAttribute.CONVOLUTION,
518
+ uniforms: new Map([
519
+ ['blur', new THREE.Uniform(blur)],
520
+ ['taper', new THREE.Uniform(taper)],
521
+ ['start', new THREE.Uniform(start)],
522
+ ['end', new THREE.Uniform(end)],
523
+ ['samples', new THREE.Uniform(samples)],
524
+ ['direction', new THREE.Uniform(direction)],
525
+ ]),
526
+ });
735
527
  }
736
- }, [api]);
737
- return /*#__PURE__*/React$1.createElement("primitive", _extends({
738
- ref: ref,
739
- object: effect
740
- }, props));
528
+ }
529
+ const TiltShift2 = wrapEffect(TiltShiftEffect, { blendFunction: postprocessing.BlendFunction.NORMAL });
530
+
531
+ const SSR = React.forwardRef(function SSR({ ENABLE_BLUR = true, USE_MRT = true, ...props }, ref) {
532
+ const { invalidate } = fiber.useThree();
533
+ const { scene, camera } = React.useContext(EffectComposerContext);
534
+ const effect = React.useMemo(() => new screenSpaceReflections.SSREffect(scene, camera, { ENABLE_BLUR, USE_MRT, ...props }), [scene, camera, ENABLE_BLUR, USE_MRT, props]);
535
+ const api = React.useContext(selectionContext);
536
+ React.useEffect(() => {
537
+ var _a;
538
+ if (api && api.enabled) {
539
+ if ((_a = api.selected) === null || _a === void 0 ? void 0 : _a.length) {
540
+ effect.selection.set(api.selected);
541
+ invalidate();
542
+ return () => {
543
+ effect.selection.clear();
544
+ invalidate();
545
+ };
546
+ }
547
+ }
548
+ }, [api]);
549
+ return jsxRuntime.jsx("primitive", { ref: ref, object: effect, ...props });
741
550
  });
742
551
 
743
552
  exports.Bloom = Bloom;