three-base 2.0.130 → 2.0.137

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 (125) hide show
  1. package/ApngTexture.d.ts +13 -13
  2. package/ApngTexture.js +61 -61
  3. package/ApngTextureManage.d.ts +18 -18
  4. package/ApngTextureManage.js +87 -87
  5. package/DirectionalLight.d.ts +6 -0
  6. package/DirectionalLight.js +68 -0
  7. package/EventMesh.d.ts +18 -18
  8. package/EventMesh.js +59 -59
  9. package/ExtrudeMesh.d.ts +112 -112
  10. package/ExtrudeMesh.js +366 -366
  11. package/FPScontrol.d.ts +78 -50
  12. package/FPScontrol.js +617 -232
  13. package/Fire/Fire.d.ts +28 -28
  14. package/Fire/Fire.js +79 -79
  15. package/Fire/FireGromtry.d.ts +9 -9
  16. package/Fire/FireGromtry.js +40 -40
  17. package/Fire/FireMaterial.d.ts +28 -28
  18. package/Fire/FireMaterial.js +32 -32
  19. package/Fire/index.d.ts +1 -1
  20. package/Fire/index.js +1 -1
  21. package/Grass/Grass.d.ts +8 -8
  22. package/Grass/Grass.js +38 -38
  23. package/Grass/index.d.ts +1 -1
  24. package/Grass/index.js +1 -1
  25. package/Ground1/Ground1.d.ts +11 -11
  26. package/Ground1/Ground1.js +54 -54
  27. package/Ground1/index.d.ts +1 -1
  28. package/Ground1/index.js +1 -1
  29. package/InstancedMeshBase.d.ts +39 -39
  30. package/InstancedMeshBase.js +293 -293
  31. package/KeyFrameAnimation.d.ts +25 -25
  32. package/KeyFrameAnimation.js +78 -78
  33. package/MeshBase.d.ts +35 -35
  34. package/MeshBase.js +223 -223
  35. package/Mirror.d.ts +25 -25
  36. package/Mirror.js +139 -139
  37. package/PipeMesh/PathGeometry.d.ts +44 -44
  38. package/PipeMesh/PathGeometry.js +300 -300
  39. package/PipeMesh/PathPoint.d.ts +17 -17
  40. package/PipeMesh/PathPoint.js +31 -31
  41. package/PipeMesh/PathPointList.d.ts +31 -31
  42. package/PipeMesh/PathPointList.js +208 -208
  43. package/PipeMesh/PathTubeGeometry.d.ts +25 -25
  44. package/PipeMesh/PathTubeGeometry.js +130 -130
  45. package/PipeMesh/PipeMesh.d.ts +25 -25
  46. package/PipeMesh/PipeMesh.js +63 -63
  47. package/PipeMesh/index.d.ts +1 -1
  48. package/PipeMesh/index.js +1 -1
  49. package/PlaneModal1/PlaneModal1.d.ts +31 -31
  50. package/PlaneModal1/PlaneModal1.js +105 -105
  51. package/PlaneModal1/index.d.ts +1 -1
  52. package/PlaneModal1/index.js +1 -1
  53. package/PlaneText.d.ts +39 -39
  54. package/PlaneText.js +30 -30
  55. package/PlaneWithHtml.d.ts +11 -11
  56. package/PlaneWithHtml.js +63 -68
  57. package/PointLight/PointLight.d.ts +14 -13
  58. package/PointLight/PointLight.js +70 -64
  59. package/PointLight/index.d.ts +1 -1
  60. package/PointLight/index.js +1 -1
  61. package/Sky/Sky.d.ts +9 -9
  62. package/Sky/Sky.js +22 -22
  63. package/Sky/index.d.ts +1 -1
  64. package/Sky/index.js +1 -1
  65. package/SpotLight.d.ts +6 -0
  66. package/SpotLight.js +72 -0
  67. package/SpriteModal1/SpriteModal1.d.ts +30 -30
  68. package/SpriteModal1/SpriteModal1.js +110 -110
  69. package/SpriteModal1/index.d.ts +1 -1
  70. package/SpriteModal1/index.js +1 -1
  71. package/SpriteText.d.ts +45 -45
  72. package/SpriteText.js +163 -163
  73. package/SpriteText2.d.ts +47 -47
  74. package/SpriteText2.js +198 -198
  75. package/SpriteWithHtml.d.ts +7 -7
  76. package/SpriteWithHtml.js +44 -49
  77. package/Text3D/Text3D.d.ts +20 -20
  78. package/Text3D/Text3D.js +62 -62
  79. package/Text3D/fontController.d.ts +59 -59
  80. package/Text3D/fontController.js +199 -199
  81. package/Text3D/index.d.ts +1 -1
  82. package/Text3D/index.js +1 -1
  83. package/ThreeBase.d.ts +111 -81
  84. package/ThreeBase.js +656 -560
  85. package/ThreeMouse.d.ts +40 -40
  86. package/ThreeMouse.js +407 -407
  87. package/Transition.d.ts +40 -40
  88. package/Transition.js +210 -210
  89. package/Water/Water.d.ts +5 -0
  90. package/Water/Water.js +26 -0
  91. package/Water/waternormals.jpg +0 -0
  92. package/declare.d.ts +167 -0
  93. package/index.d.ts +1 -1
  94. package/index.js +2 -2
  95. package/keyContorls.d.ts +25 -25
  96. package/keyContorls.js +98 -98
  97. package/package.json +3 -2
  98. package/pass/bloom_pass.d.ts +2 -2
  99. package/pass/bloom_pass.js +99 -99
  100. package/pass/cover_pass.d.ts +2 -2
  101. package/pass/cover_pass.js +95 -95
  102. package/pass/emissive_ao_pass.d.ts +13 -0
  103. package/pass/emissive_ao_pass.js +370 -0
  104. package/pass/frosted_glass_pass.d.ts +2 -0
  105. package/pass/frosted_glass_pass.js +275 -0
  106. package/pass/fsQuad.d.ts +9 -9
  107. package/pass/fsQuad.js +28 -28
  108. package/pass/glow_pass.d.ts +2 -2
  109. package/pass/glow_pass.js +310 -254
  110. package/pass/ssao_pass.d.ts +13 -0
  111. package/pass/ssao_pass.js +372 -0
  112. package/pass/stroke_pass.d.ts +2 -2
  113. package/pass/stroke_pass.js +199 -199
  114. package/shaders/FXAAShaderMaterial.d.ts +3 -3
  115. package/shaders/FXAAShaderMaterial.js +21 -21
  116. package/shaders/baseTextureToRenderShader.d.ts +2 -2
  117. package/shaders/baseTextureToRenderShader.js +14 -14
  118. package/shaders/copyShader.d.ts +3 -3
  119. package/shaders/copyShader.js +14 -14
  120. package/shaders.d.ts +5 -5
  121. package/shaders.js +42 -42
  122. package/threeLoader.d.ts +34 -34
  123. package/threeLoader.js +527 -527
  124. package/threeUtils.d.ts +52 -52
  125. package/threeUtils.js +330 -330
