three-base 2.0.142 → 2.0.166

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 (231) hide show
  1. package/DirectionalLight.d.ts +6 -6
  2. package/DirectionalLight.js +68 -68
  3. package/EventMap.d.ts +103 -103
  4. package/EventMap.js +17 -17
  5. package/EventMesh.d.ts +18 -18
  6. package/EventMesh.js +59 -59
  7. package/ExtrudeMesh.d.ts +112 -112
  8. package/ExtrudeMesh.js +342 -342
  9. package/FPScontrol.d.ts +531 -511
  10. package/FPScontrol.js +1866 -1799
  11. package/FPScontrol.ts +1922 -1855
  12. package/Fire/Fire.d.ts +28 -28
  13. package/Fire/Fire.js +80 -80
  14. package/Fire/FireGeometry.d.ts +9 -9
  15. package/Fire/FireGeometry.js +40 -40
  16. package/Fire/FireMaterial.d.ts +28 -28
  17. package/Fire/FireMaterial.js +32 -32
  18. package/Fire/index.d.ts +2 -2
  19. package/Fire/index.js +2 -2
  20. package/GLTFDracoLoader.d.ts +71 -71
  21. package/GLTFDracoLoader.js +266 -266
  22. package/GLTFDracoLoader.ts +1 -1
  23. package/Grass/Grass.d.ts +8 -8
  24. package/Grass/Grass.js +38 -38
  25. package/Grass/index.d.ts +2 -2
  26. package/Grass/index.js +2 -2
  27. package/Ground1/Ground1.d.ts +10 -10
  28. package/Ground1/Ground1.js +71 -71
  29. package/Ground1/index.d.ts +1 -1
  30. package/Ground1/index.js +1 -1
  31. package/MeshBase.d.ts +36 -36
  32. package/MeshBase.js +251 -247
  33. package/MeshBase.ts +6 -2
  34. package/Mirror.d.ts +25 -25
  35. package/Mirror.js +143 -143
  36. package/MktMesh/MktMesh.d.ts +301 -291
  37. package/MktMesh/MktMesh.js +1064 -1045
  38. package/MktMesh/MktMesh.ts +32 -11
  39. package/MktMesh/assetUrl.d.ts +59 -35
  40. package/MktMesh/assetUrl.js +165 -69
  41. package/MktMesh/assetUrl.ts +164 -69
  42. package/MktMesh/mktMappingShader.d.ts +12 -12
  43. package/MktMesh/mktMappingShader.js +138 -138
  44. package/MktMesh/mktMappingShader.ts +139 -139
  45. package/MktMesh/mktShader.d.ts +263 -263
  46. package/MktMesh/mktShader.js +1236 -1236
  47. package/MktMesh/mktShader.ts +1344 -1344
  48. package/MktMesh/panoBitmapTexture.d.ts +25 -25
  49. package/MktMesh/panoBitmapTexture.js +52 -52
  50. package/MktMesh/panoBitmapTexture.ts +54 -54
  51. package/MktMesh/panoSlotBind.d.ts +29 -29
  52. package/MktMesh/panoSlotBind.js +106 -106
  53. package/MktMesh/panoSlotBind.ts +153 -153
  54. package/MktMesh/panoSlotRoster.d.ts +22 -22
  55. package/MktMesh/panoSlotRoster.js +169 -169
  56. package/MktMesh/panoSlotRoster.ts +168 -168
  57. package/MktMesh/panoTileStitcher.d.ts +119 -119
  58. package/MktMesh/panoTileStitcher.js +529 -529
  59. package/MktMesh/panoTileStitcher.ts +616 -616
  60. package/MktMesh/types.d.ts +75 -75
  61. package/MktMesh/types.js +1 -1
  62. package/MktMesh/wallCapTessellate.d.ts +33 -33
  63. package/MktMesh/wallCapTessellate.js +97 -97
  64. package/MktMesh/wallCapTessellate.ts +68 -68
  65. package/PipeMesh/PathGeometry.d.ts +44 -44
  66. package/PipeMesh/PathGeometry.js +307 -307
  67. package/PipeMesh/PathPoint.d.ts +17 -17
  68. package/PipeMesh/PathPoint.js +31 -31
  69. package/PipeMesh/PathPointList.d.ts +31 -31
  70. package/PipeMesh/PathPointList.js +209 -209
  71. package/PipeMesh/PathTubeGeometry.d.ts +25 -25
  72. package/PipeMesh/PathTubeGeometry.js +130 -130
  73. package/PipeMesh/PipeMesh.d.ts +25 -25
  74. package/PipeMesh/PipeMesh.js +63 -63
  75. package/PipeMesh/index.d.ts +1 -1
  76. package/PipeMesh/index.js +1 -1
  77. package/PlaneModal1/PlaneModal1.d.ts +34 -34
  78. package/PlaneModal1/PlaneModal1.js +109 -109
  79. package/PlaneModal1/index.d.ts +1 -1
  80. package/PlaneModal1/index.js +1 -1
  81. package/PlaneText.d.ts +27 -27
  82. package/PlaneText.js +35 -35
  83. package/PlaneWithHtml.d.ts +13 -13
  84. package/PlaneWithHtml.js +66 -64
  85. package/PlaneWithHtml.ts +3 -1
  86. package/PointLight/PointLight.d.ts +13 -13
  87. package/PointLight/PointLight.js +64 -64
  88. package/PointLight/index.d.ts +1 -1
  89. package/PointLight/index.js +1 -1
  90. package/Sky/Sky.d.ts +9 -9
  91. package/Sky/Sky.js +22 -22
  92. package/Sky/index.d.ts +1 -1
  93. package/Sky/index.js +1 -1
  94. package/SpotLight.d.ts +6 -6
  95. package/SpotLight.js +72 -72
  96. package/SpriteModal1/SpriteModal1.d.ts +33 -33
  97. package/SpriteModal1/SpriteModal1.js +116 -116
  98. package/SpriteModal1/index.d.ts +1 -1
  99. package/SpriteModal1/index.js +1 -1
  100. package/SpriteText.d.ts +46 -46
  101. package/SpriteText.js +176 -176
  102. package/SpriteText2.d.ts +48 -48
  103. package/SpriteText2.js +223 -223
  104. package/SpriteText3.d.ts +86 -86
  105. package/SpriteText3.js +517 -517
  106. package/SpriteText3.ts +599 -599
  107. package/SpriteWithHtml.d.ts +9 -9
  108. package/SpriteWithHtml.js +46 -44
  109. package/SpriteWithHtml.ts +3 -1
  110. package/Text3D/Text3D.d.ts +20 -20
  111. package/Text3D/Text3D.js +58 -58
  112. package/Text3D/fontController.d.ts +60 -60
  113. package/Text3D/fontController.js +166 -166
  114. package/Text3D/index.d.ts +1 -1
  115. package/Text3D/index.js +1 -1
  116. package/ThreeBase.d.ts +248 -248
  117. package/ThreeBase.js +1202 -1202
  118. package/ThreeBase.ts +1314 -1314
  119. package/ThreeMouse.d.ts +53 -54
  120. package/ThreeMouse.js +453 -453
  121. package/Transition.d.ts +45 -45
  122. package/Transition.js +209 -209
  123. package/Water/Water.d.ts +5 -5
  124. package/Water/Water.js +44 -44
  125. package/Water/index.d.ts +2 -2
  126. package/Water/index.js +2 -2
  127. package/WaterFlow/FloatingDuck.d.ts +88 -88
  128. package/WaterFlow/FloatingDuck.js +307 -307
  129. package/WaterFlow/FloatingDuck.ts +445 -445
  130. package/WaterFlow/GPUFluidSimulation.d.ts +56 -56
  131. package/WaterFlow/GPUFluidSimulation.js +781 -781
  132. package/WaterFlow/GPUFluidSimulation.ts +827 -827
  133. package/WaterFlow/ReservoirSystem.d.ts +106 -106
  134. package/WaterFlow/ReservoirSystem.js +611 -611
  135. package/WaterFlow/ReservoirSystem.ts +754 -754
  136. package/WaterFlow/SPHField.d.ts +35 -35
  137. package/WaterFlow/SPHField.js +203 -203
  138. package/WaterFlow/SPHField.ts +228 -228
  139. package/WaterFlow/ScreenSpaceFluidPass.d.ts +69 -69
  140. package/WaterFlow/ScreenSpaceFluidPass.js +728 -728
  141. package/WaterFlow/ScreenSpaceFluidPass.ts +789 -789
  142. package/WaterFlow/ShallowWaterSurface.d.ts +45 -45
  143. package/WaterFlow/ShallowWaterSurface.js +438 -438
  144. package/WaterFlow/ShallowWaterSurface.ts +510 -510
  145. package/WaterFlow/WaterFlow.d.ts +87 -87
  146. package/WaterFlow/WaterFlow.js +171 -171
  147. package/WaterFlow/WaterFlow.ts +219 -219
  148. package/WaterFlow/types.d.ts +161 -161
  149. package/WaterFlow/types.js +1 -1
  150. package/WaterFlow/types.ts +189 -189
  151. package/WaterFlow/waterFlowPass.d.ts +3 -3
  152. package/WaterFlow/waterFlowPass.js +20 -20
  153. package/WaterFlow/waterFlowPass.ts +40 -40
  154. package/collisionOBB.d.ts +42 -42
  155. package/collisionOBB.js +112 -112
  156. package/collisionOBB.ts +108 -108
  157. package/declare.d.ts +25 -25
  158. package/index.d.ts +1 -1
  159. package/index.js +1 -1
  160. package/instanced/InstancedBatch.d.ts +57 -57
  161. package/instanced/InstancedBatch.js +348 -348
  162. package/instanced/InstancedBatch.ts +406 -406
  163. package/instanced/InstancedChild.d.ts +174 -174
  164. package/instanced/InstancedChild.js +264 -264
  165. package/instanced/InstancedChild.ts +327 -327
  166. package/instanced/InstancedGroup.d.ts +43 -43
  167. package/instanced/InstancedGroup.js +126 -126
  168. package/instanced/InstancedGroup.ts +137 -137
  169. package/instanced/InstancedMeshBase.d.ts +38 -38
  170. package/instanced/InstancedMeshBase.js +282 -282
  171. package/instanced/InstancedTemplate.d.ts +46 -46
  172. package/instanced/InstancedTemplate.js +125 -125
  173. package/keyControls.d.ts +29 -30
  174. package/keyControls.js +101 -101
  175. package/lensflare/LensFlare.d.ts +39 -39
  176. package/lensflare/LensFlare.js +284 -284
  177. package/package.json +6 -1
  178. package/pass/bloom_pass.d.ts +2 -2
  179. package/pass/bloom_pass.js +174 -174
  180. package/pass/cover_pass.d.ts +2 -2
  181. package/pass/cover_pass.js +108 -108
  182. package/pass/debugDepthState.d.ts +20 -20
  183. package/pass/debugDepthState.js +9 -9
  184. package/pass/debugDepthState.ts +22 -22
  185. package/pass/depthTestBias.d.ts +12 -12
  186. package/pass/depthTestBias.js +12 -12
  187. package/pass/depthTestBias.ts +12 -12
  188. package/pass/effectUserData.d.ts +27 -27
  189. package/pass/effectUserData.js +1 -1
  190. package/pass/effectUserData.ts +46 -46
  191. package/pass/frosted_glass_pass.d.ts +2 -2
  192. package/pass/frosted_glass_pass.js +150 -150
  193. package/pass/fsQuad.d.ts +9 -9
  194. package/pass/fsQuad.js +28 -28
  195. package/pass/glow_pass.d.ts +2 -2
  196. package/pass/glow_pass.js +350 -350
  197. package/pass/screen_bloom_pass.d.ts +11 -11
  198. package/pass/screen_bloom_pass.js +136 -136
  199. package/pass/ssao_pass.d.ts +88 -88
  200. package/pass/ssao_pass.js +799 -799
  201. package/pass/ssao_pass.ts +918 -918
  202. package/pass/stroke_pass.d.ts +2 -2
  203. package/pass/stroke_pass.js +267 -267
  204. package/shaders/FXAAShaderMaterial.d.ts +3 -3
  205. package/shaders/FXAAShaderMaterial.js +20 -20
  206. package/shaders/baseDepthVisShader.d.ts +11 -11
  207. package/shaders/baseDepthVisShader.js +36 -36
  208. package/shaders/baseDepthVisShader.ts +36 -36
  209. package/shaders/baseTextureToRenderShader.d.ts +2 -2
  210. package/shaders/baseTextureToRenderShader.js +19 -19
  211. package/shaders/copyShader.d.ts +3 -3
  212. package/shaders/copyShader.js +13 -13
  213. package/shaders/debugDepthCompareShader.d.ts +14 -14
  214. package/shaders/debugDepthCompareShader.js +49 -49
  215. package/shaders/debugDepthCompareShader.ts +50 -50
  216. package/shaders/debugDepthJudgeShader.d.ts +18 -18
  217. package/shaders/debugDepthJudgeShader.js +52 -52
  218. package/shaders/debugDepthJudgeShader.ts +54 -54
  219. package/shaders/debugExcludedShader.d.ts +13 -13
  220. package/shaders/debugExcludedShader.js +46 -46
  221. package/shaders/debugExcludedShader.ts +48 -48
  222. package/spriteTextBg.d.ts +1 -1
  223. package/spriteTextBg.js +20 -20
  224. package/spriteTextBg.ts +20 -20
  225. package/threeLoader.d.ts +35 -35
  226. package/threeLoader.js +518 -518
  227. package/threeUtils.d.ts +71 -53
  228. package/threeUtils.js +363 -329
  229. package/threeUtils.ts +35 -0
  230. package/types.d.ts +2 -2
  231. package/types.js +6 -6
