@@ -10,13 +10,32 @@ type N8AOProps = {
10
10
aoRadius ?: number
11
11
distanceFalloff ?: number
12
12
intensity ?: number
13
+ quality ?: 'performance' | 'low' | 'medium' | 'high' | 'ultra'
14
+ aoSamples ?: number
15
+ denoiseSamples ?: number
16
+ denoiseRadius ?: number
13
17
}
14
18
15
- export const N8AO = forwardRef < N8AOPostPass , N8AOProps > ( ( props , ref : Ref < N8AOPostPass > ) => {
16
- const { camera, scene } = useThree ( )
17
- const effect = useMemo ( ( ) => new N8AOPostPass ( scene , camera ) , [ ] )
18
- useLayoutEffect ( ( ) => {
19
- Object . assign ( effect . configuration , props )
20
- } , [ props ] )
21
- return < primitive ref = { ref } object = { effect } />
22
- } )
19
+ export const N8AO = forwardRef < N8AOPostPass , N8AOProps > (
20
+ (
21
+ { quality, aoRadius, aoSamples, denoiseSamples, denoiseRadius, distanceFalloff, intensity } ,
22
+ ref : Ref < N8AOPostPass >
23
+ ) => {
24
+ const { camera, scene } = useThree ( )
25
+ const effect = useMemo ( ( ) => new N8AOPostPass ( scene , camera ) , [ ] )
26
+ useLayoutEffect ( ( ) => {
27
+ Object . assign ( effect . configuration , {
28
+ aoRadius,
29
+ distanceFalloff,
30
+ intensity,
31
+ aoSamples,
32
+ denoiseSamples,
33
+ denoiseRadius,
34
+ } )
35
+ } , [ aoRadius , distanceFalloff , intensity , aoSamples , denoiseSamples , denoiseRadius ] )
36
+ useLayoutEffect ( ( ) => {
37
+ if ( quality ) effect . setQualityMode ( quality . charAt ( 0 ) . toUpperCase ( ) + quality . slice ( 1 ) )
38
+ } , [ quality ] )
39
+ return < primitive ref = { ref } object = { effect } />
40
+ }
41
+ )
0 commit comments