@react-three/postprocessing 2.4.0 → 2.4.3

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,45 +1,47 @@
1
1
  import React from 'react';
2
2
  declare type SSRProps = {
3
+ /** Enables the effect pass */
4
+ enabled?: boolean;
3
5
  /** Size of the blur buffer */
4
- blurSize: number;
6
+ blurSize?: number;
5
7
  /** Whether to blur the reflections and blend these blurred reflections depending on the roughness and depth of the reflection ray */
6
- useBlur: boolean;
8
+ useBlur?: boolean;
7
9
  /** The kernel size of the blur pass which is used to blur reflections; higher kernel sizes will result in blurrier reflections with more artifacts */
8
- blurKernelSize: number;
10
+ blurKernelSize?: number;
9
11
  /** How much the reflection ray should travel in each of its iteration; higher values will give deeper reflections but with more artifacts */
10
- rayStep: number;
12
+ rayStep?: number;
11
13
  /** The intensity of the reflections */
12
- intensity: number;
14
+ intensity?: number;
13
15
  /** The power by which the reflections should be potentiated; higher values will give a more intense and vibrant look */
14
- power: number;
16
+ power?: number;
15
17
  /** How much deep reflections will be blurred (as reflections become blurrier the further away the object they are reflecting is) */
16
- depthBlur: number;
18
+ depthBlur?: number;
17
19
  /** 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 */
18
- enableJittering: boolean;
20
+ enableJittering?: boolean;
19
21
  /** How intense jittering should be */
20
- jitter: number;
22
+ jitter?: number;
21
23
  /** 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 */
22
- jitterSpread: number;
24
+ jitterSpread?: number;
23
25
  /** Roughness fade out */
24
- roughnessFadeOut: number;
26
+ roughnessFadeOut?: number;
25
27
  /** The number of steps a reflection ray can maximally do to find an object it intersected (and thus reflects) */
26
- MAX_STEPS: number;
28
+ MAX_STEPS?: number;
27
29
  /** 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 */
28
- NUM_BINARY_SEARCH_STEPS: number;
30
+ NUM_BINARY_SEARCH_STEPS?: number;
29
31
  /** 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 */
30
- maxDepthDifference: number;
32
+ maxDepthDifference?: number;
31
33
  /** The maximum depth for which reflections will be calculated */
32
- maxDepth: number;
34
+ maxDepth?: number;
33
35
  /** 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 */
34
- thickness: number;
36
+ thickness?: number;
35
37
  /** 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 */
36
- ior: number;
38
+ ior?: number;
37
39
  /** 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 */
38
- useMRT: boolean;
40
+ useMRT?: boolean;
39
41
  /** If normal maps should be taken account of when calculating reflections */
40
- useNormalMap: boolean;
42
+ useNormalMap?: boolean;
41
43
  /** If roughness maps should be taken account of when calculating reflections */
42
- useRoughnessMap: boolean;
44
+ useRoughnessMap?: boolean;
43
45
  };
44
46
  export declare const SSR: React.ForwardRefExoticComponent<SSRProps & React.RefAttributes<SSRPass>>;
45
47
  export {};
package/dist/index.cjs CHANGED
@@ -720,11 +720,13 @@ var LUT = /*#__PURE__*/React.forwardRef(function LUT(_ref, ref) {
720
720
  });
721
721
  });
722
722
 
723
- var _excluded = ["blurSize"];
723
+ var _excluded = ["blurSize", "enabled"];
724
724
 
