@react-three/postprocessing 2.4.2 → 2.4.5

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.
@@ -1,7 +1,6 @@
1
- import * as THREE from 'three';
1
+ import { TextureDataType } from 'three';
2
2
  import React from 'react';
3
3
  import { EffectComposer as EffectComposerImpl, NormalPass, DepthDownsamplingPass } from 'postprocessing';
4
- import { TextureDataType } from 'three';
5
4
  export declare const EffectComposerContext: React.Context<{
6
5
  composer: EffectComposerImpl;
7
6
  normalPass: NormalPass | null;
@@ -1,47 +1,49 @@
1
- import React from 'react';
1
+ /// <reference types="react" />
2
2
  declare type SSRProps = {
3
3
  /** Enables the effect pass */
4
- enabled: boolean;
4
+ enabled?: boolean;
5
+ /** Size of the output buffer */
6
+ resolutionScale?: number;
5
7
  /** Size of the blur buffer */
6
- blurSize: number;
8
+ blurSize?: number;
7
9
  /** Whether to blur the reflections and blend these blurred reflections depending on the roughness and depth of the reflection ray */
8
- useBlur: boolean;
10
+ useBlur?: boolean;
9
11
  /** The kernel size of the blur pass which is used to blur reflections; higher kernel sizes will result in blurrier reflections with more artifacts */
10
- blurKernelSize: number;
12
+ blurKernelSize?: number;
11
13
  /** How much the reflection ray should travel in each of its iteration; higher values will give deeper reflections but with more artifacts */
12
- rayStep: number;
14
+ rayStep?: number;
13
15
  /** The intensity of the reflections */
14
- intensity: number;
16
+ intensity?: number;
15
17
  /** The power by which the reflections should be potentiated; higher values will give a more intense and vibrant look */
16
- power: number;
18
+ power?: number;
17
19
  /** How much deep reflections will be blurred (as reflections become blurrier the further away the object they are reflecting is) */
18
- depthBlur: number;
20
+ depthBlur?: number;
19
21
  /** Whether jittering is enabled; jittering will randomly jitter the reflections resulting in a more noisy but overall more realistic look, enabling jittering can be expensive depending on the view angle */
20
- enableJittering: boolean;
22
+ enableJittering?: boolean;
21
23
  /** How intense jittering should be */
22
- jitter: number;
24
+ jitter?: number;
23
25
  /** How much the jittered rays should be spread; higher values will give a rougher look regarding the reflections but are more expensive to compute with */
24
- jitterSpread: number;
26
+ jitterSpread?: number;
25
27
  /** Roughness fade out */
26
- roughnessFadeOut: number;
28
+ roughnessFadeOut?: number;
27
29
  /** The number of steps a reflection ray can maximally do to find an object it intersected (and thus reflects) */
28
- MAX_STEPS: number;
30
+ MAX_STEPS?: number;
29
31
  /** Once we had our ray intersect something, we need to find the exact point in space it intersected and thus it reflects; this can be done through binary search with the given number of maximum steps */
30
- NUM_BINARY_SEARCH_STEPS: number;
32
+ NUM_BINARY_SEARCH_STEPS?: number;
31
33
  /** The maximum depth difference between a ray and the particular depth at its screen position after refining with binary search; lower values will result in better performance */
32
- maxDepthDifference: number;
34
+ maxDepthDifference?: number;
33
35
  /** The maximum depth for which reflections will be calculated */
34
- maxDepth: number;
36
+ maxDepth?: number;
35
37
  /** The maximum depth difference between a ray and the particular depth at its screen position before refining with binary search; lower values will result in better performance */
36
- thickness: number;
38
+ thickness?: number;
37
39
  /** Index of Refraction, used for calculating fresnel; reflections tend to be more intense the steeper the angle between them and the viewer is, the ior parameter set how much the intensity varies */
38
- ior: number;
40
+ ior?: number;
39
41
  /** WebGL2 only - whether to use multiple render targets when rendering the G-buffers (normals, depth and roughness); using them can improve performance as they will render all information to multiple buffers for each fragment in one run */
40
- useMRT: boolean;
42
+ useMRT?: boolean;
41
43
  /** If normal maps should be taken account of when calculating reflections */
42
- useNormalMap: boolean;
44
+ useNormalMap?: boolean;
43
45
  /** If roughness maps should be taken account of when calculating reflections */
44
- useRoughnessMap: boolean;
46
+ useRoughnessMap?: boolean;
45
47
  };
46
- export declare const SSR: React.ForwardRefExoticComponent<SSRProps & React.RefAttributes<SSRPass>>;
48
+ export declare const SSR: import("react").ForwardRefExoticComponent<SSRProps & import("react").RefAttributes<SSRPass>>;
47
49
  export {};
package/dist/index.cjs CHANGED
@@ -5,7 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var postprocessing = require('postprocessing');
6
6
  var _objectWithoutPropertiesLoose = require('@babel/runtime/helpers/objectWithoutPropertiesLoose');
7
7
  var React = require('react');
8
- var THREE = require('three');
8
+ var three = require('three');
9
9
  var fiber = require('@react-three/fiber');
10
10
  var _extends = require('@babel/runtime/helpers/extends');
11
11
  var _construct = require('@babel/runtime/helpers/construct');
@@ -15,27 +15,8 @@ var screenSpaceReflections = require('screen-space-reflections');
15
15
 
16
16
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
17
17
 
18
- function _interopNamespace(e) {
19
- if (e && e.__esModule) return e;
20
- var n = Object.create(null);
21
- if (e) {
22
- Object.keys(e).forEach(function (k) {
23
- if (k !== 'default') {
24
- var d = Object.getOwnPropertyDescriptor(e, k);
25
- Object.defineProperty(n, k, d.get ? d : {
26
- enumerable: true,
27
- get: function () { return e[k]; }
28
- });
29
- }
30
- });
31
- }
32
- n["default"] = e;
33
- return Object.freeze(n);
34
- }
35
-
36
18
  var _objectWithoutPropertiesLoose__default = /*#__PURE__*/_interopDefaultLegacy(_objectWithoutPropertiesLoose);
37
19
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
38
- var THREE__namespace = /*#__PURE__*/_interopNamespace(THREE);
39
20
  var _extends__default = /*#__PURE__*/_interopDefaultLegacy(_extends);
40
21
  var _construct__default = /*#__PURE__*/_interopDefaultLegacy(_construct);
41
22
  var mergeRefs__default = /*#__PURE__*/_interopDefaultLegacy(mergeRefs);
@@ -80,12 +61,12 @@ var wrapEffect = function wrapEffect(effectImpl, defaultBlendMode) {
80
61
  var useVector2 = function useVector2(props, key) {
81
62
  var vec = props[key];
82
63
  return React.useMemo(function () {
83
- if (vec instanceof THREE.Vector2) {
84
- return new THREE.Vector2().set(vec.x, vec.y);
64
+ if (vec instanceof three.Vector2) {
65
+ return new three.Vector2().set(vec.x, vec.y);
85
66
  } else if (Array.isArray(vec)) {
86
67
  var x = vec[0],
87
68
  y = vec[1];
88
- return new THREE.Vector2().set(x, y);
69
+ return new three.Vector2().set(x, y);
89
70
  }
90
71
  }, [vec]);
91
72
  };
@@ -145,7 +126,7 @@ var EffectComposer = /*#__PURE__*/React__default["default"].memo( /*#__PURE__*/R
145
126
  _ref$multisampling = _ref.multisampling,
146
127
  multisampling = _ref$multisampling === void 0 ? 8 : _ref$multisampling,
147
128
  _ref$frameBufferType = _ref.frameBufferType,
148
- frameBufferType = _ref$frameBufferType === void 0 ? THREE__namespace.HalfFloatType : _ref$frameBufferType;
129
+ frameBufferType = _ref$frameBufferType === void 0 ? three.HalfFloatType : _ref$frameBufferType;
149
130
 
150
131
  var _useThree = fiber.useThree(),
151
132
  gl = _useThree.gl,
@@ -262,7 +243,7 @@ var DepthOfField = /*#__PURE__*/React.forwardRef(function DepthOfField(_ref, ref
262
243
  }, [camera, props]);
263
244
  React.useLayoutEffect(function () {
264
245
  if (target) {
265
- 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]);
246
+ 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]);
266
247
  effect.target = vec;
267
248
  }
268
249
 
@@ -673,10 +654,10 @@ var Texture = /*#__PURE__*/React.forwardRef(function Texture(_ref, ref) {
673
654
  texture = _ref.texture,
674
655
  props = _objectWithoutPropertiesLoose__default["default"](_ref, _excluded$2);
675
656
 
676
- var t = fiber.useLoader(THREE.TextureLoader, textureSrc);
657
+ var t = fiber.useLoader(three.TextureLoader, textureSrc);
677
658
  React.useLayoutEffect(function () {
678
- t.encoding = THREE.sRGBEncoding;
679
- t.wrapS = t.wrapT = THREE.RepeatWrapping;
659
+ t.encoding = three.sRGBEncoding;
660
+ t.wrapS = t.wrapT = three.RepeatWrapping;
680
661
  }, [t]);
681
662
  var effect = React.useMemo(function () {
682
663
  return new postprocessing.TextureEffect(_extends__default["default"]({}, props, {
@@ -720,10 +701,12 @@ var LUT = /*#__PURE__*/React.forwardRef(function LUT(_ref, ref) {
720
701
  });
721
702
  });
722
703
 
723
- var _excluded = ["blurSize", "enabled"];
704
+ var _excluded = ["resolutionScale", "blurSize", "enabled"];
724
705
 
725
706
  var SSR = /*#__PURE__*/React.forwardRef(function SSR(_ref, ref) {
726
- var _ref$blurSize = _ref.blurSize,
707
+ var _ref$resolutionScale = _ref.resolutionScale,
708
+ resolutionScale = _ref$resolutionScale === void 0 ? 1 : _ref$resolutionScale,
709
+ _ref$blurSize = _ref.blurSize,
727
710
  blurSize = _ref$blurSize === void 0 ? 512 : _ref$blurSize,
728
711
  _ref$enabled = _ref.enabled,
729
712
  enabled = _ref$enabled === void 0 ? true : _ref$enabled,
@@ -739,42 +722,40 @@ var SSR = /*#__PURE__*/React.forwardRef(function SSR(_ref, ref) {
739
722
  scene = _useContext.scene,
740
723
  camera = _useContext.camera;
741
724
 
742
- var _useState = React.useState(_extends__default["default"]({
743
- width: size.width,
744
- height: size.height,
745
- blurWidth: blurSize,
746
- blurHeight: blurSize,
747
- blurKernelSize: postprocessing.KernelSize.SMALL,
748
- rayStep: 0.1,
749
- intensity: 1,
750
- power: 1,
751
- depthBlur: 0.1,
752
- enableJittering: false,
753
- jitter: 0.1,
754
- jitterSpread: 0.1,
755
- roughnessFadeOut: 1,
756
- MAX_STEPS: 20,
757
- NUM_BINARY_SEARCH_STEPS: 5,
758
- maxDepthDifference: 1,
759
- maxDepth: 1,
760
- thickness: 10,
761
- ior: 1.45,
762
- useBlur: true,
763
- useMRT: true,
764
- useNormalMap: true,
765
- useRoughnessMap: true
766
- }, props)),
767
- options = _useState[0];
768
-
769
- var _useState2 = React.useState(function () {
770
- return new screenSpaceReflections.SSRPass(composer, scene, camera, options);
725
+ var _useState = React.useState(function () {
726
+ return new screenSpaceReflections.SSRPass(scene, camera, _extends__default["default"]({
727
+ width: size.width * viewport.dpr * resolutionScale,
728
+ height: size.height * viewport.dpr * resolutionScale,
729
+ blurWidth: blurSize,
730
+ blurHeight: blurSize,
731
+ blurKernelSize: postprocessing.KernelSize.SMALL,
732
+ rayStep: 0.1,
733
+ intensity: 1,
734
+ power: 1,
735
+ depthBlur: 0.1,
736
+ enableJittering: false,
737
+ jitter: 0.1,
738
+ jitterSpread: 0.1,
739
+ roughnessFadeOut: 1,
740
+ MAX_STEPS: 20,
741
+ NUM_BINARY_SEARCH_STEPS: 5,
742
+ maxDepthDifference: 1,
743
+ maxDepth: 1,
744
+ thickness: 10,
745
+ ior: 1.45,
746
+ useBlur: true,
747
+ useMRT: true,
748
+ useNormalMap: true,
749
+ useRoughnessMap: true
750
+ }, props));
771
751
  }),
772
- pass = _useState2[0];
752
+ pass = _useState[0];
773
753
 
774
754
  React.useEffect(function () {
775
755
  Object.keys(props).forEach(function (key) {
776
756
  return pass.reflectionUniforms[key] && (pass.reflectionUniforms[key].value = props[key]);
777
757
  });
758
+ invalidate();
778
759
  }, [props]);
779
760
  React.useEffect(function () {
780
761
  // Steps
@@ -801,16 +782,17 @@ var SSR = /*#__PURE__*/React.forwardRef(function SSR(_ref, ref) {
801
782
 
802
783
  pass.reflectionsPass.fullscreenMaterial.needsUpdate = true;
803
784
  pass.fullscreenMaterial.needsUpdate = true;
785
+ invalidate();
804
786
  }, [enabled, props.useBlur, props.enableJittering, props.NUM_BINARY_SEARCH_STEPS, props.MAX_STEPS]);
805
787
  React.useEffect(function () {
806
- pass.setSize(size.width * viewport.dpr, size.height * viewport.dpr);
788
+ pass.setSize(size.width * viewport.dpr * resolutionScale, size.height * viewport.dpr * resolutionScale);
807
789
  pass.kawaseBlurPass.setSize(blurSize, blurSize);
808
790
  invalidate();
809
- }, [blurSize, size, viewport, composer, pass, invalidate]);
791
+ }, [resolutionScale, blurSize, size, viewport, composer, pass, invalidate]);
810
792
  React.useLayoutEffect(function () {
811
793
  composer.addPass(pass);
812
794
  return function () {
813
- composer.removePass(pass);
795
+ composer.removePass(pass); //pass.dispose()
814
796
  };
815
797
  }, [composer, pass]);
816
798
  return null;
package/dist/index.js CHANGED
@@ -1,7 +1,6 @@
1
1
  import { BlendFunction, BloomEffect, BrightnessContrastEffect, ChromaticAberrationEffect, ColorAverageEffect, ColorDepthEffect, DepthEffect, EffectComposer as EffectComposer$1, RenderPass, NormalPass, DepthDownsamplingPass, EffectPass, DepthOfFieldEffect, DotScreenEffect, GlitchEffect, GlitchMode, GodRaysEffect, GridEffect, HueSaturationEffect, NoiseEffect, OutlineEffect, PixelationEffect, ScanlineEffect, SelectiveBloomEffect, SepiaEffect, SSAOEffect, SMAAPreset, EdgeDetectionMode, SMAAImageLoader, SMAAEffect, TextureEffect, ToneMappingEffect, VignetteEffect, ShockWaveEffect, LUTEffect, KernelSize } from 'postprocessing';
2
2
  import React, { forwardRef, useMemo, useLayoutEffect, createContext, useEffect, useRef, useImperativeHandle, useContext, useState } from 'react';
3
- import * as THREE from 'three';
4
- import { Vector2, Vector3, TextureLoader, sRGBEncoding, RepeatWrapping } from 'three';
3
+ import { Vector2, HalfFloatType, Vector3, TextureLoader, sRGBEncoding, RepeatWrapping } from 'three';
5
4
  import { useThree, useFrame, useLoader } from '@react-three/fiber';
6
5
  import { isWebGL2Available } from 'three-stdlib';
7
6
  import mergeRefs from 'react-merge-refs';
@@ -96,7 +95,7 @@ const EffectComposer = /*#__PURE__*/React.memo( /*#__PURE__*/forwardRef((_ref, r
96
95
  disableNormalPass,
97
96
  stencilBuffer,
98
97
  multisampling = 8,
99
- frameBufferType = THREE.HalfFloatType
98
+ frameBufferType = HalfFloatType
100
99
  } = _ref;
101
100
  const {
102
101
  gl,
@@ -598,6 +597,7 @@ const LUT = /*#__PURE__*/forwardRef(function LUT(_ref, ref) {
598
597
 
599
598
  const SSR = /*#__PURE__*/forwardRef(function SSR(_ref, ref) {
600
599
  let {
600
+ resolutionScale = 1,
601
601
  blurSize = 512,
602
602
  enabled = true,
603
603
  ...props
@@ -612,9 +612,9 @@ const SSR = /*#__PURE__*/forwardRef(function SSR(_ref, ref) {
612
612
  scene,
613
613
  camera
614
614
  } = useContext(EffectComposerContext);
615
- const [options] = useState({
616
- width: size.width,
617
- height: size.height,
615
+ const [pass] = useState(() => new SSRPass(scene, camera, {
616
+ width: size.width * viewport.dpr * resolutionScale,
617
+ height: size.height * viewport.dpr * resolutionScale,
618
618
  blurWidth: blurSize,
619
619
  blurHeight: blurSize,
620
620
  blurKernelSize: KernelSize.SMALL,
@@ -637,10 +637,10 @@ const SSR = /*#__PURE__*/forwardRef(function SSR(_ref, ref) {
637
637
  useNormalMap: true,
638
638
  useRoughnessMap: true,
639
639
  ...props
640
- });
641
- const [pass] = useState(() => new SSRPass(composer, scene, camera, options));
640
+ }));
642
641
  useEffect(() => {
643
642
  Object.keys(props).forEach(key => pass.reflectionUniforms[key] && (pass.reflectionUniforms[key].value = props[key]));
643
+ invalidate();
644
644
  }, [props]);
645
645
  useEffect(() => {
646
646
  // Steps
@@ -667,16 +667,17 @@ const SSR = /*#__PURE__*/forwardRef(function SSR(_ref, ref) {
667
667
 
668
668
  pass.reflectionsPass.fullscreenMaterial.needsUpdate = true;
669
669
  pass.fullscreenMaterial.needsUpdate = true;
670
+ invalidate();
670
671
  }, [enabled, props.useBlur, props.enableJittering, props.NUM_BINARY_SEARCH_STEPS, props.MAX_STEPS]);
671
672
  useEffect(() => {
672
- pass.setSize(size.width * viewport.dpr, size.height * viewport.dpr);
673
+ pass.setSize(size.width * viewport.dpr * resolutionScale, size.height * viewport.dpr * resolutionScale);
673
674
  pass.kawaseBlurPass.setSize(blurSize, blurSize);
674
675
  invalidate();
675
- }, [blurSize, size, viewport, composer, pass, invalidate]);
676
+ }, [resolutionScale, blurSize, size, viewport, composer, pass, invalidate]);
676
677
  useLayoutEffect(() => {
677
678
  composer.addPass(pass);
678
679
  return () => {
679
- composer.removePass(pass);
680
+ composer.removePass(pass); //pass.dispose()
680
681
  };
681
682
  }, [composer, pass]);
682
683
  return null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-three/postprocessing",
3
- "version": "2.4.2",
3
+ "version": "2.4.5",
4
4
  "description": "postprocessing wrapper for React and @react-three/fiber",
5
5
  "keywords": [
6
6
  "postprocessing",
@@ -41,7 +41,7 @@
41
41
  "dependencies": {
42
42
  "postprocessing": "^6.28.1",
43
43
  "react-merge-refs": "^1.1.0",
44
- "screen-space-reflections": "^1.0.6",
44
+ "screen-space-reflections": "^1.0.7",
45
45
  "three-stdlib": "^2.8.11"
46
46
  },
47
47
  "devDependencies": {