three-base 2.0.137 → 2.0.142

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 (307) hide show
  1. package/DirectionalLight.d.ts +6 -6
  2. package/DirectionalLight.js +68 -68
  3. package/DirectionalLight.ts +70 -0
  4. package/EventMap.d.ts +103 -0
  5. package/EventMap.js +17 -0
  6. package/EventMap.ts +139 -0
  7. package/EventMesh.d.ts +18 -18
  8. package/EventMesh.js +59 -59
  9. package/EventMesh.ts +60 -0
  10. package/ExtrudeMesh.d.ts +112 -112
  11. package/ExtrudeMesh.js +342 -366
  12. package/ExtrudeMesh.ts +553 -0
  13. package/FPScontrol.d.ts +511 -78
  14. package/FPScontrol.js +1799 -617
  15. package/FPScontrol.ts +1855 -0
  16. package/Fire/Fire.d.ts +28 -28
  17. package/Fire/Fire.js +80 -79
  18. package/Fire/Fire.ts +89 -0
  19. package/Fire/{FireGromtry.d.ts → FireGeometry.d.ts} +9 -9
  20. package/Fire/{FireGromtry.js → FireGeometry.js} +40 -40
  21. package/Fire/FireGeometry.ts +40 -0
  22. package/Fire/FireMaterial.d.ts +28 -28
  23. package/Fire/FireMaterial.js +32 -32
  24. package/Fire/FireMaterial.ts +89 -0
  25. package/Fire/index.d.ts +2 -1
  26. package/Fire/index.js +2 -1
  27. package/Fire/index.ts +2 -0
  28. package/GLTFDracoLoader.d.ts +71 -0
  29. package/GLTFDracoLoader.js +266 -0
  30. package/GLTFDracoLoader.ts +430 -0
  31. package/Grass/Grass.d.ts +8 -8
  32. package/Grass/Grass.js +38 -38
  33. package/Grass/Grass.ts +38 -0
  34. package/Grass/index.d.ts +2 -1
  35. package/Grass/index.js +2 -1
  36. package/Grass/index.ts +2 -0
  37. package/Ground1/Ground1.d.ts +10 -11
  38. package/Ground1/Ground1.js +95 -91
  39. package/Ground1/Ground1.ts +114 -0
  40. package/Ground1/index.d.ts +1 -1
  41. package/Ground1/index.js +1 -1
  42. package/Ground1/index.ts +1 -0
  43. package/MeshBase.d.ts +36 -35
  44. package/MeshBase.js +247 -223
  45. package/MeshBase.ts +253 -0
  46. package/Mirror.d.ts +25 -25
  47. package/Mirror.js +143 -139
  48. package/Mirror.ts +203 -0
  49. package/MktMesh/MktMesh.d.ts +291 -0
  50. package/MktMesh/MktMesh.js +1045 -0
  51. package/MktMesh/MktMesh.ts +1075 -0
  52. package/MktMesh/assetUrl.d.ts +35 -0
  53. package/MktMesh/assetUrl.js +69 -0
  54. package/MktMesh/assetUrl.ts +69 -0
  55. package/MktMesh/mktMappingShader.d.ts +12 -0
  56. package/MktMesh/mktMappingShader.js +139 -0
  57. package/MktMesh/mktMappingShader.ts +139 -0
  58. package/MktMesh/mktShader.d.ts +263 -0
  59. package/MktMesh/mktShader.js +1248 -0
  60. package/MktMesh/mktShader.ts +1344 -0
  61. package/MktMesh/panoBitmapTexture.d.ts +25 -0
  62. package/MktMesh/panoBitmapTexture.js +52 -0
  63. package/MktMesh/panoBitmapTexture.ts +54 -0
  64. package/MktMesh/panoSlotBind.d.ts +29 -0
  65. package/MktMesh/panoSlotBind.js +106 -0
  66. package/MktMesh/panoSlotBind.ts +153 -0
  67. package/MktMesh/panoSlotRoster.d.ts +22 -0
  68. package/MktMesh/panoSlotRoster.js +169 -0
  69. package/MktMesh/panoSlotRoster.ts +168 -0
  70. package/MktMesh/panoTileStitcher.d.ts +119 -0
  71. package/MktMesh/panoTileStitcher.js +533 -0
  72. package/MktMesh/panoTileStitcher.ts +616 -0
  73. package/MktMesh/types.d.ts +75 -0
  74. package/MktMesh/types.js +1 -0
  75. package/MktMesh/types.ts +87 -0
  76. package/MktMesh/wallCapTessellate.d.ts +33 -0
  77. package/MktMesh/wallCapTessellate.js +97 -0
  78. package/MktMesh/wallCapTessellate.ts +68 -0
  79. package/PipeMesh/PathGeometry.d.ts +44 -44
  80. package/PipeMesh/PathGeometry.js +307 -300
  81. package/PipeMesh/PathGeometry.ts +343 -0
  82. package/PipeMesh/PathPoint.d.ts +17 -17
  83. package/PipeMesh/PathPoint.js +31 -31
  84. package/PipeMesh/PathPoint.ts +36 -0
  85. package/PipeMesh/PathPointList.d.ts +31 -31
  86. package/PipeMesh/PathPointList.js +209 -208
  87. package/PipeMesh/PathPointList.ts +227 -0
  88. package/PipeMesh/PathTubeGeometry.d.ts +25 -25
  89. package/PipeMesh/PathTubeGeometry.js +130 -130
  90. package/PipeMesh/PathTubeGeometry.ts +146 -0
  91. package/PipeMesh/PipeMesh.d.ts +25 -25
  92. package/PipeMesh/PipeMesh.js +63 -63
  93. package/PipeMesh/PipeMesh.ts +76 -0
  94. package/PipeMesh/index.d.ts +1 -1
  95. package/PipeMesh/index.js +1 -1
  96. package/PipeMesh/index.ts +1 -0
  97. package/PlaneModal1/PlaneModal1.d.ts +34 -31
  98. package/PlaneModal1/PlaneModal1.js +109 -105
  99. package/PlaneModal1/PlaneModal1.ts +138 -0
  100. package/PlaneModal1/index.d.ts +1 -1
  101. package/PlaneModal1/index.js +1 -1
  102. package/PlaneModal1/index.ts +1 -0
  103. package/PlaneText.d.ts +27 -39
  104. package/PlaneText.js +35 -30
  105. package/PlaneText.ts +55 -0
  106. package/PlaneWithHtml.d.ts +13 -11
  107. package/PlaneWithHtml.js +64 -63
  108. package/PlaneWithHtml.ts +70 -0
  109. package/PointLight/PointLight.d.ts +13 -14
  110. package/PointLight/PointLight.js +64 -70
  111. package/PointLight/PointLight.ts +67 -0
  112. package/PointLight/index.d.ts +1 -1
  113. package/PointLight/index.js +1 -1
  114. package/PointLight/index.ts +1 -0
  115. package/README.md +110 -79
  116. package/Sky/Sky.d.ts +9 -9
  117. package/Sky/Sky.js +22 -22
  118. package/Sky/Sky.ts +22 -0
  119. package/Sky/index.d.ts +1 -1
  120. package/Sky/index.js +1 -1
  121. package/Sky/index.ts +1 -0
  122. package/SpotLight.d.ts +6 -6
  123. package/SpotLight.js +72 -72
  124. package/SpotLight.ts +74 -0
  125. package/SpriteModal1/SpriteModal1.d.ts +33 -30
  126. package/SpriteModal1/SpriteModal1.js +116 -110
  127. package/SpriteModal1/SpriteModal1.ts +146 -0
  128. package/SpriteModal1/index.d.ts +1 -1
  129. package/SpriteModal1/index.js +1 -1
  130. package/SpriteModal1/index.ts +1 -0
  131. package/SpriteText.d.ts +46 -45
  132. package/SpriteText.js +176 -163
  133. package/SpriteText.ts +205 -0
  134. package/SpriteText2.d.ts +48 -47
  135. package/SpriteText2.js +223 -198
  136. package/SpriteText2.ts +258 -0
  137. package/SpriteText3.d.ts +86 -0
  138. package/SpriteText3.js +519 -0
  139. package/SpriteText3.ts +599 -0
  140. package/SpriteWithHtml.d.ts +9 -7
  141. package/SpriteWithHtml.js +44 -44
  142. package/SpriteWithHtml.ts +50 -0
  143. package/Text3D/Text3D.d.ts +20 -20
  144. package/Text3D/Text3D.js +58 -62
  145. package/Text3D/Text3D.ts +77 -0
  146. package/Text3D/fontController.d.ts +60 -59
  147. package/Text3D/fontController.js +166 -199
  148. package/Text3D/fontController.ts +209 -0
  149. package/Text3D/index.d.ts +1 -1
  150. package/Text3D/index.js +1 -1
  151. package/Text3D/index.ts +1 -0
  152. package/ThreeBase.d.ts +248 -111
  153. package/ThreeBase.js +1202 -656
  154. package/ThreeBase.ts +1314 -0
  155. package/ThreeMouse.d.ts +54 -40
  156. package/ThreeMouse.js +453 -407
  157. package/ThreeMouse.ts +472 -0
  158. package/Transition.d.ts +45 -40
  159. package/Transition.js +209 -210
  160. package/Transition.ts +242 -0
  161. package/Water/Water.d.ts +5 -5
  162. package/Water/Water.js +44 -26
  163. package/Water/Water.ts +45 -0
  164. package/Water/index.d.ts +2 -0
  165. package/Water/index.js +2 -0
  166. package/Water/index.ts +2 -0
  167. package/WaterFlow/FloatingDuck.d.ts +88 -0
  168. package/WaterFlow/FloatingDuck.js +307 -0
  169. package/WaterFlow/FloatingDuck.ts +445 -0
  170. package/WaterFlow/GPUFluidSimulation.d.ts +56 -0
  171. package/WaterFlow/GPUFluidSimulation.js +785 -0
  172. package/WaterFlow/GPUFluidSimulation.ts +827 -0
  173. package/WaterFlow/ReservoirSystem.d.ts +106 -0
  174. package/WaterFlow/ReservoirSystem.js +621 -0
  175. package/WaterFlow/ReservoirSystem.ts +754 -0
  176. package/WaterFlow/SPHField.d.ts +35 -0
  177. package/WaterFlow/SPHField.js +204 -0
  178. package/WaterFlow/SPHField.ts +228 -0
  179. package/WaterFlow/ScreenSpaceFluidPass.d.ts +69 -0
  180. package/WaterFlow/ScreenSpaceFluidPass.js +736 -0
  181. package/WaterFlow/ScreenSpaceFluidPass.ts +789 -0
  182. package/WaterFlow/ShallowWaterSurface.d.ts +45 -0
  183. package/WaterFlow/ShallowWaterSurface.js +441 -0
  184. package/WaterFlow/ShallowWaterSurface.ts +510 -0
  185. package/WaterFlow/WaterFlow.d.ts +87 -0
  186. package/WaterFlow/WaterFlow.js +171 -0
  187. package/WaterFlow/WaterFlow.ts +219 -0
  188. package/WaterFlow/types.d.ts +161 -0
  189. package/WaterFlow/types.js +1 -0
  190. package/WaterFlow/types.ts +189 -0
  191. package/WaterFlow/waterFlowPass.d.ts +3 -0
  192. package/WaterFlow/waterFlowPass.js +20 -0
  193. package/WaterFlow/waterFlowPass.ts +40 -0
  194. package/collisionOBB.d.ts +42 -0
  195. package/collisionOBB.js +112 -0
  196. package/collisionOBB.ts +108 -0
  197. package/declare.d.ts +23 -165
  198. package/index.d.ts +1 -1
  199. package/index.js +1 -2
  200. package/index.ts +1 -0
  201. package/instanced/InstancedBatch.d.ts +57 -0
  202. package/instanced/InstancedBatch.js +348 -0
  203. package/instanced/InstancedBatch.ts +406 -0
  204. package/instanced/InstancedChild.d.ts +174 -0
  205. package/instanced/InstancedChild.js +264 -0
  206. package/instanced/InstancedChild.ts +327 -0
  207. package/instanced/InstancedGroup.d.ts +43 -0
  208. package/instanced/InstancedGroup.js +126 -0
  209. package/instanced/InstancedGroup.ts +137 -0
  210. package/{InstancedMeshBase.d.ts → instanced/InstancedMeshBase.d.ts} +38 -39
  211. package/{InstancedMeshBase.js → instanced/InstancedMeshBase.js} +282 -293
  212. package/instanced/InstancedMeshBase.ts +292 -0
  213. package/instanced/InstancedTemplate.d.ts +46 -0
  214. package/instanced/InstancedTemplate.js +125 -0
  215. package/instanced/InstancedTemplate.ts +188 -0
  216. package/keyControls.d.ts +30 -0
  217. package/{keyContorls.js → keyControls.js} +101 -98
  218. package/keyControls.ts +107 -0
  219. package/lensflare/LensFlare.d.ts +39 -0
  220. package/lensflare/LensFlare.js +373 -0
  221. package/lensflare/LensFlare.ts +448 -0
  222. package/lensflare/lensflare0.png +0 -0
  223. package/lensflare/lensflare3.png +0 -0
  224. package/lensflare/lensflare_custom.png +0 -0
  225. package/lensflare/lensflare_hex_ghost.png +0 -0
  226. package/lensflare/lensflare_hex_main.png +0 -0
  227. package/package.json +99 -25
  228. package/pass/bloom_pass.d.ts +2 -2
  229. package/pass/bloom_pass.js +188 -101
  230. package/pass/bloom_pass.ts +243 -0
  231. package/pass/cover_pass.d.ts +2 -2
  232. package/pass/cover_pass.js +122 -99
  233. package/pass/cover_pass.ts +182 -0
  234. package/pass/debugDepthState.d.ts +20 -0
  235. package/pass/debugDepthState.js +9 -0
  236. package/pass/debugDepthState.ts +22 -0
  237. package/pass/depthTestBias.d.ts +12 -0
  238. package/pass/depthTestBias.js +12 -0
  239. package/pass/depthTestBias.ts +12 -0
  240. package/pass/effectUserData.d.ts +27 -0
  241. package/pass/effectUserData.js +1 -0
  242. package/pass/effectUserData.ts +46 -0
  243. package/pass/frosted_glass_pass.d.ts +2 -2
  244. package/pass/frosted_glass_pass.js +167 -186
  245. package/pass/frosted_glass_pass.ts +288 -0
  246. package/pass/fsQuad.d.ts +9 -9
  247. package/pass/fsQuad.js +28 -28
  248. package/pass/fsQuad.ts +34 -0
  249. package/pass/glow_pass.d.ts +2 -2
  250. package/pass/glow_pass.js +449 -233
  251. package/pass/glow_pass.ts +654 -0
  252. package/pass/screen_bloom_pass.d.ts +11 -0
  253. package/pass/screen_bloom_pass.js +235 -0
  254. package/pass/screen_bloom_pass.ts +263 -0
  255. package/pass/ssao_pass.d.ts +88 -13
  256. package/pass/ssao_pass.js +802 -366
  257. package/pass/ssao_pass.ts +918 -0
  258. package/pass/stroke_pass.d.ts +2 -2
  259. package/pass/stroke_pass.js +329 -258
  260. package/pass/stroke_pass.ts +638 -0
  261. package/shaders/FXAAShaderMaterial.d.ts +3 -3
  262. package/shaders/FXAAShaderMaterial.js +23 -66
  263. package/shaders/FXAAShaderMaterial.ts +201 -0
  264. package/shaders/baseDepthVisShader.d.ts +11 -0
  265. package/shaders/baseDepthVisShader.js +36 -0
  266. package/shaders/baseDepthVisShader.ts +36 -0
  267. package/shaders/baseTextureToRenderShader.d.ts +2 -2
  268. package/shaders/baseTextureToRenderShader.js +55 -60
  269. package/shaders/baseTextureToRenderShader.ts +232 -0
  270. package/shaders/copyShader.d.ts +3 -3
  271. package/shaders/copyShader.js +13 -14
  272. package/shaders/copyShader.ts +32 -0
  273. package/shaders/debugDepthCompareShader.d.ts +14 -0
  274. package/shaders/debugDepthCompareShader.js +49 -0
  275. package/shaders/debugDepthCompareShader.ts +50 -0
  276. package/shaders/debugDepthJudgeShader.d.ts +18 -0
  277. package/shaders/debugDepthJudgeShader.js +52 -0
  278. package/shaders/debugDepthJudgeShader.ts +54 -0
  279. package/shaders/debugExcludedShader.d.ts +13 -0
  280. package/shaders/debugExcludedShader.js +46 -0
  281. package/shaders/debugExcludedShader.ts +48 -0
  282. package/spriteTextBg.d.ts +1 -0
  283. package/spriteTextBg.js +20 -0
  284. package/spriteTextBg.ts +20 -0
  285. package/threeLoader.d.ts +35 -34
  286. package/threeLoader.js +518 -527
  287. package/threeLoader.ts +525 -0
  288. package/threeUtils.d.ts +53 -52
  289. package/threeUtils.js +329 -330
  290. package/threeUtils.ts +373 -0
  291. package/types.d.ts +2 -0
  292. package/types.js +6 -0
  293. package/types.ts +8 -0
  294. package/ApngTexture.d.ts +0 -13
  295. package/ApngTexture.js +0 -61
  296. package/ApngTextureManage.d.ts +0 -18
  297. package/ApngTextureManage.js +0 -87
  298. package/KeyFrameAnimation.d.ts +0 -25
  299. package/KeyFrameAnimation.js +0 -78
  300. package/keyContorls.d.ts +0 -25
  301. package/lib/draco/draco_decoder.js +0 -34
  302. package/lib/draco/draco_decoder.wasm +0 -0
  303. package/lib/draco/draco_wasm_wrapper.js +0 -117
  304. package/pass/emissive_ao_pass.d.ts +0 -13
  305. package/pass/emissive_ao_pass.js +0 -370
  306. package/shaders.d.ts +0 -5
  307. package/shaders.js +0 -93