725
725
  var SSR = /*#__PURE__*/React.forwardRef(function SSR(_ref, ref) {
726
726
  var _ref$blurSize = _ref.blurSize,
727
727
  blurSize = _ref$blurSize === void 0 ? 512 : _ref$blurSize,
728
+ _ref$enabled = _ref.enabled,
729
+ enabled = _ref$enabled === void 0 ? true : _ref$enabled,
728
730
  props = _objectWithoutPropertiesLoose__default["default"](_ref, _excluded);
729
731
 
730
732
  var _useThree = fiber.useThree(),
@@ -737,37 +739,34 @@ var SSR = /*#__PURE__*/React.forwardRef(function SSR(_ref, ref) {
737
739
  scene = _useContext.scene,
738
740
  camera = _useContext.camera;
739
741
 
740
- var _useState = React.useState(_extends__default["default"]({
741
- width: size.width,
742
- height: size.height,
743
- blurWidth: blurSize,
744
- blurHeight: blurSize,
745
- blurKernelSize: postprocessing.KernelSize.SMALL,
746
- rayStep: 0.1,
747
- intensity: 1,
748
- power: 1,
749
- depthBlur: 0.1,
750
- enableJittering: false,
751
- jitter: 0.1,
752
- jitterSpread: 0.1,
753
- roughnessFadeOut: 1,
754
- MAX_STEPS: 20,
755
- NUM_BINARY_SEARCH_STEPS: 5,
756
- maxDepthDifference: 1,
757
- maxDepth: 1,
758
- thickness: 10,
759
- ior: 1.45,
760
- useBlur: true,
761
- useMRT: true,
762
- useNormalMap: true,
763
- useRoughnessMap: true
764
- }, props)),
765
- options = _useState[0];
766
-
767
- var _useState2 = React.useState(function () {
768
- return new screenSpaceReflections.SSRPass(composer, scene, camera, options);
742
+ var _useState = React.useState(function () {
743
+ return new screenSpaceReflections.SSRPass(composer, scene, camera, _extends__default["default"]({
744
+ width: size.width * viewport.dpr,
745
+ height: size.height * viewport.dpr,
746
+ blurWidth: blurSize,
747
+ blurHeight: blurSize,
748
+ blurKernelSize: postprocessing.KernelSize.SMALL,
749
+ rayStep: 0.1,
750
+ intensity: 1,
751
+ power: 1,
752
+ depthBlur: 0.1,
753
+ enableJittering: false,
754
+ jitter: 0.1,
755
+ jitterSpread: 0.1,
756
+ roughnessFadeOut: 1,
757
+ MAX_STEPS: 20,
758
+ NUM_BINARY_SEARCH_STEPS: 5,
759
+ maxDepthDifference: 1,
760
+ maxDepth: 1,
761
+ thickness: 10,
762
+ ior: 1.45,
763
+ useBlur: true,
764
+ useMRT: true,
765
+ useNormalMap: true,
766
+ useRoughnessMap: true
767
+ }, props));
769
768
  }),
770
- pass = _useState2[0];
769
+ pass = _useState[0];
771
770
 
772
771
  React.useEffect(function () {
773
772
  Object.keys(props).forEach(function (key) {
@@ -775,24 +774,31 @@ var SSR = /*#__PURE__*/React.forwardRef(function SSR(_ref, ref) {
775
774
  });
776
775
  }, [props]);
777
776
  React.useEffect(function () {
777
+ // Steps
778
+ pass.reflectionsPass.fullscreenMaterial.defines.MAX_STEPS = Math.ceil(props.MAX_STEPS);
779
+ pass.reflectionsPass.fullscreenMaterial.defines.NUM_BINARY_SEARCH_STEPS = Math.ceil(props.NUM_BINARY_SEARCH_STEPS); // Blur
780
+
778
781
  if (props.useBlur) {
779
782
  pass.fullscreenMaterial.defines.USE_BLUR = '';
780
783
  pass.reflectionsPass.fullscreenMaterial.defines.USE_BLUR = '';
781
784
  } else {
782
785
  delete pass.fullscreenMaterial.defines.USE_BLUR;
783
786
  delete pass.reflectionsPass.fullscreenMaterial.defines.USE_BLUR;
784
- }
787
+ } // Jitter
788
+
785
789
 
786
790
  if (props.enableJittering) {
787
791
  pass.reflectionsPass.fullscreenMaterial.defines.USE_JITTERING = '';
788
792
  } else {
789
793
  delete pass.reflectionsPass.fullscreenMaterial.defines.USE_JITTERING;
790
- }
794
+ } // Enabled
795
+
796
+
797
+ pass.fullscreenMaterial.defines.RENDER_MODE = enabled ? 0 : 4; // Update materials
791
798
 
792
- pass.reflectionsPass.fullscreenMaterial.defines.MAX_STEPS = props.MAX_STEPS;
793
- pass.reflectionsPass.fullscreenMaterial.defines.NUM_BINARY_SEARCH_STEPS = props.NUM_BINARY_SEARCH_STEPS;
794
799
  pass.reflectionsPass.fullscreenMaterial.needsUpdate = true;
795
- }, [props.useBlur, props.enableJittering, props.NUM_BINARY_SEARCH_STEPS, props.MAX_STEPS]);
800
+ pass.fullscreenMaterial.needsUpdate = true;
801
+ }, [enabled, props.useBlur, props.enableJittering, props.NUM_BINARY_SEARCH_STEPS, props.MAX_STEPS]);
796
802
  React.useEffect(function () {
797
803
  pass.setSize(size.width * viewport.dpr, size.height * viewport.dpr);
798
804
  pass.kawaseBlurPass.setSize(blurSize, blurSize);
package/dist/index.js CHANGED
@@ -599,6 +599,7 @@ const LUT = /*#__PURE__*/forwardRef(function LUT(_ref, ref) {
599
599
  const SSR = /*#__PURE__*/forwardRef(function SSR(_ref, ref) {
600
600
  let {
601
601
  blurSize = 512,
602
+ enabled = true,
602
603
  ...props
603
604
  } = _ref;
604
605
  const {
@@ -611,9 +612,9 @@ const SSR = /*#__PURE__*/forwardRef(function SSR(_ref, ref) {
611
612
  scene,
612
613
  camera
613
614
  } = useContext(EffectComposerContext);
614
- const [options] = useState({
615
- width: size.width,
616
- height: size.height,
615
+ const [pass] = useState(() => new SSRPass(composer, scene, camera, {
616
+ width: size.width * viewport.dpr,
617
+ height: size.height * viewport.dpr,
617
618
  blurWidth: blurSize,
618
619
  blurHeight: blurSize,
619
620
  blurKernelSize: KernelSize.SMALL,
@@ -636,30 +637,36 @@ const SSR = /*#__PURE__*/forwardRef(function SSR(_ref, ref) {
636
637
  useNormalMap: true,
637
638
  useRoughnessMap: true,
638
639
  ...props
639
- });
640
- const [pass] = useState(() => new SSRPass(composer, scene, camera, options));
640
+ }));
641
641
  useEffect(() => {
642
642
  Object.keys(props).forEach(key => pass.reflectionUniforms[key] && (pass.reflectionUniforms[key].value = props[key]));
643
643
  }, [props]);
644
644
  useEffect(() => {
645
+ // Steps
646
+ pass.reflectionsPass.fullscreenMaterial.defines.MAX_STEPS = Math.ceil(props.MAX_STEPS);
647
+ pass.reflectionsPass.fullscreenMaterial.defines.NUM_BINARY_SEARCH_STEPS = Math.ceil(props.NUM_BINARY_SEARCH_STEPS); // Blur
648
+
645
649
  if (props.useBlur) {
646
650
  pass.fullscreenMaterial.defines.USE_BLUR = '';
647
651
  pass.reflectionsPass.fullscreenMaterial.defines.USE_BLUR = '';
648
652
  } else {
649
653
  delete pass.fullscreenMaterial.defines.USE_BLUR;
650
654
  delete pass.reflectionsPass.fullscreenMaterial.defines.USE_BLUR;
651
- }
655
+ } // Jitter
656
+
652
657
 
653
658
  if (props.enableJittering) {
654
659
  pass.reflectionsPass.fullscreenMaterial.defines.USE_JITTERING = '';
655
660
  } else {
656
661
  delete pass.reflectionsPass.fullscreenMaterial.defines.USE_JITTERING;
657
- }
662
+ } // Enabled
663
+
664
+
665
+ pass.fullscreenMaterial.defines.RENDER_MODE = enabled ? 0 : 4; // Update materials
658
666
 
659
- pass.reflectionsPass.fullscreenMaterial.defines.MAX_STEPS = props.MAX_STEPS;
660
- pass.reflectionsPass.fullscreenMaterial.defines.NUM_BINARY_SEARCH_STEPS = props.NUM_BINARY_SEARCH_STEPS;
661
667
  pass.reflectionsPass.fullscreenMaterial.needsUpdate = true;
662
- }, [props.useBlur, props.enableJittering, props.NUM_BINARY_SEARCH_STEPS, props.MAX_STEPS]);
668
+ pass.fullscreenMaterial.needsUpdate = true;
669
+ }, [enabled, props.useBlur, props.enableJittering, props.NUM_BINARY_SEARCH_STEPS, props.MAX_STEPS]);
663
670
  useEffect(() => {
664
671
  pass.setSize(size.width * viewport.dpr, size.height * viewport.dpr);
665
672
  pass.kawaseBlurPass.setSize(blurSize, blurSize);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-three/postprocessing",
3
- "version": "2.4.0",
3
+ "version": "2.4.3",
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": {