@react-three/postprocessing 3.0.2 → 3.0.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.
Files changed (45) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +81 -81
  3. package/dist/index.d.ts +1 -0
  4. package/dist/index.js +555 -0
  5. package/dist/index.js.map +1 -0
  6. package/package.json +66 -68
  7. package/src/EffectComposer.test.tsx +126 -126
  8. package/src/EffectComposer.tsx +200 -200
  9. package/src/Selection.tsx +46 -46
  10. package/src/effects/ASCII.tsx +135 -135
  11. package/src/effects/Autofocus.tsx +153 -153
  12. package/src/effects/Bloom.tsx +6 -6
  13. package/src/effects/BrightnessContrast.tsx +4 -4
  14. package/src/effects/ChromaticAberration.tsx +5 -5
  15. package/src/effects/ColorAverage.tsx +15 -15
  16. package/src/effects/ColorDepth.tsx +4 -4
  17. package/src/effects/Depth.tsx +4 -4
  18. package/src/effects/DepthOfField.tsx +89 -89
  19. package/src/effects/DotScreen.tsx +4 -4
  20. package/src/effects/FXAA.tsx +4 -4
  21. package/src/effects/Glitch.tsx +40 -40
  22. package/src/effects/GodRays.tsx +16 -16
  23. package/src/effects/Grid.tsx +21 -21
  24. package/src/effects/HueSaturation.tsx +4 -4
  25. package/src/effects/LUT.tsx +26 -26
  26. package/src/effects/LensFlare.tsx +611 -611
  27. package/src/effects/N8AO.tsx +81 -81
  28. package/src/effects/Noise.tsx +4 -4
  29. package/src/effects/Outline.tsx +117 -117
  30. package/src/effects/Pixelation.tsx +15 -15
  31. package/src/effects/Ramp.tsx +150 -150
  32. package/src/effects/SMAA.tsx +4 -4
  33. package/src/effects/SSAO.tsx +41 -41
  34. package/src/effects/ScanlineEffect.tsx +7 -7
  35. package/src/effects/SelectiveBloom.tsx +126 -126
  36. package/src/effects/Sepia.tsx +4 -4
  37. package/src/effects/ShockWave.tsx +4 -4
  38. package/src/effects/Texture.tsx +23 -23
  39. package/src/effects/TiltShift.tsx +4 -4
  40. package/src/effects/TiltShift2.tsx +90 -90
  41. package/src/effects/ToneMapping.tsx +6 -6
  42. package/src/effects/Vignette.tsx +4 -4
  43. package/src/effects/Water.tsx +35 -35
  44. package/src/index.ts +40 -40
  45. package/src/util.tsx +55 -55
