@react-three/postprocessing 2.15.5 → 2.15.7

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 (46) hide show
  1. package/dist/EffectComposer.cjs +6 -2
  2. package/dist/EffectComposer.cjs.map +1 -1
  3. package/dist/EffectComposer.js +6 -2
  4. package/dist/EffectComposer.js.map +1 -1
  5. package/dist/effects/N8AO/BlueNoise.cjs +4 -0
  6. package/dist/effects/N8AO/BlueNoise.cjs.map +1 -0
  7. package/dist/effects/N8AO/BlueNoise.js +5 -0
  8. package/dist/effects/N8AO/BlueNoise.js.map +1 -0
  9. package/dist/effects/N8AO/DepthDownSample.cjs +183 -0
  10. package/dist/effects/N8AO/DepthDownSample.cjs.map +1 -0
  11. package/dist/effects/N8AO/DepthDownSample.js +166 -0
  12. package/dist/effects/N8AO/DepthDownSample.js.map +1 -0
  13. package/dist/effects/N8AO/EffectCompositer.cjs +276 -0
  14. package/dist/effects/N8AO/EffectCompositer.cjs.map +1 -0
  15. package/dist/effects/N8AO/EffectCompositer.js +259 -0
  16. package/dist/effects/N8AO/EffectCompositer.js.map +1 -0
  17. package/dist/effects/N8AO/EffectShader.cjs +236 -0
  18. package/dist/effects/N8AO/EffectShader.cjs.map +1 -0
  19. package/dist/effects/N8AO/EffectShader.js +219 -0
  20. package/dist/effects/N8AO/EffectShader.js.map +1 -0
  21. package/dist/effects/N8AO/FullScreenTriangle.cjs +59 -0
  22. package/dist/effects/N8AO/FullScreenTriangle.cjs.map +1 -0
  23. package/dist/effects/N8AO/FullScreenTriangle.js +42 -0
  24. package/dist/effects/N8AO/FullScreenTriangle.js.map +1 -0
  25. package/dist/effects/N8AO/N8AOPostPass.cjs +501 -0
  26. package/dist/effects/N8AO/N8AOPostPass.cjs.map +1 -0
  27. package/dist/effects/N8AO/N8AOPostPass.js +484 -0
  28. package/dist/effects/N8AO/N8AOPostPass.js.map +1 -0
  29. package/dist/effects/N8AO/PoissionBlur.cjs +186 -0
  30. package/dist/effects/N8AO/PoissionBlur.cjs.map +1 -0
  31. package/dist/effects/N8AO/PoissionBlur.js +169 -0
  32. package/dist/effects/N8AO/PoissionBlur.js.map +1 -0
  33. package/dist/effects/{N8AO.cjs → N8AO/index.cjs} +3 -3
  34. package/dist/effects/N8AO/index.cjs.map +1 -0
  35. package/dist/effects/{N8AO.js → N8AO/index.js} +3 -3
  36. package/dist/effects/N8AO/index.js.map +1 -0
  37. package/dist/index.cjs +2 -2
  38. package/dist/index.js +1 -1
  39. package/package.json +2 -1
  40. package/dist/effects/N8AO.cjs.map +0 -1
  41. package/dist/effects/N8AO.js.map +0 -1
  42. package/dist/node_modules/n8ao/dist/N8AO.cjs +0 -1439
  43. package/dist/node_modules/n8ao/dist/N8AO.cjs.map +0 -1
  44. package/dist/node_modules/n8ao/dist/N8AO.js +0 -1439
  45. package/dist/node_modules/n8ao/dist/N8AO.js.map +0 -1
  46. /package/dist/effects/{N8AO.d.ts → N8AO/index.d.ts} +0 -0
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const THREE = require("three");
4
+ function _interopNamespaceDefault(e) {
5
+ const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
6
+ if (e) {
7
+ for (const k in e) {
8
+ if (k !== "default") {
9
+ const d = Object.getOwnPropertyDescriptor(e, k);
10
+ Object.defineProperty(n, k, d.get ? d : {
11
+ enumerable: true,
12
+ get: () => e[k]
13
+ });
14
+ }
15
+ }
16
+ }
17
+ n.default = e;
18
+ return Object.freeze(n);
19
+ }
20
+ const THREE__namespace = /* @__PURE__ */ _interopNamespaceDefault(THREE);
21
+ const PoissionBlur = {
22
+ uniforms: {
23
+ sceneDiffuse: { value: null },
24
+ sceneDepth: { value: null },
25
+ tDiffuse: { value: null },
26
+ projMat: { value: new THREE__namespace.Matrix4() },
27
+ viewMat: { value: new THREE__namespace.Matrix4() },
28
+ projectionMatrixInv: { value: new THREE__namespace.Matrix4() },
29
+ viewMatrixInv: { value: new THREE__namespace.Matrix4() },
30
+ cameraPos: { value: new THREE__namespace.Vector3() },
31
+ resolution: { value: new THREE__namespace.Vector2() },
32
+ time: { value: 0 },
33
+ r: { value: 5 },
34
+ blueNoise: { value: null },
35
+ radius: { value: 12 },
36
+ worldRadius: { value: 5 },
37
+ index: { value: 0 },
38
+ poissonDisk: { value: [] },
39
+ distanceFalloff: { value: 1 },
40
+ near: { value: 0.1 },
41
+ far: { value: 1e3 },
42
+ logDepth: { value: false },
43
+ screenSpaceRadius: { value: false }
44
+ },
45
+ depthWrite: false,
46
+ depthTest: false,
47
+ vertexShader: (
48
+ /* glsl */
49
+ `
50
+ varying vec2 vUv;
51
+ void main() {
52
+ vUv = uv;
53
+ gl_Position = vec4(position, 1.0);
54
+ }`
55
+ ),
56
+ fragmentShader: (
57
+ /* glsl */
58
+ `
59
+ uniform sampler2D sceneDiffuse;
60
+ uniform highp sampler2D sceneDepth;
61
+ uniform sampler2D tDiffuse;
62
+ uniform sampler2D blueNoise;
63
+ uniform mat4 projectionMatrixInv;
64
+ uniform mat4 viewMatrixInv;
65
+ uniform vec2 resolution;
66
+ uniform float r;
67
+ uniform float radius;
68
+ uniform float worldRadius;
69
+ uniform float index;
70
+ uniform float near;
71
+ uniform float far;
72
+ uniform float distanceFalloff;
73
+ uniform bool logDepth;
74
+ uniform bool screenSpaceRadius;
75
+ varying vec2 vUv;
76
+
77
+ highp float linearize_depth(highp float d, highp float zNear,highp float zFar)
78
+ {
79
+ highp float z_n = 2.0 * d - 1.0;
80
+ return 2.0 * zNear * zFar / (zFar + zNear - z_n * (zFar - zNear));
81
+ }
82
+ highp float linearize_depth_log(highp float d, highp float nearZ,highp float farZ) {
83
+ float depth = pow(2.0, d * log2(farZ + 1.0)) - 1.0;
84
+ float a = farZ / (farZ - nearZ);
85
+ float b = farZ * nearZ / (nearZ - farZ);
86
+ float linDepth = a + b / depth;
87
+ return linearize_depth(linDepth, nearZ, farZ);
88
+ }
89
+ highp float linearize_depth_ortho(highp float d, highp float nearZ, highp float farZ) {
90
+ return nearZ + (farZ - nearZ) * d;
91
+ }
92
+ vec3 getWorldPosLog(vec3 posS) {
93
+ vec2 uv = posS.xy;
94
+ float z = posS.z;
95
+ float nearZ =near;
96
+ float farZ = far;
97
+ float depth = pow(2.0, z * log2(farZ + 1.0)) - 1.0;
98
+ float a = farZ / (farZ - nearZ);
99
+ float b = farZ * nearZ / (nearZ - farZ);
100
+ float linDepth = a + b / depth;
101
+ vec4 clipVec = vec4(uv, linDepth, 1.0) * 2.0 - 1.0;
102
+ vec4 wpos = projectionMatrixInv * clipVec;
103
+ return wpos.xyz / wpos.w;
104
+ }
105
+ vec3 getWorldPos(float depth, vec2 coord) {
106
+ #ifdef LOGDEPTH
107
+ return getWorldPosLog(vec3(coord, depth));
108
+ #endif
109
+
110
+ float z = depth * 2.0 - 1.0;
111
+ vec4 clipSpacePosition = vec4(coord * 2.0 - 1.0, z, 1.0);
112
+ vec4 viewSpacePosition = projectionMatrixInv * clipSpacePosition;
113
+ // Perspective division
114
+ vec4 worldSpacePosition = viewSpacePosition;
115
+ worldSpacePosition.xyz /= worldSpacePosition.w;
116
+ return worldSpacePosition.xyz;
117
+ }
118
+ #include <common>
119
+ #define NUM_SAMPLES 16
120
+ uniform vec2 poissonDisk[NUM_SAMPLES];
121
+ void main() {
122
+ const float pi = 3.14159;
123
+ vec2 texelSize = vec2(1.0 / resolution.x, 1.0 / resolution.y);
124
+ vec2 uv = vUv;
125
+ vec4 data = texture2D(tDiffuse, vUv);
126
+ float occlusion = data.a;
127
+ float baseOcc = data.a;
128
+ vec3 normal = data.rgb * 2.0 - 1.0;
129
+ float count = 1.0;
130
+ float d = texture2D(sceneDepth, vUv).x;
131
+ if (d == 1.0) {
132
+ gl_FragColor = data;
133
+ return;
134
+ }
135
+ vec3 worldPos = getWorldPos(d, vUv);
136
+ float size = radius;
137
+ float angle;
138
+ if (index == 0.0) {
139
+ angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).x * PI2;
140
+ } else if (index == 1.0) {
141
+ angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).y * PI2;
142
+ } else if (index == 2.0) {
143
+ angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).z * PI2;
144
+ } else {
145
+ angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).w * PI2;
146
+ }
147
+
148
+ mat2 rotationMatrix = mat2(cos(angle), -sin(angle), sin(angle), cos(angle));
149
+ float radiusToUse = screenSpaceRadius ? distance(
150
+ worldPos,
151
+ getWorldPos(d, vUv +
152
+ vec2(worldRadius, 0.0) / resolution)
153
+ ) : worldRadius;
154
+ float distanceFalloffToUse =screenSpaceRadius ?
155
+ radiusToUse * distanceFalloff
156
+ : distanceFalloff;
157
+
158
+
159
+ for(int i = 0; i < NUM_SAMPLES; i++) {
160
+ vec2 offset = (rotationMatrix * poissonDisk[i]) * texelSize * size;
161
+ vec4 dataSample = texture2D(tDiffuse, uv + offset);
162
+ float occSample = dataSample.a;
163
+ vec3 normalSample = dataSample.rgb * 2.0 - 1.0;
164
+ float dSample = texture2D(sceneDepth, uv + offset).x;
165
+ vec3 worldPosSample = getWorldPos(dSample, uv + offset);
166
+ float tangentPlaneDist = abs(dot(worldPos - worldPosSample, normal));
167
+ float rangeCheck = dSample == 1.0 ? 0.0 :exp(-1.0 * tangentPlaneDist * (1.0 / distanceFalloffToUse)) * max(dot(normal, normalSample), 0.0) * (1.0 - abs(occSample - baseOcc));
168
+ occlusion += occSample * rangeCheck;
169
+ count += rangeCheck;
170
+ }
171
+ if (count > 0.0) {
172
+ occlusion /= count;
173
+ }
174
+ #ifdef LOGDEPTH
175
+ occlusion = clamp(occlusion, 0.0, 1.0);
176
+ if (occlusion == 0.0) {
177
+ occlusion = 1.0;
178
+ }
179
+ #endif
180
+ gl_FragColor = vec4(0.5 + 0.5 * normal, occlusion);
181
+ }
182
+ `
183
+ )
184
+ };
185
+ exports.PoissionBlur = PoissionBlur;
186
+ //# sourceMappingURL=PoissionBlur.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PoissionBlur.cjs","sources":["../../../src/effects/N8AO/PoissionBlur.js"],"sourcesContent":["import * as THREE from 'three'\n\nconst PoissionBlur = {\n uniforms: {\n sceneDiffuse: { value: null },\n sceneDepth: { value: null },\n tDiffuse: { value: null },\n projMat: { value: new THREE.Matrix4() },\n viewMat: { value: new THREE.Matrix4() },\n projectionMatrixInv: { value: new THREE.Matrix4() },\n viewMatrixInv: { value: new THREE.Matrix4() },\n cameraPos: { value: new THREE.Vector3() },\n resolution: { value: new THREE.Vector2() },\n time: { value: 0.0 },\n r: { value: 5.0 },\n blueNoise: { value: null },\n radius: { value: 12.0 },\n worldRadius: { value: 5.0 },\n index: { value: 0.0 },\n poissonDisk: { value: [] },\n distanceFalloff: { value: 1.0 },\n near: { value: 0.1 },\n far: { value: 1000.0 },\n logDepth: { value: false },\n screenSpaceRadius: { value: false },\n },\n depthWrite: false,\n depthTest: false,\n\n vertexShader: /* glsl */ `\n\t\tvarying vec2 vUv;\n\t\tvoid main() {\n\t\t\tvUv = uv;\n\t\t\tgl_Position = vec4(position, 1.0);\n\t\t}`,\n fragmentShader: /* glsl */ `\n\t\tuniform sampler2D sceneDiffuse;\n uniform highp sampler2D sceneDepth;\n uniform sampler2D tDiffuse;\n uniform sampler2D blueNoise;\n uniform mat4 projectionMatrixInv;\n uniform mat4 viewMatrixInv;\n uniform vec2 resolution;\n uniform float r;\n uniform float radius;\n uniform float worldRadius;\n uniform float index;\n uniform float near;\n uniform float far;\n uniform float distanceFalloff;\n uniform bool logDepth;\n uniform bool screenSpaceRadius;\n varying vec2 vUv;\n\n highp float linearize_depth(highp float d, highp float zNear,highp float zFar)\n {\n highp float z_n = 2.0 * d - 1.0;\n return 2.0 * zNear * zFar / (zFar + zNear - z_n * (zFar - zNear));\n }\n highp float linearize_depth_log(highp float d, highp float nearZ,highp float farZ) {\n float depth = pow(2.0, d * log2(farZ + 1.0)) - 1.0;\n float a = farZ / (farZ - nearZ);\n float b = farZ * nearZ / (nearZ - farZ);\n float linDepth = a + b / depth;\n return linearize_depth(linDepth, nearZ, farZ);\n }\n highp float linearize_depth_ortho(highp float d, highp float nearZ, highp float farZ) {\n return nearZ + (farZ - nearZ) * d;\n }\n vec3 getWorldPosLog(vec3 posS) {\n vec2 uv = posS.xy;\n float z = posS.z;\n float nearZ =near;\n float farZ = far;\n float depth = pow(2.0, z * log2(farZ + 1.0)) - 1.0;\n float a = farZ / (farZ - nearZ);\n float b = farZ * nearZ / (nearZ - farZ);\n float linDepth = a + b / depth;\n vec4 clipVec = vec4(uv, linDepth, 1.0) * 2.0 - 1.0;\n vec4 wpos = projectionMatrixInv * clipVec;\n return wpos.xyz / wpos.w;\n }\n vec3 getWorldPos(float depth, vec2 coord) {\n #ifdef LOGDEPTH\n return getWorldPosLog(vec3(coord, depth));\n #endif\n \n float z = depth * 2.0 - 1.0;\n vec4 clipSpacePosition = vec4(coord * 2.0 - 1.0, z, 1.0);\n vec4 viewSpacePosition = projectionMatrixInv * clipSpacePosition;\n // Perspective division\n vec4 worldSpacePosition = viewSpacePosition;\n worldSpacePosition.xyz /= worldSpacePosition.w;\n return worldSpacePosition.xyz;\n }\n #include <common>\n #define NUM_SAMPLES 16\n uniform vec2 poissonDisk[NUM_SAMPLES];\n void main() {\n const float pi = 3.14159;\n vec2 texelSize = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec2 uv = vUv;\n vec4 data = texture2D(tDiffuse, vUv);\n float occlusion = data.a;\n float baseOcc = data.a;\n vec3 normal = data.rgb * 2.0 - 1.0;\n float count = 1.0;\n float d = texture2D(sceneDepth, vUv).x;\n if (d == 1.0) {\n gl_FragColor = data;\n return;\n }\n vec3 worldPos = getWorldPos(d, vUv);\n float size = radius;\n float angle;\n if (index == 0.0) {\n angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).x * PI2;\n } else if (index == 1.0) {\n angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).y * PI2;\n } else if (index == 2.0) {\n angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).z * PI2;\n } else {\n angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).w * PI2;\n }\n\n mat2 rotationMatrix = mat2(cos(angle), -sin(angle), sin(angle), cos(angle));\n float radiusToUse = screenSpaceRadius ? distance(\n worldPos,\n getWorldPos(d, vUv +\n vec2(worldRadius, 0.0) / resolution)\n ) : worldRadius;\n float distanceFalloffToUse =screenSpaceRadius ?\n radiusToUse * distanceFalloff\n : distanceFalloff;\n\n\n for(int i = 0; i < NUM_SAMPLES; i++) {\n vec2 offset = (rotationMatrix * poissonDisk[i]) * texelSize * size;\n vec4 dataSample = texture2D(tDiffuse, uv + offset);\n float occSample = dataSample.a;\n vec3 normalSample = dataSample.rgb * 2.0 - 1.0;\n float dSample = texture2D(sceneDepth, uv + offset).x;\n vec3 worldPosSample = getWorldPos(dSample, uv + offset);\n float tangentPlaneDist = abs(dot(worldPos - worldPosSample, normal));\n float rangeCheck = dSample == 1.0 ? 0.0 :exp(-1.0 * tangentPlaneDist * (1.0 / distanceFalloffToUse)) * max(dot(normal, normalSample), 0.0) * (1.0 - abs(occSample - baseOcc));\n occlusion += occSample * rangeCheck;\n count += rangeCheck;\n }\n if (count > 0.0) {\n occlusion /= count;\n }\n #ifdef LOGDEPTH\n occlusion = clamp(occlusion, 0.0, 1.0);\n if (occlusion == 0.0) {\n occlusion = 1.0;\n }\n #endif\n gl_FragColor = vec4(0.5 + 0.5 * normal, occlusion);\n }\n `,\n}\n\nexport { PoissionBlur }\n"],"names":["THREE"],"mappings":";;;;;;;;;;;;;;;;;;;;AAEK,MAAC,eAAe;AAAA,EACnB,UAAU;AAAA,IACR,cAAc,EAAE,OAAO,KAAM;AAAA,IAC7B,YAAY,EAAE,OAAO,KAAM;AAAA,IAC3B,UAAU,EAAE,OAAO,KAAM;AAAA,IACzB,SAAS,EAAE,OAAO,IAAIA,iBAAM,QAAO,EAAI;AAAA,IACvC,SAAS,EAAE,OAAO,IAAIA,iBAAM,QAAO,EAAI;AAAA,IACvC,qBAAqB,EAAE,OAAO,IAAIA,iBAAM,QAAO,EAAI;AAAA,IACnD,eAAe,EAAE,OAAO,IAAIA,iBAAM,QAAO,EAAI;AAAA,IAC7C,WAAW,EAAE,OAAO,IAAIA,iBAAM,QAAO,EAAI;AAAA,IACzC,YAAY,EAAE,OAAO,IAAIA,iBAAM,QAAO,EAAI;AAAA,IAC1C,MAAM,EAAE,OAAO,EAAK;AAAA,IACpB,GAAG,EAAE,OAAO,EAAK;AAAA,IACjB,WAAW,EAAE,OAAO,KAAM;AAAA,IAC1B,QAAQ,EAAE,OAAO,GAAM;AAAA,IACvB,aAAa,EAAE,OAAO,EAAK;AAAA,IAC3B,OAAO,EAAE,OAAO,EAAK;AAAA,IACrB,aAAa,EAAE,OAAO,GAAI;AAAA,IAC1B,iBAAiB,EAAE,OAAO,EAAK;AAAA,IAC/B,MAAM,EAAE,OAAO,IAAK;AAAA,IACpB,KAAK,EAAE,OAAO,IAAQ;AAAA,IACtB,UAAU,EAAE,OAAO,MAAO;AAAA,IAC1B,mBAAmB,EAAE,OAAO,MAAO;AAAA,EACpC;AAAA,EACD,YAAY;AAAA,EACZ,WAAW;AAAA,EAEX;AAAA;AAAA,IAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMzB;AAAA;AAAA,IAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6H7B;;"}
@@ -0,0 +1,169 @@
1
+ import * as THREE from "three";
2
+ const PoissionBlur = {
3
+ uniforms: {
4
+ sceneDiffuse: { value: null },
5
+ sceneDepth: { value: null },
6
+ tDiffuse: { value: null },
7
+ projMat: { value: new THREE.Matrix4() },
8
+ viewMat: { value: new THREE.Matrix4() },
9
+ projectionMatrixInv: { value: new THREE.Matrix4() },
10
+ viewMatrixInv: { value: new THREE.Matrix4() },
11
+ cameraPos: { value: new THREE.Vector3() },
12
+ resolution: { value: new THREE.Vector2() },
13
+ time: { value: 0 },
14
+ r: { value: 5 },
15
+ blueNoise: { value: null },
16
+ radius: { value: 12 },
17
+ worldRadius: { value: 5 },
18
+ index: { value: 0 },
19
+ poissonDisk: { value: [] },
20
+ distanceFalloff: { value: 1 },
21
+ near: { value: 0.1 },
22
+ far: { value: 1e3 },
23
+ logDepth: { value: false },
24
+ screenSpaceRadius: { value: false }
25
+ },
26
+ depthWrite: false,
27
+ depthTest: false,
28
+ vertexShader: (
29
+ /* glsl */
30
+ `
31
+ varying vec2 vUv;
32
+ void main() {
33
+ vUv = uv;
34
+ gl_Position = vec4(position, 1.0);
35
+ }`
36
+ ),
37
+ fragmentShader: (
38
+ /* glsl */
39
+ `
40
+ uniform sampler2D sceneDiffuse;
41
+ uniform highp sampler2D sceneDepth;
42
+ uniform sampler2D tDiffuse;
43
+ uniform sampler2D blueNoise;
44
+ uniform mat4 projectionMatrixInv;
45
+ uniform mat4 viewMatrixInv;
46
+ uniform vec2 resolution;
47
+ uniform float r;
48
+ uniform float radius;
49
+ uniform float worldRadius;
50
+ uniform float index;
51
+ uniform float near;
52
+ uniform float far;
53
+ uniform float distanceFalloff;
54
+ uniform bool logDepth;
55
+ uniform bool screenSpaceRadius;
56
+ varying vec2 vUv;
57
+
58
+ highp float linearize_depth(highp float d, highp float zNear,highp float zFar)
59
+ {
60
+ highp float z_n = 2.0 * d - 1.0;
61
+ return 2.0 * zNear * zFar / (zFar + zNear - z_n * (zFar - zNear));
62
+ }
63
+ highp float linearize_depth_log(highp float d, highp float nearZ,highp float farZ) {
64
+ float depth = pow(2.0, d * log2(farZ + 1.0)) - 1.0;
65
+ float a = farZ / (farZ - nearZ);
66
+ float b = farZ * nearZ / (nearZ - farZ);
67
+ float linDepth = a + b / depth;
68
+ return linearize_depth(linDepth, nearZ, farZ);
69
+ }
70
+ highp float linearize_depth_ortho(highp float d, highp float nearZ, highp float farZ) {
71
+ return nearZ + (farZ - nearZ) * d;
72
+ }
73
+ vec3 getWorldPosLog(vec3 posS) {
74
+ vec2 uv = posS.xy;
75
+ float z = posS.z;
76
+ float nearZ =near;
77
+ float farZ = far;
78
+ float depth = pow(2.0, z * log2(farZ + 1.0)) - 1.0;
79
+ float a = farZ / (farZ - nearZ);
80
+ float b = farZ * nearZ / (nearZ - farZ);
81
+ float linDepth = a + b / depth;
82
+ vec4 clipVec = vec4(uv, linDepth, 1.0) * 2.0 - 1.0;
83
+ vec4 wpos = projectionMatrixInv * clipVec;
84
+ return wpos.xyz / wpos.w;
85
+ }
86
+ vec3 getWorldPos(float depth, vec2 coord) {
87
+ #ifdef LOGDEPTH
88
+ return getWorldPosLog(vec3(coord, depth));
89
+ #endif
90
+
91
+ float z = depth * 2.0 - 1.0;
92
+ vec4 clipSpacePosition = vec4(coord * 2.0 - 1.0, z, 1.0);
93
+ vec4 viewSpacePosition = projectionMatrixInv * clipSpacePosition;
94
+ // Perspective division
95
+ vec4 worldSpacePosition = viewSpacePosition;
96
+ worldSpacePosition.xyz /= worldSpacePosition.w;
97
+ return worldSpacePosition.xyz;
98
+ }
99
+ #include <common>
100
+ #define NUM_SAMPLES 16
101
+ uniform vec2 poissonDisk[NUM_SAMPLES];
102
+ void main() {
103
+ const float pi = 3.14159;
104
+ vec2 texelSize = vec2(1.0 / resolution.x, 1.0 / resolution.y);
105
+ vec2 uv = vUv;
106
+ vec4 data = texture2D(tDiffuse, vUv);
107
+ float occlusion = data.a;
108
+ float baseOcc = data.a;
109
+ vec3 normal = data.rgb * 2.0 - 1.0;
110
+ float count = 1.0;
111
+ float d = texture2D(sceneDepth, vUv).x;
112
+ if (d == 1.0) {
113
+ gl_FragColor = data;
114
+ return;
115
+ }
116
+ vec3 worldPos = getWorldPos(d, vUv);
117
+ float size = radius;
118
+ float angle;
119
+ if (index == 0.0) {
120
+ angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).x * PI2;
121
+ } else if (index == 1.0) {
122
+ angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).y * PI2;
123
+ } else if (index == 2.0) {
124
+ angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).z * PI2;
125
+ } else {
126
+ angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).w * PI2;
127
+ }
128
+
129
+ mat2 rotationMatrix = mat2(cos(angle), -sin(angle), sin(angle), cos(angle));
130
+ float radiusToUse = screenSpaceRadius ? distance(
131
+ worldPos,
132
+ getWorldPos(d, vUv +
133
+ vec2(worldRadius, 0.0) / resolution)
134
+ ) : worldRadius;
135
+ float distanceFalloffToUse =screenSpaceRadius ?
136
+ radiusToUse * distanceFalloff
137
+ : distanceFalloff;
138
+
139
+
140
+ for(int i = 0; i < NUM_SAMPLES; i++) {
141
+ vec2 offset = (rotationMatrix * poissonDisk[i]) * texelSize * size;
142
+ vec4 dataSample = texture2D(tDiffuse, uv + offset);
143
+ float occSample = dataSample.a;
144
+ vec3 normalSample = dataSample.rgb * 2.0 - 1.0;
145
+ float dSample = texture2D(sceneDepth, uv + offset).x;
146
+ vec3 worldPosSample = getWorldPos(dSample, uv + offset);
147
+ float tangentPlaneDist = abs(dot(worldPos - worldPosSample, normal));
148
+ float rangeCheck = dSample == 1.0 ? 0.0 :exp(-1.0 * tangentPlaneDist * (1.0 / distanceFalloffToUse)) * max(dot(normal, normalSample), 0.0) * (1.0 - abs(occSample - baseOcc));
149
+ occlusion += occSample * rangeCheck;
150
+ count += rangeCheck;
151
+ }
152
+ if (count > 0.0) {
153
+ occlusion /= count;
154
+ }
155
+ #ifdef LOGDEPTH
156
+ occlusion = clamp(occlusion, 0.0, 1.0);
157
+ if (occlusion == 0.0) {
158
+ occlusion = 1.0;
159
+ }
160
+ #endif
161
+ gl_FragColor = vec4(0.5 + 0.5 * normal, occlusion);
162
+ }
163
+ `
164
+ )
165
+ };
166
+ export {
167
+ PoissionBlur
168
+ };
169
+ //# sourceMappingURL=PoissionBlur.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PoissionBlur.js","sources":["../../../src/effects/N8AO/PoissionBlur.js"],"sourcesContent":["import * as THREE from 'three'\n\nconst PoissionBlur = {\n uniforms: {\n sceneDiffuse: { value: null },\n sceneDepth: { value: null },\n tDiffuse: { value: null },\n projMat: { value: new THREE.Matrix4() },\n viewMat: { value: new THREE.Matrix4() },\n projectionMatrixInv: { value: new THREE.Matrix4() },\n viewMatrixInv: { value: new THREE.Matrix4() },\n cameraPos: { value: new THREE.Vector3() },\n resolution: { value: new THREE.Vector2() },\n time: { value: 0.0 },\n r: { value: 5.0 },\n blueNoise: { value: null },\n radius: { value: 12.0 },\n worldRadius: { value: 5.0 },\n index: { value: 0.0 },\n poissonDisk: { value: [] },\n distanceFalloff: { value: 1.0 },\n near: { value: 0.1 },\n far: { value: 1000.0 },\n logDepth: { value: false },\n screenSpaceRadius: { value: false },\n },\n depthWrite: false,\n depthTest: false,\n\n vertexShader: /* glsl */ `\n\t\tvarying vec2 vUv;\n\t\tvoid main() {\n\t\t\tvUv = uv;\n\t\t\tgl_Position = vec4(position, 1.0);\n\t\t}`,\n fragmentShader: /* glsl */ `\n\t\tuniform sampler2D sceneDiffuse;\n uniform highp sampler2D sceneDepth;\n uniform sampler2D tDiffuse;\n uniform sampler2D blueNoise;\n uniform mat4 projectionMatrixInv;\n uniform mat4 viewMatrixInv;\n uniform vec2 resolution;\n uniform float r;\n uniform float radius;\n uniform float worldRadius;\n uniform float index;\n uniform float near;\n uniform float far;\n uniform float distanceFalloff;\n uniform bool logDepth;\n uniform bool screenSpaceRadius;\n varying vec2 vUv;\n\n highp float linearize_depth(highp float d, highp float zNear,highp float zFar)\n {\n highp float z_n = 2.0 * d - 1.0;\n return 2.0 * zNear * zFar / (zFar + zNear - z_n * (zFar - zNear));\n }\n highp float linearize_depth_log(highp float d, highp float nearZ,highp float farZ) {\n float depth = pow(2.0, d * log2(farZ + 1.0)) - 1.0;\n float a = farZ / (farZ - nearZ);\n float b = farZ * nearZ / (nearZ - farZ);\n float linDepth = a + b / depth;\n return linearize_depth(linDepth, nearZ, farZ);\n }\n highp float linearize_depth_ortho(highp float d, highp float nearZ, highp float farZ) {\n return nearZ + (farZ - nearZ) * d;\n }\n vec3 getWorldPosLog(vec3 posS) {\n vec2 uv = posS.xy;\n float z = posS.z;\n float nearZ =near;\n float farZ = far;\n float depth = pow(2.0, z * log2(farZ + 1.0)) - 1.0;\n float a = farZ / (farZ - nearZ);\n float b = farZ * nearZ / (nearZ - farZ);\n float linDepth = a + b / depth;\n vec4 clipVec = vec4(uv, linDepth, 1.0) * 2.0 - 1.0;\n vec4 wpos = projectionMatrixInv * clipVec;\n return wpos.xyz / wpos.w;\n }\n vec3 getWorldPos(float depth, vec2 coord) {\n #ifdef LOGDEPTH\n return getWorldPosLog(vec3(coord, depth));\n #endif\n \n float z = depth * 2.0 - 1.0;\n vec4 clipSpacePosition = vec4(coord * 2.0 - 1.0, z, 1.0);\n vec4 viewSpacePosition = projectionMatrixInv * clipSpacePosition;\n // Perspective division\n vec4 worldSpacePosition = viewSpacePosition;\n worldSpacePosition.xyz /= worldSpacePosition.w;\n return worldSpacePosition.xyz;\n }\n #include <common>\n #define NUM_SAMPLES 16\n uniform vec2 poissonDisk[NUM_SAMPLES];\n void main() {\n const float pi = 3.14159;\n vec2 texelSize = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec2 uv = vUv;\n vec4 data = texture2D(tDiffuse, vUv);\n float occlusion = data.a;\n float baseOcc = data.a;\n vec3 normal = data.rgb * 2.0 - 1.0;\n float count = 1.0;\n float d = texture2D(sceneDepth, vUv).x;\n if (d == 1.0) {\n gl_FragColor = data;\n return;\n }\n vec3 worldPos = getWorldPos(d, vUv);\n float size = radius;\n float angle;\n if (index == 0.0) {\n angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).x * PI2;\n } else if (index == 1.0) {\n angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).y * PI2;\n } else if (index == 2.0) {\n angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).z * PI2;\n } else {\n angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).w * PI2;\n }\n\n mat2 rotationMatrix = mat2(cos(angle), -sin(angle), sin(angle), cos(angle));\n float radiusToUse = screenSpaceRadius ? distance(\n worldPos,\n getWorldPos(d, vUv +\n vec2(worldRadius, 0.0) / resolution)\n ) : worldRadius;\n float distanceFalloffToUse =screenSpaceRadius ?\n radiusToUse * distanceFalloff\n : distanceFalloff;\n\n\n for(int i = 0; i < NUM_SAMPLES; i++) {\n vec2 offset = (rotationMatrix * poissonDisk[i]) * texelSize * size;\n vec4 dataSample = texture2D(tDiffuse, uv + offset);\n float occSample = dataSample.a;\n vec3 normalSample = dataSample.rgb * 2.0 - 1.0;\n float dSample = texture2D(sceneDepth, uv + offset).x;\n vec3 worldPosSample = getWorldPos(dSample, uv + offset);\n float tangentPlaneDist = abs(dot(worldPos - worldPosSample, normal));\n float rangeCheck = dSample == 1.0 ? 0.0 :exp(-1.0 * tangentPlaneDist * (1.0 / distanceFalloffToUse)) * max(dot(normal, normalSample), 0.0) * (1.0 - abs(occSample - baseOcc));\n occlusion += occSample * rangeCheck;\n count += rangeCheck;\n }\n if (count > 0.0) {\n occlusion /= count;\n }\n #ifdef LOGDEPTH\n occlusion = clamp(occlusion, 0.0, 1.0);\n if (occlusion == 0.0) {\n occlusion = 1.0;\n }\n #endif\n gl_FragColor = vec4(0.5 + 0.5 * normal, occlusion);\n }\n `,\n}\n\nexport { PoissionBlur }\n"],"names":[],"mappings":";AAEK,MAAC,eAAe;AAAA,EACnB,UAAU;AAAA,IACR,cAAc,EAAE,OAAO,KAAM;AAAA,IAC7B,YAAY,EAAE,OAAO,KAAM;AAAA,IAC3B,UAAU,EAAE,OAAO,KAAM;AAAA,IACzB,SAAS,EAAE,OAAO,IAAI,MAAM,QAAO,EAAI;AAAA,IACvC,SAAS,EAAE,OAAO,IAAI,MAAM,QAAO,EAAI;AAAA,IACvC,qBAAqB,EAAE,OAAO,IAAI,MAAM,QAAO,EAAI;AAAA,IACnD,eAAe,EAAE,OAAO,IAAI,MAAM,QAAO,EAAI;AAAA,IAC7C,WAAW,EAAE,OAAO,IAAI,MAAM,QAAO,EAAI;AAAA,IACzC,YAAY,EAAE,OAAO,IAAI,MAAM,QAAO,EAAI;AAAA,IAC1C,MAAM,EAAE,OAAO,EAAK;AAAA,IACpB,GAAG,EAAE,OAAO,EAAK;AAAA,IACjB,WAAW,EAAE,OAAO,KAAM;AAAA,IAC1B,QAAQ,EAAE,OAAO,GAAM;AAAA,IACvB,aAAa,EAAE,OAAO,EAAK;AAAA,IAC3B,OAAO,EAAE,OAAO,EAAK;AAAA,IACrB,aAAa,EAAE,OAAO,GAAI;AAAA,IAC1B,iBAAiB,EAAE,OAAO,EAAK;AAAA,IAC/B,MAAM,EAAE,OAAO,IAAK;AAAA,IACpB,KAAK,EAAE,OAAO,IAAQ;AAAA,IACtB,UAAU,EAAE,OAAO,MAAO;AAAA,IAC1B,mBAAmB,EAAE,OAAO,MAAO;AAAA,EACpC;AAAA,EACD,YAAY;AAAA,EACZ,WAAW;AAAA,EAEX;AAAA;AAAA,IAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMzB;AAAA;AAAA,IAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6H7B;"}
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const React = require("react");
5
- const N8AO$1 = require("../node_modules/n8ao/dist/N8AO.cjs");
5
+ const N8AOPostPass = require("./N8AOPostPass.cjs");
6
6
  const fiber = require("@react-three/fiber");