@@ -0,0 +1,372 @@
1
+ import { LinearFilter, NoBlending, RGBAFormat, RawShaderMaterial, Vector2, WebGLRenderTarget, Matrix4, MultiplyBlending, } from "three";
2
+ import fsQuad from "./fsQuad";
3
+ const ssaoTextureTarget = new WebGLRenderTarget(512, 512, {
4
+ minFilter: LinearFilter,
5
+ magFilter: LinearFilter,
6
+ format: RGBAFormat,
7
+ });
8
+ const blurTextureTarget = new WebGLRenderTarget(512, 512, {
9
+ minFilter: LinearFilter,
10
+ magFilter: LinearFilter,
11
+ format: RGBAFormat,
12
+ });
13
+ const size = new Vector2();
14
+ const projectionMatrix = new Matrix4();
15
+ const inverseProjectionMatrix = new Matrix4();
16
+ // SSAO 着色器 — 随机采样 + 法线半球判断 + 深度连续性 + 视距自适应半径
17
+ const ssaoShader = new RawShaderMaterial({
18
+ uniforms: {
19
+ depthTexture: { value: null },
20
+ resolution: { value: new Vector2(1 / 512, 1 / 512) },
21
+ projectionMatrix: { value: new Matrix4() },
22
+ inverseProjectionMatrix: { value: new Matrix4() },
23
+ ssaoRadius: { value: 2.0 },
24
+ ssaoFalloff: { value: 5.0 },
25
+ ssaoBias: { value: 0.3 },
26
+ ssaoIntensity: { value: 1.0 },
27
+ sampleCount: { value: 16 },
28
+ cameraFar: { value: 20000 },
29
+ },
30
+ vertexShader: `
31
+ attribute vec3 position;
32
+ attribute vec2 uv;
33
+ varying vec2 vUv;
34
+ void main() {
35
+ vUv = uv;
36
+ gl_Position = vec4(position, 1.0);
37
+ }`,
38
+ fragmentShader: `
39
+ #ifdef GL_ES
40
+ precision highp float;
41
+ #endif
42
+
43
+ uniform sampler2D depthTexture;
44
+ uniform vec2 resolution;
45
+ uniform mat4 projectionMatrix;
46
+ uniform mat4 inverseProjectionMatrix;
47
+ uniform float ssaoRadius;
48
+ uniform float ssaoFalloff;
49
+ uniform float ssaoBias;
50
+ uniform float ssaoIntensity;
51
+ uniform int sampleCount;
52
+ uniform float cameraFar;
53
+
54
+ varying vec2 vUv;
55
+
56
+ float linearizeLogDepth(float logDepth) {
57
+ return pow(cameraFar + 1.0, logDepth) - 1.0;
58
+ }
59
+
60
+ vec3 reconstructPosition(vec2 uv, float viewZ) {
61
+ vec4 ndc = vec4(uv * 2.0 - 1.0, 0.0, 1.0);
62
+ vec4 viewDir4 = inverseProjectionMatrix * ndc;
63
+ vec3 viewDir = viewDir4.xyz / viewDir4.w;
64
+ return viewDir * (viewZ / (-viewDir.z));
65
+ }
66
+
67
+ // 从深度图重建视空间法线(有限差分法)
68
+ vec3 reconstructNormal(vec2 uv, vec2 res) {
69
+ vec2 step = res * 2.0;
70
+
71
+ float dC = texture2D(depthTexture, uv).r;
72
+ float dL = texture2D(depthTexture, uv - vec2(step.x, 0.0)).r;
73
+ float dR = texture2D(depthTexture, uv + vec2(step.x, 0.0)).r;
74
+ float dD = texture2D(depthTexture, uv - vec2(0.0, step.y)).r;
75
+ float dU = texture2D(depthTexture, uv + vec2(0.0, step.y)).r;
76
+
77
+ if (dL >= 1.0 || dR >= 1.0 || dD >= 1.0 || dU >= 1.0 || dC >= 1.0) {
78
+ return vec3(0.0, 0.0, 1.0);
79
+ }
80
+
81
+ // 深度不连续时回退为中心深度
82
+ float edgeThreshold = 0.003;
83
+ float dL2 = abs(dL - dC) < edgeThreshold ? dL : dC;
84
+ float dR2 = abs(dR - dC) < edgeThreshold ? dR : dC;
85
+ float dD2 = abs(dD - dC) < edgeThreshold ? dD : dC;
86
+ float dU2 = abs(dU - dC) < edgeThreshold ? dU : dC;
87
+
88
+ float vC = linearizeLogDepth(dC);
89
+ float vL = linearizeLogDepth(dL2);
90
+ float vR = linearizeLogDepth(dR2);
91
+ float vD = linearizeLogDepth(dD2);
92
+ float vU = linearizeLogDepth(dU2);
93
+
94
+ vec3 pC = reconstructPosition(uv, vC);
95
+ vec3 pL = reconstructPosition(uv - vec2(step.x, 0.0), vL);
96
+ vec3 pR = reconstructPosition(uv + vec2(step.x, 0.0), vR);
97
+ vec3 pD = reconstructPosition(uv - vec2(0.0, step.y), vD);
98
+ vec3 pU = reconstructPosition(uv + vec2(0.0, step.y), vU);
99
+
100
+ vec3 tangentX = pR - pL;
101
+ vec3 tangentY = pU - pD;
102
+
103
+ if (length(tangentX) < 0.001 || length(tangentY) < 0.001) {
104
+ return vec3(0.0, 0.0, 1.0);
105
+ }
106
+
107
+ vec3 normal = cross(normalize(tangentX), normalize(tangentY));
108
+ return normalize(normal);
109
+ }
110
+
111
+ float random(vec2 seed) {
112
+ return fract(sin(dot(seed, vec2(12.9898, 78.233))) * 43758.5453);
113
+ }
114
+
115
+ void main() {
116
+ float logDepth = texture2D(depthTexture, vUv).r;
117
+
118
+ // 背景 / 无穷远 → 无遮挡
119
+ if (logDepth >= 1.0) {
120
+ gl_FragColor = vec4(1.0);
121
+ return;
122
+ }
123
+
124
+ float viewZ = linearizeLogDepth(logDepth);
125
+ vec3 position = reconstructPosition(vUv, viewZ);
126
+ vec3 normal = reconstructNormal(vUv, resolution);
127
+
128
+ // 视距自适应:ssaoRadius 是世界空间遮蔽半径,换算为像素半径
129
+ // 近处像素多 → 像素半径大;远处像素少 → 像素半径小
130
+ float projScale = 1.0 / (2.0 * abs(viewZ) * resolution.x);
131
+ float pixelRadius = max(ssaoRadius * projScale, 1.0);
132
+
133
+ float occlusion = 0.0;
134
+ float angle = random(vUv) * 6.2831853;
135
+ float stepAngle = 6.2831853 / float(sampleCount);
136
+
137
+ for (int i = 0; i < 64; i++) {
138
+ if (i >= sampleCount) break;
139
+
140
+ float theta = angle + float(i) * stepAngle;
141
+ float r = sqrt(float(i + 1)) * (pixelRadius / sqrt(float(sampleCount)));
142
+
143
+ // 屏幕空间偏移(像素 → UV)
144
+ vec2 sampleUv = vUv + vec2(cos(theta), sin(theta)) * r * resolution;
145
+
146
+ if (sampleUv.x < 0.0 || sampleUv.x > 1.0 || sampleUv.y < 0.0 || sampleUv.y > 1.0) {
147
+ continue;
148
+ }
149
+
150
+ float sampleLogDepth = texture2D(depthTexture, sampleUv).r;
151
+ // 背景像素跳过
152
+ if (sampleLogDepth >= 1.0) continue;
153
+
154
+ // 深度连续性:不同表面跳过(真正夹角深度值接近,假夹角深度差大)
155
+ float depthDiff = abs(sampleLogDepth - logDepth);
156
+ if (depthDiff > 0.002) continue;
157
+
158
+ float sampleViewZ = linearizeLogDepth(sampleLogDepth);
159
+ vec3 samplePosition = reconstructPosition(sampleUv, sampleViewZ);
160
+
161
+ vec3 diff = samplePosition - position;
162
+ float dist = length(diff);
163
+
164
+ // 半球判断:采样方向必须在法线半球侧
165
+ // tangentDist = dot(diff, normal) 是到切面平面的有符号距离
166
+ // 平坦面 ≈ 0(不会超过 bias);夹角处显著 > 0
167
+ float tangentDist = dot(diff, normal);
168
+ if (tangentDist < ssaoBias) continue;
169
+
170
+ // 在衰减范围内
171
+ if (dist < ssaoFalloff) {
172
+ float rangeCheck = smoothstep(0.0, ssaoFalloff, dist);
173
+ occlusion += (1.0 - rangeCheck) * (1.0 - tangentDist / ssaoFalloff);
174
+ }
175
+ }
176
+
177
+ occlusion = 1.0 - (occlusion * ssaoIntensity / float(sampleCount));
178
+ occlusion = clamp(occlusion, 0.0, 1.0);
179
+
180
+ gl_FragColor = vec4(vec3(occlusion), 1.0);
181
+ }`,
182
+ blending: NoBlending,
183
+ depthTest: false,
184
+ depthWrite: false,
185
+ transparent: true,
186
+ });
187
+ const blurHShader = new RawShaderMaterial({
188
+ uniforms: {
189
+ tDiffuse: { value: null },
190
+ resolution: { value: new Vector2(1 / 512, 1 / 512) },
191
+ blurRadius: { value: 2.0 },
192
+ depthTexture: { value: null },
193
+ },
194
+ vertexShader: `
195
+ attribute vec3 position;
196
+ attribute vec2 uv;
197
+ varying vec2 vUv;
198
+ void main() {
199
+ vUv = uv;
200
+ gl_Position = vec4(position, 1.0);
201
+ }`,
202
+ fragmentShader: `
203
+ #ifdef GL_ES
204
+ precision highp float;
205
+ #endif
206
+
207
+ uniform sampler2D tDiffuse;
208
+ uniform vec2 resolution;
209
+ uniform float blurRadius;
210
+ uniform sampler2D depthTexture;
211
+
212
+ varying vec2 vUv;
213
+
214
+ void main() {
215
+ float centerDepth = texture2D(depthTexture, vUv).r;
216
+ vec4 color = vec4(0.0);
217
+ float totalWeight = 0.0;
218
+
219
+ for (int i = -4; i <= 4; i++) {
220
+ float weight = exp(-float(i * i) / 8.0);
221
+ vec2 offset = vec2(float(i) * blurRadius * resolution.x, 0.0);
222
+ vec2 sampleUv = vUv + offset;
223
+ float sampleDepth = texture2D(depthTexture, sampleUv).r;
224
+ float depthWeight = abs(sampleDepth - centerDepth) < 0.001 ? 1.0 : 0.1;
225
+ color += texture2D(tDiffuse, sampleUv) * weight * depthWeight;
226
+ totalWeight += weight * depthWeight;
227
+ }
228
+
229
+ gl_FragColor = color / totalWeight;
230
+ }`,
231
+ blending: NoBlending,
232
+ depthTest: false,
233
+ depthWrite: false,
234
+ transparent: true,
235
+ });
236
+ const blurVShader = new RawShaderMaterial({
237
+ uniforms: {
238
+ tDiffuse: { value: null },
239
+ resolution: { value: new Vector2(1 / 512, 1 / 512) },
240
+ blurRadius: { value: 2.0 },
241
+ depthTexture: { value: null },
242
+ },
243
+ vertexShader: `
244
+ attribute vec3 position;
245
+ attribute vec2 uv;
246
+ varying vec2 vUv;
247
+ void main() {
248
+ vUv = uv;
249
+ gl_Position = vec4(position, 1.0);
250
+ }`,
251
+ fragmentShader: `
252
+ #ifdef GL_ES
253
+ precision highp float;
254
+ #endif
255
+
256
+ uniform sampler2D tDiffuse;
257
+ uniform vec2 resolution;
258
+ uniform float blurRadius;
259
+ uniform sampler2D depthTexture;
260
+
261
+ varying vec2 vUv;
262
+
263
+ void main() {
264
+ float centerDepth = texture2D(depthTexture, vUv).r;
265
+ vec4 color = vec4(0.0);
266
+ float totalWeight = 0.0;
267
+
268
+ for (int i = -4; i <= 4; i++) {
269
+ float weight = exp(-float(i * i) / 8.0);
270
+ vec2 offset = vec2(0.0, float(i) * blurRadius * resolution.y);
271
+ vec2 sampleUv = vUv + offset;
272
+ float sampleDepth = texture2D(depthTexture, sampleUv).r;
273
+ float depthWeight = abs(sampleDepth - centerDepth) < 0.001 ? 1.0 : 0.1;
274
+ color += texture2D(tDiffuse, sampleUv) * weight * depthWeight;
275
+ totalWeight += weight * depthWeight;
276
+ }
277
+
278
+ gl_FragColor = color / totalWeight;
279
+ }`,
280
+ blending: NoBlending,
281
+ depthTest: false,
282
+ depthWrite: false,
283
+ transparent: true,
284
+ });
285
+ const outputShader = new RawShaderMaterial({
286
+ uniforms: {
287
+ ssaoTexture: { value: null },
288
+ ssaoStrength: { value: 1.0 },
289
+ debug: { value: 0.0 },
290
+ },
291
+ vertexShader: `
292
+ attribute vec3 position;
293
+ attribute vec2 uv;
294
+ varying vec2 vUv;
295
+ void main() {
296
+ vUv = uv;
297
+ gl_Position = vec4(position, 1.0);
298
+ }`,
299
+ fragmentShader: `
300
+ #ifdef GL_ES
301
+ precision highp float;
302
+ #endif
303
+
304
+ uniform sampler2D ssaoTexture;
305
+ uniform float ssaoStrength;
306
+ uniform float debug;
307
+
308
+ varying vec2 vUv;
309
+
310
+ void main() {
311
+ float ssao = texture2D(ssaoTexture, vUv).r;
312
+ float finalOcclusion = mix(1.0, ssao, ssaoStrength);
313
+
314
+ if (debug > 0.5) {
315
+ gl_FragColor = vec4(vec3(ssao), 1.0);
316
+ } else {
317
+ gl_FragColor = vec4(vec3(finalOcclusion), 1.0);
318
+ }
319
+ }`,
320
+ blending: MultiplyBlending,
321
+ depthTest: false,
322
+ depthWrite: false,
323
+ transparent: true,
324
+ });
325
+ export default function ssao_pass(renderer, camera, depthTexture, devicePixelRatio, options) {
326
+ if (!options.enable || !options.strength) {
327
+ return;
328
+ }
329
+ renderer.getSize(size);
330
+ size.multiplyScalar(devicePixelRatio);
331
+ ssaoTextureTarget.setSize(size.x, size.y);
332
+ blurTextureTarget.setSize(size.x, size.y);
333
+ projectionMatrix.copy(camera.projectionMatrix);
334
+ inverseProjectionMatrix.copy(projectionMatrix).invert();
335
+ // === 1. SSAO 遮蔽计算 ===
336
+ ssaoShader.uniforms.depthTexture.value = depthTexture;
337
+ ssaoShader.uniforms.resolution.value.set(1 / size.x, 1 / size.y);
338
+ ssaoShader.uniforms.projectionMatrix.value = projectionMatrix;
339
+ ssaoShader.uniforms.inverseProjectionMatrix.value = inverseProjectionMatrix;
340
+ ssaoShader.uniforms.ssaoRadius.value = options.radius || 2.0;
341
+ ssaoShader.uniforms.ssaoFalloff.value = options.falloff || 5.0;
342
+ ssaoShader.uniforms.ssaoBias.value = options.bias || 0.3;
343
+ ssaoShader.uniforms.ssaoIntensity.value = options.intensity || 1.0;
344
+ ssaoShader.uniforms.sampleCount.value = options.sampleCount || 16;
345
+ ssaoShader.uniforms.cameraFar.value = options.cameraFar || camera.far || 20000;
346
+ renderer.setRenderTarget(ssaoTextureTarget);
347
+ renderer.clear();
348
+ fsQuad.render(renderer, ssaoShader);
349
+ // === 2. 双向模糊 ===
350
+ const blurRes = new Vector2(1 / size.x, 1 / size.y);
351
+ const blurR = options.blurRadius || 2.0;
352
+ blurHShader.uniforms.tDiffuse.value = ssaoTextureTarget.texture;
353
+ blurHShader.uniforms.resolution.value.copy(blurRes);
354
+ blurHShader.uniforms.blurRadius.value = blurR;
355
+ blurHShader.uniforms.depthTexture.value = depthTexture;
356
+ renderer.setRenderTarget(blurTextureTarget);
357
+ renderer.clear();
358
+ fsQuad.render(renderer, blurHShader);
359
+ blurVShader.uniforms.tDiffuse.value = blurTextureTarget.texture;
360
+ blurVShader.uniforms.resolution.value.copy(blurRes);
361
+ blurVShader.uniforms.blurRadius.value = blurR;
362
+ blurVShader.uniforms.depthTexture.value = depthTexture;
363
+ renderer.setRenderTarget(ssaoTextureTarget);
364
+ renderer.clear();
365
+ fsQuad.render(renderer, blurVShader);
366
+ // === 3. 乘法混合到屏幕 ===
367
+ renderer.setRenderTarget(null);
368
+ outputShader.uniforms.ssaoTexture.value = ssaoTextureTarget.texture;
369
+ outputShader.uniforms.ssaoStrength.value = options.strength || 1.0;
370
+ outputShader.uniforms.debug.value = options.debug ? 1.0 : 0.0;
371
+ fsQuad.render(renderer, outputShader);
372
+ }
@@ -1,2 +1,2 @@
1
- import { Camera, DepthTexture, Object3D, WebGLRenderer } from "three";
2
- export default function stroke_pass(renderer: WebGLRenderer, camera: Camera, object3d: Object3D, baseDepthTexture: DepthTexture, devicePixelRatio: number): void;
1
+ import { Camera, DepthTexture, Object3D, WebGLRenderer } from "three";
2
+ export default function stroke_pass(renderer: WebGLRenderer, camera: Camera, object3d: Object3D, baseDepthTexture: DepthTexture, devicePixelRatio: number): void;