@@ -1,81 +1,81 @@
1
- // From https://github.com/N8python/n8ao
2
- // https://twitter.com/N8Programs/status/1660996748485984261
3
-
4
- import { Ref, forwardRef, useLayoutEffect, useMemo } from 'react'
5
- /* @ts-ignore */
6
- import { N8AOPostPass } from 'n8ao'
7
- import { useThree, ReactThreeFiber, applyProps } from '@react-three/fiber'
8
-
9
- export type N8AOProps = {
10
- aoRadius?: number
11
- distanceFalloff?: number
12
- intensity?: number
13
- quality?: 'performance' | 'low' | 'medium' | 'high' | 'ultra'
14
- aoSamples?: number
15
- denoiseSamples?: number
16
- denoiseRadius?: number
17
- color?: ReactThreeFiber.Color
18
- halfRes?: boolean
19
- depthAwareUpsampling?: boolean
20
- screenSpaceRadius?: boolean
21
- renderMode?: 0 | 1 | 2 | 3 | 4
22
- }
23
-
24
- export const N8AO = /* @__PURE__ */ forwardRef<N8AOPostPass, N8AOProps>(
25
- (
26
- {
27
- halfRes,
28
- screenSpaceRadius,
29
- quality,
30
- depthAwareUpsampling = true,
31
- aoRadius = 5,
32
- aoSamples = 16,
33
- denoiseSamples = 4,
34
- denoiseRadius = 12,
35
- distanceFalloff = 1,
36
- intensity = 1,
37
- color,
38
- renderMode = 0,
39
- },
40
- ref: Ref<N8AOPostPass>
41
- ) => {
42
- const { camera, scene } = useThree()
43
- const effect = useMemo(() => new N8AOPostPass(scene, camera), [camera, scene])
44
-
45
- // TODO: implement dispose upstream; this effect has memory leaks without
46
- useLayoutEffect(() => {
47
- applyProps(effect.configuration, {
48
- color,
49
- aoRadius,
50
- distanceFalloff,
51
- intensity,
52
- aoSamples,
53
- denoiseSamples,
54
- denoiseRadius,
55
- screenSpaceRadius,
56
- renderMode,
57
- halfRes,
58
- depthAwareUpsampling,
59
- })
60
- }, [
61
- screenSpaceRadius,
62
- color,
63
- aoRadius,
64
- distanceFalloff,
65
- intensity,
66
- aoSamples,
67
- denoiseSamples,
68
- denoiseRadius,
69
- renderMode,
70
- halfRes,
71
- depthAwareUpsampling,
72
- effect,
73
- ])
74
-
75
- useLayoutEffect(() => {
76
- if (quality) effect.setQualityMode(quality.charAt(0).toUpperCase() + quality.slice(1))
77
- }, [effect, quality])
78
-
79
- return <primitive ref={ref} object={effect} />
80
- }
81
- )
1
+ // From https://github.com/N8python/n8ao
2
+ // https://twitter.com/N8Programs/status/1660996748485984261
3
+
4
+ import { Ref, forwardRef, useLayoutEffect, useMemo } from 'react'
5
+ /* @ts-ignore */
6
+ import { N8AOPostPass } from 'n8ao'
7
+ import { useThree, ReactThreeFiber, applyProps } from '@react-three/fiber'
8
+
9
+ export type N8AOProps = {
10
+ aoRadius?: number
11
+ distanceFalloff?: number
12
+ intensity?: number
13
+ quality?: 'performance' | 'low' | 'medium' | 'high' | 'ultra'
14
+ aoSamples?: number
15
+ denoiseSamples?: number
16
+ denoiseRadius?: number
17
+ color?: ReactThreeFiber.Color
18
+ halfRes?: boolean
19
+ depthAwareUpsampling?: boolean
20
+ screenSpaceRadius?: boolean
21
+ renderMode?: 0 | 1 | 2 | 3 | 4
22
+ }
23
+
24
+ export const N8AO = /* @__PURE__ */ forwardRef<N8AOPostPass, N8AOProps>(
25
+ (
26
+ {
27
+ halfRes,
28
+ screenSpaceRadius,
29
+ quality,
30
+ depthAwareUpsampling = true,
31
+ aoRadius = 5,
32
+ aoSamples = 16,
33
+ denoiseSamples = 4,
34
+ denoiseRadius = 12,
35
+ distanceFalloff = 1,
36
+ intensity = 1,
37
+ color,
38
+ renderMode = 0,
39
+ },
40
+ ref: Ref<N8AOPostPass>
41
+ ) => {
42
+ const { camera, scene } = useThree()
43
+ const effect = useMemo(() => new N8AOPostPass(scene, camera), [camera, scene])
44
+
45
+ // TODO: implement dispose upstream; this effect has memory leaks without
46
+ useLayoutEffect(() => {
47
+ applyProps(effect.configuration, {
48
+ color,
49
+ aoRadius,
50
+ distanceFalloff,
51
+ intensity,
52
+ aoSamples,
53
+ denoiseSamples,
54
+ denoiseRadius,
55
+ screenSpaceRadius,
56
+ renderMode,
57
+ halfRes,
58
+ depthAwareUpsampling,
59
+ })
60
+ }, [
61
+ screenSpaceRadius,
62
+ color,
63
+ aoRadius,
64
+ distanceFalloff,
65
+ intensity,
66
+ aoSamples,
67
+ denoiseSamples,
68
+ denoiseRadius,
69
+ renderMode,
70
+ halfRes,
71
+ depthAwareUpsampling,
72
+ effect,
73
+ ])
74
+
75
+ useLayoutEffect(() => {
76
+ if (quality) effect.setQualityMode(quality.charAt(0).toUpperCase() + quality.slice(1))
77
+ }, [effect, quality])
78
+
79
+ return <primitive ref={ref} object={effect} />
80
+ }
81
+ )
@@ -1,4 +1,4 @@
1
- import { NoiseEffect, BlendFunction } from 'postprocessing'
2
- import { wrapEffect } from '../util'
3
-
4
- export const Noise = /* @__PURE__ */ wrapEffect(NoiseEffect, { blendFunction: BlendFunction.COLOR_DODGE })
1
+ import { NoiseEffect, BlendFunction } from 'postprocessing'
2
+ import { wrapEffect } from '../util'
3
+
4
+ export const Noise = /* @__PURE__ */ wrapEffect(NoiseEffect, { blendFunction: BlendFunction.COLOR_DODGE })
@@ -1,117 +1,117 @@
1
- import { OutlineEffect } from 'postprocessing'
2
- import { Ref, RefObject, forwardRef, useMemo, useEffect, useContext, useRef } from 'react'
3
- import { Object3D } from 'three'
4
- import { useThree } from '@react-three/fiber'
5
- import { EffectComposerContext } from '../EffectComposer'
6
- import { selectionContext } from '../Selection'
7
- import { resolveRef } from '../util'
8
-
9
- type ObjectRef = RefObject<Object3D>
10
-
11
- export type OutlineProps = ConstructorParameters<typeof OutlineEffect>[2] &
12
- Partial<{
13
- selection: Object3D | Object3D[] | ObjectRef | ObjectRef[]
14
- selectionLayer: number
15
- }>
16
-
17
- export const Outline = /* @__PURE__ */ forwardRef(function Outline(
18
- {
19
- selection = [],
20
- selectionLayer = 10,
21
- blendFunction,
22
- patternTexture,
23
- edgeStrength,
24
- pulseSpeed,
25
- visibleEdgeColor,
26
- hiddenEdgeColor,
27
- width,
28
- height,
29
- kernelSize,
30
- blur,
31
- xRay,
32
- ...props
33
- }: OutlineProps,
34
- forwardRef: Ref<OutlineEffect>
35
- ) {
36
- const invalidate = useThree((state) => state.invalidate)
37
- const { scene, camera } = useContext(EffectComposerContext)
38
-
39
- const effect = useMemo(
40
- () =>
41
- new OutlineEffect(scene, camera, {
42
- blendFunction,
43
- patternTexture,
44
- edgeStrength,
45
- pulseSpeed,
46
- visibleEdgeColor,
47
- hiddenEdgeColor,
48
- width,
49
- height,
50
- kernelSize,
51
- blur,
52
- xRay,
53
- ...props,
54
- }),
55
- // NOTE: `props` is an unstable reference, so we can't memoize it
56
- // eslint-disable-next-line react-hooks/exhaustive-deps
57
- [
58
- blendFunction,
59
- blur,
60
- camera,
61
- edgeStrength,
62
- height,
63
- hiddenEdgeColor,
64
- kernelSize,
65
- patternTexture,
66
- pulseSpeed,
67
- scene,
68
- visibleEdgeColor,
69
- width,
70
- xRay,
71
- ]
72
- )
73
-
74
- const api = useContext(selectionContext)
75
-
76
- useEffect(() => {
77
- // Do not allow array selection if declarative selection is active
78
- // TODO: array selection should probably be deprecated altogether
79
- if (!api && selection) {
80
- effect.selection.set(
81
- Array.isArray(selection) ? (selection as Object3D[]).map(resolveRef) : [resolveRef(selection) as Object3D]
82
- )
83
- invalidate()
84
- return () => {
85
- effect.selection.clear()
86
- invalidate()
87
- }
88
- }
89
- }, [effect, selection, api, invalidate])
90
-
91
- useEffect(() => {
92
- effect.selectionLayer = selectionLayer
93
- invalidate()
94
- }, [effect, invalidate, selectionLayer])
95
-
96
- const ref = useRef<OutlineEffect>(undefined)
97
- useEffect(() => {
98
- if (api && api.enabled) {
99
- if (api.selected?.length) {
100
- effect.selection.set(api.selected)
101
- invalidate()
102
- return () => {
103
- effect.selection.clear()
104
- invalidate()
105
- }
106
- }
107
- }
108
- }, [api, effect.selection, invalidate])
109
-
110
- useEffect(() => {
111
- return () => {
112
- effect.dispose()
113
- }
114
- }, [effect])
115
-
116
- return <primitive ref={forwardRef} object={effect} />
117
- })
1
+ import { OutlineEffect } from 'postprocessing'
2
+ import { Ref, RefObject, forwardRef, useMemo, useEffect, useContext, useRef } from 'react'
3
+ import { Object3D } from 'three'
4
+ import { useThree } from '@react-three/fiber'
5
+ import { EffectComposerContext } from '../EffectComposer'
6
+ import { selectionContext } from '../Selection'
7
+ import { resolveRef } from '../util'
8
+
9
+ type ObjectRef = RefObject<Object3D>
10
+
11
+ export type OutlineProps = ConstructorParameters<typeof OutlineEffect>[2] &
12
+ Partial<{
13
+ selection: Object3D | Object3D[] | ObjectRef | ObjectRef[]
14
+ selectionLayer: number
15
+ }>
16
+
17
+ export const Outline = /* @__PURE__ */ forwardRef(function Outline(
18
+ {
19
+ selection = [],
20
+ selectionLayer = 10,
21
+ blendFunction,
22
+ patternTexture,
23
+ edgeStrength,
24
+ pulseSpeed,
25
+ visibleEdgeColor,
26
+ hiddenEdgeColor,
27
+ width,
28
+ height,
29
+ kernelSize,
30
+ blur,
31
+ xRay,
32
+ ...props
33
+ }: OutlineProps,
34
+ forwardRef: Ref<OutlineEffect>
35
+ ) {
36
+ const invalidate = useThree((state) => state.invalidate)
37
+ const { scene, camera } = useContext(EffectComposerContext)
38
+
39
+ const effect = useMemo(
40
+ () =>
41
+ new OutlineEffect(scene, camera, {
42
+ blendFunction,
43
+ patternTexture,
44
+ edgeStrength,
45
+ pulseSpeed,
46
+ visibleEdgeColor,
47
+ hiddenEdgeColor,
48
+ width,
49
+ height,
50
+ kernelSize,
51
+ blur,
52
+ xRay,
53
+ ...props,
54
+ }),
55
+ // NOTE: `props` is an unstable reference, so we can't memoize it
56
+ // eslint-disable-next-line react-hooks/exhaustive-deps
57
+ [
58
+ blendFunction,
59
+ blur,
60
+ camera,
61
+ edgeStrength,
62
+ height,
63
+ hiddenEdgeColor,
64
+ kernelSize,
65
+ patternTexture,
66
+ pulseSpeed,
67
+ scene,
68
+ visibleEdgeColor,
69
+ width,
70
+ xRay,
71
+ ]
72
+ )
73
+
74
+ const api = useContext(selectionContext)
75
+
76
+ useEffect(() => {
77
+ // Do not allow array selection if declarative selection is active
78
+ // TODO: array selection should probably be deprecated altogether
79
+ if (!api && selection) {
80
+ effect.selection.set(
81
+ Array.isArray(selection) ? (selection as Object3D[]).map(resolveRef) : [resolveRef(selection) as Object3D]
82
+ )
83
+ invalidate()
84
+ return () => {
85
+ effect.selection.clear()
86
+ invalidate()
87
+ }
88
+ }
89
+ }, [effect, selection, api, invalidate])
90
+
91
+ useEffect(() => {
92
+ effect.selectionLayer = selectionLayer
93
+ invalidate()
94
+ }, [effect, invalidate, selectionLayer])
95
+
96
+ const ref = useRef<OutlineEffect>(undefined)
97
+ useEffect(() => {
98
+ if (api && api.enabled) {
99
+ if (api.selected?.length) {
100
+ effect.selection.set(api.selected)
101
+ invalidate()
102
+ return () => {
103
+ effect.selection.clear()
104
+ invalidate()
105
+ }
106
+ }
107
+ }
108
+ }, [api, effect.selection, invalidate])
109
+
110
+ useEffect(() => {
111
+ return () => {
112
+ effect.dispose()
113
+ }
114
+ }, [effect])
115
+
116
+ return <primitive ref={forwardRef} object={effect} />
117
+ })
@@ -1,15 +1,15 @@
1
- import { forwardRef, useMemo, Ref } from 'react'
2
- import { PixelationEffect } from 'postprocessing'
3
-
4
- export type PixelationProps = {
5
- granularity?: number
6
- }
7
-
8
- export const Pixelation = /* @__PURE__ */ forwardRef<PixelationEffect, PixelationProps>(function Pixelation(
9
- { granularity = 5 }: PixelationProps,
10
- ref: Ref<PixelationEffect>
11
- ) {
12
- /** Because GlitchEffect granularity is not an object but a number, we have to define a custom prop "granularity" */
13
- const effect = useMemo(() => new PixelationEffect(granularity), [granularity])
14
- return <primitive ref={ref} object={effect} dispose={null} />
15
- })
1
+ import { forwardRef, useMemo, Ref } from 'react'
2
+ import { PixelationEffect } from 'postprocessing'
3
+
4
+ export type PixelationProps = {
5
+ granularity?: number
6
+ }
7
+
8
+ export const Pixelation = /* @__PURE__ */ forwardRef<PixelationEffect, PixelationProps>(function Pixelation(
9
+ { granularity = 5 }: PixelationProps,
10
+ ref: Ref<PixelationEffect>
11
+ ) {
12
+ /** Because GlitchEffect granularity is not an object but a number, we have to define a custom prop "granularity" */
13
+ const effect = useMemo(() => new PixelationEffect(granularity), [granularity])
14
+ return <primitive ref={ref} object={effect} dispose={null} />
15
+ })