7
7
  const N8AO = React.forwardRef(
8
8
  ({
@@ -20,7 +20,7 @@ const N8AO = React.forwardRef(
20
20
  renderMode = 0
21
21
  }, ref) => {
22
22
  const { camera, scene } = fiber.useThree();
23
- const effect = React.useMemo(() => new N8AO$1.N8AOPostPass(scene, camera), []);
23
+ const effect = React.useMemo(() => new N8AOPostPass.N8AOPostPass(scene, camera), []);
24
24
  React.useLayoutEffect(() => {
25
25
  fiber.applyProps(effect.configuration, {
26
26
  color,
@@ -56,4 +56,4 @@ const N8AO = React.forwardRef(
56
56
  }
57
57
  );
58
58
  exports.N8AO = N8AO;
59
- //# sourceMappingURL=N8AO.cjs.map
59
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/effects/N8AO/index.tsx"],"sourcesContent":["// From https://github.com/N8python/n8ao\n// https://twitter.com/N8Programs/status/1660996748485984261\n\nimport { Ref, forwardRef, useLayoutEffect, useMemo } from 'react'\n/* @ts-ignore */\nimport { N8AOPostPass } from './N8AOPostPass'\nimport { useThree, ReactThreeFiber, applyProps } from '@react-three/fiber'\n\ntype N8AOProps = {\n aoRadius?: number\n distanceFalloff?: number\n intensity?: number\n quality?: 'performance' | 'low' | 'medium' | 'high' | 'ultra'\n aoSamples?: number\n denoiseSamples?: number\n denoiseRadius?: number\n color?: ReactThreeFiber.Color\n halfRes?: boolean\n depthAwareUpsampling?: boolean\n screenSpaceRadius?: boolean\n renderMode?: 0 | 1 | 2 | 3 | 4\n}\n\nexport const N8AO = forwardRef<N8AOPostPass, N8AOProps>(\n (\n {\n halfRes,\n screenSpaceRadius,\n quality,\n depthAwareUpsampling = true,\n aoRadius = 5,\n aoSamples = 16,\n denoiseSamples = 4,\n denoiseRadius = 12,\n distanceFalloff = 1,\n intensity = 1,\n color,\n renderMode = 0,\n },\n ref: Ref<N8AOPostPass>\n ) => {\n const { camera, scene } = useThree()\n const effect = useMemo(() => new N8AOPostPass(scene, camera), [])\n useLayoutEffect(() => {\n applyProps(effect.configuration, {\n color,\n aoRadius,\n distanceFalloff,\n intensity,\n aoSamples,\n denoiseSamples,\n denoiseRadius,\n screenSpaceRadius,\n renderMode,\n halfRes,\n depthAwareUpsampling,\n })\n }, [\n screenSpaceRadius,\n color,\n aoRadius,\n distanceFalloff,\n intensity,\n aoSamples,\n denoiseSamples,\n denoiseRadius,\n renderMode,\n halfRes,\n depthAwareUpsampling,\n ])\n useLayoutEffect(() => {\n if (quality) effect.setQualityMode(quality.charAt(0).toUpperCase() + quality.slice(1))\n }, [quality])\n return <primitive ref={ref} object={effect} />\n }\n)\n"],"names":["forwardRef","useThree","useMemo","N8AOPostPass","useLayoutEffect","applyProps","jsx"],"mappings":";;;;;;AAuBO,MAAM,OAAOA,MAAA;AAAA,EAClB,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA,uBAAuB;AAAA,IACvB,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ;AAAA,IACA,aAAa;AAAA,KAEf,QACG;AACH,UAAM,EAAE,QAAQ,MAAM,IAAIC,MAAS,SAAA;AAC7B,UAAA,SAASC,cAAQ,MAAM,IAAIC,aAAAA,aAAa,OAAO,MAAM,GAAG,CAAA,CAAE;AAChEC,UAAAA,gBAAgB,MAAM;AACpBC,YAAA,WAAW,OAAO,eAAe;AAAA,QAC/B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA,CACD;AAAA,IAAA,GACA;AAAA,MACD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AACDD,UAAAA,gBAAgB,MAAM;AAChB,UAAA;AAAgB,eAAA,eAAe,QAAQ,OAAO,CAAC,EAAE,gBAAgB,QAAQ,MAAM,CAAC,CAAC;AAAA,IAAA,GACpF,CAAC,OAAO,CAAC;AACZ,WAAQE,2BAAAA,IAAA,aAAA,EAAU,KAAU,QAAQ,OAAQ,CAAA;AAAA,EAC9C;AACF;;"}
@@ -1,6 +1,6 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { forwardRef, useMemo, useLayoutEffect } from "react";
3
- import { N8AOPostPass as $87431ee93b037844$export$2489f9981ab0fa82 } from "../node_modules/n8ao/dist/N8AO.js";
3
+ import { N8AOPostPass } from "./N8AOPostPass.js";
4
4
  import { useThree, applyProps } from "@react-three/fiber";
5
5
  const N8AO = forwardRef(
6
6
  ({
@@ -18,7 +18,7 @@ const N8AO = forwardRef(
18
18
  renderMode = 0
19
19
  }, ref) => {
20
20
  const { camera, scene } = useThree();
21
- const effect = useMemo(() => new $87431ee93b037844$export$2489f9981ab0fa82(scene, camera), []);
21
+ const effect = useMemo(() => new N8AOPostPass(scene, camera), []);
22
22
  useLayoutEffect(() => {
23
23
  applyProps(effect.configuration, {
24
24
  color,
@@ -56,4 +56,4 @@ const N8AO = forwardRef(
56
56
  export {
57
57
  N8AO
58
58
  };
59
- //# sourceMappingURL=N8AO.js.map
59
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../src/effects/N8AO/index.tsx"],"sourcesContent":["// From https://github.com/N8python/n8ao\n// https://twitter.com/N8Programs/status/1660996748485984261\n\nimport { Ref, forwardRef, useLayoutEffect, useMemo } from 'react'\n/* @ts-ignore */\nimport { N8AOPostPass } from './N8AOPostPass'\nimport { useThree, ReactThreeFiber, applyProps } from '@react-three/fiber'\n\ntype N8AOProps = {\n aoRadius?: number\n distanceFalloff?: number\n intensity?: number\n quality?: 'performance' | 'low' | 'medium' | 'high' | 'ultra'\n aoSamples?: number\n denoiseSamples?: number\n denoiseRadius?: number\n color?: ReactThreeFiber.Color\n halfRes?: boolean\n depthAwareUpsampling?: boolean\n screenSpaceRadius?: boolean\n renderMode?: 0 | 1 | 2 | 3 | 4\n}\n\nexport const N8AO = forwardRef<N8AOPostPass, N8AOProps>(\n (\n {\n halfRes,\n screenSpaceRadius,\n quality,\n depthAwareUpsampling = true,\n aoRadius = 5,\n aoSamples = 16,\n denoiseSamples = 4,\n denoiseRadius = 12,\n distanceFalloff = 1,\n intensity = 1,\n color,\n renderMode = 0,\n },\n ref: Ref<N8AOPostPass>\n ) => {\n const { camera, scene } = useThree()\n const effect = useMemo(() => new N8AOPostPass(scene, camera), [])\n useLayoutEffect(() => {\n applyProps(effect.configuration, {\n color,\n aoRadius,\n distanceFalloff,\n intensity,\n aoSamples,\n denoiseSamples,\n denoiseRadius,\n screenSpaceRadius,\n renderMode,\n halfRes,\n depthAwareUpsampling,\n })\n }, [\n screenSpaceRadius,\n color,\n aoRadius,\n distanceFalloff,\n intensity,\n aoSamples,\n denoiseSamples,\n denoiseRadius,\n renderMode,\n halfRes,\n depthAwareUpsampling,\n ])\n useLayoutEffect(() => {\n if (quality) effect.setQualityMode(quality.charAt(0).toUpperCase() + quality.slice(1))\n }, [quality])\n return <primitive ref={ref} object={effect} />\n }\n)\n"],"names":[],"mappings":";;;;AAuBO,MAAM,OAAO;AAAA,EAClB,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA,uBAAuB;AAAA,IACvB,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ;AAAA,IACA,aAAa;AAAA,KAEf,QACG;AACH,UAAM,EAAE,QAAQ,MAAM,IAAI,SAAS;AAC7B,UAAA,SAAS,QAAQ,MAAM,IAAI,aAAa,OAAO,MAAM,GAAG,CAAA,CAAE;AAChE,oBAAgB,MAAM;AACpB,iBAAW,OAAO,eAAe;AAAA,QAC/B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA,CACD;AAAA,IAAA,GACA;AAAA,MACD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AACD,oBAAgB,MAAM;AAChB,UAAA;AAAgB,eAAA,eAAe,QAAQ,OAAO,CAAC,EAAE,gBAAgB,QAAQ,MAAM,CAAC,CAAC;AAAA,IAAA,GACpF,CAAC,OAAO,CAAC;AACZ,WAAQ,oBAAA,aAAA,EAAU,KAAU,QAAQ,OAAQ,CAAA;AAAA,EAC9C;AACF;"}
package/dist/index.cjs CHANGED
@@ -35,7 +35,7 @@ const TiltShift = require("./effects/TiltShift.cjs");
35
35
  const TiltShift2 = require("./effects/TiltShift2.cjs");
36
36
  const ASCII = require("./effects/ASCII.cjs");
37
37
  const index = require("./effects/SSR/index.cjs");
38
- const N8AO = require("./effects/N8AO.cjs");
38
+ const index$1 = require("./effects/N8AO/index.cjs");
39
39
  exports.Select = Selection.Select;
40
40
  exports.Selection = Selection.Selection;
41
41
  exports.selectionContext = Selection.selectionContext;
@@ -78,5 +78,5 @@ exports.TiltShift2 = TiltShift2.TiltShift2;
78
78
  exports.TiltShiftEffect = TiltShift2.TiltShiftEffect;
79
79
  exports.ASCII = ASCII.ASCII;
80
80
  exports.SSR = index.SSR;
81
- exports.N8AO = N8AO.N8AO;
81
+ exports.N8AO = index$1.N8AO;
82
82
  //# sourceMappingURL=index.cjs.map
package/dist/index.js CHANGED
@@ -33,7 +33,7 @@ import { TiltShift } from "./effects/TiltShift.js";
33
33
  import { TiltShift2, TiltShiftEffect } from "./effects/TiltShift2.js";
34
34
  import { ASCII } from "./effects/ASCII.js";
35
35
  import { SSR } from "./effects/SSR/index.js";
36
- import { N8AO } from "./effects/N8AO.js";
36
+ import { N8AO } from "./effects/N8AO/index.js";
37
37
  export {
38
38
  ASCII,
39
39
  Autofocus,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-three/postprocessing",
3
- "version": "2.15.5",
3
+ "version": "2.15.7",
4
4
  "description": "postprocessing wrapper for React and @react-three/fiber",
5
5
  "keywords": [
6
6
  "postprocessing",
@@ -46,6 +46,7 @@
46
46
  "build-storybook": "storybook build"
47
47
  },
48
48
  "dependencies": {
49
+ "buffer": "^6.0.3",
49
50
  "maath": "^0.6.0",
50
51
  "n8ao": "^1.6.6",
51
52
  "postprocessing": "^6.32.1",
@@ -1 +0,0 @@
1
- {"version":3,"file":"N8AO.cjs","sources":["../../src/effects/N8AO.tsx"],"sourcesContent":["// From https://github.com/N8python/n8ao\n// https://twitter.com/N8Programs/status/1660996748485984261\n\nimport { Ref, forwardRef, useLayoutEffect, useMemo } from 'react'\n/* @ts-ignore */\nimport { N8AOPostPass } from 'n8ao'\nimport { useThree, ReactThreeFiber, applyProps } from '@react-three/fiber'\n\ntype N8AOProps = {\n aoRadius?: number\n distanceFalloff?: number\n intensity?: number\n quality?: 'performance' | 'low' | 'medium' | 'high' | 'ultra'\n aoSamples?: number\n denoiseSamples?: number\n denoiseRadius?: number\n color?: ReactThreeFiber.Color\n halfRes?: boolean\n depthAwareUpsampling?: boolean\n screenSpaceRadius?: boolean\n renderMode?: 0 | 1 | 2 | 3 | 4\n}\n\nexport const N8AO = forwardRef<N8AOPostPass, N8AOProps>(\n (\n {\n halfRes,\n screenSpaceRadius,\n quality,\n depthAwareUpsampling = true,\n aoRadius = 5,\n aoSamples = 16,\n denoiseSamples = 4,\n denoiseRadius = 12,\n distanceFalloff = 1,\n intensity = 1,\n color,\n renderMode = 0,\n },\n ref: Ref<N8AOPostPass>\n ) => {\n const { camera, scene } = useThree()\n const effect = useMemo(() => new N8AOPostPass(scene, camera), [])\n useLayoutEffect(() => {\n applyProps(effect.configuration, {\n color,\n aoRadius,\n distanceFalloff,\n intensity,\n aoSamples,\n denoiseSamples,\n denoiseRadius,\n screenSpaceRadius,\n renderMode,\n halfRes,\n depthAwareUpsampling,\n })\n }, [\n screenSpaceRadius,\n color,\n aoRadius,\n distanceFalloff,\n intensity,\n aoSamples,\n denoiseSamples,\n denoiseRadius,\n renderMode,\n halfRes,\n depthAwareUpsampling,\n ])\n useLayoutEffect(() => {\n if (quality) effect.setQualityMode(quality.charAt(0).toUpperCase() + quality.slice(1))\n }, [quality])\n return <primitive ref={ref} object={effect} />\n }\n)\n"],"names":["forwardRef","useThree","useMemo","N8AOPostPass","useLayoutEffect","applyProps","jsx"],"mappings":";;;;;;AAuBO,MAAM,OAAOA,MAAA;AAAA,EAClB,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA,uBAAuB;AAAA,IACvB,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ;AAAA,IACA,aAAa;AAAA,KAEf,QACG;AACH,UAAM,EAAE,QAAQ,MAAM,IAAIC,MAAS,SAAA;AAC7B,UAAA,SAASC,cAAQ,MAAM,IAAIC,OAAAA,aAAa,OAAO,MAAM,GAAG,CAAA,CAAE;AAChEC,UAAAA,gBAAgB,MAAM;AACpBC,YAAA,WAAW,OAAO,eAAe;AAAA,QAC/B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA,CACD;AAAA,IAAA,GACA;AAAA,MACD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AACDD,UAAAA,gBAAgB,MAAM;AAChB,UAAA;AAAgB,eAAA,eAAe,QAAQ,OAAO,CAAC,EAAE,gBAAgB,QAAQ,MAAM,CAAC,CAAC;AAAA,IAAA,GACpF,CAAC,OAAO,CAAC;AACZ,WAAQE,2BAAAA,IAAA,aAAA,EAAU,KAAU,QAAQ,OAAQ,CAAA;AAAA,EAC9C;AACF;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"N8AO.js","sources":["../../src/effects/N8AO.tsx"],"sourcesContent":["// From https://github.com/N8python/n8ao\n// https://twitter.com/N8Programs/status/1660996748485984261\n\nimport { Ref, forwardRef, useLayoutEffect, useMemo } from 'react'\n/* @ts-ignore */\nimport { N8AOPostPass } from 'n8ao'\nimport { useThree, ReactThreeFiber, applyProps } from '@react-three/fiber'\n\ntype N8AOProps = {\n aoRadius?: number\n distanceFalloff?: number\n intensity?: number\n quality?: 'performance' | 'low' | 'medium' | 'high' | 'ultra'\n aoSamples?: number\n denoiseSamples?: number\n denoiseRadius?: number\n color?: ReactThreeFiber.Color\n halfRes?: boolean\n depthAwareUpsampling?: boolean\n screenSpaceRadius?: boolean\n renderMode?: 0 | 1 | 2 | 3 | 4\n}\n\nexport const N8AO = forwardRef<N8AOPostPass, N8AOProps>(\n (\n {\n halfRes,\n screenSpaceRadius,\n quality,\n depthAwareUpsampling = true,\n aoRadius = 5,\n aoSamples = 16,\n denoiseSamples = 4,\n denoiseRadius = 12,\n distanceFalloff = 1,\n intensity = 1,\n color,\n renderMode = 0,\n },\n ref: Ref<N8AOPostPass>\n ) => {\n const { camera, scene } = useThree()\n const effect = useMemo(() => new N8AOPostPass(scene, camera), [])\n useLayoutEffect(() => {\n applyProps(effect.configuration, {\n color,\n aoRadius,\n distanceFalloff,\n intensity,\n aoSamples,\n denoiseSamples,\n denoiseRadius,\n screenSpaceRadius,\n renderMode,\n halfRes,\n depthAwareUpsampling,\n })\n }, [\n screenSpaceRadius,\n color,\n aoRadius,\n distanceFalloff,\n intensity,\n aoSamples,\n denoiseSamples,\n denoiseRadius,\n renderMode,\n halfRes,\n depthAwareUpsampling,\n ])\n useLayoutEffect(() => {\n if (quality) effect.setQualityMode(quality.charAt(0).toUpperCase() + quality.slice(1))\n }, [quality])\n return <primitive ref={ref} object={effect} />\n }\n)\n"],"names":["N8AOPostPass"],"mappings":";;;;AAuBO,MAAM,OAAO;AAAA,EAClB,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA,uBAAuB;AAAA,IACvB,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ;AAAA,IACA,aAAa;AAAA,KAEf,QACG;AACH,UAAM,EAAE,QAAQ,MAAM,IAAI,SAAS;AAC7B,UAAA,SAAS,QAAQ,MAAM,IAAIA,0CAAa,OAAO,MAAM,GAAG,CAAA,CAAE;AAChE,oBAAgB,MAAM;AACpB,iBAAW,OAAO,eAAe;AAAA,QAC/B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA,CACD;AAAA,IAAA,GACA;AAAA,MACD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AACD,oBAAgB,MAAM;AAChB,UAAA;AAAgB,eAAA,eAAe,QAAQ,OAAO,CAAC,EAAE,gBAAgB,QAAQ,MAAM,CAAC,CAAC;AAAA,IAAA,GACpF,CAAC,OAAO,CAAC;AACZ,WAAQ,oBAAA,aAAA,EAAU,KAAU,QAAQ,OAAQ,CAAA;AAAA,EAC9C;AACF;"}