@@ -1,2 +1,2 @@
1
- import { DepthTexture, WebGLRenderer, Camera, Object3D } from "three";
2
- export default function stroke_pass(renderer: WebGLRenderer, camera: Camera, object3d: Object3D, baseDepthTexture: DepthTexture, devicePixelRatio: number): void;
1
+ import { DepthTexture, WebGLRenderer, Camera, Object3D } from "three";
2
+ export default function stroke_pass(renderer: WebGLRenderer, camera: Camera, object3d: Object3D, baseDepthTexture: DepthTexture, devicePixelRatio: number): void;
@@ -1,61 +1,61 @@
1
- /*
2
- * @Author: xiaosihan
3
- * @Date: 2023-05-09 00:35:17
4
- * @Last Modified by: xiaosihan
5
- * @Last Modified time: 2025-01-28 04:02:16
6
- */
7
- import { Color, DepthFormat, DepthTexture, LinearFilter, NoBlending, NormalBlending, RGBAFormat, RawShaderMaterial, Scene, ShaderChunk, ShaderMaterial, UnsignedIntType, Vector2, WebGLRenderTarget } from "three";
8
- import fsQuad from "./fsQuad";
9
- import { debugDepthState } from "./debugDepthState";
10
- import { DEPTH_TEST_BIAS } from "./depthTestBias";
11
- const selectDepthTexture = (() => {
12
- const baseDepthTexture = new DepthTexture(1024, 1024);
13
- baseDepthTexture.format = DepthFormat;
14
- baseDepthTexture.type = UnsignedIntType;
15
- baseDepthTexture.anisotropy = 16;
16
- return baseDepthTexture;
17
- })();
18
- const selectTextureTarget = new WebGLRenderTarget(1024, 1024, {
19
- minFilter: LinearFilter,
20
- magFilter: LinearFilter,
21
- format: RGBAFormat,
22
- anisotropy: 16,
23
- // 无 MSAA:mask 颜色与下方 selectDepthTextureTarget(深度)必须同为硬边缘,
24
- // 否则 mask 边缘平滑而深度硬 → depthTestShader 判定边界与 mask 视觉边缘错位,描边边缘锯齿。
25
- // 边缘抗锯齿统一由 mask 内部 FXAA + 终处理 FXAA 兜底。
26
- });
27
- // 无 MSAA 的深度专用目标:仅用于导出对象深度,供 depthTestShader 做遮挡判定(深度无需抗锯齿)
28
- const selectDepthTextureTarget = new WebGLRenderTarget(1024, 1024, {
29
- minFilter: LinearFilter,
30
- magFilter: LinearFilter,
31
- format: RGBAFormat,
32
- depthTexture: selectDepthTexture,
33
- anisotropy: 16,
34
- });
35
- const selectDepthTestTextureTarget = new WebGLRenderTarget(1024, 1024, {
36
- minFilter: LinearFilter,
37
- magFilter: LinearFilter,
38
- format: RGBAFormat,
39
- anisotropy: 16,
40
- // 无 MSAA:深度测试 mask 无需抗锯齿,去掉以提速
41
- });
42
- const blur1TextureTarget = new WebGLRenderTarget(1024, 1024, { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat });
43
- const blur2TextureTarget = new WebGLRenderTarget(1024, 1024, { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat });
44
- // 外扩深度临时/结果目标:depthMinBlurShader 把本体深度图随描边一起外扩,
45
- // 外扩区取邻域最近深度(忽略背景 1.0),使外扩区 selD<1.0,depthTest 才能正确判遮挡(不漏光)。
46
- const selectDepthBlurTmpTextureTarget = new WebGLRenderTarget(1024, 1024, { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat });
47
- const selectDepthBlurTextureTarget = new WebGLRenderTarget(1024, 1024, { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat });
48
- // 外扩描边经深度测试后的结果(步骤 5.6):独立 target,避免回写 blur1 触发历史回归 bug
49
- const blurDepthTestTextureTarget = new WebGLRenderTarget(1024, 1024, { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat });
50
- const size = new Vector2();
51
- const depthTestShader = new ShaderMaterial({
52
- uniforms: {
53
- map: { value: null },
54
- baseDepth: { value: null },
55
- selectDepth: { value: null },
56
- cameraFar: { value: 1000.0 },
57
- uDebugVis: { value: 0.0 },
58
- },
1
+ /*
2
+ * @Author: xiaosihan
3
+ * @Date: 2023-05-09 00:35:17
4
+ * @Last Modified by: xiaosihan
5
+ * @Last Modified time: 2025-01-28 04:02:16
6
+ */
7
+ import { Color, DepthFormat, DepthTexture, LinearFilter, NoBlending, NormalBlending, RGBAFormat, RawShaderMaterial, Scene, ShaderChunk, ShaderMaterial, UnsignedIntType, Vector2, WebGLRenderTarget } from "three";
8
+ import fsQuad from "./fsQuad";
9
+ import { debugDepthState } from "./debugDepthState";
10
+ import { DEPTH_TEST_BIAS } from "./depthTestBias";
11
+ const selectDepthTexture = (() => {
12
+ const baseDepthTexture = new DepthTexture(1024, 1024);
13
+ baseDepthTexture.format = DepthFormat;
14
+ baseDepthTexture.type = UnsignedIntType;
15
+ baseDepthTexture.anisotropy = 16;
16
+ return baseDepthTexture;
17
+ })();
18
+ const selectTextureTarget = new WebGLRenderTarget(1024, 1024, {
19
+ minFilter: LinearFilter,
20
+ magFilter: LinearFilter,
21
+ format: RGBAFormat,
22
+ anisotropy: 16,
23
+ // 无 MSAA:mask 颜色与下方 selectDepthTextureTarget(深度)必须同为硬边缘,
24
+ // 否则 mask 边缘平滑而深度硬 → depthTestShader 判定边界与 mask 视觉边缘错位,描边边缘锯齿。
25
+ // 边缘抗锯齿统一由 mask 内部 FXAA + 终处理 FXAA 兜底。
26
+ });
27
+ // 无 MSAA 的深度专用目标:仅用于导出对象深度,供 depthTestShader 做遮挡判定(深度无需抗锯齿)
28
+ const selectDepthTextureTarget = new WebGLRenderTarget(1024, 1024, {
29
+ minFilter: LinearFilter,
30
+ magFilter: LinearFilter,
31
+ format: RGBAFormat,
32
+ depthTexture: selectDepthTexture,
33
+ anisotropy: 16,
34
+ });
35
+ const selectDepthTestTextureTarget = new WebGLRenderTarget(1024, 1024, {
36
+ minFilter: LinearFilter,
37
+ magFilter: LinearFilter,
38
+ format: RGBAFormat,
39
+ anisotropy: 16,
40
+ // 无 MSAA:深度测试 mask 无需抗锯齿,去掉以提速
41
+ });
42
+ const blur1TextureTarget = new WebGLRenderTarget(1024, 1024, { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat });
43
+ const blur2TextureTarget = new WebGLRenderTarget(1024, 1024, { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat });
44
+ // 外扩深度临时/结果目标:depthMinBlurShader 把本体深度图随描边一起外扩,
45
+ // 外扩区取邻域最近深度(忽略背景 1.0),使外扩区 selD<1.0,depthTest 才能正确判遮挡(不漏光)。
46
+ const selectDepthBlurTmpTextureTarget = new WebGLRenderTarget(1024, 1024, { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat });
47
+ const selectDepthBlurTextureTarget = new WebGLRenderTarget(1024, 1024, { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat });
48
+ // 外扩描边经深度测试后的结果(步骤 5.6):独立 target,避免回写 blur1 触发历史回归 bug
49
+ const blurDepthTestTextureTarget = new WebGLRenderTarget(1024, 1024, { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat });
50
+ const size = new Vector2();
51
+ const depthTestShader = new ShaderMaterial({
52
+ uniforms: {
53
+ map: { value: null },
54
+ baseDepth: { value: null },
55
+ selectDepth: { value: null },
56
+ cameraFar: { value: 1000.0 },
57
+ uDebugVis: { value: 0.0 },
58
+ },
59
59
  vertexShader: `
60
60
  ${ShaderChunk.common}
61
61
  ${ShaderChunk.logdepthbuf_pars_vertex}
@@ -65,7 +65,7 @@ const depthTestShader = new ShaderMaterial({
65
65
  gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
66
66
  ${ShaderChunk.logdepthbuf_vertex}
67
67
  }
68
- `,
68
+ `,
69
69
  fragmentShader: `
70
70
  ${ShaderChunk.logdepthbuf_pars_fragment}
71
71
  uniform sampler2D map;
@@ -102,17 +102,17 @@ const depthTestShader = new ShaderMaterial({
102
102
  gl_FragColor = texture2D(map, vUv);
103
103
  ${ShaderChunk.logdepthbuf_fragment}
104
104
  }
105
- `,
106
- blending: NoBlending,
107
- depthTest: true,
108
- depthWrite: true,
109
- transparent: true
110
- });
111
- const FXAAShaderMaterial = new ShaderMaterial({
112
- uniforms: {
113
- tDiffuse: { value: null },
114
- resolution: { value: new Vector2(1 / 1024, 1 / 1024) }
115
- },
105
+ `,
106
+ blending: NoBlending,
107
+ depthTest: true,
108
+ depthWrite: true,
109
+ transparent: true
110
+ });
111
+ const FXAAShaderMaterial = new ShaderMaterial({
112
+ uniforms: {
113
+ tDiffuse: { value: null },
114
+ resolution: { value: new Vector2(1 / 1024, 1 / 1024) }
115
+ },
116
116
  vertexShader: `
117
117
  ${ShaderChunk.common}
118
118
  ${ShaderChunk.logdepthbuf_pars_vertex}
@@ -122,7 +122,7 @@ const FXAAShaderMaterial = new ShaderMaterial({
122
122
  gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
123
123
  ${ShaderChunk.logdepthbuf_vertex}
124
124
  }
125
- `,
125
+ `,
126
126
  fragmentShader: `
127
127
  ${ShaderChunk.logdepthbuf_pars_fragment}
128
128
  precision highp float;
@@ -295,48 +295,48 @@ const FXAAShaderMaterial = new ShaderMaterial({
295
295
  );
296
296
  ${ShaderChunk.logdepthbuf_fragment}
297
297
  }
298
- `,
299
- blending: NoBlending,
300
- depthTest: false,
301
- depthWrite: false,
302
- transparent: true
303
- });
304
- const strokeShader = new RawShaderMaterial({
305
- uniforms: {
306
- tDiffuse: { value: null },
307
- color: { value: new Color("#0f0") },
308
- width: { value: 1.0 },
309
- opacity: { value: 1.0 },
310
- resolution: { value: new Vector2(1 / 512, 1 / 512) },
311
- offset: {
312
- value: [
313
- new Vector2(0.000, 1.000),
314
- new Vector2(0.259, 0.966),
315
- new Vector2(0.500, 0.866),
316
- new Vector2(0.707, 0.707),
317
- new Vector2(0.866, 0.500),
318
- new Vector2(0.966, 0.259),
319
- new Vector2(1.000, 0.000),
320
- new Vector2(0.966, -0.259),
321
- new Vector2(0.866, -0.500),
322
- new Vector2(0.707, -0.707),
323
- new Vector2(0.500, -0.866),
324
- new Vector2(0.259, -0.966),
325
- new Vector2(0.000, -1.000),
326
- new Vector2(-0.259, -0.966),
327
- new Vector2(-0.500, -0.866),
328
- new Vector2(-0.707, -0.707),
329
- new Vector2(-0.866, -0.500),
330
- new Vector2(-0.966, -0.259),
331
- new Vector2(-1.000, -0.000),
332
- new Vector2(-0.966, 0.259),
333
- new Vector2(-0.866, 0.500),
334
- new Vector2(-0.707, 0.707),
335
- new Vector2(-0.500, 0.866),
336
- new Vector2(-0.259, 0.966)
337
- ]
338
- }
339
- },
298
+ `,
299
+ blending: NoBlending,
300
+ depthTest: false,
301
+ depthWrite: false,
302
+ transparent: true
303
+ });
304
+ const strokeShader = new RawShaderMaterial({
305
+ uniforms: {
306
+ tDiffuse: { value: null },
307
+ color: { value: new Color("#0f0") },
308
+ width: { value: 1.0 },
309
+ opacity: { value: 1.0 },
310
+ resolution: { value: new Vector2(1 / 512, 1 / 512) },
311
+ offset: {
312
+ value: [
313
+ new Vector2(0.000, 1.000),
314
+ new Vector2(0.259, 0.966),
315
+ new Vector2(0.500, 0.866),
316
+ new Vector2(0.707, 0.707),
317
+ new Vector2(0.866, 0.500),
318
+ new Vector2(0.966, 0.259),
319
+ new Vector2(1.000, 0.000),
320
+ new Vector2(0.966, -0.259),
321
+ new Vector2(0.866, -0.500),
322
+ new Vector2(0.707, -0.707),
323
+ new Vector2(0.500, -0.866),
324
+ new Vector2(0.259, -0.966),
325
+ new Vector2(0.000, -1.000),
326
+ new Vector2(-0.259, -0.966),
327
+ new Vector2(-0.500, -0.866),
328
+ new Vector2(-0.707, -0.707),
329
+ new Vector2(-0.866, -0.500),
330
+ new Vector2(-0.966, -0.259),
331
+ new Vector2(-1.000, -0.000),
332
+ new Vector2(-0.966, 0.259),
333
+ new Vector2(-0.866, 0.500),
334
+ new Vector2(-0.707, 0.707),
335
+ new Vector2(-0.500, 0.866),
336
+ new Vector2(-0.259, 0.966)
337
+ ]
338
+ }
339
+ },
340
340
  vertexShader: `
341
341
  attribute vec3 position;
342
342
  attribute vec2 uv;
@@ -344,7 +344,7 @@ const strokeShader = new RawShaderMaterial({
344
344
  void main() {
345
345
  vUv = uv;
346
346
  gl_Position = vec4(position, 1.0);
347
- }`,
347
+ }`,
348
348
  fragmentShader: `
349
349
  #ifdef GL_ES
350
350
  precision highp float;
@@ -380,22 +380,22 @@ const strokeShader = new RawShaderMaterial({
380
380
  } else {
381
381
  gl_FragColor = stroke();
382
382
  }
383
- }`,
384
- blending: NoBlending,
385
- depthTest: false,
386
- depthWrite: false,
387
- transparent: true
388
- });
389
- // 深度 min-blur(最近深度,忽略背景 1.0):随描边一起把深度图向外扩,
390
- // 外扩区 selD = 物体最近深度(<1.0) 而非清屏 1.0,depthTest 在外扩区才能正确判遮挡(不漏光),
391
- // 同时本体区仍靠 depthTestShader 的 EPSILON 容差防自遮挡闪烁(无缝)。separable(direction 控制 H/V)。
392
- const depthMinBlurShader = new ShaderMaterial({
393
- uniforms: {
394
- tDepth: { value: null },
395
- resolution: { value: new Vector2(1 / 512, 1 / 512) },
396
- radius: { value: 1.0 },
397
- direction: { value: new Vector2(1, 0) },
398
- },
383
+ }`,
384
+ blending: NoBlending,
385
+ depthTest: false,
386
+ depthWrite: false,
387
+ transparent: true
388
+ });
389
+ // 深度 min-blur(最近深度,忽略背景 1.0):随描边一起把深度图向外扩,
390
+ // 外扩区 selD = 物体最近深度(<1.0) 而非清屏 1.0,depthTest 在外扩区才能正确判遮挡(不漏光),
391
+ // 同时本体区仍靠 depthTestShader 的 EPSILON 容差防自遮挡闪烁(无缝)。separable(direction 控制 H/V)。
392
+ const depthMinBlurShader = new ShaderMaterial({
393
+ uniforms: {
394
+ tDepth: { value: null },
395
+ resolution: { value: new Vector2(1 / 512, 1 / 512) },
396
+ radius: { value: 1.0 },
397
+ direction: { value: new Vector2(1, 0) },
398
+ },
399
399
  vertexShader: `
400
400
  ${ShaderChunk.common}
401
401
  ${ShaderChunk.logdepthbuf_pars_vertex}
@@ -405,7 +405,7 @@ const depthMinBlurShader = new ShaderMaterial({
405
405
  gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
406
406
  ${ShaderChunk.logdepthbuf_vertex}
407
407
  }
408
- `,
408
+ `,
409
409
  fragmentShader: `
410
410
  ${ShaderChunk.logdepthbuf_pars_fragment}
411
411
  uniform sampler2D tDepth;
@@ -426,17 +426,17 @@ const depthMinBlurShader = new ShaderMaterial({
426
426
  gl_FragColor = vec4(minD, 0.0, 0.0, 1.0);
427
427
  ${ShaderChunk.logdepthbuf_fragment}
428
428
  }
429
- `,
430
- blending: NoBlending,
431
- depthTest: false,
432
- depthWrite: false,
433
- transparent: true,
434
- });
435
- const filterSelectShader = new RawShaderMaterial({
436
- uniforms: {
437
- selectTexture: { value: null },
438
- blurTexture: { value: null }
439
- },
429
+ `,
430
+ blending: NoBlending,
431
+ depthTest: false,
432
+ depthWrite: false,
433
+ transparent: true,
434
+ });
435
+ const filterSelectShader = new RawShaderMaterial({
436
+ uniforms: {
437
+ selectTexture: { value: null },
438
+ blurTexture: { value: null }
439
+ },
440
440
  vertexShader: `
441
441
  attribute vec3 position;
442
442
  attribute vec2 uv;
@@ -445,7 +445,7 @@ const filterSelectShader = new RawShaderMaterial({
445
445
  vUv = uv;
446
446
  gl_Position = vec4(position, 1.0);
447
447
  }
448
- `,
448
+ `,
449
449
  fragmentShader: `
450
450
  #ifdef GL_ES
451
451
  precision highp float;
@@ -458,16 +458,16 @@ const filterSelectShader = new RawShaderMaterial({
458
458
  gl_FragColor = texture2D(blurTexture, vUv);
459
459
  gl_FragColor.a -= (texture2D(selectTexture, vUv).a);
460
460
  }
461
- `,
462
- blending: NoBlending,
463
- depthTest: false,
464
- depthWrite: false,
465
- transparent: true
466
- });
467
- const copyShader = new ShaderMaterial({
468
- uniforms: {
469
- map: { value: null },
470
- },
461
+ `,
462
+ blending: NoBlending,
463
+ depthTest: false,
464
+ depthWrite: false,
465
+ transparent: true
466
+ });
467
+ const copyShader = new ShaderMaterial({
468
+ uniforms: {
469
+ map: { value: null },
470
+ },
471
471
  vertexShader: `
472
472
  ${ShaderChunk.common}
473
473
  ${ShaderChunk.logdepthbuf_pars_vertex}
@@ -477,7 +477,7 @@ const copyShader = new ShaderMaterial({
477
477
  gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
478
478
  ${ShaderChunk.logdepthbuf_vertex}
479
479
  }
480
- `,
480
+ `,
481
481
  fragmentShader: `
482
482
  ${ShaderChunk.logdepthbuf_pars_fragment}
483
483
  uniform sampler2D map;
@@ -486,116 +486,116 @@ const copyShader = new ShaderMaterial({
486
486
  gl_FragColor = texture2D(map, vUv);
487
487
  ${ShaderChunk.logdepthbuf_fragment}
488
488
  }
489
- `,
490
- depthTest: true,
491
- depthWrite: true,
492
- transparent: true
493
- });
494
- const scene = new Scene();
495
- export default function stroke_pass(renderer, camera, object3d, baseDepthTexture, devicePixelRatio) {
496
- const { stroke_enable = false, stroke_color = "#04fa12", stroke_width = 1 } = object3d.userData;
497
- if (!stroke_enable || stroke_width === 0) {
498
- return;
499
- }
500
- const originRenderTarget = renderer.getRenderTarget();
501
- // 灰度图渲染目标跟随主画面尺寸(= width × effectiveRatio),与 baseRenderTarget 完全一致,
502
- // 消除灰度图与主画面尺寸不一致导致的放大重采样摩尔纹
503
- renderer.getSize(size);
504
- size.multiplyScalar(devicePixelRatio);
505
- selectTextureTarget.setSize(size.x, size.y);
506
- selectDepthTextureTarget.setSize(size.x, size.y);
507
- // 缺陷修复:three r167 的 WebGLRenderTarget.setSize 不会同步 depthTexture,
508
- // 需手动把 selectDepthTexture 尺寸与全屏 baseDepth 对齐,否则深度比例错位导致描边被错误 discard
509
- selectDepthTexture.image.width = size.x;
510
- selectDepthTexture.image.height = size.y;
511
- selectDepthTexture.needsUpdate = true;
512
- selectDepthTestTextureTarget.setSize(size.x, size.y);
513
- blur1TextureTarget.setSize(size.x, size.y);
514
- blur2TextureTarget.setSize(size.x, size.y);
515
- selectDepthBlurTmpTextureTarget.setSize(size.x, size.y);
516
- selectDepthBlurTextureTarget.setSize(size.x, size.y);
517
- blurDepthTestTextureTarget.setSize(size.x, size.y);
518
- // 1. 渲染物体本体 mask(灰度)
519
- renderer.setRenderTarget(selectTextureTarget);
520
- scene.children = [object3d];
521
- renderer.clear();
522
- renderer.render(scene, camera);
523
- // 2. 渲染物体本体深度(无 MSAA,供 depthTest 判定遮挡)
524
- renderer.setRenderTarget(selectDepthTextureTarget);
525
- scene.children = [object3d];
526
- renderer.clear();
527
- renderer.render(scene, camera);
528
- // 调试:把本次渲染的选区深度记到全局调试状态,供面板「辉光深度比对」读取
529
- debugDepthState.lastSelectDepth = selectDepthTexture;
530
- // 3. 深度测试(用本体 mask):被真实更近物体挡住的「本体描边」部分 discard。
531
- // 背景像素 baseDepth≈1.0(最远)永远不小于物体深度 → 不丢弃,浮空物体描边正常显示。
532
- // 选中对象自身像素 baseD≈selD → 不丢弃,本体描边保留。
533
- renderer.setRenderTarget(selectDepthTestTextureTarget);
534
- renderer.clear();
535
- depthTestShader.uniforms.map.value = selectTextureTarget.texture;
536
- depthTestShader.uniforms.baseDepth.value = baseDepthTexture;
537
- depthTestShader.uniforms.selectDepth.value = selectDepthTexture;
538
- depthTestShader.uniforms.cameraFar.value = camera.far;
539
- depthTestShader.uniforms.uDebugVis.value = (window.__STROKE_DEPTH_VIS) ? 1.0 : 0.0;
540
- fsQuad.render(renderer, depthTestShader);
541
- // 4. 从「深度测试后的本体描边」开始外扩(外扩环自动继承本体遮挡判定 → 不漏光),
542
- // 描边粗细由 stroke_width 控制的迭代次数决定。
543
- strokeShader.uniforms.resolution.value.set(1 / size.x, 1 / size.y);
544
- FXAAShaderMaterial.uniforms.resolution.value.set(1 / size.x, 1 / size.y);
545
- strokeShader.uniforms.color.value.set(stroke_color);
546
- strokeShader.uniforms.width.value = 1;
547
- renderer.setRenderTarget(blur1TextureTarget);
548
- strokeShader.uniforms.tDiffuse.value = selectDepthTestTextureTarget.texture;
549
- fsQuad.render(renderer, strokeShader);
550
- renderer.setRenderTarget(blur2TextureTarget);
551
- strokeShader.uniforms.tDiffuse.value = blur1TextureTarget.texture;
552
- fsQuad.render(renderer, strokeShader);
553
- // 迭代外扩(stroke_width 控制粗细)
554
- for (let i = 0; i < stroke_width - 2; i++) {
555
- renderer.setRenderTarget(blur1TextureTarget);
556
- strokeShader.uniforms.tDiffuse.value = blur2TextureTarget.texture;
557
- fsQuad.render(renderer, strokeShader);
558
- renderer.setRenderTarget(blur2TextureTarget);
559
- strokeShader.uniforms.tDiffuse.value = blur1TextureTarget.texture;
560
- fsQuad.render(renderer, strokeShader);
561
- }
562
- // 5. 最后抗锯齿
563
- renderer.setRenderTarget(blur1TextureTarget);
564
- FXAAShaderMaterial.uniforms.tDiffuse.value = blur2TextureTarget.texture;
565
- fsQuad.render(renderer, FXAAShaderMaterial);
566
- // 5.5 ⭐ 外扩环深度测试(补齐此前只定义未调用的死代码):
567
- // 本体深度随描边一起外扩(separable H/V,外扩区取邻域最近深度),
568
- // 再用它对外扩后的描边做一次 depthTest。
569
- // 缺了这一步,外扩环(描边的视觉主体)永远不参与遮挡判定 →
570
- // 物体被挡住时描边依旧从遮挡物前方漏出来("深度测试看起来失效"的真根因之一)。
571
- depthMinBlurShader.uniforms.resolution.value.set(1 / size.x, 1 / size.y);
572
- depthMinBlurShader.uniforms.radius.value = Math.max(1, stroke_width);
573
- // H:直接采 DepthTexture(selectDepthTexture),其 .r 即对数深度
574
- depthMinBlurShader.uniforms.direction.value.set(1, 0);
575
- depthMinBlurShader.uniforms.tDepth.value = selectDepthTexture;
576
- renderer.setRenderTarget(selectDepthBlurTmpTextureTarget);
577
- fsQuad.render(renderer, depthMinBlurShader);
578
- // V
579
- depthMinBlurShader.uniforms.direction.value.set(0, 1);
580
- depthMinBlurShader.uniforms.tDepth.value = selectDepthBlurTmpTextureTarget.texture;
581
- renderer.setRenderTarget(selectDepthBlurTextureTarget);
582
- fsQuad.render(renderer, depthMinBlurShader);
583
- // 5.6 对外扩后的描边判遮挡:被更近几何挡住的外扩环像素 discard。
584
- // ⚠️ 输出到独立 target,绝不回写 blur1(历史回归 bug:blur1 被 depthTest 结果覆盖
585
- // 会导致步骤 6 相减归零、描边全不显示)。
586
- renderer.setRenderTarget(blurDepthTestTextureTarget);
587
- renderer.clear();
588
- depthTestShader.uniforms.map.value = blur1TextureTarget.texture;
589
- depthTestShader.uniforms.baseDepth.value = baseDepthTexture;
590
- depthTestShader.uniforms.selectDepth.value = selectDepthBlurTextureTarget.texture;
591
- depthTestShader.uniforms.cameraFar.value = camera.far;
592
- depthTestShader.uniforms.uDebugVis.value = 0.0;
593
- fsQuad.render(renderer, depthTestShader);
594
- // 6. 合成:最终外扩描边(blurDepthTest,已判遮挡) 减去 深度测试后的本体描边
595
- // = 仅保留描边外扩环;本体被减掉。filterSelectShader 用 NormalBlending 叠到场景上。
596
- renderer.setRenderTarget(originRenderTarget);
597
- filterSelectShader.uniforms.selectTexture.value = selectDepthTestTextureTarget.texture;
598
- filterSelectShader.uniforms.blurTexture.value = blurDepthTestTextureTarget.texture;
599
- filterSelectShader.blending = NormalBlending;
600
- fsQuad.render(renderer, filterSelectShader);
601
- }
489
+ `,
490
+ depthTest: true,
491
+ depthWrite: true,
492
+ transparent: true
493
+ });
494
+ const scene = new Scene();
495
+ export default function stroke_pass(renderer, camera, object3d, baseDepthTexture, devicePixelRatio) {
496
+ const { stroke_enable = false, stroke_color = "#04fa12", stroke_width = 1 } = object3d.userData;
497
+ if (!stroke_enable || stroke_width === 0) {
498
+ return;
499
+ }
500
+ const originRenderTarget = renderer.getRenderTarget();
501
+ // 灰度图渲染目标跟随主画面尺寸(= width × effectiveRatio),与 baseRenderTarget 完全一致,
502
+ // 消除灰度图与主画面尺寸不一致导致的放大重采样摩尔纹
503
+ renderer.getSize(size);
504
+ size.multiplyScalar(devicePixelRatio);
505
+ selectTextureTarget.setSize(size.x, size.y);
506
+ selectDepthTextureTarget.setSize(size.x, size.y);
507
+ // 缺陷修复:three r167 的 WebGLRenderTarget.setSize 不会同步 depthTexture,
508
+ // 需手动把 selectDepthTexture 尺寸与全屏 baseDepth 对齐,否则深度比例错位导致描边被错误 discard
509
+ selectDepthTexture.image.width = size.x;
510
+ selectDepthTexture.image.height = size.y;
511
+ selectDepthTexture.needsUpdate = true;
512
+ selectDepthTestTextureTarget.setSize(size.x, size.y);
513
+ blur1TextureTarget.setSize(size.x, size.y);
514
+ blur2TextureTarget.setSize(size.x, size.y);
515
+ selectDepthBlurTmpTextureTarget.setSize(size.x, size.y);
516
+ selectDepthBlurTextureTarget.setSize(size.x, size.y);
517
+ blurDepthTestTextureTarget.setSize(size.x, size.y);
518
+ // 1. 渲染物体本体 mask(灰度)
519
+ renderer.setRenderTarget(selectTextureTarget);
520
+ scene.children = [object3d];
521
+ renderer.clear();
522
+ renderer.render(scene, camera);
523
+ // 2. 渲染物体本体深度(无 MSAA,供 depthTest 判定遮挡)
524
+ renderer.setRenderTarget(selectDepthTextureTarget);
525
+ scene.children = [object3d];
526
+ renderer.clear();
527
+ renderer.render(scene, camera);
528
+ // 调试:把本次渲染的选区深度记到全局调试状态,供面板「辉光深度比对」读取
529
+ debugDepthState.lastSelectDepth = selectDepthTexture;
530
+ // 3. 深度测试(用本体 mask):被真实更近物体挡住的「本体描边」部分 discard。
531
+ // 背景像素 baseDepth≈1.0(最远)永远不小于物体深度 → 不丢弃,浮空物体描边正常显示。
532
+ // 选中对象自身像素 baseD≈selD → 不丢弃,本体描边保留。
533
+ renderer.setRenderTarget(selectDepthTestTextureTarget);
534
+ renderer.clear();
535
+ depthTestShader.uniforms.map.value = selectTextureTarget.texture;
536
+ depthTestShader.uniforms.baseDepth.value = baseDepthTexture;
537
+ depthTestShader.uniforms.selectDepth.value = selectDepthTexture;
538
+ depthTestShader.uniforms.cameraFar.value = camera.far;
539
+ depthTestShader.uniforms.uDebugVis.value = (window.__STROKE_DEPTH_VIS) ? 1.0 : 0.0;
540
+ fsQuad.render(renderer, depthTestShader);
541
+ // 4. 从「深度测试后的本体描边」开始外扩(外扩环自动继承本体遮挡判定 → 不漏光),
542
+ // 描边粗细由 stroke_width 控制的迭代次数决定。
543
+ strokeShader.uniforms.resolution.value.set(1 / size.x, 1 / size.y);
544
+ FXAAShaderMaterial.uniforms.resolution.value.set(1 / size.x, 1 / size.y);
545
+ strokeShader.uniforms.color.value.set(stroke_color);
546
+ strokeShader.uniforms.width.value = 1;
547
+ renderer.setRenderTarget(blur1TextureTarget);
548
+ strokeShader.uniforms.tDiffuse.value = selectDepthTestTextureTarget.texture;
549
+ fsQuad.render(renderer, strokeShader);
550
+ renderer.setRenderTarget(blur2TextureTarget);
551
+ strokeShader.uniforms.tDiffuse.value = blur1TextureTarget.texture;
552
+ fsQuad.render(renderer, strokeShader);
553
+ // 迭代外扩(stroke_width 控制粗细)
554
+ for (let i = 0; i < stroke_width - 2; i++) {
555
+ renderer.setRenderTarget(blur1TextureTarget);
556
+ strokeShader.uniforms.tDiffuse.value = blur2TextureTarget.texture;
557
+ fsQuad.render(renderer, strokeShader);
558
+ renderer.setRenderTarget(blur2TextureTarget);
559
+ strokeShader.uniforms.tDiffuse.value = blur1TextureTarget.texture;
560
+ fsQuad.render(renderer, strokeShader);
561
+ }
562
+ // 5. 最后抗锯齿
563
+ renderer.setRenderTarget(blur1TextureTarget);
564
+ FXAAShaderMaterial.uniforms.tDiffuse.value = blur2TextureTarget.texture;
565
+ fsQuad.render(renderer, FXAAShaderMaterial);
566
+ // 5.5 ⭐ 外扩环深度测试(补齐此前只定义未调用的死代码):
567
+ // 本体深度随描边一起外扩(separable H/V,外扩区取邻域最近深度),
568
+ // 再用它对外扩后的描边做一次 depthTest。
569
+ // 缺了这一步,外扩环(描边的视觉主体)永远不参与遮挡判定 →
570
+ // 物体被挡住时描边依旧从遮挡物前方漏出来("深度测试看起来失效"的真根因之一)。
571
+ depthMinBlurShader.uniforms.resolution.value.set(1 / size.x, 1 / size.y);
572
+ depthMinBlurShader.uniforms.radius.value = Math.max(1, stroke_width);
573
+ // H:直接采 DepthTexture(selectDepthTexture),其 .r 即对数深度
574
+ depthMinBlurShader.uniforms.direction.value.set(1, 0);
575
+ depthMinBlurShader.uniforms.tDepth.value = selectDepthTexture;
576
+ renderer.setRenderTarget(selectDepthBlurTmpTextureTarget);
577
+ fsQuad.render(renderer, depthMinBlurShader);
578
+ // V
579
+ depthMinBlurShader.uniforms.direction.value.set(0, 1);
580
+ depthMinBlurShader.uniforms.tDepth.value = selectDepthBlurTmpTextureTarget.texture;
581
+ renderer.setRenderTarget(selectDepthBlurTextureTarget);
582
+ fsQuad.render(renderer, depthMinBlurShader);
583
+ // 5.6 对外扩后的描边判遮挡:被更近几何挡住的外扩环像素 discard。
584
+ // ⚠️ 输出到独立 target,绝不回写 blur1(历史回归 bug:blur1 被 depthTest 结果覆盖
585
+ // 会导致步骤 6 相减归零、描边全不显示)。
586
+ renderer.setRenderTarget(blurDepthTestTextureTarget);
587
+ renderer.clear();
588
+ depthTestShader.uniforms.map.value = blur1TextureTarget.texture;
589
+ depthTestShader.uniforms.baseDepth.value = baseDepthTexture;
590
+ depthTestShader.uniforms.selectDepth.value = selectDepthBlurTextureTarget.texture;
591
+ depthTestShader.uniforms.cameraFar.value = camera.far;
592
+ depthTestShader.uniforms.uDebugVis.value = 0.0;
593
+ fsQuad.render(renderer, depthTestShader);
594
+ // 6. 合成:最终外扩描边(blurDepthTest,已判遮挡) 减去 深度测试后的本体描边
595
+ // = 仅保留描边外扩环;本体被减掉。filterSelectShader 用 NormalBlending 叠到场景上。
596
+ renderer.setRenderTarget(originRenderTarget);
597
+ filterSelectShader.uniforms.selectTexture.value = selectDepthTestTextureTarget.texture;
598
+ filterSelectShader.uniforms.blurTexture.value = blurDepthTestTextureTarget.texture;
599
+ filterSelectShader.blending = NormalBlending;
600
+ fsQuad.render(renderer, filterSelectShader);
601
+ }
@@ -1,3 +1,3 @@
1
- import { ShaderMaterial } from "three";
2
- declare const FXAAShaderMaterial: ShaderMaterial;
3
- export default FXAAShaderMaterial;
1
+ import { ShaderMaterial } from "three";
2
+ declare const FXAAShaderMaterial: ShaderMaterial;
3
+ export default FXAAShaderMaterial;