@@ -10,13 +10,32 @@ type N8AOProps = {
1010 aoRadius ?: number
1111 distanceFalloff ?: number
1212 intensity ?: number
13+ quality ?: 'performance' | 'low' | 'medium' | 'high' | 'ultra'
14+ aoSamples ?: number
15+ denoiseSamples ?: number
16+ denoiseRadius ?: number
1317}
1418
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