@react-three/postprocessing 2.15.5 → 2.15.6
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.
- package/dist/effects/N8AO/BlueNoise.cjs +4 -0
- package/dist/effects/N8AO/BlueNoise.cjs.map +1 -0
- package/dist/effects/N8AO/BlueNoise.js +5 -0
- package/dist/effects/N8AO/BlueNoise.js.map +1 -0
- package/dist/effects/N8AO/DepthDownSample.cjs +183 -0
- package/dist/effects/N8AO/DepthDownSample.cjs.map +1 -0
- package/dist/effects/N8AO/DepthDownSample.js +166 -0
- package/dist/effects/N8AO/DepthDownSample.js.map +1 -0
- package/dist/effects/N8AO/EffectCompositer.cjs +276 -0
- package/dist/effects/N8AO/EffectCompositer.cjs.map +1 -0
- package/dist/effects/N8AO/EffectCompositer.js +259 -0
- package/dist/effects/N8AO/EffectCompositer.js.map +1 -0
- package/dist/effects/N8AO/EffectShader.cjs +236 -0
- package/dist/effects/N8AO/EffectShader.cjs.map +1 -0
- package/dist/effects/N8AO/EffectShader.js +219 -0
- package/dist/effects/N8AO/EffectShader.js.map +1 -0
- package/dist/effects/N8AO/FullScreenTriangle.cjs +59 -0
- package/dist/effects/N8AO/FullScreenTriangle.cjs.map +1 -0
- package/dist/effects/N8AO/FullScreenTriangle.js +42 -0
- package/dist/effects/N8AO/FullScreenTriangle.js.map +1 -0
- package/dist/effects/N8AO/N8AOPostPass.cjs +501 -0
- package/dist/effects/N8AO/N8AOPostPass.cjs.map +1 -0
- package/dist/effects/N8AO/N8AOPostPass.js +484 -0
- package/dist/effects/N8AO/N8AOPostPass.js.map +1 -0
- package/dist/effects/N8AO/PoissionBlur.cjs +186 -0
- package/dist/effects/N8AO/PoissionBlur.cjs.map +1 -0
- package/dist/effects/N8AO/PoissionBlur.js +169 -0
- package/dist/effects/N8AO/PoissionBlur.js.map +1 -0
- package/dist/effects/{N8AO.cjs → N8AO/index.cjs} +3 -3
- package/dist/effects/N8AO/index.cjs.map +1 -0
- package/dist/effects/{N8AO.js → N8AO/index.js} +3 -3
- package/dist/effects/N8AO/index.js.map +1 -0
- package/dist/index.cjs +2 -2
- package/dist/index.js +1 -1
- package/package.json +2 -1
- package/dist/effects/N8AO.cjs.map +0 -1
- package/dist/effects/N8AO.js.map +0 -1
- package/dist/node_modules/n8ao/dist/N8AO.cjs +0 -1439
- package/dist/node_modules/n8ao/dist/N8AO.cjs.map +0 -1
- package/dist/node_modules/n8ao/dist/N8AO.js +0 -1439
- package/dist/node_modules/n8ao/dist/N8AO.js.map +0 -1
- /package/dist/effects/{N8AO.d.ts → N8AO/index.d.ts} +0 -0
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import * as THREE from "three";
|
|
2
|
+
const EffectShader = {
|
|
3
|
+
uniforms: {
|
|
4
|
+
sceneDiffuse: { value: null },
|
|
5
|
+
sceneDepth: { value: null },
|
|
6
|
+
sceneNormal: { value: null },
|
|
7
|
+
projMat: { value: new THREE.Matrix4() },
|
|
8
|
+
viewMat: { value: new THREE.Matrix4() },
|
|
9
|
+
projViewMat: { value: new THREE.Matrix4() },
|
|
10
|
+
projectionMatrixInv: { value: new THREE.Matrix4() },
|
|
11
|
+
viewMatrixInv: { value: new THREE.Matrix4() },
|
|
12
|
+
cameraPos: { value: new THREE.Vector3() },
|
|
13
|
+
resolution: { value: new THREE.Vector2() },
|
|
14
|
+
time: { value: 0 },
|
|
15
|
+
samples: { value: [] },
|
|
16
|
+
samplesR: { value: [] },
|
|
17
|
+
bluenoise: { value: null },
|
|
18
|
+
distanceFalloff: { value: 1 },
|
|
19
|
+
radius: { value: 5 },
|
|
20
|
+
near: { value: 0.1 },
|
|
21
|
+
far: { value: 1e3 },
|
|
22
|
+
logDepth: { value: false },
|
|
23
|
+
ortho: { 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);
|
|
35
|
+
}`
|
|
36
|
+
),
|
|
37
|
+
fragmentShader: (
|
|
38
|
+
/* glsl */
|
|
39
|
+
`
|
|
40
|
+
#define SAMPLES 16
|
|
41
|
+
#define FSAMPLES 16.0
|
|
42
|
+
uniform sampler2D sceneDiffuse;
|
|
43
|
+
uniform highp sampler2D sceneNormal;
|
|
44
|
+
uniform highp sampler2D sceneDepth;
|
|
45
|
+
uniform mat4 projectionMatrixInv;
|
|
46
|
+
uniform mat4 viewMatrixInv;
|
|
47
|
+
uniform mat4 projMat;
|
|
48
|
+
uniform mat4 viewMat;
|
|
49
|
+
uniform mat4 projViewMat;
|
|
50
|
+
uniform vec3 cameraPos;
|
|
51
|
+
uniform vec2 resolution;
|
|
52
|
+
uniform float time;
|
|
53
|
+
uniform vec3[SAMPLES] samples;
|
|
54
|
+
uniform float[SAMPLES] samplesR;
|
|
55
|
+
uniform float radius;
|
|
56
|
+
uniform float distanceFalloff;
|
|
57
|
+
uniform float near;
|
|
58
|
+
uniform float far;
|
|
59
|
+
uniform bool logDepth;
|
|
60
|
+
uniform bool ortho;
|
|
61
|
+
uniform bool screenSpaceRadius;
|
|
62
|
+
uniform sampler2D bluenoise;
|
|
63
|
+
varying vec2 vUv;
|
|
64
|
+
highp float linearize_depth(highp float d, highp float zNear,highp float zFar)
|
|
65
|
+
{
|
|
66
|
+
return (zFar * zNear) / (zFar - d * (zFar - zNear));
|
|
67
|
+
}
|
|
68
|
+
highp float linearize_depth_ortho(highp float d, highp float nearZ, highp float farZ) {
|
|
69
|
+
return nearZ + (farZ - nearZ) * d;
|
|
70
|
+
}
|
|
71
|
+
highp float linearize_depth_log(highp float d, highp float nearZ,highp float farZ) {
|
|
72
|
+
float depth = pow(2.0, d * log2(farZ + 1.0)) - 1.0;
|
|
73
|
+
float a = farZ / (farZ - nearZ);
|
|
74
|
+
float b = farZ * nearZ / (nearZ - farZ);
|
|
75
|
+
float linDepth = a + b / depth;
|
|
76
|
+
return ortho ? linearize_depth_ortho(
|
|
77
|
+
linDepth,
|
|
78
|
+
nearZ,
|
|
79
|
+
farZ
|
|
80
|
+
) :linearize_depth(linDepth, nearZ, farZ);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
vec3 getWorldPosLog(vec3 posS) {
|
|
84
|
+
vec2 uv = posS.xy;
|
|
85
|
+
float z = posS.z;
|
|
86
|
+
float nearZ =near;
|
|
87
|
+
float farZ = far;
|
|
88
|
+
float depth = pow(2.0, z * log2(farZ + 1.0)) - 1.0;
|
|
89
|
+
float a = farZ / (farZ - nearZ);
|
|
90
|
+
float b = farZ * nearZ / (nearZ - farZ);
|
|
91
|
+
float linDepth = a + b / depth;
|
|
92
|
+
vec4 clipVec = vec4(uv, linDepth, 1.0) * 2.0 - 1.0;
|
|
93
|
+
vec4 wpos = projectionMatrixInv * clipVec;
|
|
94
|
+
return wpos.xyz / wpos.w;
|
|
95
|
+
}
|
|
96
|
+
vec3 getWorldPos(float depth, vec2 coord) {
|
|
97
|
+
#ifdef LOGDEPTH
|
|
98
|
+
return getWorldPosLog(vec3(coord, depth));
|
|
99
|
+
#endif
|
|
100
|
+
float z = depth * 2.0 - 1.0;
|
|
101
|
+
vec4 clipSpacePosition = vec4(coord * 2.0 - 1.0, z, 1.0);
|
|
102
|
+
vec4 viewSpacePosition = projectionMatrixInv * clipSpacePosition;
|
|
103
|
+
// Perspective division
|
|
104
|
+
vec4 worldSpacePosition = viewSpacePosition;
|
|
105
|
+
worldSpacePosition.xyz /= worldSpacePosition.w;
|
|
106
|
+
return worldSpacePosition.xyz;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
vec3 computeNormal(vec3 worldPos, vec2 vUv) {
|
|
110
|
+
ivec2 p = ivec2(vUv * resolution);
|
|
111
|
+
float c0 = texelFetch(sceneDepth, p, 0).x;
|
|
112
|
+
float l2 = texelFetch(sceneDepth, p - ivec2(2, 0), 0).x;
|
|
113
|
+
float l1 = texelFetch(sceneDepth, p - ivec2(1, 0), 0).x;
|
|
114
|
+
float r1 = texelFetch(sceneDepth, p + ivec2(1, 0), 0).x;
|
|
115
|
+
float r2 = texelFetch(sceneDepth, p + ivec2(2, 0), 0).x;
|
|
116
|
+
float b2 = texelFetch(sceneDepth, p - ivec2(0, 2), 0).x;
|
|
117
|
+
float b1 = texelFetch(sceneDepth, p - ivec2(0, 1), 0).x;
|
|
118
|
+
float t1 = texelFetch(sceneDepth, p + ivec2(0, 1), 0).x;
|
|
119
|
+
float t2 = texelFetch(sceneDepth, p + ivec2(0, 2), 0).x;
|
|
120
|
+
|
|
121
|
+
float dl = abs((2.0 * l1 - l2) - c0);
|
|
122
|
+
float dr = abs((2.0 * r1 - r2) - c0);
|
|
123
|
+
float db = abs((2.0 * b1 - b2) - c0);
|
|
124
|
+
float dt = abs((2.0 * t1 - t2) - c0);
|
|
125
|
+
|
|
126
|
+
vec3 ce = getWorldPos(c0, vUv).xyz;
|
|
127
|
+
|
|
128
|
+
vec3 dpdx = (dl < dr) ? ce - getWorldPos(l1, (vUv - vec2(1.0 / resolution.x, 0.0))).xyz
|
|
129
|
+
: -ce + getWorldPos(r1, (vUv + vec2(1.0 / resolution.x, 0.0))).xyz;
|
|
130
|
+
vec3 dpdy = (db < dt) ? ce - getWorldPos(b1, (vUv - vec2(0.0, 1.0 / resolution.y))).xyz
|
|
131
|
+
: -ce + getWorldPos(t1, (vUv + vec2(0.0, 1.0 / resolution.y))).xyz;
|
|
132
|
+
|
|
133
|
+
return normalize(cross(dpdx, dpdy));
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
void main() {
|
|
137
|
+
vec4 diffuse = texture2D(sceneDiffuse, vUv);
|
|
138
|
+
float depth = texture2D(sceneDepth, vUv).x;
|
|
139
|
+
if (depth == 1.0) {
|
|
140
|
+
gl_FragColor = vec4(vec3(1.0), 1.0);
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
vec3 worldPos = getWorldPos(depth, vUv);
|
|
144
|
+
// vec3 normal = texture2D(sceneNormal, vUv).rgb;//computeNormal(worldPos, vUv);
|
|
145
|
+
#ifdef HALFRES
|
|
146
|
+
vec3 normal = texture2D(sceneNormal, vUv).rgb;
|
|
147
|
+
#else
|
|
148
|
+
vec3 normal = computeNormal(worldPos, vUv);
|
|
149
|
+
#endif
|
|
150
|
+
vec4 noise = texture2D(bluenoise, gl_FragCoord.xy / 128.0);
|
|
151
|
+
vec3 randomVec = normalize(noise.rgb * 2.0 - 1.0);
|
|
152
|
+
vec3 tangent = normalize(randomVec - normal * dot(randomVec, normal));
|
|
153
|
+
vec3 bitangent = cross(normal, tangent);
|
|
154
|
+
mat3 tbn = mat3(tangent, bitangent, normal);
|
|
155
|
+
float occluded = 0.0;
|
|
156
|
+
float totalWeight = 0.0;
|
|
157
|
+
/* float radiusScreen = distance(
|
|
158
|
+
worldPos,
|
|
159
|
+
getWorldPos(depth, vUv +
|
|
160
|
+
vec2(48.0, 0.0) / resolution)
|
|
161
|
+
);/*vUv.x < 0.5 ? radius : min(distance(
|
|
162
|
+
worldPos,
|
|
163
|
+
getWorldPos(depth, vUv +
|
|
164
|
+
vec2(100.0, 0.0) / resolution)
|
|
165
|
+
), radius);
|
|
166
|
+
float distanceFalloffScreen = radiusScreen * 0.2;*/
|
|
167
|
+
float radiusToUse = screenSpaceRadius ? distance(
|
|
168
|
+
worldPos,
|
|
169
|
+
getWorldPos(depth, vUv +
|
|
170
|
+
vec2(radius, 0.0) / resolution)
|
|
171
|
+
) : radius;
|
|
172
|
+
float distanceFalloffToUse =screenSpaceRadius ?
|
|
173
|
+
radiusToUse * distanceFalloff
|
|
174
|
+
: distanceFalloff;
|
|
175
|
+
float bias = (0.1 / near) * fwidth(distance(worldPos, cameraPos)) / radiusToUse;
|
|
176
|
+
for(float i = 0.0; i < FSAMPLES; i++) {
|
|
177
|
+
vec3 sampleDirection =
|
|
178
|
+
tbn *
|
|
179
|
+
samples[int(i)];
|
|
180
|
+
;
|
|
181
|
+
float moveAmt = samplesR[int(mod(i + noise.a * FSAMPLES, FSAMPLES))];
|
|
182
|
+
vec3 samplePos = worldPos + radiusToUse * moveAmt * sampleDirection;
|
|
183
|
+
vec4 offset = projMat * vec4(samplePos, 1.0);
|
|
184
|
+
offset.xyz /= offset.w;
|
|
185
|
+
offset.xyz = offset.xyz * 0.5 + 0.5;
|
|
186
|
+
float sampleDepth = textureLod(sceneDepth, offset.xy, 0.0).x;
|
|
187
|
+
/*float distSample = logDepth ? linearize_depth_log(sampleDepth, near, far)
|
|
188
|
+
(ortho ? linearize_depth_ortho(sampleDepth, near, far) : linearize_depth(sampleDepth, near, far));*/
|
|
189
|
+
#ifdef LOGDEPTH
|
|
190
|
+
float distSample = linearize_depth_log(sampleDepth, near, far);
|
|
191
|
+
#else
|
|
192
|
+
float distSample = ortho ? linearize_depth_ortho(sampleDepth, near, far) : linearize_depth(sampleDepth, near, far);
|
|
193
|
+
#endif
|
|
194
|
+
float distWorld = ortho ? linearize_depth_ortho(offset.z, near, far) : linearize_depth(offset.z, near, far);
|
|
195
|
+
float rangeCheck = smoothstep(0.0, 1.0, distanceFalloffToUse / (abs(distSample - distWorld)));
|
|
196
|
+
vec2 diff = gl_FragCoord.xy - ( offset.xy * resolution);
|
|
197
|
+
float weight = dot(sampleDirection, normal);
|
|
198
|
+
occluded += rangeCheck * weight *
|
|
199
|
+
(distSample + bias
|
|
200
|
+
< distWorld ? 1.0 : 0.0) * (
|
|
201
|
+
(dot(
|
|
202
|
+
diff,
|
|
203
|
+
diff
|
|
204
|
+
|
|
205
|
+
) < 1.0 || (sampleDepth == depth) || (
|
|
206
|
+
offset.x < 0.0 || offset.x > 1.0 || offset.y < 0.0 || offset.y > 1.0
|
|
207
|
+
) ? 0.0 : 1.0)
|
|
208
|
+
);
|
|
209
|
+
totalWeight += weight;
|
|
210
|
+
}
|
|
211
|
+
float occ = clamp(1.0 - occluded / totalWeight, 0.0, 1.0);
|
|
212
|
+
gl_FragColor = vec4(0.5 + 0.5 * normal, occ);
|
|
213
|
+
}`
|
|
214
|
+
)
|
|
215
|
+
};
|
|
216
|
+
export {
|
|
217
|
+
EffectShader
|
|
218
|
+
};
|
|
219
|
+
//# sourceMappingURL=EffectShader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EffectShader.js","sources":["../../../src/effects/N8AO/EffectShader.js"],"sourcesContent":["import * as THREE from 'three'\n\nconst EffectShader = {\n uniforms: {\n sceneDiffuse: { value: null },\n sceneDepth: { value: null },\n sceneNormal: { value: null },\n projMat: { value: new THREE.Matrix4() },\n viewMat: { value: new THREE.Matrix4() },\n projViewMat: { 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 samples: { value: [] },\n samplesR: { value: [] },\n bluenoise: { value: null },\n distanceFalloff: { value: 1.0 },\n radius: { value: 5.0 },\n near: { value: 0.1 },\n far: { value: 1000.0 },\n logDepth: { value: false },\n ortho: { value: false },\n screenSpaceRadius: { value: false },\n },\n depthWrite: false,\n depthTest: false,\n vertexShader: /* glsl */ `\nvarying vec2 vUv;\nvoid main() {\n vUv = uv;\n gl_Position = vec4(position, 1);\n}`,\n\n fragmentShader: /* glsl */ `\n #define SAMPLES 16\n #define FSAMPLES 16.0\nuniform sampler2D sceneDiffuse;\nuniform highp sampler2D sceneNormal;\nuniform highp sampler2D sceneDepth;\nuniform mat4 projectionMatrixInv;\nuniform mat4 viewMatrixInv;\nuniform mat4 projMat;\nuniform mat4 viewMat;\nuniform mat4 projViewMat;\nuniform vec3 cameraPos;\nuniform vec2 resolution;\nuniform float time;\nuniform vec3[SAMPLES] samples;\nuniform float[SAMPLES] samplesR;\nuniform float radius;\nuniform float distanceFalloff;\nuniform float near;\nuniform float far;\nuniform bool logDepth;\nuniform bool ortho;\nuniform bool screenSpaceRadius;\nuniform sampler2D bluenoise;\n varying vec2 vUv;\n highp float linearize_depth(highp float d, highp float zNear,highp float zFar)\n {\n return (zFar * zNear) / (zFar - d * (zFar - zNear));\n }\n highp float linearize_depth_ortho(highp float d, highp float nearZ, highp float farZ) {\n return nearZ + (farZ - nearZ) * d;\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 ortho ? linearize_depth_ortho(\n linDepth,\n nearZ,\n farZ\n ) :linearize_depth(linDepth, nearZ, farZ);\n }\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 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\n vec3 computeNormal(vec3 worldPos, vec2 vUv) {\n ivec2 p = ivec2(vUv * resolution);\n float c0 = texelFetch(sceneDepth, p, 0).x;\n float l2 = texelFetch(sceneDepth, p - ivec2(2, 0), 0).x;\n float l1 = texelFetch(sceneDepth, p - ivec2(1, 0), 0).x;\n float r1 = texelFetch(sceneDepth, p + ivec2(1, 0), 0).x;\n float r2 = texelFetch(sceneDepth, p + ivec2(2, 0), 0).x;\n float b2 = texelFetch(sceneDepth, p - ivec2(0, 2), 0).x;\n float b1 = texelFetch(sceneDepth, p - ivec2(0, 1), 0).x;\n float t1 = texelFetch(sceneDepth, p + ivec2(0, 1), 0).x;\n float t2 = texelFetch(sceneDepth, p + ivec2(0, 2), 0).x;\n\n float dl = abs((2.0 * l1 - l2) - c0);\n float dr = abs((2.0 * r1 - r2) - c0);\n float db = abs((2.0 * b1 - b2) - c0);\n float dt = abs((2.0 * t1 - t2) - c0);\n\n vec3 ce = getWorldPos(c0, vUv).xyz;\n\n vec3 dpdx = (dl < dr) ? ce - getWorldPos(l1, (vUv - vec2(1.0 / resolution.x, 0.0))).xyz\n : -ce + getWorldPos(r1, (vUv + vec2(1.0 / resolution.x, 0.0))).xyz;\n vec3 dpdy = (db < dt) ? ce - getWorldPos(b1, (vUv - vec2(0.0, 1.0 / resolution.y))).xyz\n : -ce + getWorldPos(t1, (vUv + vec2(0.0, 1.0 / resolution.y))).xyz;\n\n return normalize(cross(dpdx, dpdy));\n}\n\nvoid main() {\n vec4 diffuse = texture2D(sceneDiffuse, vUv);\n float depth = texture2D(sceneDepth, vUv).x;\n if (depth == 1.0) {\n gl_FragColor = vec4(vec3(1.0), 1.0);\n return;\n }\n vec3 worldPos = getWorldPos(depth, vUv);\n // vec3 normal = texture2D(sceneNormal, vUv).rgb;//computeNormal(worldPos, vUv);\n #ifdef HALFRES\n vec3 normal = texture2D(sceneNormal, vUv).rgb;\n #else\n vec3 normal = computeNormal(worldPos, vUv);\n #endif\n vec4 noise = texture2D(bluenoise, gl_FragCoord.xy / 128.0);\n vec3 randomVec = normalize(noise.rgb * 2.0 - 1.0);\n vec3 tangent = normalize(randomVec - normal * dot(randomVec, normal));\n vec3 bitangent = cross(normal, tangent);\n mat3 tbn = mat3(tangent, bitangent, normal);\n float occluded = 0.0;\n float totalWeight = 0.0;\n /* float radiusScreen = distance(\n worldPos,\n getWorldPos(depth, vUv + \n vec2(48.0, 0.0) / resolution)\n );/*vUv.x < 0.5 ? radius : min(distance(\n worldPos,\n getWorldPos(depth, vUv + \n vec2(100.0, 0.0) / resolution)\n ), radius);\n float distanceFalloffScreen = radiusScreen * 0.2;*/\n float radiusToUse = screenSpaceRadius ? distance(\n worldPos,\n getWorldPos(depth, vUv +\n vec2(radius, 0.0) / resolution)\n ) : radius;\n float distanceFalloffToUse =screenSpaceRadius ?\n radiusToUse * distanceFalloff\n : distanceFalloff;\n float bias = (0.1 / near) * fwidth(distance(worldPos, cameraPos)) / radiusToUse;\n for(float i = 0.0; i < FSAMPLES; i++) {\n vec3 sampleDirection = \n tbn * \n samples[int(i)];\n ;\n float moveAmt = samplesR[int(mod(i + noise.a * FSAMPLES, FSAMPLES))];\n vec3 samplePos = worldPos + radiusToUse * moveAmt * sampleDirection;\n vec4 offset = projMat * vec4(samplePos, 1.0);\n offset.xyz /= offset.w;\n offset.xyz = offset.xyz * 0.5 + 0.5;\n float sampleDepth = textureLod(sceneDepth, offset.xy, 0.0).x;\n /*float distSample = logDepth ? linearize_depth_log(sampleDepth, near, far) \n (ortho ? linearize_depth_ortho(sampleDepth, near, far) : linearize_depth(sampleDepth, near, far));*/\n #ifdef LOGDEPTH\n float distSample = linearize_depth_log(sampleDepth, near, far);\n #else\n float distSample = ortho ? linearize_depth_ortho(sampleDepth, near, far) : linearize_depth(sampleDepth, near, far);\n #endif\n float distWorld = ortho ? linearize_depth_ortho(offset.z, near, far) : linearize_depth(offset.z, near, far);\n float rangeCheck = smoothstep(0.0, 1.0, distanceFalloffToUse / (abs(distSample - distWorld)));\n vec2 diff = gl_FragCoord.xy - ( offset.xy * resolution);\n float weight = dot(sampleDirection, normal);\n occluded += rangeCheck * weight * \n (distSample + bias\n < distWorld ? 1.0 : 0.0) * (\n (dot(\n diff,\n diff\n \n ) < 1.0 || (sampleDepth == depth) || (\n offset.x < 0.0 || offset.x > 1.0 || offset.y < 0.0 || offset.y > 1.0\n ) ? 0.0 : 1.0)\n );\n totalWeight += weight;\n }\n float occ = clamp(1.0 - occluded / totalWeight, 0.0, 1.0);\n gl_FragColor = vec4(0.5 + 0.5 * normal, occ);\n}`,\n}\n\nexport { EffectShader }\n"],"names":[],"mappings":";AAEK,MAAC,eAAe;AAAA,EACnB,UAAU;AAAA,IACR,cAAc,EAAE,OAAO,KAAM;AAAA,IAC7B,YAAY,EAAE,OAAO,KAAM;AAAA,IAC3B,aAAa,EAAE,OAAO,KAAM;AAAA,IAC5B,SAAS,EAAE,OAAO,IAAI,MAAM,QAAO,EAAI;AAAA,IACvC,SAAS,EAAE,OAAO,IAAI,MAAM,QAAO,EAAI;AAAA,IACvC,aAAa,EAAE,OAAO,IAAI,MAAM,QAAO,EAAI;AAAA,IAC3C,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,SAAS,EAAE,OAAO,GAAI;AAAA,IACtB,UAAU,EAAE,OAAO,GAAI;AAAA,IACvB,WAAW,EAAE,OAAO,KAAM;AAAA,IAC1B,iBAAiB,EAAE,OAAO,EAAK;AAAA,IAC/B,QAAQ,EAAE,OAAO,EAAK;AAAA,IACtB,MAAM,EAAE,OAAO,IAAK;AAAA,IACpB,KAAK,EAAE,OAAO,IAAQ;AAAA,IACtB,UAAU,EAAE,OAAO,MAAO;AAAA,IAC1B,OAAO,EAAE,OAAO,MAAO;AAAA,IACvB,mBAAmB,EAAE,OAAO,MAAO;AAAA,EACpC;AAAA,EACD,YAAY;AAAA,EACZ,WAAW;AAAA,EACX;AAAA;AAAA,IAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOzB;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;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;AA+K7B;"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
|
+
var __publicField = (obj, key, value) => {
|
|
5
|
+
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
6
|
+
return value;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
9
|
+
const THREE = require("three");
|
|
10
|
+
function _interopNamespaceDefault(e) {
|
|
11
|
+
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
12
|
+
if (e) {
|
|
13
|
+
for (const k in e) {
|
|
14
|
+
if (k !== "default") {
|
|
15
|
+
const d = Object.getOwnPropertyDescriptor(e, k);
|
|
16
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
get: () => e[k]
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
n.default = e;
|
|
24
|
+
return Object.freeze(n);
|
|
25
|
+
}
|
|
26
|
+
const THREE__namespace = /* @__PURE__ */ _interopNamespaceDefault(THREE);
|
|
27
|
+
class FullScreenTriangleGeometry extends THREE__namespace.BufferGeometry {
|
|
28
|
+
constructor() {
|
|
29
|
+
super();
|
|
30
|
+
__publicField(this, "boundingSphere", new THREE__namespace.Sphere());
|
|
31
|
+
this.setAttribute("position", new THREE__namespace.BufferAttribute(new Float32Array([-1, -1, 3, -1, -1, 3]), 2));
|
|
32
|
+
this.setAttribute("uv", new THREE__namespace.BufferAttribute(new Float32Array([0, 0, 2, 0, 0, 2]), 2));
|
|
33
|
+
}
|
|
34
|
+
computeBoundingSphere() {
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const _geometry = new FullScreenTriangleGeometry();
|
|
38
|
+
const _camera = new THREE__namespace.OrthographicCamera();
|
|
39
|
+
class FullScreenTriangle {
|
|
40
|
+
constructor(material) {
|
|
41
|
+
this._mesh = new THREE__namespace.Mesh(_geometry, material);
|
|
42
|
+
this._mesh.frustumCulled = false;
|
|
43
|
+
}
|
|
44
|
+
render(renderer) {
|
|
45
|
+
renderer.render(this._mesh, _camera);
|
|
46
|
+
}
|
|
47
|
+
get material() {
|
|
48
|
+
return this._mesh.material;
|
|
49
|
+
}
|
|
50
|
+
set material(value) {
|
|
51
|
+
this._mesh.material = value;
|
|
52
|
+
}
|
|
53
|
+
dispose() {
|
|
54
|
+
this._mesh.material.dispose();
|
|
55
|
+
this._mesh.geometry.dispose();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.FullScreenTriangle = FullScreenTriangle;
|
|
59
|
+
//# sourceMappingURL=FullScreenTriangle.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FullScreenTriangle.cjs","sources":["../../../src/effects/N8AO/FullScreenTriangle.js"],"sourcesContent":["import * as THREE from 'three'\n\nclass FullScreenTriangleGeometry extends THREE.BufferGeometry {\n boundingSphere = new THREE.Sphere()\n\n constructor() {\n super()\n this.setAttribute('position', new THREE.BufferAttribute(new Float32Array([-1, -1, 3, -1, -1, 3]), 2))\n this.setAttribute('uv', new THREE.BufferAttribute(new Float32Array([0, 0, 2, 0, 0, 2]), 2))\n }\n\n computeBoundingSphere() {}\n}\n\nconst _geometry = new FullScreenTriangleGeometry()\nconst _camera = new THREE.OrthographicCamera()\n\nexport class FullScreenTriangle {\n constructor(material) {\n this._mesh = new THREE.Mesh(_geometry, material)\n this._mesh.frustumCulled = false\n }\n\n render(renderer) {\n renderer.render(this._mesh, _camera)\n }\n\n get material() {\n return this._mesh.material\n }\n\n set material(value) {\n this._mesh.material = value\n }\n\n dispose() {\n this._mesh.material.dispose()\n this._mesh.geometry.dispose()\n }\n}\n"],"names":["THREE"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,MAAM,mCAAmCA,iBAAM,eAAe;AAAA,EAG5D,cAAc;AACZ,UAAO;AAHT,0CAAiB,IAAIA,iBAAM,OAAQ;AAIjC,SAAK,aAAa,YAAY,IAAIA,iBAAM,gBAAgB,IAAI,aAAa,CAAC,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACpG,SAAK,aAAa,MAAM,IAAIA,iBAAM,gBAAgB,IAAI,aAAa,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAAA,EAC3F;AAAA,EAED,wBAAwB;AAAA,EAAE;AAC5B;AAEA,MAAM,YAAY,IAAI,2BAA4B;AAClD,MAAM,UAAU,IAAIA,iBAAM,mBAAoB;AAEvC,MAAM,mBAAmB;AAAA,EAC9B,YAAY,UAAU;AACpB,SAAK,QAAQ,IAAIA,iBAAM,KAAK,WAAW,QAAQ;AAC/C,SAAK,MAAM,gBAAgB;AAAA,EAC5B;AAAA,EAED,OAAO,UAAU;AACf,aAAS,OAAO,KAAK,OAAO,OAAO;AAAA,EACpC;AAAA,EAED,IAAI,WAAW;AACb,WAAO,KAAK,MAAM;AAAA,EACnB;AAAA,EAED,IAAI,SAAS,OAAO;AAClB,SAAK,MAAM,WAAW;AAAA,EACvB;AAAA,EAED,UAAU;AACR,SAAK,MAAM,SAAS,QAAS;AAC7B,SAAK,MAAM,SAAS,QAAS;AAAA,EAC9B;AACH;;"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
+
var __publicField = (obj, key, value) => {
|
|
4
|
+
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
+
return value;
|
|
6
|
+
};
|
|
7
|
+
import * as THREE from "three";
|
|
8
|
+
class FullScreenTriangleGeometry extends THREE.BufferGeometry {
|
|
9
|
+
constructor() {
|
|
10
|
+
super();
|
|
11
|
+
__publicField(this, "boundingSphere", new THREE.Sphere());
|
|
12
|
+
this.setAttribute("position", new THREE.BufferAttribute(new Float32Array([-1, -1, 3, -1, -1, 3]), 2));
|
|
13
|
+
this.setAttribute("uv", new THREE.BufferAttribute(new Float32Array([0, 0, 2, 0, 0, 2]), 2));
|
|
14
|
+
}
|
|
15
|
+
computeBoundingSphere() {
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
const _geometry = new FullScreenTriangleGeometry();
|
|
19
|
+
const _camera = new THREE.OrthographicCamera();
|
|
20
|
+
class FullScreenTriangle {
|
|
21
|
+
constructor(material) {
|
|
22
|
+
this._mesh = new THREE.Mesh(_geometry, material);
|
|
23
|
+
this._mesh.frustumCulled = false;
|
|
24
|
+
}
|
|
25
|
+
render(renderer) {
|
|
26
|
+
renderer.render(this._mesh, _camera);
|
|
27
|
+
}
|
|
28
|
+
get material() {
|
|
29
|
+
return this._mesh.material;
|
|
30
|
+
}
|
|
31
|
+
set material(value) {
|
|
32
|
+
this._mesh.material = value;
|
|
33
|
+
}
|
|
34
|
+
dispose() {
|
|
35
|
+
this._mesh.material.dispose();
|
|
36
|
+
this._mesh.geometry.dispose();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export {
|
|
40
|
+
FullScreenTriangle
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=FullScreenTriangle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FullScreenTriangle.js","sources":["../../../src/effects/N8AO/FullScreenTriangle.js"],"sourcesContent":["import * as THREE from 'three'\n\nclass FullScreenTriangleGeometry extends THREE.BufferGeometry {\n boundingSphere = new THREE.Sphere()\n\n constructor() {\n super()\n this.setAttribute('position', new THREE.BufferAttribute(new Float32Array([-1, -1, 3, -1, -1, 3]), 2))\n this.setAttribute('uv', new THREE.BufferAttribute(new Float32Array([0, 0, 2, 0, 0, 2]), 2))\n }\n\n computeBoundingSphere() {}\n}\n\nconst _geometry = new FullScreenTriangleGeometry()\nconst _camera = new THREE.OrthographicCamera()\n\nexport class FullScreenTriangle {\n constructor(material) {\n this._mesh = new THREE.Mesh(_geometry, material)\n this._mesh.frustumCulled = false\n }\n\n render(renderer) {\n renderer.render(this._mesh, _camera)\n }\n\n get material() {\n return this._mesh.material\n }\n\n set material(value) {\n this._mesh.material = value\n }\n\n dispose() {\n this._mesh.material.dispose()\n this._mesh.geometry.dispose()\n }\n}\n"],"names":[],"mappings":";;;;;;;AAEA,MAAM,mCAAmC,MAAM,eAAe;AAAA,EAG5D,cAAc;AACZ,UAAO;AAHT,0CAAiB,IAAI,MAAM,OAAQ;AAIjC,SAAK,aAAa,YAAY,IAAI,MAAM,gBAAgB,IAAI,aAAa,CAAC,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACpG,SAAK,aAAa,MAAM,IAAI,MAAM,gBAAgB,IAAI,aAAa,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAAA,EAC3F;AAAA,EAED,wBAAwB;AAAA,EAAE;AAC5B;AAEA,MAAM,YAAY,IAAI,2BAA4B;AAClD,MAAM,UAAU,IAAI,MAAM,mBAAoB;AAEvC,MAAM,mBAAmB;AAAA,EAC9B,YAAY,UAAU;AACpB,SAAK,QAAQ,IAAI,MAAM,KAAK,WAAW,QAAQ;AAC/C,SAAK,MAAM,gBAAgB;AAAA,EAC5B;AAAA,EAED,OAAO,UAAU;AACf,aAAS,OAAO,KAAK,OAAO,OAAO;AAAA,EACpC;AAAA,EAED,IAAI,WAAW;AACb,WAAO,KAAK,MAAM;AAAA,EACnB;AAAA,EAED,IAAI,SAAS,OAAO;AAClB,SAAK,MAAM,WAAW;AAAA,EACvB;AAAA,EAED,UAAU;AACR,SAAK,MAAM,SAAS,QAAS;AAC7B,SAAK,MAAM,SAAS,QAAS;AAAA,EAC9B;AACH;"}
|