@@ -1,67 +1,74 @@
1
- /*
2
- * @Author: xiaosihan
3
- * @Date: 2024-09-23 21:07:06
4
- * @Last Modified by: xiaosihan
5
- * @Last Modified time: 2025-01-28 04:01:58
6
- */
7
- /*
8
- * @Author: xiaosihan
9
- * @Date: 2023-05-09 00:35:17
10
- * @Last Modified by: xiaosihan
11
- * @Last Modified time: 2023-05-09 02:33:28
12
- */
13
- import { Color, DepthFormat, DepthTexture, LinearFilter, RGBAFormat, Scene, ShaderChunk, ShaderMaterial, UnsignedShortType, Vector2, WebGLRenderTarget } from "three";
14
- import fsQuad from "./fsQuad";
15
- // 选中对象的深度纹理
16
- const selectDepthTexture = (() => {
17
- const baseDepthTexture = new DepthTexture(1024, 1024);
18
- baseDepthTexture.format = DepthFormat;
19
- baseDepthTexture.type = UnsignedShortType;
20
- baseDepthTexture.anisotropy = 16;
21
- return baseDepthTexture;
22
- })();
23
- // 选中对象的纹理
24
- const selectTextureTarget = new WebGLRenderTarget(512, 512, {
25
- minFilter: LinearFilter,
26
- magFilter: LinearFilter,
27
- format: RGBAFormat,
28
- depthTexture: selectDepthTexture,
29
- anisotropy: 16,
30
- });
31
- // 深度测试后的选中纹理
32
- const selectDethpTestTextureTarget = new WebGLRenderTarget(512, 512, {
33
- minFilter: LinearFilter,
34
- magFilter: LinearFilter,
35
- format: RGBAFormat,
36
- anisotropy: 16,
37
- });
38
- const blur1TextureTarget = new WebGLRenderTarget(512, 512, {
39
- minFilter: LinearFilter,
40
- magFilter: LinearFilter,
41
- format: RGBAFormat,
42
- });
43
- const size = new Vector2();
44
- //深度比对纹理
45
- const depthTestShader = new ShaderMaterial({
46
- uniforms: {
47
- color: { value: new Color("#440000") }, //颜色
48
- opacity: { value: 1 }, // 透明度
49
- depthTest: { value: true }, // 开启深度测试
50
- baseDepth: { value: null }, // 整个场景的深度纹理
51
- selectDepth: { value: null }, // 选中的对象深度纹理
52
- },
1
+ /*
2
+ * @Author: xiaosihan
3
+ * @Date: 2024-09-23 21:07:06
4
+ * @Last Modified by: xiaosihan
5
+ * @Last Modified time: 2025-01-28 04:01:58
6
+ */
7
+ /*
8
+ * @Author: xiaosihan
9
+ * @Date: 2023-05-09 00:35:17
10
+ * @Last Modified by: xiaosihan
11
+ * @Last Modified time: 2023-05-09 02:33:28
12
+ */
13
+ import { Color, DepthFormat, DepthTexture, LinearFilter, RGBAFormat, Scene, ShaderChunk, ShaderMaterial, UnsignedIntType, Vector2, WebGLRenderTarget } from "three";
14
+ import fsQuad from "./fsQuad";
15
+ import { debugDepthState } from "./debugDepthState";
16
+ const selectDepthTexture = (() => {
17
+ const baseDepthTexture = new DepthTexture(1024, 1024);
18
+ baseDepthTexture.format = DepthFormat;
19
+ baseDepthTexture.type = UnsignedIntType;
20
+ baseDepthTexture.anisotropy = 16;
21
+ return baseDepthTexture;
22
+ })();
23
+ const selectTextureTarget = new WebGLRenderTarget(1024, 1024, {
24
+ minFilter: LinearFilter,
25
+ magFilter: LinearFilter,
26
+ format: RGBAFormat,
27
+ anisotropy: 16,
28
+ // 无 MSAA:mask 颜色与下方 selectDepthTextureTarget(深度)必须同为硬边缘,
29
+ // 否则 mask 边缘平滑而深度硬 → depthTestShader 判定边界与 mask 视觉边缘错位,覆盖边缘锯齿。
30
+ // 边缘抗锯齿统一由终处理 FXAA 兜底。
31
+ });
32
+ // 无 MSAA 的深度专用目标:仅用于导出对象深度,供 depthTestShader 做遮挡判定(深度无需抗锯齿)
33
+ const selectDepthTextureTarget = new WebGLRenderTarget(1024, 1024, {
34
+ minFilter: LinearFilter,
35
+ magFilter: LinearFilter,
36
+ format: RGBAFormat,
37
+ depthTexture: selectDepthTexture,
38
+ anisotropy: 16,
39
+ });
40
+ const selectDepthTestTextureTarget = new WebGLRenderTarget(1024, 1024, {
41
+ minFilter: LinearFilter,
42
+ magFilter: LinearFilter,
43
+ format: RGBAFormat,
44
+ anisotropy: 16,
45
+ // 无 MSAA:深度测试 mask 无需抗锯齿,去掉以提速
46
+ });
47
+ const blur1TextureTarget = new WebGLRenderTarget(1024, 1024, {
48
+ minFilter: LinearFilter,
49
+ magFilter: LinearFilter,
50
+ format: RGBAFormat,
51
+ });
52
+ const size = new Vector2();
53
+ const depthTestShader = new ShaderMaterial({
54
+ uniforms: {
55
+ color: { value: new Color("#440000") },
56
+ opacity: { value: 1 },
57
+ depthTest: { value: true },
58
+ baseDepth: { value: null },
59
+ selectDepth: { value: null },
60
+ cameraFar: { value: 1000.0 },
61
+ },
53
62
  vertexShader: `
54
63
  ${ShaderChunk.common}
55
64
  ${ShaderChunk.logdepthbuf_pars_vertex}
56
65
  varying vec2 vUv;
57
66
  void main() {
58
67
  vUv = uv;
59
- // gl_Position = vec4(position, 1.0);
60
- // gl_Position = projectionMatrix * modelViewMatrix * instanceMatrix * vec4(position, 1.0);
61
68
  gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
62
69
  ${ShaderChunk.logdepthbuf_vertex}
63
70
  }
64
- `,
71
+ `,
65
72
  fragmentShader: `
66
73
  ${ShaderChunk.logdepthbuf_pars_fragment}
67
74
  uniform vec3 color;
@@ -69,13 +76,25 @@ const depthTestShader = new ShaderMaterial({
69
76
  uniform bool depthTest;
70
77
  uniform sampler2D baseDepth;
71
78
  uniform sampler2D selectDepth;
79
+ uniform float cameraFar;
72
80
  varying vec2 vUv;
73
81
  void main() {
74
82
  if( depthTest ){
75
- if(texture2D(baseDepth, vUv).r + 0.0001 < texture2D(selectDepth, vUv).r){
83
+ float coverBaseD = texture2D(baseDepth, vUv).r;
84
+ float coverSelD = texture2D(selectDepth, vUv).r;
85
+ // 对数深度反解成线性视图深度,线性空间做遮挡判定。
86
+ float zBase = pow(cameraFar + 1.0, coverBaseD) - 1.0;
87
+ float zSel = pow(cameraFar + 1.0, coverSelD) - 1.0;
88
+ float bias = max(zSel, 1.0) * 0.0015;
89
+ // 该像素没有覆盖对象(selectDepth 仍是清屏值 1.0 → zSel == cameraFar)→ 不参与合成。
90
+ // ⚠️ 旧实现让背景像素「直接保留覆盖色」,导致没有对象的像素同样输出覆盖色
91
+ // → 整个场景被覆盖色染一层(与 frosted_glass / bloom 是同一个模板 bug)。
92
+ // 语义与下方 depthTest=false 分支的「selectDepth < 1.0 才输出」保持一致。
93
+ if (zSel >= cameraFar) {
76
94
  discard;
77
95
  }
78
- if(texture2D(baseDepth, vUv).r == 1.0){
96
+ // 仅丢弃被更近场景几何遮挡的部分
97
+ if (zBase < zSel - bias) {
79
98
  discard;
80
99
  }
81
100
  gl_FragColor = vec4(color, opacity);
@@ -89,45 +108,49 @@ const depthTestShader = new ShaderMaterial({
89
108
 
90
109
  ${ShaderChunk.logdepthbuf_fragment}
91
110
  }
92
- `,
93
- depthTest: true,
94
- depthWrite: true,
95
- transparent: true,
96
- });
97
- // 场景对象
98
- const scene = new Scene();
99
- // 给模型覆盖一层颜色 后处理通道
100
- export default function cover_pass(renderer, camera, object3d, baseDepthTexture, devicePixelRatio) {
101
- const { cover_enable = false, cover_color = "#04fa12", cover_opacity = 1, cover_depth_test = true, // 颜色叠加是否开启深度测试
102
- } = object3d.userData;
103
- if (!cover_enable || cover_opacity === 0) {
104
- return;
105
- }
106
- // 保存原帧缓冲区
107
- const originRenderTarget = renderer.getRenderTarget();
108
- // 设置选中目标的帧缓冲区
109
- renderer.getSize(size);
110
- size.multiplyScalar(devicePixelRatio);
111
- selectTextureTarget.setSize(size.x, size.y);
112
- selectDethpTestTextureTarget.setSize(size.x, size.y);
113
- blur1TextureTarget.setSize(size.x, size.y);
114
- renderer.setRenderTarget(selectTextureTarget);
115
- scene.children = [object3d];
116
- renderer.clear();
117
- renderer.render(scene, camera);
118
- //更具深度测试绘制叠加颜色
119
- renderer.setRenderTarget(originRenderTarget);
120
- renderer.clearDepth();
121
- depthTestShader.uniforms.color.value.set(cover_color);
122
- depthTestShader.uniforms.opacity.value = cover_opacity;
123
- depthTestShader.uniforms.depthTest.value = cover_depth_test;
124
- depthTestShader.uniforms.baseDepth.value = baseDepthTexture;
125
- depthTestShader.uniforms.selectDepth.value = selectDepthTexture;
126
- fsQuad.render(renderer, depthTestShader);
127
- // 调试代码
128
- // renderer.setRenderTarget(null);
129
- // renderer.clearDepth();
130
- // copyShader.uniforms.map.value = blur2TextureTarget.texture;
131
- // fsQuad.render(renderer, copyShader);
132
- // return;
133
- }
111
+ `,
112
+ depthTest: true,
113
+ depthWrite: true,
114
+ transparent: true,
115
+ });
116
+ const scene = new Scene();
117
+ export default function cover_pass(renderer, camera, object3d, baseDepthTexture, devicePixelRatio) {
118
+ const { cover_enable = false, cover_color = "#04fa12", cover_opacity = 1, cover_depth_test = true, } = object3d.userData;
119
+ if (!cover_enable || cover_opacity === 0) {
120
+ return;
121
+ }
122
+ const originRenderTarget = renderer.getRenderTarget();
123
+ // 灰度图渲染目标跟随主画面尺寸(= width × effectiveRatio),与 baseRenderTarget 完全一致,
124
+ // 消除灰度图与主画面尺寸不一致导致的放大重采样摩尔纹
125
+ renderer.getSize(size);
126
+ size.multiplyScalar(devicePixelRatio);
127
+ selectTextureTarget.setSize(size.x, size.y);
128
+ selectDepthTextureTarget.setSize(size.x, size.y);
129
+ // 缺陷修复:three r167 的 WebGLRenderTarget.setSize 不会同步 depthTexture,
130
+ // 需手动把 selectDepthTexture 尺寸与全屏 baseDepth 对齐,否则深度比例错位导致颜色覆盖被错误 discard
131
+ selectDepthTexture.image.width = size.x;
132
+ selectDepthTexture.image.height = size.y;
133
+ selectDepthTexture.needsUpdate = true;
134
+ selectDepthTestTextureTarget.setSize(size.x, size.y);
135
+ blur1TextureTarget.setSize(size.x, size.y);
136
+ renderer.setRenderTarget(selectTextureTarget);
137
+ scene.children = [object3d];
138
+ renderer.clear();
139
+ renderer.render(scene, camera);
140
+ // 单独渲染对象深度到无 MSAA 目标,供 depthTestShader 做遮挡判定
141
+ renderer.setRenderTarget(selectDepthTextureTarget);
142
+ scene.children = [object3d];
143
+ renderer.clear();
144
+ renderer.render(scene, camera);
145
+ // 调试:记录选区深度,供面板「深度判定图 / 辉光深度比对」排查 cover 的遮挡判定
146
+ debugDepthState.lastSelectDepth = selectDepthTexture;
147
+ renderer.setRenderTarget(originRenderTarget);
148
+ renderer.clearDepth();
149
+ depthTestShader.uniforms.color.value.set(cover_color);
150
+ depthTestShader.uniforms.opacity.value = cover_opacity;
151
+ depthTestShader.uniforms.depthTest.value = cover_depth_test;
152
+ depthTestShader.uniforms.baseDepth.value = baseDepthTexture;
153
+ depthTestShader.uniforms.selectDepth.value = selectDepthTexture;
154
+ depthTestShader.uniforms.cameraFar.value = camera.far;
155
+ fsQuad.render(renderer, depthTestShader);
156
+ }
@@ -0,0 +1,182 @@
1
+ /*
2
+ * @Author: xiaosihan
3
+ * @Date: 2024-09-23 21:07:06
4
+ * @Last Modified by: xiaosihan
5
+ * @Last Modified time: 2025-01-28 04:01:58
6
+ */
7
+ /*
8
+ * @Author: xiaosihan
9
+ * @Date: 2023-05-09 00:35:17
10
+ * @Last Modified by: xiaosihan
11
+ * @Last Modified time: 2023-05-09 02:33:28
12
+ */
13
+ import { Color, DepthFormat, DepthTexture, LinearFilter, RGBAFormat, Scene, ShaderChunk, ShaderMaterial, UnsignedIntType, Vector2, WebGLRenderTarget, WebGLRenderer, Camera, PerspectiveCamera, Object3D } from "three";
14
+ import fsQuad from "./fsQuad";
15
+ import { EffectUserData } from "./effectUserData";
16
+ import { debugDepthState } from "./debugDepthState";
17
+
18
+ const selectDepthTexture: DepthTexture = (() => {
19
+ const baseDepthTexture = new DepthTexture(1024, 1024);
20
+ baseDepthTexture.format = DepthFormat;
21
+ baseDepthTexture.type = UnsignedIntType;
22
+ baseDepthTexture.anisotropy = 16;
23
+ return baseDepthTexture;
24
+ })();
25
+
26
+ const selectTextureTarget: WebGLRenderTarget = new WebGLRenderTarget(1024, 1024, {
27
+ minFilter: LinearFilter,
28
+ magFilter: LinearFilter,
29
+ format: RGBAFormat,
30
+ anisotropy: 16,
31
+ // 无 MSAA:mask 颜色与下方 selectDepthTextureTarget(深度)必须同为硬边缘,
32
+ // 否则 mask 边缘平滑而深度硬 → depthTestShader 判定边界与 mask 视觉边缘错位,覆盖边缘锯齿。
33
+ // 边缘抗锯齿统一由终处理 FXAA 兜底。
34
+ });
35
+
36
+ // 无 MSAA 的深度专用目标:仅用于导出对象深度,供 depthTestShader 做遮挡判定(深度无需抗锯齿)
37
+ const selectDepthTextureTarget: WebGLRenderTarget = new WebGLRenderTarget(1024, 1024, {
38
+ minFilter: LinearFilter,
39
+ magFilter: LinearFilter,
40
+ format: RGBAFormat,
41
+ depthTexture: selectDepthTexture,
42
+ anisotropy: 16,
43
+ });
44
+
45
+ const selectDepthTestTextureTarget: WebGLRenderTarget = new WebGLRenderTarget(1024, 1024, {
46
+ minFilter: LinearFilter,
47
+ magFilter: LinearFilter,
48
+ format: RGBAFormat,
49
+ anisotropy: 16,
50
+ // 无 MSAA:深度测试 mask 无需抗锯齿,去掉以提速
51
+ });
52
+
53
+ const blur1TextureTarget: WebGLRenderTarget = new WebGLRenderTarget(1024, 1024, {
54
+ minFilter: LinearFilter,
55
+ magFilter: LinearFilter,
56
+ format: RGBAFormat,
57
+ });
58
+
59
+ const size: Vector2 = new Vector2();
60
+
61
+ const depthTestShader: ShaderMaterial = new ShaderMaterial({
62
+ uniforms: {
63
+ color: { value: new Color("#440000") },
64
+ opacity: { value: 1 },
65
+ depthTest: { value: true },
66
+ baseDepth: { value: null },
67
+ selectDepth: { value: null },
68
+ cameraFar: { value: 1000.0 },
69
+ },
70
+ vertexShader: `
71
+ ${ShaderChunk.common}
72
+ ${ShaderChunk.logdepthbuf_pars_vertex}
73
+ varying vec2 vUv;
74
+ void main() {
75
+ vUv = uv;
76
+ gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
77
+ ${ShaderChunk.logdepthbuf_vertex}
78
+ }
79
+ `,
80
+ fragmentShader: `
81
+ ${ShaderChunk.logdepthbuf_pars_fragment}
82
+ uniform vec3 color;
83
+ uniform float opacity;
84
+ uniform bool depthTest;
85
+ uniform sampler2D baseDepth;
86
+ uniform sampler2D selectDepth;
87
+ uniform float cameraFar;
88
+ varying vec2 vUv;
89
+ void main() {
90
+ if( depthTest ){
91
+ float coverBaseD = texture2D(baseDepth, vUv).r;
92
+ float coverSelD = texture2D(selectDepth, vUv).r;
93
+ // 对数深度反解成线性视图深度,线性空间做遮挡判定。
94
+ float zBase = pow(cameraFar + 1.0, coverBaseD) - 1.0;
95
+ float zSel = pow(cameraFar + 1.0, coverSelD) - 1.0;
96
+ float bias = max(zSel, 1.0) * 0.0015;
97
+ // 该像素没有覆盖对象(selectDepth 仍是清屏值 1.0 → zSel == cameraFar)→ 不参与合成。
98
+ // ⚠️ 旧实现让背景像素「直接保留覆盖色」,导致没有对象的像素同样输出覆盖色
99
+ // → 整个场景被覆盖色染一层(与 frosted_glass / bloom 是同一个模板 bug)。
100
+ // 语义与下方 depthTest=false 分支的「selectDepth < 1.0 才输出」保持一致。
101
+ if (zSel >= cameraFar) {
102
+ discard;
103
+ }
104
+ // 仅丢弃被更近场景几何遮挡的部分
105
+ if (zBase < zSel - bias) {
106
+ discard;
107
+ }
108
+ gl_FragColor = vec4(color, opacity);
109
+ }else{
110
+ if(texture2D(selectDepth, vUv).r < 1.0){
111
+ gl_FragColor = vec4(color, opacity);
112
+ }else{
113
+ discard;
114
+ }
115
+ }
116
+
117
+ ${ShaderChunk.logdepthbuf_fragment}
118
+ }
119
+ `,
120
+ depthTest: true,
121
+ depthWrite: true,
122
+ transparent: true,
123
+ });
124
+
125
+ const scene: Scene = new Scene();
126
+
127
+ export default function cover_pass(
128
+ renderer: WebGLRenderer,
129
+ camera: Camera,
130
+ object3d: Object3D,
131
+ baseDepthTexture: DepthTexture,
132
+ devicePixelRatio: number
133
+ ): void {
134
+ const {
135
+ cover_enable = false,
136
+ cover_color = "#04fa12",
137
+ cover_opacity = 1,
138
+ cover_depth_test = true,
139
+ } = object3d.userData as EffectUserData;
140
+
141
+ if (!cover_enable || cover_opacity === 0) {
142
+ return;
143
+ }
144
+
145
+ const originRenderTarget = renderer.getRenderTarget();
146
+
147
+ // 灰度图渲染目标跟随主画面尺寸(= width × effectiveRatio),与 baseRenderTarget 完全一致,
148
+ // 消除灰度图与主画面尺寸不一致导致的放大重采样摩尔纹
149
+ renderer.getSize(size);
150
+ size.multiplyScalar(devicePixelRatio);
151
+ selectTextureTarget.setSize(size.x, size.y);
152
+ selectDepthTextureTarget.setSize(size.x, size.y);
153
+ // 缺陷修复:three r167 的 WebGLRenderTarget.setSize 不会同步 depthTexture,
154
+ // 需手动把 selectDepthTexture 尺寸与全屏 baseDepth 对齐,否则深度比例错位导致颜色覆盖被错误 discard
155
+ selectDepthTexture.image.width = size.x;
156
+ selectDepthTexture.image.height = size.y;
157
+ selectDepthTexture.needsUpdate = true;
158
+ selectDepthTestTextureTarget.setSize(size.x, size.y);
159
+ blur1TextureTarget.setSize(size.x, size.y);
160
+ renderer.setRenderTarget(selectTextureTarget);
161
+ scene.children = [object3d];
162
+ renderer.clear();
163
+ renderer.render(scene, camera);
164
+
165
+ // 单独渲染对象深度到无 MSAA 目标,供 depthTestShader 做遮挡判定
166
+ renderer.setRenderTarget(selectDepthTextureTarget);
167
+ scene.children = [object3d];
168
+ renderer.clear();
169
+ renderer.render(scene, camera);
170
+ // 调试:记录选区深度,供面板「深度判定图 / 辉光深度比对」排查 cover 的遮挡判定
171
+ debugDepthState.lastSelectDepth = selectDepthTexture;
172
+
173
+ renderer.setRenderTarget(originRenderTarget);
174
+ renderer.clearDepth();
175
+ depthTestShader.uniforms.color.value.set(cover_color);
176
+ depthTestShader.uniforms.opacity.value = cover_opacity;
177
+ depthTestShader.uniforms.depthTest.value = cover_depth_test;
178
+ depthTestShader.uniforms.baseDepth.value = baseDepthTexture;
179
+ depthTestShader.uniforms.selectDepth.value = selectDepthTexture;
180
+ depthTestShader.uniforms.cameraFar.value = (camera as PerspectiveCamera).far;
181
+ fsQuad.render(renderer, depthTestShader);
182
+ }
@@ -0,0 +1,20 @@
1
+ import type { DepthTexture } from "three";
2
+ /**
3
+ * 深度调试预览模式(面板按钮与控制台 `window.__TB_DEBUG_DEPTH` 共用同一枚举):
4
+ * - "none" :正常渲染(默认)
5
+ * - "global" :全局深度图(baseDepthTexture,排除地板)
6
+ * - "ao" :AO 深度图(aoDepthTexture,含地板)
7
+ * - "compare" :R=base 深度、G=选区 select 深度(对数反解后归一化)
8
+ * - "judge" :R=base 原始深度、G=select 原始深度、B=判定结果(1=判为被遮挡应 discard)
9
+ * - "excluded":深度图灰度 + 「被排除出深度图的面」叠红(红=挡不住任何后处理)
10
+ */
11
+ export type DebugDepthMode = "none" | "global" | "ao" | "compare" | "judge" | "excluded";
12
+ /**
13
+ * 调试用全局状态:记录最近一次 glow_pass / stroke_pass 渲染的「选区自身深度图」(selectDepth)。
14
+ * 供 ThreeBase 渲染末尾的「辉光深度比对」调试视图读取(R=全局 base 深度,G=选区 select 深度),
15
+ * 让用户一眼看出到底是「全局 base 深度没写进」还是「选区自身深度没写进」。
16
+ * 由各 pass 在渲染完 selectDepth 后写入;每帧会被最后一个被处理的可见对象覆盖(调试够用)。
17
+ */
18
+ export declare const debugDepthState: {
19
+ lastSelectDepth: DepthTexture | null;
20
+ };
@@ -0,0 +1,9 @@
1
+ /**
2
+ * 调试用全局状态:记录最近一次 glow_pass / stroke_pass 渲染的「选区自身深度图」(selectDepth)。
3
+ * 供 ThreeBase 渲染末尾的「辉光深度比对」调试视图读取(R=全局 base 深度,G=选区 select 深度),
4
+ * 让用户一眼看出到底是「全局 base 深度没写进」还是「选区自身深度没写进」。
5
+ * 由各 pass 在渲染完 selectDepth 后写入;每帧会被最后一个被处理的可见对象覆盖(调试够用)。
6
+ */
7
+ export const debugDepthState = {
8
+ lastSelectDepth: null,
9
+ };
@@ -0,0 +1,22 @@
1
+ import type { DepthTexture } from "three";
2
+
3
+ /**
4
+ * 深度调试预览模式(面板按钮与控制台 `window.__TB_DEBUG_DEPTH` 共用同一枚举):
5
+ * - "none" :正常渲染(默认)
6
+ * - "global" :全局深度图(baseDepthTexture,排除地板)
7
+ * - "ao" :AO 深度图(aoDepthTexture,含地板)
8
+ * - "compare" :R=base 深度、G=选区 select 深度(对数反解后归一化)
9
+ * - "judge" :R=base 原始深度、G=select 原始深度、B=判定结果(1=判为被遮挡应 discard)
10
+ * - "excluded":深度图灰度 + 「被排除出深度图的面」叠红(红=挡不住任何后处理)
11
+ */
12
+ export type DebugDepthMode = "none" | "global" | "ao" | "compare" | "judge" | "excluded";
13
+
14
+ /**
15
+ * 调试用全局状态:记录最近一次 glow_pass / stroke_pass 渲染的「选区自身深度图」(selectDepth)。
16
+ * 供 ThreeBase 渲染末尾的「辉光深度比对」调试视图读取(R=全局 base 深度,G=选区 select 深度),
17
+ * 让用户一眼看出到底是「全局 base 深度没写进」还是「选区自身深度没写进」。
18
+ * 由各 pass 在渲染完 selectDepth 后写入;每帧会被最后一个被处理的可见对象覆盖(调试够用)。
19
+ */
20
+ export const debugDepthState: { lastSelectDepth: DepthTexture | null } = {
21
+ lastSelectDepth: null,
22
+ };
@@ -0,0 +1,12 @@
1
+ /**
2
+ * 深度遮挡判定容差(对数深度空间)—— 单一常量源。
3
+ *
4
+ * 语义:`baseD < selD - DEPTH_TEST_BIAS` 时判定「该像素被更近的真实几何挡住」→ discard。
5
+ * (DepthTexture 存的是对数深度,值越小越近。)
6
+ *
7
+ * ⚠️ 必须单一源:stroke_pass 的 depthTestShader 与调试用的 debugDepthJudgeShader
8
+ * 都依赖它。若两边各写一份字面量,改一边忘另一边 → 调试视图与真实判定不一致,
9
+ * 排查时会得出完全错误的结论(本次深度排查已踩过这类"两处漂移"的坑)。
10
+ * 护栏见 test/depthDebug.test.js C 组。
11
+ */
12
+ export declare const DEPTH_TEST_BIAS = 0.0006;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * 深度遮挡判定容差(对数深度空间)—— 单一常量源。
3
+ *
4
+ * 语义:`baseD < selD - DEPTH_TEST_BIAS` 时判定「该像素被更近的真实几何挡住」→ discard。
5
+ * (DepthTexture 存的是对数深度,值越小越近。)
6
+ *
7
+ * ⚠️ 必须单一源:stroke_pass 的 depthTestShader 与调试用的 debugDepthJudgeShader
8
+ * 都依赖它。若两边各写一份字面量,改一边忘另一边 → 调试视图与真实判定不一致,
9
+ * 排查时会得出完全错误的结论(本次深度排查已踩过这类"两处漂移"的坑)。
10
+ * 护栏见 test/depthDebug.test.js C 组。
11
+ */
12
+ export const DEPTH_TEST_BIAS = 0.0006;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * 深度遮挡判定容差(对数深度空间)—— 单一常量源。
3
+ *
4
+ * 语义:`baseD < selD - DEPTH_TEST_BIAS` 时判定「该像素被更近的真实几何挡住」→ discard。
5
+ * (DepthTexture 存的是对数深度,值越小越近。)
6
+ *
7
+ * ⚠️ 必须单一源:stroke_pass 的 depthTestShader 与调试用的 debugDepthJudgeShader
8
+ * 都依赖它。若两边各写一份字面量,改一边忘另一边 → 调试视图与真实判定不一致,
9
+ * 排查时会得出完全错误的结论(本次深度排查已踩过这类"两处漂移"的坑)。
10
+ * 护栏见 test/depthDebug.test.js C 组。
11
+ */
12
+ export const DEPTH_TEST_BIAS = 0.0006;
@@ -0,0 +1,27 @@
1
+ /** 特效与鼠标事件共用的 userData 字段 */
2
+ export interface EffectUserData {
3
+ stroke_enable?: boolean;
4
+ stroke_color?: string;
5
+ stroke_width?: number;
6
+ glow_enable?: boolean;
7
+ glow_color?: string;
8
+ glow_width?: number;
9
+ glow_opacity?: number;
10
+ glow_sigma?: number;
11
+ glow_threshold?: number;
12
+ glow_iterations?: number;
13
+ glow_intensity?: number;
14
+ glow_additive?: boolean;
15
+ glow_highlight_width?: number;
16
+ cover_enable?: boolean;
17
+ cover_color?: string;
18
+ cover_opacity?: number;
19
+ cover_depth_test?: boolean;
20
+ bloom_enable?: boolean;
21
+ bloom_threshold?: number;
22
+ bloom_strength?: number;
23
+ bloom_radius?: number;
24
+ frosted_glass_enable?: boolean;
25
+ cursor?: string;
26
+ enableEvent?: boolean;
27
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,46 @@
1
+ /*
2
+ * @Author: software-engineer(寇豆码)
3
+ * @Description: 特效相关 userData 字段的统一类型定义。
4
+ * 覆盖 stroke / glow / cover / bloom / frosted_glass 等 pass 读取的全部开关字段,
5
+ * 以及 ThreeMouse 事件开关(cursor / enableEvent),供各 pass 用 `as EffectUserData`
6
+ * 取代各自内联的 `as { ... }`,避免类型散落与漂移。
7
+ */
8
+ /** 特效与鼠标事件共用的 userData 字段 */
9
+ export interface EffectUserData {
10
+ // ── stroke(描边)──
11
+ stroke_enable?: boolean;
12
+ stroke_color?: string;
13
+ stroke_width?: number;
14
+
15
+ // ── glow(辉光)──
16
+ glow_enable?: boolean;
17
+ glow_color?: string;
18
+ glow_width?: number;
19
+ glow_opacity?: number;
20
+ glow_sigma?: number;
21
+ glow_threshold?: number;
22
+ glow_iterations?: number;
23
+ glow_intensity?: number; // 亮度倍增,可 >1 让光晕很亮(配合 glow_additive 发光叠加更明显)
24
+ glow_additive?: boolean; // true=加性混合(发光叠加到画面),false=普通半透明覆盖(默认)
25
+ glow_highlight_width?: number; // 薄高亮层粗细(像素,默认 2);始终绘制(=0 时扩张宽为 0、无可见环),无开关参数。
26
+ // 薄高亮层是 glow 的默认行为(贴物体边缘一圈更亮的细线),无需开启参数。
27
+
28
+ // ── cover(覆盖)──
29
+ cover_enable?: boolean;
30
+ cover_color?: string;
31
+ cover_opacity?: number;
32
+ cover_depth_test?: boolean;
33
+
34
+ // ── bloom(泛光)──
35
+ bloom_enable?: boolean;
36
+ bloom_threshold?: number;
37
+ bloom_strength?: number;
38
+ bloom_radius?: number;
39
+
40
+ // ── frosted glass(毛玻璃)──
41
+ frosted_glass_enable?: boolean;
42
+
43
+ // ── 鼠标事件开关(ThreeMouse)──
44
+ cursor?: string;
45
+ enableEvent?: boolean;
46
+ }
@@ -1,2 +1,2 @@
1
- import { Camera, DepthTexture, Scene, WebGLRenderTarget, WebGLRenderer } from "three";
2
- export default function frosted_glass_pass(renderer: WebGLRenderer, camera: Camera, scene: Scene, baseRenderTarget: WebGLRenderTarget, baseDepthTexture: DepthTexture, devicePixelRatio: number): void;
1
+ import { DepthTexture, Scene, WebGLRenderTarget, WebGLRenderer, Camera } from "three";
2
+ export default function frosted_glass_pass(renderer: WebGLRenderer, camera: Camera, scene: Scene, baseRenderTarget: WebGLRenderTarget, baseDepthTexture: DepthTexture, devicePixelRatio: number): void;