@zephyr3d/scene 0.9.27 → 0.10.0

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 (502) hide show
  1. package/README.md +60 -27
  2. package/dist/animation/animation_bank.js +634 -0
  3. package/dist/animation/animation_bank.js.map +1 -0
  4. package/dist/animation/animation_bank_gpu.js +256 -0
  5. package/dist/animation/animation_bank_gpu.js.map +1 -0
  6. package/dist/animation/animationset.js +54 -0
  7. package/dist/animation/animationset.js.map +1 -1
  8. package/dist/animation/cloth/gpu_cloth_component.js +406 -0
  9. package/dist/animation/cloth/gpu_cloth_component.js.map +1 -0
  10. package/dist/animation/cloth/gpu_cloth_system.js +332 -202
  11. package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
  12. package/dist/animation/gpu_animation_driver.js +289 -0
  13. package/dist/animation/gpu_animation_driver.js.map +1 -0
  14. package/dist/animation/joint_dynamics/collision.js +112 -1
  15. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  16. package/dist/animation/joint_dynamics/controller.js +6 -0
  17. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  18. package/dist/animation/joint_dynamics/joint_dynamics_system.js +11 -0
  19. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  20. package/dist/animation/joint_dynamics/solver.js +50 -12
  21. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  22. package/dist/animation/joint_dynamics/types.js.map +1 -1
  23. package/dist/animation/skeleton.js +279 -55
  24. package/dist/animation/skeleton.js.map +1 -1
  25. package/dist/animation/skin_palette_atlas.js +252 -0
  26. package/dist/animation/skin_palette_atlas.js.map +1 -0
  27. package/dist/animation/spring/multi_chain_spring_system.js +298 -38
  28. package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
  29. package/dist/animation/spring/spring_chain.js +2 -0
  30. package/dist/animation/spring/spring_chain.js.map +1 -1
  31. package/dist/animation/spring/spring_collider.js +159 -21
  32. package/dist/animation/spring/spring_collider.js.map +1 -1
  33. package/dist/animation/spring/spring_particle.js +1 -0
  34. package/dist/animation/spring/spring_particle.js.map +1 -1
  35. package/dist/animation/spring/spring_solver.js +173 -0
  36. package/dist/animation/spring/spring_solver.js.map +1 -0
  37. package/dist/animation/spring/spring_system.js +249 -24
  38. package/dist/animation/spring/spring_system.js.map +1 -1
  39. package/dist/animation/spring_modifier.js +32 -1
  40. package/dist/animation/spring_modifier.js.map +1 -1
  41. package/dist/app/app.js +26 -0
  42. package/dist/app/app.js.map +1 -1
  43. package/dist/app/engine.js +86 -15
  44. package/dist/app/engine.js.map +1 -1
  45. package/dist/app/gamepad.js +191 -0
  46. package/dist/app/gamepad.js.map +1 -0
  47. package/dist/app/inputactions.js +271 -0
  48. package/dist/app/inputactions.js.map +1 -0
  49. package/dist/app/inputmgr.js +331 -22
  50. package/dist/app/inputmgr.js.map +1 -1
  51. package/dist/app/loading.js +138 -0
  52. package/dist/app/loading.js.map +1 -0
  53. package/dist/app/pipelinecache.js +209 -0
  54. package/dist/app/pipelinecache.js.map +1 -0
  55. package/dist/app/runtimescript.js +25 -0
  56. package/dist/app/runtimescript.js.map +1 -1
  57. package/dist/app/scriptingsystem.js +54 -0
  58. package/dist/app/scriptingsystem.js.map +1 -1
  59. package/dist/app/scriptregistry.js +7 -2
  60. package/dist/app/scriptregistry.js.map +1 -1
  61. package/dist/asset/asset_manifest.js +59 -0
  62. package/dist/asset/asset_manifest.js.map +1 -0
  63. package/dist/asset/asset_preload.js +258 -0
  64. package/dist/asset/asset_preload.js.map +1 -0
  65. package/dist/asset/assetmanager.js +117 -65
  66. package/dist/asset/assetmanager.js.map +1 -1
  67. package/dist/asset/loaders/ktx2/basis/LICENSE +201 -0
  68. package/dist/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  69. package/dist/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  70. package/dist/asset/loaders/ktx2/basis_location.js +17 -0
  71. package/dist/asset/loaders/ktx2/basis_location.js.map +1 -0
  72. package/dist/asset/loaders/ktx2/ktx2_loader.js +88 -0
  73. package/dist/asset/loaders/ktx2/ktx2_loader.js.map +1 -0
  74. package/dist/asset/loaders/ktx2/ktx2_targets.js +118 -0
  75. package/dist/asset/loaders/ktx2/ktx2_targets.js.map +1 -0
  76. package/dist/asset/loaders/ktx2/transcoder_pool.js +259 -0
  77. package/dist/asset/loaders/ktx2/transcoder_pool.js.map +1 -0
  78. package/dist/asset/mesh_lod_builder.js +104 -0
  79. package/dist/asset/mesh_lod_builder.js.map +1 -0
  80. package/dist/asset/mesh_settings.js +111 -0
  81. package/dist/asset/mesh_settings.js.map +1 -0
  82. package/dist/asset/meshopt_decoder.js +18 -0
  83. package/dist/asset/meshopt_decoder.js.map +1 -0
  84. package/dist/asset/meshopt_simplifier.js +26 -0
  85. package/dist/asset/meshopt_simplifier.js.map +1 -0
  86. package/dist/asset/model.js +171 -1
  87. package/dist/asset/model.js.map +1 -1
  88. package/dist/asset/texture_settings.js +231 -0
  89. package/dist/asset/texture_settings.js.map +1 -0
  90. package/dist/asset/zmsh_binary.js +131 -0
  91. package/dist/asset/zmsh_binary.js.map +1 -0
  92. package/dist/asset/zsdf_binary.js +111 -0
  93. package/dist/asset/zsdf_binary.js.map +1 -0
  94. package/dist/blitter/bilateralblur.js +1 -2
  95. package/dist/blitter/bilateralblur.js.map +1 -1
  96. package/dist/blitter/gaussianblur.js +1 -6
  97. package/dist/blitter/gaussianblur.js.map +1 -1
  98. package/dist/camera/base.js +31 -10
  99. package/dist/camera/base.js.map +1 -1
  100. package/dist/camera/camera.js +104 -178
  101. package/dist/camera/camera.js.map +1 -1
  102. package/dist/camera/follow.js +342 -0
  103. package/dist/camera/follow.js.map +1 -0
  104. package/dist/camera/fps.js +9 -7
  105. package/dist/camera/fps.js.map +1 -1
  106. package/dist/camera/orbit.js +46 -19
  107. package/dist/camera/orbit.js.map +1 -1
  108. package/dist/index.d.ts +25436 -15990
  109. package/dist/index.js +65 -11
  110. package/dist/index.js.map +1 -1
  111. package/dist/material/blinn.js +3 -0
  112. package/dist/material/blinn.js.map +1 -1
  113. package/dist/material/eye.js +1 -1
  114. package/dist/material/eye.js.map +1 -1
  115. package/dist/material/hair.js +2 -3
  116. package/dist/material/hair.js.map +1 -1
  117. package/dist/material/lambert.js +4 -1
  118. package/dist/material/lambert.js.map +1 -1
  119. package/dist/material/material.js +66 -4
  120. package/dist/material/material.js.map +1 -1
  121. package/dist/material/meshmaterial.js +118 -45
  122. package/dist/material/meshmaterial.js.map +1 -1
  123. package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
  124. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  125. package/dist/material/mixins/lightmodel/lambert.js +1 -1
  126. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  127. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +34 -61
  128. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  129. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -2
  130. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  131. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +2 -1
  132. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  133. package/dist/material/mixins/lit.js +191 -83
  134. package/dist/material/mixins/lit.js.map +1 -1
  135. package/dist/material/mixins/pbr/common.js +31 -206
  136. package/dist/material/mixins/pbr/common.js.map +1 -1
  137. package/dist/material/mtoon.js +1 -1
  138. package/dist/material/mtoon.js.map +1 -1
  139. package/dist/material/pbrmr.js +3 -0
  140. package/dist/material/pbrmr.js.map +1 -1
  141. package/dist/material/pbrsg.js +3 -0
  142. package/dist/material/pbrsg.js.map +1 -1
  143. package/dist/material/sdf_debug.js +78 -0
  144. package/dist/material/sdf_debug.js.map +1 -0
  145. package/dist/material/shader/helper.js +333 -191
  146. package/dist/material/shader/helper.js.map +1 -1
  147. package/dist/material/shader/terrain_blend.js +204 -43
  148. package/dist/material/shader/terrain_blend.js.map +1 -1
  149. package/dist/material/skin.js +331 -297
  150. package/dist/material/skin.js.map +1 -1
  151. package/dist/material/skinprofile.js +1058 -0
  152. package/dist/material/skinprofile.js.map +1 -0
  153. package/dist/material/sss.js +353 -0
  154. package/dist/material/sss.js.map +1 -0
  155. package/dist/material/sss_kernel.js +265 -0
  156. package/dist/material/sss_kernel.js.map +1 -0
  157. package/dist/material/sssprofile.js +879 -0
  158. package/dist/material/sssprofile.js.map +1 -0
  159. package/dist/material/subsurfaceprofile.js +4 -8
  160. package/dist/material/subsurfaceprofile.js.map +1 -1
  161. package/dist/material/terrain-cm.js +464 -188
  162. package/dist/material/terrain-cm.js.map +1 -1
  163. package/dist/material/unlit.js +3 -0
  164. package/dist/material/unlit.js.map +1 -1
  165. package/dist/material/water.js +1261 -1438
  166. package/dist/material/water.js.map +1 -1
  167. package/dist/node_modules/meshoptimizer/LICENSE +21 -0
  168. package/dist/node_modules/meshoptimizer/meshopt_decoder.js +197 -0
  169. package/dist/node_modules/meshoptimizer/meshopt_decoder.js.map +1 -0
  170. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js +677 -0
  171. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js.map +1 -0
  172. package/dist/physics/character.js +226 -0
  173. package/dist/physics/character.js.map +1 -0
  174. package/dist/physics/collider.js +209 -0
  175. package/dist/physics/collider.js.map +1 -0
  176. package/dist/physics/events.js +79 -0
  177. package/dist/physics/events.js.map +1 -0
  178. package/dist/physics/joint.js +272 -0
  179. package/dist/physics/joint.js.map +1 -0
  180. package/dist/physics/node_physics.js +234 -0
  181. package/dist/physics/node_physics.js.map +1 -0
  182. package/dist/physics/part.js +91 -0
  183. package/dist/physics/part.js.map +1 -0
  184. package/dist/physics/rigid_body.js +379 -0
  185. package/dist/physics/rigid_body.js.map +1 -0
  186. package/dist/physics/vehicle.js +335 -0
  187. package/dist/physics/vehicle.js.map +1 -0
  188. package/dist/physics/world.js +25 -0
  189. package/dist/physics/world.js.map +1 -0
  190. package/dist/posteffect/bloom.js +49 -14
  191. package/dist/posteffect/bloom.js.map +1 -1
  192. package/dist/posteffect/motionblur.js +106 -106
  193. package/dist/posteffect/motionblur.js.map +1 -1
  194. package/dist/posteffect/postsss.js +572 -0
  195. package/dist/posteffect/postsss.js.map +1 -0
  196. package/dist/posteffect/sao.js +2 -6
  197. package/dist/posteffect/sao.js.map +1 -1
  198. package/dist/posteffect/skinsss.js +605 -355
  199. package/dist/posteffect/skinsss.js.map +1 -1
  200. package/dist/posteffect/ssgi.js +91 -162
  201. package/dist/posteffect/ssgi.js.map +1 -1
  202. package/dist/posteffect/ssr.js +3 -11
  203. package/dist/posteffect/ssr.js.map +1 -1
  204. package/dist/posteffect/sss.js +4 -13
  205. package/dist/posteffect/sss.js.map +1 -1
  206. package/dist/posteffect/taa.js +1 -0
  207. package/dist/posteffect/taa.js.map +1 -1
  208. package/dist/render/abuffer_oit.js +3 -2
  209. package/dist/render/abuffer_oit.js.map +1 -1
  210. package/dist/render/clipmap.js +179 -64
  211. package/dist/render/clipmap.js.map +1 -1
  212. package/dist/render/cluster_light.js +958 -224
  213. package/dist/render/cluster_light.js.map +1 -1
  214. package/dist/render/cull_visitor.js +25 -5
  215. package/dist/render/cull_visitor.js.map +1 -1
  216. package/dist/render/debug_views.js +37 -0
  217. package/dist/render/debug_views.js.map +1 -0
  218. package/dist/render/depthpass.js +5 -1
  219. package/dist/render/depthpass.js.map +1 -1
  220. package/dist/render/drawable_mixin.js +53 -6
  221. package/dist/render/drawable_mixin.js.map +1 -1
  222. package/dist/render/dualdepthpeeling_oit.js +5 -5
  223. package/dist/render/dualdepthpeeling_oit.js.map +1 -1
  224. package/dist/render/envlight.js +196 -113
  225. package/dist/render/envlight.js.map +1 -1
  226. package/dist/render/fbm_wavegenerator.js +5 -10
  227. package/dist/render/fbm_wavegenerator.js.map +1 -1
  228. package/dist/render/fft_wavegenerator.js +247 -157
  229. package/dist/render/fft_wavegenerator.js.map +1 -1
  230. package/dist/render/gerstner_wavegenerator.js +16 -38
  231. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  232. package/dist/render/gi/probe_volume.js +1334 -0
  233. package/dist/render/gi/probe_volume.js.map +1 -0
  234. package/dist/render/gi/scene_gi.js +282 -0
  235. package/dist/render/gi/scene_gi.js.map +1 -0
  236. package/dist/render/gi/voxel_atlas.js +198 -0
  237. package/dist/render/gi/voxel_atlas.js.map +1 -0
  238. package/dist/render/gi/voxel_lighting.js +652 -0
  239. package/dist/render/gi/voxel_lighting.js.map +1 -0
  240. package/dist/render/gi/voxel_scene.js +642 -0
  241. package/dist/render/gi/voxel_scene.js.map +1 -0
  242. package/dist/render/gi/voxelize_pass.js +223 -0
  243. package/dist/render/gi/voxelize_pass.js.map +1 -0
  244. package/dist/render/globalbindgroup_allocator.js +3 -2
  245. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  246. package/dist/render/gpu_picking.js +9 -36
  247. package/dist/render/gpu_picking.js.map +1 -1
  248. package/dist/render/instance_culling.js +499 -0
  249. package/dist/render/instance_culling.js.map +1 -0
  250. package/dist/render/lightpass.js +19 -8
  251. package/dist/render/lightpass.js.map +1 -1
  252. package/dist/render/lod.js +46 -0
  253. package/dist/render/lod.js.map +1 -0
  254. package/dist/render/primitive.js +301 -9
  255. package/dist/render/primitive.js.map +1 -1
  256. package/dist/render/primitive_readback.js +209 -0
  257. package/dist/render/primitive_readback.js.map +1 -0
  258. package/dist/render/render_queue.js +162 -11
  259. package/dist/render/render_queue.js.map +1 -1
  260. package/dist/render/renderer.js +10 -7
  261. package/dist/render/renderer.js.map +1 -1
  262. package/dist/render/rendergraph/blackboard.js +14 -1
  263. package/dist/render/rendergraph/blackboard.js.map +1 -1
  264. package/dist/render/rendergraph/executor.js +136 -0
  265. package/dist/render/rendergraph/executor.js.map +1 -1
  266. package/dist/render/rendergraph/forward_plus_builder.js +272 -55
  267. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  268. package/dist/render/rendergraph/frame_graph_context.js +41 -0
  269. package/dist/render/rendergraph/frame_graph_context.js.map +1 -0
  270. package/dist/render/rendergraph/scene_render_context.js +31 -2
  271. package/dist/render/rendergraph/scene_render_context.js.map +1 -1
  272. package/dist/render/rendergraph/types.js.map +1 -1
  273. package/dist/render/renderpass.js +28 -5
  274. package/dist/render/renderpass.js.map +1 -1
  275. package/dist/render/sdf/box_allocator.js +98 -0
  276. package/dist/render/sdf/box_allocator.js.map +1 -0
  277. package/dist/render/sdf/global_sdf.js +865 -0
  278. package/dist/render/sdf/global_sdf.js.map +1 -0
  279. package/dist/render/sdf/scene_sdf.js +562 -0
  280. package/dist/render/sdf/scene_sdf.js.map +1 -0
  281. package/dist/render/sdf/sdf_atlas.js +227 -0
  282. package/dist/render/sdf/sdf_atlas.js.map +1 -0
  283. package/dist/render/sdf/sdf_programs.js +42 -0
  284. package/dist/render/sdf/sdf_programs.js.map +1 -0
  285. package/dist/render/sdf/sdf_view.js +199 -0
  286. package/dist/render/sdf/sdf_view.js.map +1 -0
  287. package/dist/render/sdf/waterline.js +610 -0
  288. package/dist/render/sdf/waterline.js.map +1 -0
  289. package/dist/render/shadow_mask_pass.js +142 -25
  290. package/dist/render/shadow_mask_pass.js.map +1 -1
  291. package/dist/render/shore_wave_generator.js +1193 -0
  292. package/dist/render/shore_wave_generator.js.map +1 -0
  293. package/dist/render/sky.js +516 -86
  294. package/dist/render/sky.js.map +1 -1
  295. package/dist/render/transmission_thickness_pass.js +477 -0
  296. package/dist/render/transmission_thickness_pass.js.map +1 -0
  297. package/dist/render/underwater.js +58 -158
  298. package/dist/render/underwater.js.map +1 -1
  299. package/dist/render/virtualtexture/virtual_texture.js +1214 -0
  300. package/dist/render/virtualtexture/virtual_texture.js.map +1 -0
  301. package/dist/render/volumetric_cloud/cloud_common.js +472 -0
  302. package/dist/render/volumetric_cloud/cloud_common.js.map +1 -0
  303. package/dist/render/volumetric_cloud/cloud_noise.js +189 -0
  304. package/dist/render/volumetric_cloud/cloud_noise.js.map +1 -0
  305. package/dist/render/volumetric_cloud/debug_view.js +131 -0
  306. package/dist/render/volumetric_cloud/debug_view.js.map +1 -0
  307. package/dist/render/volumetric_cloud/resources.js +380 -0
  308. package/dist/render/volumetric_cloud/resources.js.map +1 -0
  309. package/dist/render/volumetric_cloud/sky_cache.js +380 -0
  310. package/dist/render/volumetric_cloud/sky_cache.js.map +1 -0
  311. package/dist/render/volumetric_cloud/volumetric_cloud.js +318 -0
  312. package/dist/render/volumetric_cloud/volumetric_cloud.js.map +1 -0
  313. package/dist/render/water_caustics.js +134 -319
  314. package/dist/render/water_caustics.js.map +1 -1
  315. package/dist/render/water_foam.js +627 -0
  316. package/dist/render/water_foam.js.map +1 -0
  317. package/dist/render/water_interaction.js +1795 -0
  318. package/dist/render/water_interaction.js.map +1 -0
  319. package/dist/render/weightedblended_oit.js +3 -3
  320. package/dist/render/weightedblended_oit.js.map +1 -1
  321. package/dist/scene/basesprite.js +9 -4
  322. package/dist/scene/basesprite.js.map +1 -1
  323. package/dist/scene/batchgroup.js +108 -12
  324. package/dist/scene/batchgroup.js.map +1 -1
  325. package/dist/scene/environment.js +28 -7
  326. package/dist/scene/environment.js.map +1 -1
  327. package/dist/scene/foliage.js +1020 -0
  328. package/dist/scene/foliage.js.map +1 -0
  329. package/dist/scene/foliage_buckets.js +147 -0
  330. package/dist/scene/foliage_buckets.js.map +1 -0
  331. package/dist/scene/foliage_mask.js +358 -0
  332. package/dist/scene/foliage_mask.js.map +1 -0
  333. package/dist/scene/hair.js +15 -4
  334. package/dist/scene/hair.js.map +1 -1
  335. package/dist/scene/light.js +179 -13
  336. package/dist/scene/light.js.map +1 -1
  337. package/dist/scene/mesh.js +327 -45
  338. package/dist/scene/mesh.js.map +1 -1
  339. package/dist/scene/meshdrawable.js +6 -0
  340. package/dist/scene/meshdrawable.js.map +1 -1
  341. package/dist/scene/msdftext.js +9 -3
  342. package/dist/scene/msdftext.js.map +1 -1
  343. package/dist/scene/msdftextsprite.js +9 -3
  344. package/dist/scene/msdftextsprite.js.map +1 -1
  345. package/dist/scene/particlesys.js +8 -2
  346. package/dist/scene/particlesys.js.map +1 -1
  347. package/dist/scene/physics_settings.js +157 -0
  348. package/dist/scene/physics_settings.js.map +1 -0
  349. package/dist/scene/scene.js +190 -44
  350. package/dist/scene/scene.js.map +1 -1
  351. package/dist/scene/scene_node.js +147 -6
  352. package/dist/scene/scene_node.js.map +1 -1
  353. package/dist/scene/terrain-cm/bladegrassmaterial.js +735 -0
  354. package/dist/scene/terrain-cm/bladegrassmaterial.js.map +1 -0
  355. package/dist/scene/terrain-cm/grass.js +881 -42
  356. package/dist/scene/terrain-cm/grass.js.map +1 -1
  357. package/dist/scene/terrain-cm/grass_gpu.js +929 -0
  358. package/dist/scene/terrain-cm/grass_gpu.js.map +1 -0
  359. package/dist/scene/terrain-cm/grassmaterial.js +180 -9
  360. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  361. package/dist/scene/terrain-cm/terrain-cm.js +465 -36
  362. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  363. package/dist/scene/terrain-cm/terrain_gi_albedo.js +257 -0
  364. package/dist/scene/terrain-cm/terrain_gi_albedo.js.map +1 -0
  365. package/dist/scene/terrain-cm/terrain_rvt.js +395 -0
  366. package/dist/scene/terrain-cm/terrain_rvt.js.map +1 -0
  367. package/dist/scene/update_queue.js +54 -0
  368. package/dist/scene/update_queue.js.map +1 -0
  369. package/dist/scene/water.js +633 -268
  370. package/dist/scene/water.js.map +1 -1
  371. package/dist/scene/water_surface_sampler.js +324 -0
  372. package/dist/scene/water_surface_sampler.js.map +1 -0
  373. package/dist/scene/wind.js +317 -0
  374. package/dist/scene/wind.js.map +1 -0
  375. package/dist/shaders/atmosphere.js +388 -166
  376. package/dist/shaders/atmosphere.js.map +1 -1
  377. package/dist/shaders/fog.js +100 -32
  378. package/dist/shaders/fog.js.map +1 -1
  379. package/dist/shaders/gi.js +365 -0
  380. package/dist/shaders/gi.js.map +1 -0
  381. package/dist/shaders/ltc_rect.js +202 -0
  382. package/dist/shaders/ltc_rect.js.map +1 -0
  383. package/dist/shaders/misc.js +1 -10
  384. package/dist/shaders/misc.js.map +1 -1
  385. package/dist/shaders/noise.js +5 -1
  386. package/dist/shaders/noise.js.map +1 -1
  387. package/dist/shaders/probes.js +309 -0
  388. package/dist/shaders/probes.js.map +1 -0
  389. package/dist/shaders/sdf.js +537 -0
  390. package/dist/shaders/sdf.js.map +1 -0
  391. package/dist/shaders/shadow.js +104 -70
  392. package/dist/shaders/shadow.js.map +1 -1
  393. package/dist/shaders/skin_brdf.js +243 -0
  394. package/dist/shaders/skin_brdf.js.map +1 -0
  395. package/dist/shaders/ssgi.js +63 -0
  396. package/dist/shaders/ssgi.js.map +1 -0
  397. package/dist/shaders/ssgi_reprojection.js +118 -0
  398. package/dist/shaders/ssgi_reprojection.js.map +1 -0
  399. package/dist/shaders/ssr.js +6 -159
  400. package/dist/shaders/ssr.js.map +1 -1
  401. package/dist/shaders/temporal.js +38 -27
  402. package/dist/shaders/temporal.js.map +1 -1
  403. package/dist/shaders/water.js +32 -82
  404. package/dist/shaders/water.js.map +1 -1
  405. package/dist/shaders/water_medium.js +7 -21
  406. package/dist/shaders/water_medium.js.map +1 -1
  407. package/dist/shadow/dom.js +110 -19
  408. package/dist/shadow/dom.js.map +1 -1
  409. package/dist/shadow/esm.js +3 -3
  410. package/dist/shadow/esm.js.map +1 -1
  411. package/dist/shadow/pcf_opt.js +15 -48
  412. package/dist/shadow/pcf_opt.js.map +1 -1
  413. package/dist/shadow/pcf_pd.js +15 -53
  414. package/dist/shadow/pcf_pd.js.map +1 -1
  415. package/dist/shadow/pcss.js +34 -9
  416. package/dist/shadow/pcss.js.map +1 -1
  417. package/dist/shadow/shadow_impl.js +3 -8
  418. package/dist/shadow/shadow_impl.js.map +1 -1
  419. package/dist/shadow/shadow_region.js +40 -2
  420. package/dist/shadow/shadow_region.js.map +1 -1
  421. package/dist/shadow/shadowmapper.js +93 -53
  422. package/dist/shadow/shadowmapper.js.map +1 -1
  423. package/dist/shadow/ssm.js +18 -72
  424. package/dist/shadow/ssm.js.map +1 -1
  425. package/dist/shadow/vsm.js +3 -3
  426. package/dist/shadow/vsm.js.map +1 -1
  427. package/dist/shapes/shape.js +44 -1
  428. package/dist/shapes/shape.js.map +1 -1
  429. package/dist/utility/buoyancy.js +287 -0
  430. package/dist/utility/buoyancy.js.map +1 -0
  431. package/dist/utility/physical.js +10 -1
  432. package/dist/utility/physical.js.map +1 -1
  433. package/dist/utility/pmrem.js +17 -43
  434. package/dist/utility/pmrem.js.map +1 -1
  435. package/dist/utility/sdf/bake.js +435 -0
  436. package/dist/utility/sdf/bake.js.map +1 -0
  437. package/dist/utility/sdf/bvh.js +576 -0
  438. package/dist/utility/sdf/bvh.js.map +1 -0
  439. package/dist/utility/serialization/manager.js +34 -6
  440. package/dist/utility/serialization/manager.js.map +1 -1
  441. package/dist/utility/serialization/scene/animation.js +46 -5
  442. package/dist/utility/serialization/scene/animation.js.map +1 -1
  443. package/dist/utility/serialization/scene/batch.js +11 -4
  444. package/dist/utility/serialization/scene/batch.js.map +1 -1
  445. package/dist/utility/serialization/scene/camera.js +87 -254
  446. package/dist/utility/serialization/scene/camera.js.map +1 -1
  447. package/dist/utility/serialization/scene/cloth.js +25 -0
  448. package/dist/utility/serialization/scene/cloth.js.map +1 -0
  449. package/dist/utility/serialization/scene/common.js +14 -6
  450. package/dist/utility/serialization/scene/common.js.map +1 -1
  451. package/dist/utility/serialization/scene/foliage.js +821 -0
  452. package/dist/utility/serialization/scene/foliage.js.map +1 -0
  453. package/dist/utility/serialization/scene/hair.js +11 -4
  454. package/dist/utility/serialization/scene/hair.js.map +1 -1
  455. package/dist/utility/serialization/scene/light.js +115 -7
  456. package/dist/utility/serialization/scene/light.js.map +1 -1
  457. package/dist/utility/serialization/scene/material.js +388 -220
  458. package/dist/utility/serialization/scene/material.js.map +1 -1
  459. package/dist/utility/serialization/scene/mesh.js +69 -4
  460. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  461. package/dist/utility/serialization/scene/node.js +140 -5
  462. package/dist/utility/serialization/scene/node.js.map +1 -1
  463. package/dist/utility/serialization/scene/node_physics.js +1318 -0
  464. package/dist/utility/serialization/scene/node_physics.js.map +1 -0
  465. package/dist/utility/serialization/scene/particle.js +11 -4
  466. package/dist/utility/serialization/scene/particle.js.map +1 -1
  467. package/dist/utility/serialization/scene/physics.js +120 -0
  468. package/dist/utility/serialization/scene/physics.js.map +1 -0
  469. package/dist/utility/serialization/scene/primitive.js +124 -10
  470. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  471. package/dist/utility/serialization/scene/scene.js +1687 -51
  472. package/dist/utility/serialization/scene/scene.js.map +1 -1
  473. package/dist/utility/serialization/scene/sprite.js +11 -4
  474. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  475. package/dist/utility/serialization/scene/terrain.js +163 -33
  476. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  477. package/dist/utility/serialization/scene/text.js +11 -4
  478. package/dist/utility/serialization/scene/text.js.map +1 -1
  479. package/dist/utility/serialization/scene/water.js +1543 -264
  480. package/dist/utility/serialization/scene/water.js.map +1 -1
  481. package/dist/utility/serialization/types.js.map +1 -1
  482. package/dist/utility/shprojector.js +10 -22
  483. package/dist/utility/shprojector.js.map +1 -1
  484. package/dist/utility/textures/foam.js +170 -0
  485. package/dist/utility/textures/foam.js.map +1 -0
  486. package/dist/utility/textures/ggxlut.js +17 -43
  487. package/dist/utility/textures/ggxlut.js.map +1 -1
  488. package/dist/utility/textures/ltcdata.js +4 -4
  489. package/dist/utility/textures/ltcdata.js.map +1 -1
  490. package/dist/utility/textures/ltclut.js +16 -6
  491. package/dist/utility/textures/ltclut.js.map +1 -1
  492. package/dist/utility/unsupported.js +24 -0
  493. package/dist/utility/unsupported.js.map +1 -0
  494. package/dist/values.js +13 -1
  495. package/dist/values.js.map +1 -1
  496. package/package.json +25 -12
  497. package/src/asset/loaders/ktx2/basis/LICENSE +201 -0
  498. package/src/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  499. package/src/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  500. package/src/asset/meshoptimizer/LICENSE +21 -0
  501. package/dist/animation/joint_dynamics/convex_collider.js +0 -320
  502. package/dist/animation/joint_dynamics/convex_collider.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"gpu_cloth_system.js","sources":["../../../src/animation/cloth/gpu_cloth_system.ts"],"sourcesContent":["import type {\r\n AbstractDevice,\r\n BindGroup,\r\n GPUDataBuffer,\r\n GPUProgram,\r\n StructuredBuffer\r\n} from '@zephyr3d/device';\r\nimport { PBPrimitiveType } from '@zephyr3d/device';\r\nimport {\r\n Matrix4x4,\r\n base64ToUint8Array,\r\n releaseObject,\r\n retainObject,\r\n uint8ArrayToBase64,\r\n Vector3,\r\n type Nullable\r\n} from '@zephyr3d/base';\r\nimport { getDevice } from '../../app/api';\r\nimport type { Primitive } from '../../render';\r\nimport type { Scene } from '../../scene';\r\nimport type { MeshUpdateCallback } from '../../scene/mesh';\r\nimport { BoundingBox } from '../../utility/bounding_volume';\r\nimport type {\r\n CapsuleCollider,\r\n PlaneCollider,\r\n SphereCollider,\r\n SpringCollider\r\n} from '../spring/spring_collider';\r\nimport { updateColliderFromNode } from '../spring/spring_collider';\r\n\r\n/**\r\n * Options used to construct a GPU cloth simulation system.\r\n *\r\n * @public\r\n */\r\nexport type GPUClothSystemOptions = {\r\n enabled?: boolean;\r\n device?: Nullable<AbstractDevice>;\r\n primitive?: Nullable<Primitive>;\r\n collisionSpaceNode?: any;\r\n positionData?: Float32Array<ArrayBuffer>;\r\n indexData?: Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>;\r\n skinningBlendIndices?: Float32Array<ArrayBuffer>;\r\n skinningBlendWeights?: Float32Array<ArrayBuffer>;\r\n pinnedVertexWeights?: ArrayLike<number>;\r\n pinnedVertexIndices?: number[];\r\n gravity?: Vector3;\r\n damping?: number;\r\n dynamicFriction?: number;\r\n staticFriction?: number;\r\n stiffness?: number;\r\n poseFollow?: number;\r\n substeps?: number;\r\n solverIterations?: number;\r\n maxNeighbors?: number;\r\n workgroupSize?: number;\r\n colliders?: SpringCollider[];\r\n maxTrianglesPerVertex?: number;\r\n rebuildNormals?: boolean;\r\n scene?: Nullable<Scene>;\r\n autoUpdate?: boolean;\r\n};\r\n\r\n/**\r\n * Serialized wrap-binding cache data for GPU cloth attachments.\r\n *\r\n * @public\r\n */\r\nexport type GPUClothWrapBindingData = {\r\n version: 4;\r\n vertexCount: number;\r\n sourceVertexCount: number;\r\n influenceCount: number;\r\n maxOffsetDistance: number;\r\n sourceTriangleIndices: string;\r\n sourceBarycentrics: string;\r\n targetLocalOffsets: string;\r\n};\r\n\r\n/**\r\n * Target object paired with GPU cloth wrap-binding data.\r\n *\r\n * @public\r\n */\r\nexport type GPUClothWrapBindingTarget = {\r\n target: any;\r\n data: GPUClothWrapBindingData;\r\n};\r\n\r\nfunction encodeTypedArrayBase64(view: ArrayBufferView) {\r\n return uint8ArrayToBase64(new Uint8Array(view.buffer, view.byteOffset, view.byteLength));\r\n}\r\n\r\nfunction decodeTypedArrayFromBase64<T extends Uint32Array | Float32Array>(\r\n ctor: {\r\n new (buffer: ArrayBuffer): T;\r\n BYTES_PER_ELEMENT: number;\r\n },\r\n base64: string,\r\n expectedLength: number\r\n) {\r\n const bytes = base64ToUint8Array(base64);\r\n const byteLength = bytes.byteLength;\r\n if (byteLength % ctor.BYTES_PER_ELEMENT !== 0) {\r\n throw new Error('GPU cloth wrap failed: binding cache data is corrupted.');\r\n }\r\n const buffer = bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength);\r\n const result = new ctor(buffer);\r\n if (expectedLength >= 0 && result.length !== expectedLength) {\r\n throw new Error('GPU cloth wrap failed: binding cache size does not match target mesh.');\r\n }\r\n return result;\r\n}\r\n\r\nfunction isWrapBindingDataCompatible(\r\n data: GPUClothWrapBindingData,\r\n sourceRestPositions: Float32Array<ArrayBuffer>,\r\n targetVertexCount: number\r\n) {\r\n return (\r\n data?.version === 4 &&\r\n data.vertexCount === targetVertexCount &&\r\n data.sourceVertexCount === (sourceRestPositions.length / 3) >> 0 &&\r\n data.influenceCount === WRAP_TRIANGLE_VERTEX_COUNT\r\n );\r\n}\r\n\r\nfunction resolveDevice(explicitDevice?: Nullable<AbstractDevice>) {\r\n if (explicitDevice) {\r\n return explicitDevice;\r\n }\r\n try {\r\n return getDevice();\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Returns whether GPU cloth is supported on the given device.\r\n *\r\n * GPU cloth in this engine is WebGPU-only. WebGL backends are explicitly unsupported.\r\n *\r\n * @public\r\n */\r\nexport function isGPUClothSupported(device?: Nullable<AbstractDevice>) {\r\n const resolved = resolveDevice(device);\r\n return resolved?.type === 'webgpu';\r\n}\r\n\r\nconst DEFAULT_DAMPING = 0.02;\r\nconst DEFAULT_DYNAMIC_FRICTION = 0.15;\r\nconst DEFAULT_STATIC_FRICTION = 0.3;\r\nconst DEFAULT_STIFFNESS = 0.3;\r\nconst DEFAULT_POSE_FOLLOW = 0;\r\nconst DEFAULT_SUBSTEPS = 2;\r\nconst DEFAULT_SOLVER_ITERATIONS = 5;\r\nconst DEFAULT_MAX_NEIGHBORS = 8;\r\nconst DEFAULT_WORKGROUP_SIZE = 64;\r\nconst DEFAULT_MAX_TRIANGLES_PER_VERTEX = 16;\r\nconst DEFAULT_REST_POSITION_SMOOTHING_TIME = 1 / 25;\r\nconst DEFAULT_COLLIDER_SMOOTHING_TIME = 1 / 30;\r\nconst FIXED_SIMULATION_TIME_STEP = 1 / 60;\r\nconst MAX_ACCUMULATED_SIMULATION_TIME = 1 / 20;\r\nconst MAX_SIMULATION_STEPS_PER_UPDATE = Math.max(\r\n 1,\r\n Math.ceil(MAX_ACCUMULATED_SIMULATION_TIME / FIXED_SIMULATION_TIME_STEP)\r\n);\r\nconst WRAP_TRIANGLE_VERTEX_COUNT = 3;\r\nconst WRAP_MIN_DISTANCE = 1e-8;\r\n\r\nfunction clamp(value: number, min: number, max: number) {\r\n return Math.min(Math.max(value, min), max);\r\n}\r\n\r\nfunction getInitialColliderBufferFloatCount(\r\n colliders: SpringCollider[] | undefined,\r\n type: SpringCollider['type'],\r\n stride: number\r\n) {\r\n const count = (colliders ?? []).reduce((total, collider) => total + (collider?.type === type ? 1 : 0), 0);\r\n return Math.max(1, count) * stride;\r\n}\r\n\r\nfunction getPrimitiveScalarByteSize(type: PBPrimitiveType) {\r\n switch (type) {\r\n case PBPrimitiveType.I16:\r\n case PBPrimitiveType.I16_NORM:\r\n case PBPrimitiveType.U16:\r\n case PBPrimitiveType.U16_NORM:\r\n case PBPrimitiveType.F16:\r\n return 2;\r\n case PBPrimitiveType.I32:\r\n case PBPrimitiveType.I32_NORM:\r\n case PBPrimitiveType.U32:\r\n case PBPrimitiveType.U32_NORM:\r\n case PBPrimitiveType.F32:\r\n return 4;\r\n default:\r\n return 1;\r\n }\r\n}\r\n\r\nfunction readPrimitiveScalar(\r\n view: DataView,\r\n byteOffset: number,\r\n scalarType: PBPrimitiveType,\r\n normalized: boolean\r\n) {\r\n switch (scalarType) {\r\n case PBPrimitiveType.I8:\r\n case PBPrimitiveType.I8_NORM: {\r\n const value = view.getInt8(byteOffset);\r\n return normalized ? Math.max(-1, value / 127) : value;\r\n }\r\n case PBPrimitiveType.U8:\r\n case PBPrimitiveType.U8_NORM: {\r\n const value = view.getUint8(byteOffset);\r\n return normalized ? value / 255 : value;\r\n }\r\n case PBPrimitiveType.I16:\r\n case PBPrimitiveType.I16_NORM: {\r\n const value = view.getInt16(byteOffset, true);\r\n return normalized ? Math.max(-1, value / 32767) : value;\r\n }\r\n case PBPrimitiveType.U16:\r\n case PBPrimitiveType.U16_NORM: {\r\n const value = view.getUint16(byteOffset, true);\r\n return normalized ? value / 65535 : value;\r\n }\r\n case PBPrimitiveType.I32:\r\n case PBPrimitiveType.I32_NORM: {\r\n const value = view.getInt32(byteOffset, true);\r\n return normalized ? Math.max(-1, value / 2147483647) : value;\r\n }\r\n case PBPrimitiveType.U32:\r\n case PBPrimitiveType.U32_NORM: {\r\n const value = view.getUint32(byteOffset, true);\r\n return normalized ? value / 4294967295 : value;\r\n }\r\n case PBPrimitiveType.F32:\r\n return view.getFloat32(byteOffset, true);\r\n default:\r\n throw new Error(`Unsupported vertex scalar type: ${scalarType}`);\r\n }\r\n}\r\n\r\nfunction distance3(positions: Float32Array<ArrayBuffer>, a: number, b: number) {\r\n const a0 = a * 3;\r\n const b0 = b * 3;\r\n const dx = positions[a0] - positions[b0];\r\n const dy = positions[a0 + 1] - positions[b0 + 1];\r\n const dz = positions[a0 + 2] - positions[b0 + 2];\r\n return Math.sqrt(dx * dx + dy * dy + dz * dz);\r\n}\r\n\r\nfunction dot3(ax: number, ay: number, az: number, bx: number, by: number, bz: number) {\r\n return ax * bx + ay * by + az * bz;\r\n}\r\n\r\nfunction normalize3(\r\n x: number,\r\n y: number,\r\n z: number,\r\n fallback: [number, number, number]\r\n): [number, number, number] {\r\n const length = Math.hypot(x, y, z);\r\n if (length <= WRAP_MIN_DISTANCE) {\r\n return fallback;\r\n }\r\n return [x / length, y / length, z / length];\r\n}\r\n\r\nfunction buildWrapTriangleFrame(\r\n p0x: number,\r\n p0y: number,\r\n p0z: number,\r\n p1x: number,\r\n p1y: number,\r\n p1z: number,\r\n p2x: number,\r\n p2y: number,\r\n p2z: number,\r\n out: Float32Array<ArrayBuffer> | number[]\r\n) {\r\n const edge01x = p1x - p0x;\r\n const edge01y = p1y - p0y;\r\n const edge01z = p1z - p0z;\r\n const edge02x = p2x - p0x;\r\n const edge02y = p2y - p0y;\r\n const edge02z = p2z - p0z;\r\n\r\n let tangent = normalize3(edge01x, edge01y, edge01z, [0, 0, 0]);\r\n if (tangent[0] === 0 && tangent[1] === 0 && tangent[2] === 0) {\r\n tangent = normalize3(edge02x, edge02y, edge02z, [1, 0, 0]);\r\n }\r\n\r\n let normal = normalize3(\r\n edge01y * edge02z - edge01z * edge02y,\r\n edge01z * edge02x - edge01x * edge02z,\r\n edge01x * edge02y - edge01y * edge02x,\r\n [0, 0, 0]\r\n );\r\n if (normal[0] === 0 && normal[1] === 0 && normal[2] === 0) {\r\n const fallbackAxis = Math.abs(tangent[1]) < 0.999 ? [0, 1, 0] : [1, 0, 0];\r\n normal = normalize3(\r\n tangent[1] * fallbackAxis[2] - tangent[2] * fallbackAxis[1],\r\n tangent[2] * fallbackAxis[0] - tangent[0] * fallbackAxis[2],\r\n tangent[0] * fallbackAxis[1] - tangent[1] * fallbackAxis[0],\r\n [0, 0, 1]\r\n );\r\n }\r\n\r\n let bitangent = normalize3(\r\n normal[1] * tangent[2] - normal[2] * tangent[1],\r\n normal[2] * tangent[0] - normal[0] * tangent[2],\r\n normal[0] * tangent[1] - normal[1] * tangent[0],\r\n [0, 0, 0]\r\n );\r\n if (bitangent[0] === 0 && bitangent[1] === 0 && bitangent[2] === 0) {\r\n bitangent = Math.abs(tangent[1]) < 0.999 ? [0, 1, 0] : [1, 0, 0];\r\n }\r\n\r\n normal = normalize3(\r\n tangent[1] * bitangent[2] - tangent[2] * bitangent[1],\r\n tangent[2] * bitangent[0] - tangent[0] * bitangent[2],\r\n tangent[0] * bitangent[1] - tangent[1] * bitangent[0],\r\n [0, 0, 1]\r\n );\r\n\r\n out[0] = tangent[0];\r\n out[1] = tangent[1];\r\n out[2] = tangent[2];\r\n out[3] = bitangent[0];\r\n out[4] = bitangent[1];\r\n out[5] = bitangent[2];\r\n out[6] = normal[0];\r\n out[7] = normal[1];\r\n out[8] = normal[2];\r\n}\r\n\r\nfunction closestPointOnTriangle(\r\n px: number,\r\n py: number,\r\n pz: number,\r\n ax: number,\r\n ay: number,\r\n az: number,\r\n bx: number,\r\n by: number,\r\n bz: number,\r\n cx: number,\r\n cy: number,\r\n cz: number,\r\n closestOut: Float32Array<ArrayBuffer> | number[],\r\n baryOut: Float32Array<ArrayBuffer> | number[]\r\n) {\r\n const abx = bx - ax;\r\n const aby = by - ay;\r\n const abz = bz - az;\r\n const acx = cx - ax;\r\n const acy = cy - ay;\r\n const acz = cz - az;\r\n const apx = px - ax;\r\n const apy = py - ay;\r\n const apz = pz - az;\r\n const d1 = dot3(abx, aby, abz, apx, apy, apz);\r\n const d2 = dot3(acx, acy, acz, apx, apy, apz);\r\n if (d1 <= 0 && d2 <= 0) {\r\n closestOut[0] = ax;\r\n closestOut[1] = ay;\r\n closestOut[2] = az;\r\n baryOut[0] = 1;\r\n baryOut[1] = 0;\r\n baryOut[2] = 0;\r\n } else {\r\n const bpx = px - bx;\r\n const bpy = py - by;\r\n const bpz = pz - bz;\r\n const d3 = dot3(abx, aby, abz, bpx, bpy, bpz);\r\n const d4 = dot3(acx, acy, acz, bpx, bpy, bpz);\r\n if (d3 >= 0 && d4 <= d3) {\r\n closestOut[0] = bx;\r\n closestOut[1] = by;\r\n closestOut[2] = bz;\r\n baryOut[0] = 0;\r\n baryOut[1] = 1;\r\n baryOut[2] = 0;\r\n } else {\r\n const vc = d1 * d4 - d3 * d2;\r\n if (vc <= 0 && d1 >= 0 && d3 <= 0) {\r\n const v = d1 / Math.max(WRAP_MIN_DISTANCE, d1 - d3);\r\n closestOut[0] = ax + abx * v;\r\n closestOut[1] = ay + aby * v;\r\n closestOut[2] = az + abz * v;\r\n baryOut[0] = 1 - v;\r\n baryOut[1] = v;\r\n baryOut[2] = 0;\r\n } else {\r\n const cpx = px - cx;\r\n const cpy = py - cy;\r\n const cpz = pz - cz;\r\n const d5 = dot3(abx, aby, abz, cpx, cpy, cpz);\r\n const d6 = dot3(acx, acy, acz, cpx, cpy, cpz);\r\n if (d6 >= 0 && d5 <= d6) {\r\n closestOut[0] = cx;\r\n closestOut[1] = cy;\r\n closestOut[2] = cz;\r\n baryOut[0] = 0;\r\n baryOut[1] = 0;\r\n baryOut[2] = 1;\r\n } else {\r\n const vb = d5 * d2 - d1 * d6;\r\n if (vb <= 0 && d2 >= 0 && d6 <= 0) {\r\n const w = d2 / Math.max(WRAP_MIN_DISTANCE, d2 - d6);\r\n closestOut[0] = ax + acx * w;\r\n closestOut[1] = ay + acy * w;\r\n closestOut[2] = az + acz * w;\r\n baryOut[0] = 1 - w;\r\n baryOut[1] = 0;\r\n baryOut[2] = w;\r\n } else {\r\n const va = d3 * d6 - d5 * d4;\r\n if (va <= 0 && d4 - d3 >= 0 && d5 - d6 >= 0) {\r\n const w = (d4 - d3) / Math.max(WRAP_MIN_DISTANCE, d4 - d3 + d5 - d6);\r\n closestOut[0] = bx + (cx - bx) * w;\r\n closestOut[1] = by + (cy - by) * w;\r\n closestOut[2] = bz + (cz - bz) * w;\r\n baryOut[0] = 0;\r\n baryOut[1] = 1 - w;\r\n baryOut[2] = w;\r\n } else {\r\n const denom = 1 / Math.max(WRAP_MIN_DISTANCE, va + vb + vc);\r\n const v = vb * denom;\r\n const w = vc * denom;\r\n const u = 1 - v - w;\r\n closestOut[0] = ax * u + bx * v + cx * w;\r\n closestOut[1] = ay * u + by * v + cy * w;\r\n closestOut[2] = az * u + bz * v + cz * w;\r\n baryOut[0] = u;\r\n baryOut[1] = v;\r\n baryOut[2] = w;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n const dx = px - closestOut[0];\r\n const dy = py - closestOut[1];\r\n const dz = pz - closestOut[2];\r\n return dx * dx + dy * dy + dz * dz;\r\n}\r\n\r\nfunction buildPinWeightArray(\r\n positions: Float32Array<ArrayBuffer>,\r\n explicitWeights?: ArrayLike<number>,\r\n explicitPinned?: number[]\r\n): Float32Array<ArrayBuffer> {\r\n const vertexCount = (positions.length / 3) >> 0;\r\n const result = new Float32Array(vertexCount);\r\n if (explicitWeights && explicitWeights.length > 0) {\r\n const len = Math.min(vertexCount, explicitWeights.length);\r\n for (let i = 0; i < len; i++) {\r\n result[i] = clamp(Number(explicitWeights[i]) || 0, 0, 1);\r\n }\r\n return result;\r\n }\r\n if (explicitPinned && explicitPinned.length > 0) {\r\n for (const i of explicitPinned) {\r\n if (Number.isFinite(i) && i >= 0 && i < vertexCount) {\r\n result[i >> 0] = 1;\r\n }\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nfunction buildNeighborData(\r\n positions: Float32Array<ArrayBuffer>,\r\n indexData: Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>,\r\n maxNeighbors: number\r\n) {\r\n const vertexCount = (positions.length / 3) >> 0;\r\n const neighborMap: Array<Map<number, number>> = Array.from({ length: vertexCount }, () => new Map());\r\n\r\n const addEdge = (a: number, b: number) => {\r\n if (a < 0 || b < 0 || a >= vertexCount || b >= vertexCount || a === b) {\r\n return;\r\n }\r\n const len = distance3(positions, a, b);\r\n const mapA = neighborMap[a];\r\n const mapB = neighborMap[b];\r\n const oldAB = mapA.get(b);\r\n if (oldAB === undefined || len < oldAB) {\r\n mapA.set(b, len);\r\n }\r\n const oldBA = mapB.get(a);\r\n if (oldBA === undefined || len < oldBA) {\r\n mapB.set(a, len);\r\n }\r\n };\r\n\r\n for (let i = 0; i + 2 < indexData.length; i += 3) {\r\n const a = indexData[i];\r\n const b = indexData[i + 1];\r\n const c = indexData[i + 2];\r\n addEdge(a, b);\r\n addEdge(b, c);\r\n addEdge(c, a);\r\n }\r\n\r\n const totalEntries = vertexCount * maxNeighbors;\r\n const neighborIndices = new Int32Array(totalEntries);\r\n const restLengths = new Float32Array(totalEntries);\r\n neighborIndices.fill(-1);\r\n\r\n let hasConstraint = false;\r\n for (let i = 0; i < vertexCount; i++) {\r\n const sorted = [...neighborMap[i].entries()].sort((a, b) => a[1] - b[1]).slice(0, maxNeighbors);\r\n for (let j = 0; j < sorted.length; j++) {\r\n const slot = i * maxNeighbors + j;\r\n neighborIndices[slot] = sorted[j][0];\r\n restLengths[slot] = sorted[j][1];\r\n hasConstraint = true;\r\n }\r\n }\r\n\r\n return {\r\n neighborIndices,\r\n restLengths,\r\n hasConstraint\r\n };\r\n}\r\n\r\nfunction toUInt32Indices(indexData: Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>) {\r\n if (indexData instanceof Uint32Array) {\r\n return indexData;\r\n }\r\n const out = new Uint32Array(indexData.length);\r\n for (let i = 0; i < indexData.length; i++) {\r\n out[i] = indexData[i];\r\n }\r\n return out;\r\n}\r\n\r\nfunction buildVertexTriangleAdjacency(\r\n vertexCount: number,\r\n indexData: Uint32Array<ArrayBuffer>,\r\n maxTrianglesPerVertex: number\r\n) {\r\n const triangleCount = (indexData.length / 3) >> 0;\r\n const trianglesPerVertex: number[][] = Array.from({ length: vertexCount }, () => []);\r\n for (let tri = 0; tri < triangleCount; tri++) {\r\n const base = tri * 3;\r\n const i0 = indexData[base];\r\n const i1 = indexData[base + 1];\r\n const i2 = indexData[base + 2];\r\n if (i0 < vertexCount) {\r\n trianglesPerVertex[i0].push(tri);\r\n }\r\n if (i1 < vertexCount) {\r\n trianglesPerVertex[i1].push(tri);\r\n }\r\n if (i2 < vertexCount) {\r\n trianglesPerVertex[i2].push(tri);\r\n }\r\n }\r\n const adjacency = new Int32Array(vertexCount * maxTrianglesPerVertex);\r\n adjacency.fill(-1);\r\n for (let i = 0; i < vertexCount; i++) {\r\n const tris = trianglesPerVertex[i];\r\n const len = Math.min(maxTrianglesPerVertex, tris.length);\r\n for (let t = 0; t < len; t++) {\r\n adjacency[i * maxTrianglesPerVertex + t] = tris[t];\r\n }\r\n }\r\n return {\r\n triangleCount,\r\n adjacency\r\n };\r\n}\r\n\r\nfunction buildInitialSimulationPositions(options?: GPUClothSystemOptions) {\r\n const sourcePositions = options?.positionData;\r\n if (!sourcePositions) {\r\n return null;\r\n }\r\n const target = options?.collisionSpaceNode;\r\n const blendIndices = options?.skinningBlendIndices;\r\n const blendWeights = options?.skinningBlendWeights;\r\n if (\r\n !target?.invWorldMatrix ||\r\n !blendIndices ||\r\n !blendWeights ||\r\n typeof target?.findSkeletonById !== 'function'\r\n ) {\r\n return new Float32Array(sourcePositions);\r\n }\r\n const skeletonId = String(target.skeletonName ?? '');\r\n const skeleton = skeletonId ? target.findSkeletonById(skeletonId) : null;\r\n if (!skeleton?.skinPositionsToLocal) {\r\n return new Float32Array(sourcePositions);\r\n }\r\n return skeleton.skinPositionsToLocal(sourcePositions, blendIndices, blendWeights, target.invWorldMatrix);\r\n}\r\n\r\nasync function resolveWrapBindPositions(\r\n mesh: any,\r\n basePositions: Float32Array<ArrayBuffer>\r\n): Promise<Float32Array<ArrayBuffer>> {\r\n if (!basePositions || basePositions.length === 0) {\r\n return new Float32Array(0);\r\n }\r\n const primitive = mesh?.primitive;\r\n if (!primitive) {\r\n return new Float32Array(basePositions);\r\n }\r\n const blendData = await readSkinningDataFromPrimitive(primitive);\r\n if (\r\n !mesh?.invWorldMatrix ||\r\n !blendData?.blendIndices ||\r\n !blendData?.blendWeights ||\r\n typeof mesh?.findSkeletonById !== 'function'\r\n ) {\r\n return new Float32Array(basePositions);\r\n }\r\n const skeletonId = String(mesh.skeletonName ?? '');\r\n const skeleton = skeletonId ? mesh.findSkeletonById(skeletonId) : null;\r\n if (!skeleton?.skinPositionsToLocal) {\r\n return new Float32Array(basePositions);\r\n }\r\n return skeleton.skinPositionsToLocal(\r\n basePositions,\r\n blendData.blendIndices,\r\n blendData.blendWeights,\r\n mesh.invWorldMatrix\r\n );\r\n}\r\n\r\nfunction createIntegrateProgram(device: AbstractDevice, workgroupSize: number) {\r\n const program = device.buildComputeProgram({\r\n workgroupSize: [workgroupSize, 1, 1],\r\n compute(pb) {\r\n this.positions = pb.float[0]().storageBuffer(0);\r\n this.prevPositions = pb.float[0]().storageBuffer(0);\r\n this.restPositions = pb.float[0]().storageBufferReadonly(0);\r\n this.prevRestPositions = pb.float[0]().storageBufferReadonly(0);\r\n this.invMass = pb.float[0]().storageBufferReadonly(0);\r\n this.sphereData = pb.float[0]().storageBufferReadonly(0);\r\n this.capsuleData = pb.float[0]().storageBufferReadonly(0);\r\n this.planeData = pb.float[0]().storageBufferReadonly(0);\r\n this.vertexCount = pb.uint().uniform(0);\r\n this.deltaTime = pb.float().uniform(0);\r\n this.damping = pb.float().uniform(0);\r\n this.gravity = pb.vec3().uniform(0);\r\n this.sphereCount = pb.uint().uniform(0);\r\n this.capsuleCount = pb.uint().uniform(0);\r\n this.planeCount = pb.uint().uniform(0);\r\n this.dynamicFriction = pb.float().uniform(0);\r\n this.staticFriction = pb.float().uniform(0);\r\n this.minDistance = pb.float().uniform(0);\r\n pb.main(function () {\r\n this.$l.index = this.$builtins.globalInvocationId.x;\r\n this.$if(pb.lessThan(this.index, this.vertexCount), function () {\r\n this.$l.base = pb.mul(this.index, 3);\r\n this.$l.x = this.positions.at(this.base);\r\n this.$l.y = this.positions.at(pb.add(this.base, 1));\r\n this.$l.z = this.positions.at(pb.add(this.base, 2));\r\n this.$l.px = this.prevPositions.at(this.base);\r\n this.$l.py = this.prevPositions.at(pb.add(this.base, 1));\r\n this.$l.pz = this.prevPositions.at(pb.add(this.base, 2));\r\n this.$l.restX = this.restPositions.at(this.base);\r\n this.$l.restY = this.restPositions.at(pb.add(this.base, 1));\r\n this.$l.restZ = this.restPositions.at(pb.add(this.base, 2));\r\n this.$l.prevRestX = this.prevRestPositions.at(this.base);\r\n this.$l.prevRestY = this.prevRestPositions.at(pb.add(this.base, 1));\r\n this.$l.prevRestZ = this.prevRestPositions.at(pb.add(this.base, 2));\r\n this.$l.freeWeight = this.invMass.at(this.index);\r\n this.$l.pinWeight = pb.sub(1, this.freeWeight);\r\n this.$l.current = pb.vec3(this.x, this.y, this.z);\r\n this.$l.previous = pb.vec3(this.px, this.py, this.pz);\r\n this.$l.rest = pb.vec3(this.restX, this.restY, this.restZ);\r\n this.$l.prevRest = pb.vec3(this.prevRestX, this.prevRestY, this.prevRestZ);\r\n this.$l.restDelta = pb.sub(this.rest, this.prevRest);\r\n this.current = pb.add(this.current, this.restDelta);\r\n this.previous = pb.add(this.previous, this.restDelta);\r\n this.$l.dt2 = pb.mul(this.deltaTime, this.deltaTime);\r\n // Damping is modeled as velocity loss strength: 0 keeps full inertia, 1 removes it entirely.\r\n this.$l.velocity = pb.mul(\r\n pb.sub(this.current, this.previous),\r\n pb.mul(pb.sub(1, this.damping), this.freeWeight)\r\n );\r\n this.$l.next = pb.add(\r\n this.current,\r\n this.velocity,\r\n pb.mul(this.gravity, pb.mul(this.dt2, this.freeWeight))\r\n );\r\n\r\n this.$if(pb.greaterThan(this.freeWeight, this.minDistance), function () {\r\n this.$for(pb.uint('i'), 0, this.sphereCount, function () {\r\n this.$l.sphereBase = pb.mul(this.i, 4);\r\n this.$l.center = pb.vec3(\r\n this.sphereData.at(this.sphereBase),\r\n this.sphereData.at(pb.add(this.sphereBase, 1)),\r\n this.sphereData.at(pb.add(this.sphereBase, 2))\r\n );\r\n this.$l.radius = this.sphereData.at(pb.add(this.sphereBase, 3));\r\n this.$l.deltaCol = pb.sub(this.next, this.center);\r\n this.$l.lenCol = pb.length(this.deltaCol);\r\n this.$if(pb.lessThan(this.lenCol, this.radius), function () {\r\n this.$l.contactNormal = pb.vec3(0, 1, 0);\r\n this.$if(pb.greaterThan(this.lenCol, this.minDistance), function () {\r\n this.contactNormal = pb.div(this.deltaCol, this.lenCol);\r\n this.next = pb.add(this.center, pb.mul(this.contactNormal, this.radius));\r\n }).$else(function () {\r\n this.next = pb.add(this.center, pb.vec3(0, this.radius, 0));\r\n });\r\n this.$l.correctionDelta = pb.sub(this.next, pb.add(this.center, this.deltaCol));\r\n this.$l.correctionLen = pb.length(this.correctionDelta);\r\n this.$l.surfaceDelta = pb.sub(this.next, this.current);\r\n this.$l.normalStep = pb.mul(\r\n this.contactNormal,\r\n pb.dot(this.surfaceDelta, this.contactNormal)\r\n );\r\n this.$l.tangentStep = pb.sub(this.surfaceDelta, this.normalStep);\r\n this.$l.normalTravel = pb.length(this.normalStep);\r\n this.$l.tangentLen = pb.length(this.tangentStep);\r\n this.$if(pb.greaterThan(this.tangentLen, this.minDistance), function () {\r\n this.$l.dynamicBasis = pb.max(\r\n this.correctionLen,\r\n pb.max(this.normalTravel, pb.mul(this.tangentLen, 0.5))\r\n );\r\n this.$l.staticBasis = pb.max(\r\n this.correctionLen,\r\n pb.max(this.normalTravel, this.tangentLen)\r\n );\r\n this.$l.staticLimit = pb.max(\r\n this.minDistance,\r\n pb.mul(this.staticBasis, pb.mul(this.staticFriction, 2))\r\n );\r\n this.$if(pb.lessThanEqual(this.tangentLen, this.staticLimit), function () {\r\n this.next = pb.sub(this.next, this.tangentStep);\r\n }).$else(function () {\r\n this.$l.dynamicRemove = pb.min(\r\n this.tangentLen,\r\n pb.mul(this.dynamicBasis, this.dynamicFriction)\r\n );\r\n this.next = pb.sub(\r\n this.next,\r\n pb.mul(pb.div(this.tangentStep, this.tangentLen), this.dynamicRemove)\r\n );\r\n });\r\n });\r\n });\r\n });\r\n\r\n this.$for(pb.uint('j'), 0, this.capsuleCount, function () {\r\n this.$l.capsuleBase = pb.mul(this.j, 8);\r\n this.$l.cStart = pb.vec3(\r\n this.capsuleData.at(this.capsuleBase),\r\n this.capsuleData.at(pb.add(this.capsuleBase, 1)),\r\n this.capsuleData.at(pb.add(this.capsuleBase, 2))\r\n );\r\n this.$l.cRadius = this.capsuleData.at(pb.add(this.capsuleBase, 3));\r\n this.$l.cEnd = pb.vec3(\r\n this.capsuleData.at(pb.add(this.capsuleBase, 4)),\r\n this.capsuleData.at(pb.add(this.capsuleBase, 5)),\r\n this.capsuleData.at(pb.add(this.capsuleBase, 6))\r\n );\r\n this.$l.ab = pb.sub(this.cEnd, this.cStart);\r\n this.$l.abLen2 = pb.dot(this.ab, this.ab);\r\n this.$l.closest = this.cStart;\r\n this.$if(pb.greaterThan(this.abLen2, this.minDistance), function () {\r\n this.$l.ap = pb.sub(this.next, this.cStart);\r\n this.$l.t = pb.clamp(pb.div(pb.dot(this.ap, this.ab), this.abLen2), 0, 1);\r\n this.closest = pb.add(this.cStart, pb.mul(this.ab, this.t));\r\n });\r\n this.$l.deltaCap = pb.sub(this.next, this.closest);\r\n this.$l.lenCap = pb.length(this.deltaCap);\r\n this.$if(pb.lessThan(this.lenCap, this.cRadius), function () {\r\n this.$l.contactNormal = pb.vec3(0, 1, 0);\r\n this.$if(pb.greaterThan(this.lenCap, this.minDistance), function () {\r\n this.contactNormal = pb.div(this.deltaCap, this.lenCap);\r\n this.next = pb.add(this.closest, pb.mul(this.contactNormal, this.cRadius));\r\n }).$else(function () {\r\n this.next = pb.add(this.closest, pb.vec3(0, this.cRadius, 0));\r\n });\r\n this.$l.correctionDelta = pb.sub(this.next, pb.add(this.closest, this.deltaCap));\r\n this.$l.correctionLen = pb.length(this.correctionDelta);\r\n this.$l.surfaceDelta = pb.sub(this.next, this.current);\r\n this.$l.normalStep = pb.mul(\r\n this.contactNormal,\r\n pb.dot(this.surfaceDelta, this.contactNormal)\r\n );\r\n this.$l.tangentStep = pb.sub(this.surfaceDelta, this.normalStep);\r\n this.$l.normalTravel = pb.length(this.normalStep);\r\n this.$l.tangentLen = pb.length(this.tangentStep);\r\n this.$if(pb.greaterThan(this.tangentLen, this.minDistance), function () {\r\n this.$l.dynamicBasis = pb.max(\r\n this.correctionLen,\r\n pb.max(this.normalTravel, pb.mul(this.tangentLen, 0.5))\r\n );\r\n this.$l.staticBasis = pb.max(\r\n this.correctionLen,\r\n pb.max(this.normalTravel, this.tangentLen)\r\n );\r\n this.$l.staticLimit = pb.max(\r\n this.minDistance,\r\n pb.mul(this.staticBasis, pb.mul(this.staticFriction, 2))\r\n );\r\n this.$if(pb.lessThanEqual(this.tangentLen, this.staticLimit), function () {\r\n this.next = pb.sub(this.next, this.tangentStep);\r\n }).$else(function () {\r\n this.$l.dynamicRemove = pb.min(\r\n this.tangentLen,\r\n pb.mul(this.dynamicBasis, this.dynamicFriction)\r\n );\r\n this.next = pb.sub(\r\n this.next,\r\n pb.mul(pb.div(this.tangentStep, this.tangentLen), this.dynamicRemove)\r\n );\r\n });\r\n });\r\n });\r\n });\r\n\r\n this.$for(pb.uint('k'), 0, this.planeCount, function () {\r\n this.$l.planeBase = pb.mul(this.k, 8);\r\n this.$l.planePoint = pb.vec3(\r\n this.planeData.at(this.planeBase),\r\n this.planeData.at(pb.add(this.planeBase, 1)),\r\n this.planeData.at(pb.add(this.planeBase, 2))\r\n );\r\n this.$l.planeNormal = pb.vec3(\r\n this.planeData.at(pb.add(this.planeBase, 4)),\r\n this.planeData.at(pb.add(this.planeBase, 5)),\r\n this.planeData.at(pb.add(this.planeBase, 6))\r\n );\r\n this.$l.planeDistance = pb.dot(pb.sub(this.next, this.planePoint), this.planeNormal);\r\n this.$if(pb.lessThan(this.planeDistance, 0), function () {\r\n this.$l.contactNormal = this.planeNormal;\r\n this.$l.preProject = this.next;\r\n this.next = pb.sub(this.next, pb.mul(this.contactNormal, this.planeDistance));\r\n this.$l.correctionDelta = pb.sub(this.next, this.preProject);\r\n this.$l.correctionLen = pb.length(this.correctionDelta);\r\n this.$l.surfaceDelta = pb.sub(this.next, this.current);\r\n this.$l.normalStep = pb.mul(\r\n this.contactNormal,\r\n pb.dot(this.surfaceDelta, this.contactNormal)\r\n );\r\n this.$l.tangentStep = pb.sub(this.surfaceDelta, this.normalStep);\r\n this.$l.normalTravel = pb.length(this.normalStep);\r\n this.$l.tangentLen = pb.length(this.tangentStep);\r\n this.$if(pb.greaterThan(this.tangentLen, this.minDistance), function () {\r\n this.$l.dynamicBasis = pb.max(\r\n this.correctionLen,\r\n pb.max(this.normalTravel, pb.mul(this.tangentLen, 0.5))\r\n );\r\n this.$l.staticBasis = pb.max(\r\n this.correctionLen,\r\n pb.max(this.normalTravel, this.tangentLen)\r\n );\r\n this.$l.staticLimit = pb.max(\r\n this.minDistance,\r\n pb.mul(this.staticBasis, pb.mul(this.staticFriction, 2))\r\n );\r\n this.$if(pb.lessThanEqual(this.tangentLen, this.staticLimit), function () {\r\n this.next = pb.sub(this.next, this.tangentStep);\r\n }).$else(function () {\r\n this.$l.dynamicRemove = pb.min(\r\n this.tangentLen,\r\n pb.mul(this.dynamicBasis, this.dynamicFriction)\r\n );\r\n this.next = pb.sub(\r\n this.next,\r\n pb.mul(pb.div(this.tangentStep, this.tangentLen), this.dynamicRemove)\r\n );\r\n });\r\n });\r\n });\r\n });\r\n });\r\n\r\n this.next = pb.add(pb.mul(this.next, this.freeWeight), pb.mul(this.rest, this.pinWeight));\r\n this.$l.prevOut = pb.add(pb.mul(this.current, this.freeWeight), pb.mul(this.rest, this.pinWeight));\r\n this.prevPositions.setAt(this.base, this.prevOut.x);\r\n this.prevPositions.setAt(pb.add(this.base, 1), this.prevOut.y);\r\n this.prevPositions.setAt(pb.add(this.base, 2), this.prevOut.z);\r\n this.positions.setAt(this.base, this.next.x);\r\n this.positions.setAt(pb.add(this.base, 1), this.next.y);\r\n this.positions.setAt(pb.add(this.base, 2), this.next.z);\r\n });\r\n });\r\n }\r\n });\r\n if (program) {\r\n program.name = '@GPUCloth_Integrate';\r\n }\r\n return program;\r\n}\r\n\r\nfunction createConstraintProgram(device: AbstractDevice, workgroupSize: number) {\r\n const program = device.buildComputeProgram({\r\n workgroupSize: [workgroupSize, 1, 1],\r\n compute(pb) {\r\n this.positions = pb.float[0]().storageBuffer(0);\r\n this.restPositions = pb.float[0]().storageBufferReadonly(0);\r\n this.invMass = pb.float[0]().storageBufferReadonly(0);\r\n this.neighborIndices = pb.int[0]().storageBufferReadonly(0);\r\n this.restLengths = pb.float[0]().storageBufferReadonly(0);\r\n this.sphereData = pb.float[0]().storageBufferReadonly(0);\r\n this.capsuleData = pb.float[0]().storageBufferReadonly(0);\r\n this.planeData = pb.float[0]().storageBufferReadonly(0);\r\n this.vertexCount = pb.uint().uniform(0);\r\n this.maxNeighbors = pb.uint().uniform(0);\r\n this.stiffness = pb.float().uniform(0);\r\n this.poseFollow = pb.float().uniform(0);\r\n this.sphereCount = pb.uint().uniform(0);\r\n this.capsuleCount = pb.uint().uniform(0);\r\n this.planeCount = pb.uint().uniform(0);\r\n this.dynamicFriction = pb.float().uniform(0);\r\n this.staticFriction = pb.float().uniform(0);\r\n this.minDistance = pb.float().uniform(0);\r\n pb.main(function () {\r\n this.$l.index = this.$builtins.globalInvocationId.x;\r\n this.$if(pb.lessThan(this.index, this.vertexCount), function () {\r\n this.$l.freeWeight = this.invMass.at(this.index);\r\n this.$l.pinWeight = pb.sub(1, this.freeWeight);\r\n this.$l.base = pb.mul(this.index, 3);\r\n this.$l.rest = pb.vec3(\r\n this.restPositions.at(this.base),\r\n this.restPositions.at(pb.add(this.base, 1)),\r\n this.restPositions.at(pb.add(this.base, 2))\r\n );\r\n this.$if(pb.greaterThan(this.freeWeight, this.minDistance), function () {\r\n this.$l.pos = pb.vec3(\r\n this.positions.at(this.base),\r\n this.positions.at(pb.add(this.base, 1)),\r\n this.positions.at(pb.add(this.base, 2))\r\n );\r\n this.$l.correction = pb.vec3(0);\r\n this.$l.validCount = pb.uint(0);\r\n this.$l.neighborStart = pb.mul(this.index, this.maxNeighbors);\r\n this.$for(pb.uint('i'), 0, this.maxNeighbors, function () {\r\n this.$l.slot = pb.add(this.neighborStart, this.i);\r\n this.$l.neighbor = this.neighborIndices.at(this.slot);\r\n this.$if(pb.greaterThanEqual(this.neighbor, 0), function () {\r\n this.$l.neighborBase = pb.mul(pb.uint(this.neighbor), 3);\r\n this.$l.neighborPos = pb.vec3(\r\n this.positions.at(this.neighborBase),\r\n this.positions.at(pb.add(this.neighborBase, 1)),\r\n this.positions.at(pb.add(this.neighborBase, 2))\r\n );\r\n this.$l.restLength = this.restLengths.at(this.slot);\r\n this.$l.delta = pb.sub(this.pos, this.neighborPos);\r\n this.$l.len = pb.length(this.delta);\r\n this.$if(pb.greaterThan(this.len, this.minDistance), function () {\r\n this.$l.offset = pb.mul(pb.div(this.delta, this.len), pb.sub(this.len, this.restLength));\r\n this.correction = pb.add(this.correction, this.offset);\r\n this.validCount = pb.add(this.validCount, 1);\r\n });\r\n });\r\n });\r\n this.$l.corrected = this.pos;\r\n this.$if(pb.greaterThan(this.validCount, 0), function () {\r\n this.$l.scale = pb.div(pb.mul(this.stiffness, this.freeWeight), pb.float(this.validCount));\r\n this.corrected = pb.sub(this.pos, pb.mul(this.correction, this.scale));\r\n });\r\n this.$if(pb.greaterThan(this.poseFollow, this.minDistance), function () {\r\n this.$l.followStrength = pb.mul(this.poseFollow, this.freeWeight);\r\n this.corrected = pb.add(\r\n this.corrected,\r\n pb.mul(pb.sub(this.rest, this.corrected), this.followStrength)\r\n );\r\n });\r\n this.corrected = pb.add(\r\n pb.mul(this.corrected, this.freeWeight),\r\n pb.mul(this.rest, this.pinWeight)\r\n );\r\n this.$for(pb.uint('i'), 0, this.sphereCount, function () {\r\n this.$l.sphereBase = pb.mul(this.i, 4);\r\n this.$l.center = pb.vec3(\r\n this.sphereData.at(this.sphereBase),\r\n this.sphereData.at(pb.add(this.sphereBase, 1)),\r\n this.sphereData.at(pb.add(this.sphereBase, 2))\r\n );\r\n this.$l.radius = this.sphereData.at(pb.add(this.sphereBase, 3));\r\n this.$l.deltaCol = pb.sub(this.corrected, this.center);\r\n this.$l.lenCol = pb.length(this.deltaCol);\r\n this.$if(pb.lessThan(this.lenCol, this.radius), function () {\r\n this.$if(pb.greaterThan(this.lenCol, this.minDistance), function () {\r\n this.corrected = pb.add(\r\n this.center,\r\n pb.mul(pb.div(this.deltaCol, this.lenCol), this.radius)\r\n );\r\n }).$else(function () {\r\n this.corrected = pb.add(this.center, pb.vec3(0, this.radius, 0));\r\n });\r\n });\r\n });\r\n this.$for(pb.uint('j'), 0, this.capsuleCount, function () {\r\n this.$l.capsuleBase = pb.mul(this.j, 8);\r\n this.$l.cStart = pb.vec3(\r\n this.capsuleData.at(this.capsuleBase),\r\n this.capsuleData.at(pb.add(this.capsuleBase, 1)),\r\n this.capsuleData.at(pb.add(this.capsuleBase, 2))\r\n );\r\n this.$l.cRadius = this.capsuleData.at(pb.add(this.capsuleBase, 3));\r\n this.$l.cEnd = pb.vec3(\r\n this.capsuleData.at(pb.add(this.capsuleBase, 4)),\r\n this.capsuleData.at(pb.add(this.capsuleBase, 5)),\r\n this.capsuleData.at(pb.add(this.capsuleBase, 6))\r\n );\r\n this.$l.ab = pb.sub(this.cEnd, this.cStart);\r\n this.$l.abLen2 = pb.dot(this.ab, this.ab);\r\n this.$l.closest = this.cStart;\r\n this.$if(pb.greaterThan(this.abLen2, this.minDistance), function () {\r\n this.$l.ap = pb.sub(this.corrected, this.cStart);\r\n this.$l.t = pb.clamp(pb.div(pb.dot(this.ap, this.ab), this.abLen2), 0, 1);\r\n this.closest = pb.add(this.cStart, pb.mul(this.ab, this.t));\r\n });\r\n this.$l.deltaCap = pb.sub(this.corrected, this.closest);\r\n this.$l.lenCap = pb.length(this.deltaCap);\r\n this.$if(pb.lessThan(this.lenCap, this.cRadius), function () {\r\n this.$if(pb.greaterThan(this.lenCap, this.minDistance), function () {\r\n this.corrected = pb.add(\r\n this.closest,\r\n pb.mul(pb.div(this.deltaCap, this.lenCap), this.cRadius)\r\n );\r\n }).$else(function () {\r\n this.corrected = pb.add(this.closest, pb.vec3(0, this.cRadius, 0));\r\n });\r\n });\r\n });\r\n this.$for(pb.uint('k'), 0, this.planeCount, function () {\r\n this.$l.planeBase = pb.mul(this.k, 8);\r\n this.$l.planePoint = pb.vec3(\r\n this.planeData.at(this.planeBase),\r\n this.planeData.at(pb.add(this.planeBase, 1)),\r\n this.planeData.at(pb.add(this.planeBase, 2))\r\n );\r\n this.$l.planeNormal = pb.vec3(\r\n this.planeData.at(pb.add(this.planeBase, 4)),\r\n this.planeData.at(pb.add(this.planeBase, 5)),\r\n this.planeData.at(pb.add(this.planeBase, 6))\r\n );\r\n this.$l.planeDistance = pb.dot(pb.sub(this.corrected, this.planePoint), this.planeNormal);\r\n this.$if(pb.lessThan(this.planeDistance, 0), function () {\r\n this.corrected = pb.sub(this.corrected, pb.mul(this.planeNormal, this.planeDistance));\r\n });\r\n });\r\n this.positions.setAt(this.base, this.corrected.x);\r\n this.positions.setAt(pb.add(this.base, 1), this.corrected.y);\r\n this.positions.setAt(pb.add(this.base, 2), this.corrected.z);\r\n }).$else(function () {\r\n this.positions.setAt(this.base, this.rest.x);\r\n this.positions.setAt(pb.add(this.base, 1), this.rest.y);\r\n this.positions.setAt(pb.add(this.base, 2), this.rest.z);\r\n });\r\n });\r\n });\r\n }\r\n });\r\n if (program) {\r\n program.name = '@GPUCloth_Constraint';\r\n }\r\n return program;\r\n}\r\n\r\nfunction createFaceNormalProgram(device: AbstractDevice, workgroupSize: number) {\r\n const program = device.buildComputeProgram({\r\n workgroupSize: [workgroupSize, 1, 1],\r\n compute(pb) {\r\n this.positions = pb.float[0]().storageBufferReadonly(0);\r\n this.triangleIndices = pb.uint[0]().storageBufferReadonly(0);\r\n this.triangleNormals = pb.float[0]().storageBuffer(0);\r\n this.triangleCount = pb.uint().uniform(0);\r\n this.minDistance = pb.float().uniform(0);\r\n pb.main(function () {\r\n this.$l.tri = this.$builtins.globalInvocationId.x;\r\n this.$if(pb.lessThan(this.tri, this.triangleCount), function () {\r\n this.$l.indexBase = pb.mul(this.tri, 3);\r\n this.$l.i0 = this.triangleIndices.at(this.indexBase);\r\n this.$l.i1 = this.triangleIndices.at(pb.add(this.indexBase, 1));\r\n this.$l.i2 = this.triangleIndices.at(pb.add(this.indexBase, 2));\r\n this.$l.p0Base = pb.mul(this.i0, 3);\r\n this.$l.p1Base = pb.mul(this.i1, 3);\r\n this.$l.p2Base = pb.mul(this.i2, 3);\r\n this.$l.p0 = pb.vec3(\r\n this.positions.at(this.p0Base),\r\n this.positions.at(pb.add(this.p0Base, 1)),\r\n this.positions.at(pb.add(this.p0Base, 2))\r\n );\r\n this.$l.p1 = pb.vec3(\r\n this.positions.at(this.p1Base),\r\n this.positions.at(pb.add(this.p1Base, 1)),\r\n this.positions.at(pb.add(this.p1Base, 2))\r\n );\r\n this.$l.p2 = pb.vec3(\r\n this.positions.at(this.p2Base),\r\n this.positions.at(pb.add(this.p2Base, 1)),\r\n this.positions.at(pb.add(this.p2Base, 2))\r\n );\r\n this.$l.n = pb.cross(pb.sub(this.p1, this.p0), pb.sub(this.p2, this.p0));\r\n this.$l.nLen = pb.length(this.n);\r\n this.$if(pb.greaterThan(this.nLen, this.minDistance), function () {\r\n this.n = pb.div(this.n, this.nLen);\r\n }).$else(function () {\r\n this.n = pb.vec3(0, 1, 0);\r\n });\r\n this.$l.outBase = pb.mul(this.tri, 3);\r\n this.triangleNormals.setAt(this.outBase, this.n.x);\r\n this.triangleNormals.setAt(pb.add(this.outBase, 1), this.n.y);\r\n this.triangleNormals.setAt(pb.add(this.outBase, 2), this.n.z);\r\n });\r\n });\r\n }\r\n });\r\n if (program) {\r\n program.name = '@GPUCloth_FaceNormal';\r\n }\r\n return program;\r\n}\r\n\r\nfunction createVertexNormalProgram(device: AbstractDevice, workgroupSize: number) {\r\n const program = device.buildComputeProgram({\r\n workgroupSize: [workgroupSize, 1, 1],\r\n compute(pb) {\r\n this.triangleNormals = pb.float[0]().storageBufferReadonly(0);\r\n this.vertexTriangleAdjacency = pb.int[0]().storageBufferReadonly(0);\r\n this.vertexNormals = pb.float[0]().storageBuffer(0);\r\n this.vertexCount = pb.uint().uniform(0);\r\n this.maxTrianglesPerVertex = pb.uint().uniform(0);\r\n this.minDistance = pb.float().uniform(0);\r\n pb.main(function () {\r\n this.$l.vertex = this.$builtins.globalInvocationId.x;\r\n this.$if(pb.lessThan(this.vertex, this.vertexCount), function () {\r\n this.$l.sum = pb.vec3(0);\r\n this.$l.valid = pb.uint(0);\r\n this.$l.start = pb.mul(this.vertex, this.maxTrianglesPerVertex);\r\n this.$for(pb.uint('i'), 0, this.maxTrianglesPerVertex, function () {\r\n this.$l.tri = this.vertexTriangleAdjacency.at(pb.add(this.start, this.i));\r\n this.$if(pb.greaterThanEqual(this.tri, 0), function () {\r\n this.$l.nBase = pb.mul(pb.uint(this.tri), 3);\r\n this.sum = pb.add(\r\n this.sum,\r\n pb.vec3(\r\n this.triangleNormals.at(this.nBase),\r\n this.triangleNormals.at(pb.add(this.nBase, 1)),\r\n this.triangleNormals.at(pb.add(this.nBase, 2))\r\n )\r\n );\r\n this.valid = pb.add(this.valid, 1);\r\n });\r\n });\r\n this.$if(pb.greaterThan(this.valid, 0), function () {\r\n this.sum = pb.div(this.sum, pb.float(this.valid));\r\n }).$else(function () {\r\n this.sum = pb.vec3(0, 1, 0);\r\n });\r\n this.$l.len = pb.length(this.sum);\r\n this.$if(pb.greaterThan(this.len, this.minDistance), function () {\r\n this.sum = pb.div(this.sum, this.len);\r\n }).$else(function () {\r\n this.sum = pb.vec3(0, 1, 0);\r\n });\r\n this.$l.outBase = pb.mul(this.vertex, 3);\r\n this.vertexNormals.setAt(this.outBase, this.sum.x);\r\n this.vertexNormals.setAt(pb.add(this.outBase, 1), this.sum.y);\r\n this.vertexNormals.setAt(pb.add(this.outBase, 2), this.sum.z);\r\n });\r\n });\r\n }\r\n });\r\n if (program) {\r\n program.name = '@GPUCloth_VertexNormal';\r\n }\r\n return program;\r\n}\r\n\r\nasync function readPositionDataFromPrimitive(primitive: Primitive) {\r\n const positions = await readVertexAttributeDataFromPrimitive(primitive, 'position', 3);\r\n if (!positions) {\r\n throw new Error('GPU cloth initialization failed: primitive has no position buffer.');\r\n }\r\n return positions;\r\n}\r\n\r\nasync function readVertexAttributeDataFromPrimitive(\r\n primitive: Primitive,\r\n semantic: 'position' | 'normal' | 'blendIndices' | 'blendWeights',\r\n componentCount: number\r\n) {\r\n const info = primitive.getVertexBufferInfo(semantic);\r\n if (!info || !info.type.isPrimitiveType() || info.type.cols < componentCount) {\r\n return null;\r\n }\r\n const vertexCount = primitive.getNumVertices();\r\n if (vertexCount <= 0) {\r\n return null;\r\n }\r\n const bytes = await info.buffer.getBufferSubData();\r\n const result = new Float32Array(vertexCount * componentCount);\r\n const scalarType = info.type.scalarType;\r\n const normalized = info.type.normalized;\r\n const componentByteSize = getPrimitiveScalarByteSize(scalarType);\r\n const baseByteOffset = info.drawOffset + info.offset;\r\n if (\r\n scalarType === PBPrimitiveType.F32 &&\r\n !normalized &&\r\n baseByteOffset % 4 === 0 &&\r\n info.stride % 4 === 0\r\n ) {\r\n const raw = new Float32Array(bytes.buffer, bytes.byteOffset, bytes.byteLength >> 2);\r\n const stride = info.stride >> 2;\r\n const srcOffset = baseByteOffset >> 2;\r\n for (let i = 0; i < vertexCount; i++) {\r\n const src = srcOffset + i * stride;\r\n const dst = i * componentCount;\r\n for (let c = 0; c < componentCount; c++) {\r\n result[dst + c] = raw[src + c];\r\n }\r\n }\r\n return result;\r\n }\r\n if (scalarType === PBPrimitiveType.F16) {\r\n throw new Error(`GPU cloth initialization failed: unsupported ${semantic} attribute format.`);\r\n }\r\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\r\n for (let i = 0; i < vertexCount; i++) {\r\n const src = baseByteOffset + i * info.stride;\r\n const dst = i * componentCount;\r\n for (let c = 0; c < componentCount; c++) {\r\n result[dst + c] = readPrimitiveScalar(view, src + c * componentByteSize, scalarType, normalized);\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nasync function readSkinningDataFromPrimitive(primitive: Primitive) {\r\n try {\r\n const [blendIndices, blendWeights] = await Promise.all([\r\n readVertexAttributeDataFromPrimitive(primitive, 'blendIndices', 4),\r\n readVertexAttributeDataFromPrimitive(primitive, 'blendWeights', 4)\r\n ]);\r\n if (!blendIndices || !blendWeights) {\r\n return null;\r\n }\r\n return { blendIndices, blendWeights };\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nfunction buildNonIndexedTriangles(primitive: Primitive, vertexCount: number) {\r\n if (primitive.primitiveType !== 'triangle-list') {\r\n throw new Error('GPU cloth initialization failed: only triangle-list primitive is supported.');\r\n }\r\n const start = primitive.indexStart;\r\n const count = primitive.indexCount;\r\n if (count <= 0 || count % 3 !== 0 || start < 0 || start + count > vertexCount) {\r\n throw new Error('GPU cloth initialization failed: invalid non-indexed triangle range.');\r\n }\r\n const indices = new Uint32Array(count);\r\n for (let i = 0; i < count; i++) {\r\n indices[i] = start + i;\r\n }\r\n return indices;\r\n}\r\n\r\nasync function readIndexDataFromPrimitive(primitive: Primitive, vertexCount: number) {\r\n const indexBuffer = primitive.getIndexBuffer();\r\n if (!indexBuffer) {\r\n return buildNonIndexedTriangles(primitive, vertexCount);\r\n }\r\n if (primitive.primitiveType !== 'triangle-list') {\r\n throw new Error('GPU cloth initialization failed: only triangle-list primitive is supported.');\r\n }\r\n const bytes = await indexBuffer.getBufferSubData();\r\n if (indexBuffer.indexType.primitiveType === PBPrimitiveType.U16) {\r\n const src = new Uint16Array(bytes.buffer, bytes.byteOffset, bytes.byteLength >> 1);\r\n return new Uint16Array(src);\r\n }\r\n const src = new Uint32Array(bytes.buffer, bytes.byteOffset, bytes.byteLength >> 2);\r\n return new Uint32Array(src);\r\n}\r\n\r\nfunction createWrapDeformerProgram(device: AbstractDevice, workgroupSize: number) {\r\n const program = device.buildComputeProgram({\r\n workgroupSize: [workgroupSize, 1, 1],\r\n compute(pb) {\r\n this.sourcePositions = pb.float[0]().storageBufferReadonly(0);\r\n this.sourceTriangleIndices = pb.uint[0]().storageBufferReadonly(0);\r\n this.sourceBarycentrics = pb.float[0]().storageBufferReadonly(0);\r\n this.targetLocalOffsets = pb.float[0]().storageBufferReadonly(0);\r\n this.targetPositions = pb.float[0]().storageBuffer(0);\r\n this.targetNormals = pb.float[0]().storageBuffer(0);\r\n this.vertexCount = pb.uint().uniform(0);\r\n this.sourceToTargetMatrix = pb.mat4().uniform(0);\r\n this.minDistance = pb.float().uniform(0);\r\n pb.main(function () {\r\n this.$l.vertex = this.$builtins.globalInvocationId.x;\r\n this.$if(pb.lessThan(this.vertex, this.vertexCount), function () {\r\n this.$l.targetBase = pb.mul(this.vertex, 3);\r\n this.$l.influenceBase = pb.mul(this.vertex, WRAP_TRIANGLE_VERTEX_COUNT);\r\n this.$l.i0 = this.sourceTriangleIndices.at(this.influenceBase);\r\n this.$l.i1 = this.sourceTriangleIndices.at(pb.add(this.influenceBase, 1));\r\n this.$l.i2 = this.sourceTriangleIndices.at(pb.add(this.influenceBase, 2));\r\n this.$l.base0 = pb.mul(this.i0, 3);\r\n this.$l.base1 = pb.mul(this.i1, 3);\r\n this.$l.base2 = pb.mul(this.i2, 3);\r\n this.$l.w0 = this.sourceBarycentrics.at(this.influenceBase);\r\n this.$l.w1 = this.sourceBarycentrics.at(pb.add(this.influenceBase, 1));\r\n this.$l.w2 = this.sourceBarycentrics.at(pb.add(this.influenceBase, 2));\r\n this.$l.p0 = pb.mul(\r\n this.sourceToTargetMatrix,\r\n pb.vec4(\r\n this.sourcePositions.at(this.base0),\r\n this.sourcePositions.at(pb.add(this.base0, 1)),\r\n this.sourcePositions.at(pb.add(this.base0, 2)),\r\n 1\r\n )\r\n ).xyz;\r\n this.$l.p1 = pb.mul(\r\n this.sourceToTargetMatrix,\r\n pb.vec4(\r\n this.sourcePositions.at(this.base1),\r\n this.sourcePositions.at(pb.add(this.base1, 1)),\r\n this.sourcePositions.at(pb.add(this.base1, 2)),\r\n 1\r\n )\r\n ).xyz;\r\n this.$l.p2 = pb.mul(\r\n this.sourceToTargetMatrix,\r\n pb.vec4(\r\n this.sourcePositions.at(this.base2),\r\n this.sourcePositions.at(pb.add(this.base2, 1)),\r\n this.sourcePositions.at(pb.add(this.base2, 2)),\r\n 1\r\n )\r\n ).xyz;\r\n this.$l.basePoint = pb.add(\r\n pb.mul(this.p0, this.w0),\r\n pb.mul(this.p1, this.w1),\r\n pb.mul(this.p2, this.w2)\r\n );\r\n this.$l.edge01 = pb.sub(this.p1, this.p0);\r\n this.$l.edge02 = pb.sub(this.p2, this.p0);\r\n this.$l.tangent = this.edge01;\r\n this.$l.tangentLen = pb.length(this.tangent);\r\n this.$if(pb.lessThanEqual(this.tangentLen, this.minDistance), function () {\r\n this.tangent = this.edge02;\r\n this.tangentLen = pb.length(this.tangent);\r\n });\r\n this.$if(pb.greaterThan(this.tangentLen, this.minDistance), function () {\r\n this.tangent = pb.div(this.tangent, this.tangentLen);\r\n }).$else(function () {\r\n this.tangent = pb.vec3(1, 0, 0);\r\n });\r\n this.$l.normal = pb.cross(this.edge01, this.edge02);\r\n this.$l.normalLen = pb.length(this.normal);\r\n this.$if(pb.greaterThan(this.normalLen, this.minDistance), function () {\r\n this.normal = pb.div(this.normal, this.normalLen);\r\n }).$else(function () {\r\n this.$l.fallbackAxis = pb.vec3(0, 1, 0);\r\n this.$if(\r\n pb.or(pb.greaterThan(this.tangent.y, 0.999), pb.lessThan(this.tangent.y, -0.999)),\r\n function () {\r\n this.fallbackAxis = pb.vec3(1, 0, 0);\r\n }\r\n );\r\n this.normal = pb.cross(this.tangent, this.fallbackAxis);\r\n this.normalLen = pb.length(this.normal);\r\n this.$if(pb.greaterThan(this.normalLen, this.minDistance), function () {\r\n this.normal = pb.div(this.normal, this.normalLen);\r\n }).$else(function () {\r\n this.normal = pb.vec3(0, 0, 1);\r\n });\r\n });\r\n this.$l.bitangent = pb.cross(this.normal, this.tangent);\r\n this.$l.bitangentLen = pb.length(this.bitangent);\r\n this.$if(pb.greaterThan(this.bitangentLen, this.minDistance), function () {\r\n this.bitangent = pb.div(this.bitangent, this.bitangentLen);\r\n }).$else(function () {\r\n this.bitangent = pb.vec3(0, 1, 0);\r\n });\r\n this.normal = pb.cross(this.tangent, this.bitangent);\r\n this.normalLen = pb.length(this.normal);\r\n this.$if(pb.greaterThan(this.normalLen, this.minDistance), function () {\r\n this.normal = pb.div(this.normal, this.normalLen);\r\n }).$else(function () {\r\n this.normal = pb.vec3(0, 0, 1);\r\n });\r\n this.$l.localOffset = pb.vec3(\r\n this.targetLocalOffsets.at(this.targetBase),\r\n this.targetLocalOffsets.at(pb.add(this.targetBase, 1)),\r\n this.targetLocalOffsets.at(pb.add(this.targetBase, 2))\r\n );\r\n this.$l.deformedPosition = pb.add(\r\n this.basePoint,\r\n pb.add(\r\n pb.mul(this.tangent, this.localOffset.x),\r\n pb.mul(this.bitangent, this.localOffset.y),\r\n pb.mul(this.normal, this.localOffset.z)\r\n )\r\n );\r\n this.targetPositions.setAt(this.targetBase, this.deformedPosition.x);\r\n this.targetPositions.setAt(pb.add(this.targetBase, 1), this.deformedPosition.y);\r\n this.targetPositions.setAt(pb.add(this.targetBase, 2), this.deformedPosition.z);\r\n this.targetNormals.setAt(this.targetBase, this.normal.x);\r\n this.targetNormals.setAt(pb.add(this.targetBase, 1), this.normal.y);\r\n this.targetNormals.setAt(pb.add(this.targetBase, 2), this.normal.z);\r\n });\r\n });\r\n }\r\n });\r\n if (program) {\r\n program.name = '@GPUCloth_DisplacementWrapTarget';\r\n }\r\n return program;\r\n}\r\n\r\nfunction transformPointArrayByMatrix(\r\n matrix: Matrix4x4,\r\n source: Float32Array<ArrayBuffer>,\r\n out?: Float32Array<ArrayBuffer>\r\n) {\r\n const target = out && out.length === source.length ? out : new Float32Array(source.length);\r\n for (let i = 0; i + 2 < source.length; i += 3) {\r\n const x = source[i];\r\n const y = source[i + 1];\r\n const z = source[i + 2];\r\n target[i] = matrix[0] * x + matrix[4] * y + matrix[8] * z + matrix[12];\r\n target[i + 1] = matrix[1] * x + matrix[5] * y + matrix[9] * z + matrix[13];\r\n target[i + 2] = matrix[2] * x + matrix[6] * y + matrix[10] * z + matrix[14];\r\n }\r\n return target;\r\n}\r\n\r\nfunction getWrapSourceToTargetMatrix(source: any, target: any, out?: Matrix4x4) {\r\n if (!source?.worldMatrix || !target?.invWorldMatrix) {\r\n return (out ?? new Matrix4x4()).identity();\r\n }\r\n return Matrix4x4.multiplyAffine(target.invWorldMatrix, source.worldMatrix, out);\r\n}\r\n\r\nclass GPUClothWrapBinding {\r\n private readonly _device: AbstractDevice;\r\n private readonly _source: any;\r\n private readonly _target: any;\r\n private readonly _targetPrimitive: Primitive;\r\n private readonly _wrapTriangleIndexBuffer: GPUDataBuffer;\r\n private readonly _wrapBarycentricBuffer: GPUDataBuffer;\r\n private readonly _wrapLocalOffsetBuffer: GPUDataBuffer;\r\n private readonly _program: GPUProgram;\r\n private readonly _bindGroup: BindGroup;\r\n private readonly _workgroupCount: number;\r\n private readonly _maxOffsetDistance: number;\r\n private readonly _sourceToTargetMatrix: Matrix4x4;\r\n private readonly _positionBuffer: StructuredBuffer;\r\n private readonly _normalBuffer: StructuredBuffer;\r\n private readonly _originalPositionBuffer: Nullable<StructuredBuffer>;\r\n private readonly _originalNormalBuffer: Nullable<StructuredBuffer>;\r\n private readonly _restoreSkinning: Nullable<boolean>;\r\n\r\n private constructor(\r\n device: AbstractDevice,\r\n source: any,\r\n target: any,\r\n targetPrimitive: Primitive,\r\n wrapTriangleIndexBuffer: GPUDataBuffer,\r\n wrapBarycentricBuffer: GPUDataBuffer,\r\n wrapLocalOffsetBuffer: GPUDataBuffer,\r\n program: GPUProgram,\r\n bindGroup: BindGroup,\r\n positionBuffer: StructuredBuffer,\r\n normalBuffer: StructuredBuffer,\r\n originalPositionBuffer: Nullable<StructuredBuffer>,\r\n originalNormalBuffer: Nullable<StructuredBuffer>,\r\n workgroupCount: number,\r\n maxOffsetDistance: number,\r\n restoreSkinning: Nullable<boolean>\r\n ) {\r\n this._device = device;\r\n this._source = source;\r\n this._target = target;\r\n this._targetPrimitive = targetPrimitive;\r\n this._wrapTriangleIndexBuffer = wrapTriangleIndexBuffer;\r\n this._wrapBarycentricBuffer = wrapBarycentricBuffer;\r\n this._wrapLocalOffsetBuffer = wrapLocalOffsetBuffer;\r\n this._program = program;\r\n this._bindGroup = bindGroup;\r\n this._workgroupCount = workgroupCount;\r\n this._maxOffsetDistance = maxOffsetDistance;\r\n this._sourceToTargetMatrix = new Matrix4x4();\r\n this._positionBuffer = positionBuffer;\r\n this._normalBuffer = normalBuffer;\r\n this._originalPositionBuffer = originalPositionBuffer;\r\n this._originalNormalBuffer = originalNormalBuffer;\r\n this._restoreSkinning = restoreSkinning;\r\n }\r\n\r\n static async create(\r\n device: AbstractDevice,\r\n source: any,\r\n sourcePositionBuffer: StructuredBuffer,\r\n sourceRestPositions: Float32Array<ArrayBuffer>,\r\n sourceIndexData: Uint32Array<ArrayBuffer>,\r\n target: any,\r\n workgroupSize: number\r\n ) {\r\n const data = await GPUClothWrapBinding.createBindingData(\r\n source,\r\n sourceRestPositions,\r\n sourceIndexData,\r\n target\r\n );\r\n return GPUClothWrapBinding.createFromData(\r\n device,\r\n source,\r\n sourcePositionBuffer,\r\n sourceRestPositions,\r\n sourceIndexData,\r\n target,\r\n workgroupSize,\r\n data\r\n );\r\n }\r\n\r\n static async createBindingData(\r\n source: any,\r\n sourceRestPositions: Float32Array<ArrayBuffer>,\r\n sourceIndexData: Uint32Array<ArrayBuffer>,\r\n target: any\r\n ): Promise<GPUClothWrapBindingData> {\r\n if (!target?.primitive) {\r\n throw new Error('GPU cloth wrap failed: target mesh has no primitive.');\r\n }\r\n const targetPrimitive = target.primitive as Primitive;\r\n const targetBasePositions = await readPositionDataFromPrimitive(targetPrimitive);\r\n const sourceToTargetBindMatrix = getWrapSourceToTargetMatrix(source, target);\r\n const [resolvedSourcePositions, targetPositions] = await Promise.all([\r\n resolveWrapBindPositions(source, sourceRestPositions),\r\n resolveWrapBindPositions(target, targetBasePositions)\r\n ]);\r\n const sourcePositionsInTargetSpace = transformPointArrayByMatrix(\r\n sourceToTargetBindMatrix,\r\n resolvedSourcePositions\r\n );\r\n const sourceVertexCount = (sourcePositionsInTargetSpace.length / 3) >> 0;\r\n const sourceTriangleCount = (sourceIndexData.length / 3) >> 0;\r\n if (sourceVertexCount <= 0) {\r\n throw new Error('GPU cloth wrap failed: source mesh has no vertices.');\r\n }\r\n if (sourceTriangleCount <= 0) {\r\n throw new Error('GPU cloth wrap failed: source mesh has no triangles.');\r\n }\r\n const vertexCount = (targetPositions.length / 3) >> 0;\r\n const sourceTriangleIndices = new Uint32Array(vertexCount * WRAP_TRIANGLE_VERTEX_COUNT);\r\n const sourceBarycentrics = new Float32Array(vertexCount * WRAP_TRIANGLE_VERTEX_COUNT);\r\n const targetLocalOffsets = new Float32Array(vertexCount * 3);\r\n let maxOffsetDistance = 0;\r\n const closestPoint = new Float32Array(3);\r\n const barycentrics = new Float32Array(3);\r\n const frame = new Float32Array(9);\r\n for (let vertex = 0; vertex < vertexCount; vertex++) {\r\n const targetBase = vertex * 3;\r\n const vx = targetPositions[targetBase];\r\n const vy = targetPositions[targetBase + 1];\r\n const vz = targetPositions[targetBase + 2];\r\n let bestDistanceSq = Number.POSITIVE_INFINITY;\r\n let bestI0 = 0;\r\n let bestI1 = 0;\r\n let bestI2 = 0;\r\n let bestClosestX = vx;\r\n let bestClosestY = vy;\r\n let bestClosestZ = vz;\r\n let bestBary0 = 1;\r\n let bestBary1 = 0;\r\n let bestBary2 = 0;\r\n for (let tri = 0; tri < sourceTriangleCount; tri++) {\r\n const triBase = tri * 3;\r\n const i0 = sourceIndexData[triBase];\r\n const i1 = sourceIndexData[triBase + 1];\r\n const i2 = sourceIndexData[triBase + 2];\r\n if (i0 >= sourceVertexCount || i1 >= sourceVertexCount || i2 >= sourceVertexCount) {\r\n continue;\r\n }\r\n const base0 = i0 * 3;\r\n const base1 = i1 * 3;\r\n const base2 = i2 * 3;\r\n const distanceSq = closestPointOnTriangle(\r\n vx,\r\n vy,\r\n vz,\r\n sourcePositionsInTargetSpace[base0],\r\n sourcePositionsInTargetSpace[base0 + 1],\r\n sourcePositionsInTargetSpace[base0 + 2],\r\n sourcePositionsInTargetSpace[base1],\r\n sourcePositionsInTargetSpace[base1 + 1],\r\n sourcePositionsInTargetSpace[base1 + 2],\r\n sourcePositionsInTargetSpace[base2],\r\n sourcePositionsInTargetSpace[base2 + 1],\r\n sourcePositionsInTargetSpace[base2 + 2],\r\n closestPoint,\r\n barycentrics\r\n );\r\n if (distanceSq < bestDistanceSq) {\r\n bestDistanceSq = distanceSq;\r\n bestI0 = i0;\r\n bestI1 = i1;\r\n bestI2 = i2;\r\n bestClosestX = closestPoint[0];\r\n bestClosestY = closestPoint[1];\r\n bestClosestZ = closestPoint[2];\r\n bestBary0 = barycentrics[0];\r\n bestBary1 = barycentrics[1];\r\n bestBary2 = barycentrics[2];\r\n }\r\n }\r\n if (!Number.isFinite(bestDistanceSq)) {\r\n throw new Error('GPU cloth wrap failed: source mesh triangle data is invalid.');\r\n }\r\n const influenceBase = vertex * WRAP_TRIANGLE_VERTEX_COUNT;\r\n sourceTriangleIndices[influenceBase] = bestI0;\r\n sourceTriangleIndices[influenceBase + 1] = bestI1;\r\n sourceTriangleIndices[influenceBase + 2] = bestI2;\r\n sourceBarycentrics[influenceBase] = bestBary0;\r\n sourceBarycentrics[influenceBase + 1] = bestBary1;\r\n sourceBarycentrics[influenceBase + 2] = bestBary2;\r\n const bestBase0 = bestI0 * 3;\r\n const bestBase1 = bestI1 * 3;\r\n const bestBase2 = bestI2 * 3;\r\n buildWrapTriangleFrame(\r\n sourcePositionsInTargetSpace[bestBase0],\r\n sourcePositionsInTargetSpace[bestBase0 + 1],\r\n sourcePositionsInTargetSpace[bestBase0 + 2],\r\n sourcePositionsInTargetSpace[bestBase1],\r\n sourcePositionsInTargetSpace[bestBase1 + 1],\r\n sourcePositionsInTargetSpace[bestBase1 + 2],\r\n sourcePositionsInTargetSpace[bestBase2],\r\n sourcePositionsInTargetSpace[bestBase2 + 1],\r\n sourcePositionsInTargetSpace[bestBase2 + 2],\r\n frame\r\n );\r\n const deltaX = vx - bestClosestX;\r\n const deltaY = vy - bestClosestY;\r\n const deltaZ = vz - bestClosestZ;\r\n targetLocalOffsets[targetBase] = dot3(deltaX, deltaY, deltaZ, frame[0], frame[1], frame[2]);\r\n targetLocalOffsets[targetBase + 1] = dot3(deltaX, deltaY, deltaZ, frame[3], frame[4], frame[5]);\r\n targetLocalOffsets[targetBase + 2] = dot3(deltaX, deltaY, deltaZ, frame[6], frame[7], frame[8]);\r\n maxOffsetDistance = Math.max(maxOffsetDistance, Math.sqrt(bestDistanceSq));\r\n }\r\n\r\n return {\r\n version: 4,\r\n vertexCount,\r\n sourceVertexCount,\r\n influenceCount: WRAP_TRIANGLE_VERTEX_COUNT,\r\n maxOffsetDistance,\r\n sourceTriangleIndices: encodeTypedArrayBase64(sourceTriangleIndices),\r\n sourceBarycentrics: encodeTypedArrayBase64(sourceBarycentrics),\r\n targetLocalOffsets: encodeTypedArrayBase64(targetLocalOffsets)\r\n };\r\n }\r\n\r\n static createFromData(\r\n device: AbstractDevice,\r\n source: any,\r\n sourcePositionBuffer: StructuredBuffer,\r\n sourceRestPositions: Float32Array<ArrayBuffer>,\r\n _sourceIndexData: Uint32Array<ArrayBuffer>,\r\n target: any,\r\n workgroupSize: number,\r\n data: GPUClothWrapBindingData\r\n ) {\r\n if (!target?.primitive) {\r\n throw new Error('GPU cloth wrap failed: target mesh has no primitive.');\r\n }\r\n const targetPrimitive = target.primitive as Primitive;\r\n const vertexCount = targetPrimitive.getNumVertices();\r\n if (!isWrapBindingDataCompatible(data, sourceRestPositions, vertexCount)) {\r\n throw new Error('GPU cloth wrap failed: binding cache is incompatible with current meshes.');\r\n }\r\n const expectedElementCount = vertexCount * 3;\r\n const influenceElementCount = vertexCount * data.influenceCount;\r\n const wrapSourceTriangleIndices = decodeTypedArrayFromBase64(\r\n Uint32Array,\r\n data.sourceTriangleIndices,\r\n influenceElementCount\r\n );\r\n const wrapSourceBarycentrics = decodeTypedArrayFromBase64(\r\n Float32Array,\r\n data.sourceBarycentrics,\r\n influenceElementCount\r\n );\r\n const wrapTargetLocalOffsets = decodeTypedArrayFromBase64(\r\n Float32Array,\r\n data.targetLocalOffsets,\r\n expectedElementCount\r\n );\r\n const positionBuffer = device.createVertexBuffer(\r\n 'position_f32x3',\r\n new Float32Array(expectedElementCount),\r\n {\r\n storage: true,\r\n managed: false\r\n }\r\n );\r\n if (!positionBuffer) {\r\n throw new Error('GPU cloth wrap failed: could not create target position buffer.');\r\n }\r\n const normalBuffer = device.createVertexBuffer('normal_f32x3', new Float32Array(expectedElementCount), {\r\n storage: true,\r\n managed: false\r\n });\r\n if (!normalBuffer) {\r\n throw new Error('GPU cloth wrap failed: could not create target normal buffer.');\r\n }\r\n\r\n const wrapTriangleIndexBuffer = device.createBuffer(wrapSourceTriangleIndices.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n wrapTriangleIndexBuffer.bufferSubData(0, wrapSourceTriangleIndices);\r\n const wrapBarycentricBuffer = device.createBuffer(wrapSourceBarycentrics.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n wrapBarycentricBuffer.bufferSubData(0, wrapSourceBarycentrics);\r\n const wrapLocalOffsetBuffer = device.createBuffer(wrapTargetLocalOffsets.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n wrapLocalOffsetBuffer.bufferSubData(0, wrapTargetLocalOffsets);\r\n const program = createWrapDeformerProgram(device, workgroupSize);\r\n if (!program) {\r\n throw new Error('GPU cloth wrap failed: could not create compute program.');\r\n }\r\n const bindGroup = device.createBindGroup(program.bindGroupLayouts[0]);\r\n bindGroup.setBuffer('sourcePositions', sourcePositionBuffer);\r\n bindGroup.setBuffer('sourceTriangleIndices', wrapTriangleIndexBuffer);\r\n bindGroup.setBuffer('sourceBarycentrics', wrapBarycentricBuffer);\r\n bindGroup.setBuffer('targetLocalOffsets', wrapLocalOffsetBuffer);\r\n bindGroup.setBuffer('targetPositions', positionBuffer);\r\n bindGroup.setBuffer('targetNormals', normalBuffer);\r\n const sourceToTargetBindMatrix = getWrapSourceToTargetMatrix(source, target);\r\n bindGroup.setValue('vertexCount', vertexCount);\r\n bindGroup.setValue('sourceToTargetMatrix', sourceToTargetBindMatrix);\r\n bindGroup.setValue('minDistance', 1e-5);\r\n\r\n const originalPositionBuffer = targetPrimitive.getVertexBuffer('position');\r\n const originalNormalBuffer = targetPrimitive.getVertexBuffer('normal');\r\n retainObject(originalPositionBuffer);\r\n retainObject(originalNormalBuffer);\r\n targetPrimitive.removeVertexBuffer('position');\r\n targetPrimitive.setVertexBuffer(positionBuffer!);\r\n targetPrimitive.removeVertexBuffer('normal');\r\n targetPrimitive.setVertexBuffer(normalBuffer!);\r\n\r\n let restoreSkinning: Nullable<boolean> = null;\r\n if (typeof target?.suspendSkinning === 'boolean') {\r\n restoreSkinning = target.suspendSkinning;\r\n target.suspendSkinning = true;\r\n target.setBoneMatrices?.(null);\r\n target.setAnimatedBoundingBox?.(null);\r\n }\r\n\r\n const binding = new GPUClothWrapBinding(\r\n device,\r\n source,\r\n target,\r\n targetPrimitive,\r\n wrapTriangleIndexBuffer,\r\n wrapBarycentricBuffer,\r\n wrapLocalOffsetBuffer,\r\n program,\r\n bindGroup,\r\n positionBuffer!,\r\n normalBuffer!,\r\n originalPositionBuffer,\r\n originalNormalBuffer,\r\n Math.max(1, Math.ceil(vertexCount / workgroupSize)),\r\n Math.max(0, Number(data.maxOffsetDistance) || 0),\r\n restoreSkinning\r\n );\r\n binding.update();\r\n return binding;\r\n }\r\n\r\n update() {\r\n getWrapSourceToTargetMatrix(this._source, this._target, this._sourceToTargetMatrix);\r\n this._bindGroup.setValue('sourceToTargetMatrix', this._sourceToTargetMatrix);\r\n this._device.setProgram(this._program);\r\n this._device.setBindGroup(0, this._bindGroup);\r\n this._device.compute(this._workgroupCount, 1, 1);\r\n this.updateBoundingBox();\r\n }\r\n\r\n dispose() {\r\n this._bindGroup.dispose();\r\n this._program.dispose();\r\n this._wrapTriangleIndexBuffer.dispose();\r\n this._wrapBarycentricBuffer.dispose();\r\n this._wrapLocalOffsetBuffer.dispose();\r\n if (this._targetPrimitive) {\r\n this._targetPrimitive.removeVertexBuffer('position');\r\n if (this._originalPositionBuffer) {\r\n this._targetPrimitive.setVertexBuffer(this._originalPositionBuffer);\r\n }\r\n this._targetPrimitive.removeVertexBuffer('normal');\r\n if (this._originalNormalBuffer) {\r\n this._targetPrimitive.setVertexBuffer(this._originalNormalBuffer);\r\n }\r\n }\r\n releaseObject(this._originalPositionBuffer);\r\n releaseObject(this._originalNormalBuffer);\r\n this._positionBuffer.dispose();\r\n this._normalBuffer.dispose();\r\n if (this._target && this._restoreSkinning !== null) {\r\n this._target.setAnimatedBoundingBox?.(null);\r\n this._target.suspendSkinning = this._restoreSkinning;\r\n }\r\n }\r\n\r\n private updateBoundingBox() {\r\n const sourceBBox =\r\n this._source?.getAnimatedBoundingBox?.() ??\r\n this._source?.primitive?.getBoundingVolume?.()?.toAABB?.() ??\r\n null;\r\n if (!sourceBBox) {\r\n return;\r\n }\r\n let minX = Number.POSITIVE_INFINITY;\r\n let minY = Number.POSITIVE_INFINITY;\r\n let minZ = Number.POSITIVE_INFINITY;\r\n let maxX = Number.NEGATIVE_INFINITY;\r\n let maxY = Number.NEGATIVE_INFINITY;\r\n let maxZ = Number.NEGATIVE_INFINITY;\r\n getWrapSourceToTargetMatrix(this._source, this._target, this._sourceToTargetMatrix);\r\n const corners = [\r\n [sourceBBox.minPoint.x, sourceBBox.minPoint.y, sourceBBox.minPoint.z],\r\n [sourceBBox.minPoint.x, sourceBBox.minPoint.y, sourceBBox.maxPoint.z],\r\n [sourceBBox.minPoint.x, sourceBBox.maxPoint.y, sourceBBox.minPoint.z],\r\n [sourceBBox.minPoint.x, sourceBBox.maxPoint.y, sourceBBox.maxPoint.z],\r\n [sourceBBox.maxPoint.x, sourceBBox.minPoint.y, sourceBBox.minPoint.z],\r\n [sourceBBox.maxPoint.x, sourceBBox.minPoint.y, sourceBBox.maxPoint.z],\r\n [sourceBBox.maxPoint.x, sourceBBox.maxPoint.y, sourceBBox.minPoint.z],\r\n [sourceBBox.maxPoint.x, sourceBBox.maxPoint.y, sourceBBox.maxPoint.z]\r\n ];\r\n for (const corner of corners) {\r\n const x =\r\n this._sourceToTargetMatrix[0] * corner[0] +\r\n this._sourceToTargetMatrix[4] * corner[1] +\r\n this._sourceToTargetMatrix[8] * corner[2] +\r\n this._sourceToTargetMatrix[12];\r\n const y =\r\n this._sourceToTargetMatrix[1] * corner[0] +\r\n this._sourceToTargetMatrix[5] * corner[1] +\r\n this._sourceToTargetMatrix[9] * corner[2] +\r\n this._sourceToTargetMatrix[13];\r\n const z =\r\n this._sourceToTargetMatrix[2] * corner[0] +\r\n this._sourceToTargetMatrix[6] * corner[1] +\r\n this._sourceToTargetMatrix[10] * corner[2] +\r\n this._sourceToTargetMatrix[14];\r\n minX = Math.min(minX, x);\r\n minY = Math.min(minY, y);\r\n minZ = Math.min(minZ, z);\r\n maxX = Math.max(maxX, x);\r\n maxY = Math.max(maxY, y);\r\n maxZ = Math.max(maxZ, z);\r\n }\r\n const padding = Math.max(0.001, this._maxOffsetDistance);\r\n this._target?.setAnimatedBoundingBox?.(\r\n new BoundingBox(\r\n new Vector3(minX - padding, minY - padding, minZ - padding),\r\n new Vector3(maxX + padding, maxY + padding, maxZ + padding)\r\n )\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Creates wrap-binding cache data between a source cloth mesh and a target mesh.\r\n *\r\n * @public\r\n */\r\nexport async function createGPUClothWrapBindingData(\r\n source: any,\r\n target: any\r\n): Promise<GPUClothWrapBindingData> {\r\n if (!source?.primitive) {\r\n throw new Error('GPU cloth wrap failed: source mesh has no primitive.');\r\n }\r\n const sourcePrimitive = source.primitive as Primitive;\r\n const sourcePositions = await readPositionDataFromPrimitive(sourcePrimitive);\r\n const sourceIndices = toUInt32Indices(\r\n await readIndexDataFromPrimitive(sourcePrimitive, (sourcePositions.length / 3) >> 0)\r\n );\r\n return GPUClothWrapBinding.createBindingData(source, sourcePositions, sourceIndices, target);\r\n}\r\n\r\n/**\r\n * WebGPU-only cloth simulation entry.\r\n *\r\n * On non-WebGPU backends (including WebGL), the system is always disabled.\r\n *\r\n * @public\r\n */\r\nexport class GPUClothSystem {\r\n private _enabled: boolean;\r\n private _disabledReason: Nullable<string>;\r\n private _device: Nullable<AbstractDevice>;\r\n private _primitive: Nullable<Primitive>;\r\n private _originalPositionBuffer: Nullable<StructuredBuffer>;\r\n private _originalNormalBuffer: Nullable<StructuredBuffer>;\r\n private _positionBuffer: Nullable<StructuredBuffer>;\r\n private _sourceIndexData: Nullable<Uint32Array<ArrayBuffer>>;\r\n private _prevPositionBuffer: Nullable<GPUDataBuffer>;\r\n private _restPositionBuffer: Nullable<GPUDataBuffer>;\r\n private _prevRestPositionBuffer: Nullable<GPUDataBuffer>;\r\n private _invMassBuffer: Nullable<GPUDataBuffer>;\r\n private _neighborIndexBuffer: Nullable<GPUDataBuffer>;\r\n private _restLengthBuffer: Nullable<GPUDataBuffer>;\r\n private _integrateProgram: Nullable<GPUProgram>;\r\n private _constraintProgram: Nullable<GPUProgram>;\r\n private _faceNormalProgram: Nullable<GPUProgram>;\r\n private _vertexNormalProgram: Nullable<GPUProgram>;\r\n private _integrateBindGroup: Nullable<BindGroup>;\r\n private _constraintBindGroup: Nullable<BindGroup>;\r\n private _faceNormalBindGroup: Nullable<BindGroup>;\r\n private _vertexNormalBindGroup: Nullable<BindGroup>;\r\n private _vertexCount: number;\r\n private _workgroupCount: number;\r\n private _triangleCount: number;\r\n private _triangleWorkgroupCount: number;\r\n private _maxNeighbors: number;\r\n private _maxTrianglesPerVertex: number;\r\n private _gravity: Vector3;\r\n private _damping: number;\r\n private _dynamicFriction: number;\r\n private _staticFriction: number;\r\n private _stiffness: number;\r\n private _poseFollow: number;\r\n private _substeps: number;\r\n private _solverIterations: number;\r\n private _colliders: SpringCollider[];\r\n private _sphereColliderBuffer: Nullable<GPUDataBuffer>;\r\n private _capsuleColliderBuffer: Nullable<GPUDataBuffer>;\r\n private _planeColliderBuffer: Nullable<GPUDataBuffer>;\r\n private _sphereColliderData: Float32Array<ArrayBuffer>;\r\n private _capsuleColliderData: Float32Array<ArrayBuffer>;\r\n private _planeColliderData: Float32Array<ArrayBuffer>;\r\n private _triangleIndexBuffer: Nullable<GPUDataBuffer>;\r\n private _triangleNormalBuffer: Nullable<GPUDataBuffer>;\r\n private _vertexTriangleAdjacencyBuffer: Nullable<GPUDataBuffer>;\r\n private _normalBuffer: Nullable<StructuredBuffer>;\r\n private _rebuildNormals: boolean;\r\n private _collisionSpaceNode: any;\r\n private _sourcePositionData: Nullable<Float32Array<ArrayBuffer>>;\r\n private _skinningBlendIndices: Nullable<Float32Array<ArrayBuffer>>;\r\n private _skinningBlendWeights: Nullable<Float32Array<ArrayBuffer>>;\r\n private _dynamicRestPositionData: Nullable<Float32Array<ArrayBuffer>>;\r\n private _smoothedRestPositionData: Nullable<Float32Array<ArrayBuffer>>;\r\n private _usingDynamicRestPose: boolean;\r\n private _skinAnimationTarget: any;\r\n private _restoreSkinAnimation: Nullable<boolean>;\r\n private _boundScene: Nullable<Scene>;\r\n private _autoUpdate: boolean;\r\n private _workgroupSize: number;\r\n private _wrapBindings: GPUClothWrapBinding[];\r\n private _latestInputDeltaTime: number;\r\n private _smoothedSphereCenters: WeakMap<SphereCollider, Vector3>;\r\n private _smoothedCapsuleEndpoints: WeakMap<CapsuleCollider, { start: Vector3; end: Vector3 }>;\r\n private _smoothedPlaneData: WeakMap<PlaneCollider, { point: Vector3; normal: Vector3 }>;\r\n private _timeAccumulator: number;\r\n private _pendingAutoUpdateDeltaTime: number;\r\n private readonly _meshPostUpdateCallback: MeshUpdateCallback;\r\n\r\n constructor(options?: GPUClothSystemOptions) {\r\n this._device = resolveDevice(options?.device ?? null);\r\n const supported = isGPUClothSupported(this._device);\r\n const wantEnabled = options?.enabled ?? true;\r\n this._enabled = false;\r\n this._disabledReason = null;\r\n this._primitive = options?.primitive ?? null;\r\n this._originalPositionBuffer = null;\r\n this._originalNormalBuffer = null;\r\n this._positionBuffer = null;\r\n this._sourceIndexData = null;\r\n this._prevPositionBuffer = null;\r\n this._restPositionBuffer = null;\r\n this._prevRestPositionBuffer = null;\r\n this._invMassBuffer = null;\r\n this._neighborIndexBuffer = null;\r\n this._restLengthBuffer = null;\r\n this._integrateProgram = null;\r\n this._constraintProgram = null;\r\n this._faceNormalProgram = null;\r\n this._vertexNormalProgram = null;\r\n this._integrateBindGroup = null;\r\n this._constraintBindGroup = null;\r\n this._faceNormalBindGroup = null;\r\n this._vertexNormalBindGroup = null;\r\n this._vertexCount = 0;\r\n this._workgroupCount = 0;\r\n this._triangleCount = 0;\r\n this._triangleWorkgroupCount = 0;\r\n this._maxNeighbors = clamp(options?.maxNeighbors ?? DEFAULT_MAX_NEIGHBORS, 1, 64) | 0;\r\n this._maxTrianglesPerVertex = clamp(\r\n options?.maxTrianglesPerVertex ?? DEFAULT_MAX_TRIANGLES_PER_VERTEX,\r\n 1,\r\n 64\r\n );\r\n this._gravity = options?.gravity?.clone() ?? new Vector3(0, -9.8, 0);\r\n this._damping = clamp(options?.damping ?? DEFAULT_DAMPING, 0, 1);\r\n this._dynamicFriction = clamp(options?.dynamicFriction ?? DEFAULT_DYNAMIC_FRICTION, 0, 1);\r\n this._staticFriction = clamp(options?.staticFriction ?? DEFAULT_STATIC_FRICTION, 0, 1);\r\n this._stiffness = clamp(options?.stiffness ?? DEFAULT_STIFFNESS, 0, 1);\r\n this._poseFollow = clamp(options?.poseFollow ?? DEFAULT_POSE_FOLLOW, 0, 1);\r\n this._substeps = clamp(options?.substeps ?? DEFAULT_SUBSTEPS, 1, 8) | 0;\r\n this._solverIterations = Math.max(1, (options?.solverIterations ?? DEFAULT_SOLVER_ITERATIONS) | 0);\r\n this._colliders = [...(options?.colliders ?? [])];\r\n this._sphereColliderBuffer = null;\r\n this._capsuleColliderBuffer = null;\r\n this._planeColliderBuffer = null;\r\n this._sphereColliderData = new Float32Array(\r\n getInitialColliderBufferFloatCount(this._colliders, 'sphere', 4)\r\n );\r\n this._capsuleColliderData = new Float32Array(\r\n getInitialColliderBufferFloatCount(this._colliders, 'capsule', 8)\r\n );\r\n this._planeColliderData = new Float32Array(\r\n getInitialColliderBufferFloatCount(this._colliders, 'plane', 8)\r\n );\r\n this._triangleIndexBuffer = null;\r\n this._triangleNormalBuffer = null;\r\n this._vertexTriangleAdjacencyBuffer = null;\r\n this._normalBuffer = null;\r\n this._rebuildNormals = options?.rebuildNormals ?? true;\r\n this._collisionSpaceNode = options?.collisionSpaceNode ?? null;\r\n this._sourcePositionData = options?.positionData ? new Float32Array(options.positionData) : null;\r\n this._skinningBlendIndices = options?.skinningBlendIndices\r\n ? new Float32Array(options.skinningBlendIndices)\r\n : null;\r\n this._skinningBlendWeights = options?.skinningBlendWeights\r\n ? new Float32Array(options.skinningBlendWeights)\r\n : null;\r\n this._dynamicRestPositionData = null;\r\n this._smoothedRestPositionData = null;\r\n this._usingDynamicRestPose = false;\r\n this._skinAnimationTarget = null;\r\n this._restoreSkinAnimation = null;\r\n this._boundScene = null;\r\n this._autoUpdate = options?.autoUpdate ?? true;\r\n this._workgroupSize = clamp(options?.workgroupSize ?? DEFAULT_WORKGROUP_SIZE, 1, 256) | 0;\r\n this._wrapBindings = [];\r\n this._latestInputDeltaTime = 0;\r\n this._smoothedSphereCenters = new WeakMap();\r\n this._smoothedCapsuleEndpoints = new WeakMap();\r\n this._smoothedPlaneData = new WeakMap();\r\n this._timeAccumulator = 0;\r\n this._pendingAutoUpdateDeltaTime = 0;\r\n this._meshPostUpdateCallback = (_frameId, _elapsedInSeconds, deltaInSeconds) => {\r\n const dt = this._pendingAutoUpdateDeltaTime || deltaInSeconds;\r\n if (dt > 0) {\r\n this._pendingAutoUpdateDeltaTime = 0;\r\n this.update(dt);\r\n }\r\n };\r\n\r\n if (!supported) {\r\n this._disabledReason = 'GPU cloth is disabled: current backend is not WebGPU.';\r\n return;\r\n }\r\n\r\n if (!this._device) {\r\n this._disabledReason = 'GPU cloth is disabled: no active rendering device.';\r\n return;\r\n }\r\n\r\n if (!this._primitive) {\r\n this._disabledReason = 'GPU cloth is disabled: primitive is required.';\r\n return;\r\n }\r\n\r\n if (!options?.positionData || !options?.indexData) {\r\n this._disabledReason =\r\n 'GPU cloth is disabled: positionData and indexData are required. Use createFromPrimitive(...) to build them automatically.';\r\n return;\r\n }\r\n\r\n const vertexCount = (options.positionData.length / 3) >> 0;\r\n if (vertexCount <= 0 || options.positionData.length % 3 !== 0) {\r\n this._disabledReason = 'GPU cloth is disabled: invalid positionData.';\r\n return;\r\n }\r\n if (options.indexData.length < 3 || options.indexData.length % 3 !== 0) {\r\n this._disabledReason = 'GPU cloth is disabled: indexData must be triangle indices.';\r\n return;\r\n }\r\n\r\n const initialSimulationPositions =\r\n buildInitialSimulationPositions(options) ?? new Float32Array(options.positionData);\r\n const workgroupSize = this._workgroupSize;\r\n const indexDataU32 = toUInt32Indices(options.indexData);\r\n this._sourceIndexData = new Uint32Array(indexDataU32);\r\n const pinWeightArray = buildPinWeightArray(\r\n initialSimulationPositions,\r\n options.pinnedVertexWeights,\r\n options.pinnedVertexIndices\r\n );\r\n const neighbors = buildNeighborData(initialSimulationPositions, options.indexData, this._maxNeighbors);\r\n const adjacency = buildVertexTriangleAdjacency(vertexCount, indexDataU32, this._maxTrianglesPerVertex);\r\n if (!neighbors.hasConstraint) {\r\n this._disabledReason = 'GPU cloth is disabled: could not build cloth constraints from indexData.';\r\n return;\r\n }\r\n\r\n try {\r\n this._positionBuffer = this._device.createVertexBuffer('position_f32x3', initialSimulationPositions, {\r\n storage: true,\r\n managed: false\r\n });\r\n if (!this._positionBuffer) {\r\n this._disabledReason = 'GPU cloth is disabled: failed to create cloth position buffer.';\r\n return;\r\n }\r\n this._prevPositionBuffer = this._device.createBuffer(options.positionData.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._prevPositionBuffer.bufferSubData(0, initialSimulationPositions);\r\n\r\n this._restPositionBuffer = this._device.createBuffer(options.positionData.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._restPositionBuffer.bufferSubData(0, initialSimulationPositions);\r\n\r\n this._prevRestPositionBuffer = this._device.createBuffer(options.positionData.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._prevRestPositionBuffer.bufferSubData(0, initialSimulationPositions);\r\n\r\n const invMassArray = new Float32Array(vertexCount);\r\n for (let i = 0; i < vertexCount; i++) {\r\n invMassArray[i] = 1 - pinWeightArray[i];\r\n }\r\n this._invMassBuffer = this._device.createBuffer(invMassArray.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._invMassBuffer.bufferSubData(0, invMassArray);\r\n\r\n this._neighborIndexBuffer = this._device.createBuffer(neighbors.neighborIndices.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._neighborIndexBuffer.bufferSubData(0, neighbors.neighborIndices);\r\n\r\n this._restLengthBuffer = this._device.createBuffer(neighbors.restLengths.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._restLengthBuffer.bufferSubData(0, neighbors.restLengths);\r\n\r\n this._triangleIndexBuffer = this._device.createBuffer(indexDataU32.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._triangleIndexBuffer.bufferSubData(0, indexDataU32);\r\n\r\n this._triangleNormalBuffer = this._device.createBuffer(adjacency.triangleCount * 3 * 4, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n\r\n this._vertexTriangleAdjacencyBuffer = this._device.createBuffer(adjacency.adjacency.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._vertexTriangleAdjacencyBuffer.bufferSubData(0, adjacency.adjacency);\r\n\r\n this._sphereColliderBuffer = this._device.createBuffer(this._sphereColliderData.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._sphereColliderBuffer.bufferSubData(0, this._sphereColliderData);\r\n\r\n this._capsuleColliderBuffer = this._device.createBuffer(this._capsuleColliderData.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._capsuleColliderBuffer.bufferSubData(0, this._capsuleColliderData);\r\n\r\n this._planeColliderBuffer = this._device.createBuffer(this._planeColliderData.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._planeColliderBuffer.bufferSubData(0, this._planeColliderData);\r\n\r\n this._integrateProgram = createIntegrateProgram(this._device, workgroupSize);\r\n this._constraintProgram = createConstraintProgram(this._device, workgroupSize);\r\n if (!this._integrateProgram || !this._constraintProgram) {\r\n this._disabledReason = 'GPU cloth is disabled: failed to create compute programs.';\r\n return;\r\n }\r\n\r\n this._integrateBindGroup = this._device.createBindGroup(this._integrateProgram.bindGroupLayouts[0]);\r\n this._integrateBindGroup.setBuffer('positions', this._positionBuffer!);\r\n this._integrateBindGroup.setBuffer('prevPositions', this._prevPositionBuffer);\r\n this._integrateBindGroup.setBuffer('restPositions', this._restPositionBuffer);\r\n this._integrateBindGroup.setBuffer('prevRestPositions', this._prevRestPositionBuffer);\r\n this._integrateBindGroup.setBuffer('invMass', this._invMassBuffer);\r\n this._integrateBindGroup.setBuffer('sphereData', this._sphereColliderBuffer);\r\n this._integrateBindGroup.setBuffer('capsuleData', this._capsuleColliderBuffer);\r\n this._integrateBindGroup.setBuffer('planeData', this._planeColliderBuffer);\r\n this._integrateBindGroup.setValue('vertexCount', vertexCount);\r\n this._integrateBindGroup.setValue('damping', this._damping);\r\n this._integrateBindGroup.setValue('gravity', this._gravity);\r\n this._integrateBindGroup.setValue('sphereCount', 0);\r\n this._integrateBindGroup.setValue('capsuleCount', 0);\r\n this._integrateBindGroup.setValue('planeCount', 0);\r\n this._integrateBindGroup.setValue('dynamicFriction', this._dynamicFriction);\r\n this._integrateBindGroup.setValue('staticFriction', this._staticFriction);\r\n this._integrateBindGroup.setValue('minDistance', 1e-5);\r\n\r\n this._constraintBindGroup = this._device.createBindGroup(this._constraintProgram.bindGroupLayouts[0]);\r\n this._constraintBindGroup.setBuffer('positions', this._positionBuffer!);\r\n this._constraintBindGroup.setBuffer('restPositions', this._restPositionBuffer);\r\n this._constraintBindGroup.setBuffer('invMass', this._invMassBuffer);\r\n this._constraintBindGroup.setBuffer('neighborIndices', this._neighborIndexBuffer);\r\n this._constraintBindGroup.setBuffer('restLengths', this._restLengthBuffer);\r\n this._constraintBindGroup.setBuffer('sphereData', this._sphereColliderBuffer);\r\n this._constraintBindGroup.setBuffer('capsuleData', this._capsuleColliderBuffer);\r\n this._constraintBindGroup.setBuffer('planeData', this._planeColliderBuffer);\r\n this._constraintBindGroup.setValue('vertexCount', vertexCount);\r\n this._constraintBindGroup.setValue('maxNeighbors', this._maxNeighbors);\r\n this._constraintBindGroup.setValue('stiffness', this._stiffness);\r\n this._constraintBindGroup.setValue('poseFollow', this.getSubstepPoseFollow());\r\n this._constraintBindGroup.setValue('sphereCount', 0);\r\n this._constraintBindGroup.setValue('capsuleCount', 0);\r\n this._constraintBindGroup.setValue('planeCount', 0);\r\n this._constraintBindGroup.setValue('dynamicFriction', this._dynamicFriction);\r\n this._constraintBindGroup.setValue('staticFriction', this._staticFriction);\r\n this._constraintBindGroup.setValue('minDistance', 1e-5);\r\n\r\n if (this._rebuildNormals) {\r\n this._normalBuffer = this._device.createVertexBuffer(\r\n 'normal_f32x3',\r\n new Float32Array(vertexCount * 3),\r\n {\r\n storage: true,\r\n managed: false\r\n }\r\n );\r\n if (this._normalBuffer) {\r\n this._faceNormalProgram = createFaceNormalProgram(this._device, workgroupSize);\r\n this._vertexNormalProgram = createVertexNormalProgram(this._device, workgroupSize);\r\n if (!this._faceNormalProgram || !this._vertexNormalProgram) {\r\n this._disabledReason = 'GPU cloth is disabled: failed to create normal reconstruction programs.';\r\n return;\r\n }\r\n this._faceNormalBindGroup = this._device.createBindGroup(\r\n this._faceNormalProgram.bindGroupLayouts[0]\r\n );\r\n this._faceNormalBindGroup.setBuffer('positions', this._positionBuffer!);\r\n this._faceNormalBindGroup.setBuffer('triangleIndices', this._triangleIndexBuffer);\r\n this._faceNormalBindGroup.setBuffer('triangleNormals', this._triangleNormalBuffer);\r\n this._faceNormalBindGroup.setValue('triangleCount', adjacency.triangleCount);\r\n this._faceNormalBindGroup.setValue('minDistance', 1e-5);\r\n\r\n this._vertexNormalBindGroup = this._device.createBindGroup(\r\n this._vertexNormalProgram.bindGroupLayouts[0]\r\n );\r\n this._vertexNormalBindGroup.setBuffer('triangleNormals', this._triangleNormalBuffer);\r\n this._vertexNormalBindGroup.setBuffer(\r\n 'vertexTriangleAdjacency',\r\n this._vertexTriangleAdjacencyBuffer\r\n );\r\n this._vertexNormalBindGroup.setBuffer('vertexNormals', this._normalBuffer);\r\n this._vertexNormalBindGroup.setValue('vertexCount', vertexCount);\r\n this._vertexNormalBindGroup.setValue('maxTrianglesPerVertex', this._maxTrianglesPerVertex);\r\n this._vertexNormalBindGroup.setValue('minDistance', 1e-5);\r\n }\r\n }\r\n\r\n this._originalPositionBuffer = this._primitive.getVertexBuffer('position');\r\n retainObject(this._originalPositionBuffer);\r\n this._primitive.removeVertexBuffer('position');\r\n this._primitive.setVertexBuffer(this._positionBuffer!);\r\n if (this._normalBuffer) {\r\n this._originalNormalBuffer = this._primitive.getVertexBuffer('normal');\r\n retainObject(this._originalNormalBuffer);\r\n this._primitive.removeVertexBuffer('normal');\r\n this._primitive.setVertexBuffer(this._normalBuffer);\r\n }\r\n this._vertexCount = vertexCount;\r\n this._workgroupCount = Math.max(1, Math.ceil(vertexCount / workgroupSize));\r\n this._triangleCount = adjacency.triangleCount;\r\n this._triangleWorkgroupCount = Math.max(1, Math.ceil(this._triangleCount / workgroupSize));\r\n this.disableTargetSkinning();\r\n this.updateTargetBoundingBox(initialSimulationPositions);\r\n this.updateColliderBuffers();\r\n if (this._autoUpdate && options?.scene) {\r\n this.bindToScene(options.scene);\r\n }\r\n this._enabled = !!wantEnabled;\r\n this._disabledReason = null;\r\n } catch (err) {\r\n this._disabledReason = `GPU cloth initialization failed: ${\r\n err instanceof Error ? err.message : String(err)\r\n }`;\r\n this._enabled = false;\r\n }\r\n }\r\n\r\n static async createFromPrimitive(\r\n primitive: Primitive,\r\n options?: Omit<GPUClothSystemOptions, 'primitive' | 'positionData' | 'indexData'>\r\n ) {\r\n const positionData = await readPositionDataFromPrimitive(primitive);\r\n const skinningData = await readSkinningDataFromPrimitive(primitive);\r\n const indexData = await readIndexDataFromPrimitive(primitive, (positionData.length / 3) >> 0);\r\n return new GPUClothSystem({\r\n ...options,\r\n primitive,\r\n positionData,\r\n indexData,\r\n skinningBlendIndices: skinningData?.blendIndices ?? undefined,\r\n skinningBlendWeights: skinningData?.blendWeights ?? undefined\r\n });\r\n }\r\n\r\n static async createFromMesh(\r\n mesh: { primitive: Nullable<Primitive>; scene?: Nullable<Scene> },\r\n options?: Omit<GPUClothSystemOptions, 'primitive' | 'positionData' | 'indexData' | 'scene'>\r\n ) {\r\n if (!mesh.primitive) {\r\n throw new Error('GPU cloth initialization failed: mesh has no primitive.');\r\n }\r\n return GPUClothSystem.createFromPrimitive(mesh.primitive, {\r\n ...options,\r\n collisionSpaceNode: mesh,\r\n scene: mesh.scene ?? null\r\n });\r\n }\r\n\r\n async setWrapTargets(targets: any[]) {\r\n this.clearWrapTargets();\r\n if (\r\n !this.supported ||\r\n !this._device ||\r\n !this._positionBuffer ||\r\n !this._sourcePositionData ||\r\n !this._sourceIndexData\r\n ) {\r\n return;\r\n }\r\n const uniqueTargets = [\r\n ...new Set((targets ?? []).filter((target) => target?.primitive && target !== this._collisionSpaceNode))\r\n ];\r\n for (const target of uniqueTargets) {\r\n try {\r\n const binding = await GPUClothWrapBinding.create(\r\n this._device,\r\n this._collisionSpaceNode,\r\n this._positionBuffer,\r\n this._sourcePositionData,\r\n this._sourceIndexData,\r\n target,\r\n this._workgroupSize\r\n );\r\n this._wrapBindings.push(binding);\r\n } catch (err) {\r\n console.error('GPU cloth wrap target initialization failed:', err);\r\n }\r\n }\r\n }\r\n\r\n setWrapTargetsFromBindingData(targets: GPUClothWrapBindingTarget[]) {\r\n this.clearWrapTargets();\r\n if (\r\n !this.supported ||\r\n !this._device ||\r\n !this._positionBuffer ||\r\n !this._sourcePositionData ||\r\n !this._sourceIndexData\r\n ) {\r\n return;\r\n }\r\n const seen = new Set<any>();\r\n for (const entry of targets ?? []) {\r\n const target = entry?.target;\r\n if (!target?.primitive || target === this._collisionSpaceNode || seen.has(target)) {\r\n continue;\r\n }\r\n seen.add(target);\r\n try {\r\n const binding = GPUClothWrapBinding.createFromData(\r\n this._device,\r\n this._collisionSpaceNode,\r\n this._positionBuffer,\r\n this._sourcePositionData,\r\n this._sourceIndexData,\r\n target,\r\n this._workgroupSize,\r\n entry.data\r\n );\r\n this._wrapBindings.push(binding);\r\n } catch (err) {\r\n console.error('GPU cloth wrap target binding cache initialization failed:', err);\r\n }\r\n }\r\n }\r\n\r\n clearWrapTargets() {\r\n if (this._wrapBindings.length === 0) {\r\n return;\r\n }\r\n for (const binding of this._wrapBindings) {\r\n binding.dispose();\r\n }\r\n this._wrapBindings = [];\r\n }\r\n\r\n get enabled() {\r\n return this._enabled;\r\n }\r\n\r\n set enabled(value: boolean) {\r\n const enabled = this.supported && !!value;\r\n if (this._enabled !== enabled) {\r\n this.resetSimulationTiming();\r\n }\r\n this._enabled = enabled;\r\n }\r\n\r\n get supported() {\r\n return this._disabledReason === null;\r\n }\r\n\r\n get disabledReason() {\r\n return this._disabledReason;\r\n }\r\n\r\n get colliders() {\r\n return this._colliders;\r\n }\r\n\r\n set colliders(value: SpringCollider[]) {\r\n this._colliders = [...(value ?? [])];\r\n this.resetColliderSmoothing();\r\n this.updateColliderBuffers();\r\n }\r\n\r\n addCollider(collider: SpringCollider) {\r\n this._colliders.push(collider);\r\n this.updateColliderBuffers();\r\n }\r\n\r\n removeCollider(collider: SpringCollider) {\r\n const idx = this._colliders.indexOf(collider);\r\n if (idx >= 0) {\r\n this._colliders.splice(idx, 1);\r\n this.updateColliderBuffers();\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n clearColliders() {\r\n this._colliders.length = 0;\r\n this.resetColliderSmoothing();\r\n this.updateColliderBuffers();\r\n }\r\n\r\n get gravity() {\r\n return this._gravity;\r\n }\r\n\r\n set gravity(value: Vector3) {\r\n this._gravity.set(value);\r\n }\r\n\r\n get damping() {\r\n return this._damping;\r\n }\r\n\r\n set damping(value: number) {\r\n this._damping = clamp(value, 0, 1);\r\n }\r\n\r\n get dynamicFriction() {\r\n return this._dynamicFriction;\r\n }\r\n\r\n set dynamicFriction(value: number) {\r\n this._dynamicFriction = clamp(value, 0, 1);\r\n }\r\n\r\n get staticFriction() {\r\n return this._staticFriction;\r\n }\r\n\r\n set staticFriction(value: number) {\r\n this._staticFriction = clamp(value, 0, 1);\r\n }\r\n\r\n get stiffness() {\r\n return this._stiffness;\r\n }\r\n\r\n set stiffness(value: number) {\r\n this._stiffness = clamp(value, 0, 1);\r\n }\r\n\r\n get poseFollow() {\r\n return this._poseFollow;\r\n }\r\n\r\n set poseFollow(value: number) {\r\n this._poseFollow = clamp(value, 0, 1);\r\n }\r\n\r\n get solverIterations() {\r\n return this._solverIterations;\r\n }\r\n\r\n set solverIterations(value: number) {\r\n this._solverIterations = Math.max(1, value | 0);\r\n }\r\n\r\n get substeps() {\r\n return this._substeps;\r\n }\r\n\r\n set substeps(value: number) {\r\n this._substeps = clamp(value, 1, 8) | 0;\r\n }\r\n\r\n get vertexCount() {\r\n return this._vertexCount;\r\n }\r\n\r\n bindToScene(scene: Nullable<Scene>) {\r\n if (this._boundScene === scene) {\r\n return;\r\n }\r\n this.detachAutoUpdateTarget();\r\n if (this._boundScene) {\r\n this._boundScene.off('update', this._onSceneUpdate, this);\r\n }\r\n this._boundScene = scene ?? null;\r\n if (this._boundScene) {\r\n this._boundScene.on('update', this._onSceneUpdate, this);\r\n this.attachAutoUpdateTarget();\r\n }\r\n }\r\n\r\n unbindFromScene() {\r\n this.bindToScene(null);\r\n }\r\n\r\n update(deltaTime: number) {\r\n if (!this._enabled) {\r\n return;\r\n }\r\n if (\r\n !this._device ||\r\n !this._integrateProgram ||\r\n !this._constraintProgram ||\r\n !this._integrateBindGroup ||\r\n !this._constraintBindGroup\r\n ) {\r\n return;\r\n }\r\n const frameDt = clamp(Number(deltaTime) || 0, 0, MAX_ACCUMULATED_SIMULATION_TIME);\r\n this._latestInputDeltaTime = frameDt;\r\n this.updateSkinnedRestPositions(frameDt);\r\n this.updateColliderBuffers(frameDt);\r\n if (frameDt <= 0) {\r\n return;\r\n }\r\n this._timeAccumulator = Math.min(this._timeAccumulator + frameDt, MAX_ACCUMULATED_SIMULATION_TIME);\r\n const stepCount = Math.min(\r\n MAX_SIMULATION_STEPS_PER_UPDATE,\r\n Math.floor((this._timeAccumulator + 1e-8) / FIXED_SIMULATION_TIME_STEP)\r\n );\r\n if (stepCount <= 0) {\r\n return;\r\n }\r\n this._timeAccumulator = Math.max(0, this._timeAccumulator - stepCount * FIXED_SIMULATION_TIME_STEP);\r\n this._device.pushDeviceStates();\r\n try {\r\n for (let step = 0; step < stepCount; step++) {\r\n this.simulateStep(FIXED_SIMULATION_TIME_STEP);\r\n }\r\n this.updateSimulationOutputs();\r\n } finally {\r\n this._device.popDeviceStates();\r\n }\r\n }\r\n\r\n dispose() {\r\n this.unbindFromScene();\r\n this.clearWrapTargets();\r\n this.restoreTargetSkinning();\r\n if (this._primitive) {\r\n if (this._positionBuffer) {\r\n this._primitive.removeVertexBuffer('position');\r\n if (this._originalPositionBuffer) {\r\n this._primitive.setVertexBuffer(this._originalPositionBuffer);\r\n }\r\n }\r\n if (this._normalBuffer || this._originalNormalBuffer) {\r\n this._primitive.removeVertexBuffer('normal');\r\n if (this._originalNormalBuffer) {\r\n this._primitive.setVertexBuffer(this._originalNormalBuffer);\r\n }\r\n }\r\n }\r\n this._integrateBindGroup?.dispose();\r\n this._integrateBindGroup = null;\r\n this._constraintBindGroup?.dispose();\r\n this._constraintBindGroup = null;\r\n this._faceNormalBindGroup?.dispose();\r\n this._faceNormalBindGroup = null;\r\n this._vertexNormalBindGroup?.dispose();\r\n this._vertexNormalBindGroup = null;\r\n this._integrateProgram?.dispose();\r\n this._integrateProgram = null;\r\n this._constraintProgram?.dispose();\r\n this._constraintProgram = null;\r\n this._faceNormalProgram?.dispose();\r\n this._faceNormalProgram = null;\r\n this._vertexNormalProgram?.dispose();\r\n this._vertexNormalProgram = null;\r\n this._prevPositionBuffer?.dispose();\r\n this._prevPositionBuffer = null;\r\n this._restPositionBuffer?.dispose();\r\n this._restPositionBuffer = null;\r\n this._prevRestPositionBuffer?.dispose();\r\n this._prevRestPositionBuffer = null;\r\n this._invMassBuffer?.dispose();\r\n this._invMassBuffer = null;\r\n this._neighborIndexBuffer?.dispose();\r\n this._neighborIndexBuffer = null;\r\n this._restLengthBuffer?.dispose();\r\n this._restLengthBuffer = null;\r\n this._triangleIndexBuffer?.dispose();\r\n this._triangleIndexBuffer = null;\r\n this._triangleNormalBuffer?.dispose();\r\n this._triangleNormalBuffer = null;\r\n this._vertexTriangleAdjacencyBuffer?.dispose();\r\n this._vertexTriangleAdjacencyBuffer = null;\r\n this._sphereColliderBuffer?.dispose();\r\n this._sphereColliderBuffer = null;\r\n this._capsuleColliderBuffer?.dispose();\r\n this._capsuleColliderBuffer = null;\r\n this._planeColliderBuffer?.dispose();\r\n this._planeColliderBuffer = null;\r\n releaseObject(this._originalPositionBuffer);\r\n this._originalPositionBuffer = null;\r\n releaseObject(this._originalNormalBuffer);\r\n this._originalNormalBuffer = null;\r\n this._enabled = false;\r\n this.resetSimulationTiming();\r\n }\r\n\r\n private simulateStep(deltaTime: number) {\r\n const substeps = this._substeps;\r\n const substepDt = deltaTime / substeps;\r\n try {\r\n for (let substep = 0; substep < substeps; substep++) {\r\n this._integrateBindGroup!.setValue('deltaTime', substepDt);\r\n this._integrateBindGroup!.setValue('damping', this._damping);\r\n this._integrateBindGroup!.setValue('gravity', this._gravity);\r\n this._integrateBindGroup!.setValue('dynamicFriction', this._dynamicFriction);\r\n this._integrateBindGroup!.setValue('staticFriction', this._staticFriction);\r\n this._device!.setProgram(this._integrateProgram!);\r\n this._device!.setBindGroup(0, this._integrateBindGroup!);\r\n this._device!.compute(this._workgroupCount, 1, 1);\r\n\r\n this._constraintBindGroup!.setValue('stiffness', this._stiffness);\r\n this._constraintBindGroup!.setValue('dynamicFriction', this._dynamicFriction);\r\n this._constraintBindGroup!.setValue('staticFriction', this._staticFriction);\r\n this._device!.setProgram(this._constraintProgram!);\r\n this._device!.setBindGroup(0, this._constraintBindGroup!);\r\n for (let i = 0; i < this._solverIterations; i++) {\r\n this._constraintBindGroup!.setValue(\r\n 'poseFollow',\r\n i === this._solverIterations - 1 ? this.getSubstepPoseFollow() : 0\r\n );\r\n this._device!.compute(this._workgroupCount, 1, 1);\r\n }\r\n }\r\n } finally {\r\n // Advance the animated rest pose once per fixed simulation step so a\r\n // single dropped frame does not inject the same pose delta repeatedly.\r\n this.commitRestPositions();\r\n }\r\n }\r\n\r\n private updateSimulationOutputs() {\r\n if (\r\n this._rebuildNormals &&\r\n this._faceNormalProgram &&\r\n this._vertexNormalProgram &&\r\n this._faceNormalBindGroup &&\r\n this._vertexNormalBindGroup\r\n ) {\r\n this._device!.setProgram(this._faceNormalProgram);\r\n this._device!.setBindGroup(0, this._faceNormalBindGroup);\r\n this._device!.compute(this._triangleWorkgroupCount, 1, 1);\r\n\r\n this._device!.setProgram(this._vertexNormalProgram);\r\n this._device!.setBindGroup(0, this._vertexNormalBindGroup);\r\n this._device!.compute(this._workgroupCount, 1, 1);\r\n }\r\n for (const binding of this._wrapBindings) {\r\n binding.update();\r\n }\r\n }\r\n\r\n private resetSimulationTiming() {\r\n this._timeAccumulator = 0;\r\n this._latestInputDeltaTime = 0;\r\n this._pendingAutoUpdateDeltaTime = 0;\r\n this._smoothedRestPositionData = null;\r\n this.resetColliderSmoothing();\r\n }\r\n\r\n private resetColliderSmoothing() {\r\n this._smoothedSphereCenters = new WeakMap();\r\n this._smoothedCapsuleEndpoints = new WeakMap();\r\n this._smoothedPlaneData = new WeakMap();\r\n }\r\n\r\n private updateColliderBuffers(deltaTime = this._latestInputDeltaTime) {\r\n if (!this._device || !this._integrateBindGroup) {\r\n return;\r\n }\r\n\r\n const spheres: { collider: SphereCollider; center: Vector3 }[] = [];\r\n const capsules: { collider: CapsuleCollider; start: Vector3; end: Vector3 }[] = [];\r\n const planes: { collider: PlaneCollider; point: Vector3; normal: Vector3 }[] = [];\r\n const blend = this.getTemporalBlendFactor(deltaTime, DEFAULT_COLLIDER_SMOOTHING_TIME);\r\n for (const collider of this._colliders) {\r\n if (!collider?.enabled) {\r\n continue;\r\n }\r\n if (collider.node) {\r\n updateColliderFromNode(collider);\r\n }\r\n if (collider.type === 'sphere') {\r\n const sphere = collider as SphereCollider;\r\n spheres.push({\r\n collider: sphere,\r\n center: this.getSmoothedSphereCenter(sphere, blend)\r\n });\r\n } else if (collider.type === 'capsule') {\r\n const capsule = collider as CapsuleCollider;\r\n const smoothed = this.getSmoothedCapsuleEndpoints(capsule, blend);\r\n capsules.push({\r\n collider: capsule,\r\n start: smoothed.start,\r\n end: smoothed.end\r\n });\r\n } else if (collider.type === 'plane') {\r\n const plane = collider as PlaneCollider;\r\n const smoothed = this.getSmoothedPlaneData(plane, blend);\r\n planes.push({\r\n collider: plane,\r\n point: smoothed.point,\r\n normal: smoothed.normal\r\n });\r\n }\r\n }\r\n\r\n const sphereData = new Float32Array(Math.max(1, spheres.length) * 4);\r\n for (let i = 0; i < spheres.length; i++) {\r\n const base = i * 4;\r\n const center = this.toCollisionSpacePoint(spheres[i].center);\r\n sphereData[base] = center.x;\r\n sphereData[base + 1] = center.y;\r\n sphereData[base + 2] = center.z;\r\n sphereData[base + 3] = this.toCollisionSpaceRadius(spheres[i].collider.radius);\r\n }\r\n\r\n const capsuleData = new Float32Array(Math.max(1, capsules.length) * 8);\r\n for (let i = 0; i < capsules.length; i++) {\r\n const base = i * 8;\r\n const start = this.toCollisionSpacePoint(capsules[i].start);\r\n const end = this.toCollisionSpacePoint(capsules[i].end);\r\n const axis = Vector3.sub(capsules[i].end, capsules[i].start, new Vector3());\r\n capsuleData[base] = start.x;\r\n capsuleData[base + 1] = start.y;\r\n capsuleData[base + 2] = start.z;\r\n capsuleData[base + 3] = this.toCollisionSpaceRadius(capsules[i].collider.radius, axis);\r\n capsuleData[base + 4] = end.x;\r\n capsuleData[base + 5] = end.y;\r\n capsuleData[base + 6] = end.z;\r\n capsuleData[base + 7] = 0;\r\n }\r\n\r\n const planeData = new Float32Array(Math.max(1, planes.length) * 8);\r\n for (let i = 0; i < planes.length; i++) {\r\n const base = i * 8;\r\n const point = this.toCollisionSpacePoint(planes[i].point);\r\n const normal = this.toCollisionSpaceVector(planes[i].normal);\r\n if (normal.magnitudeSq > 1e-8) {\r\n normal.inplaceNormalize();\r\n } else {\r\n normal.setXYZ(0, 1, 0);\r\n }\r\n planeData[base] = point.x;\r\n planeData[base + 1] = point.y;\r\n planeData[base + 2] = point.z;\r\n planeData[base + 3] = 0;\r\n planeData[base + 4] = normal.x;\r\n planeData[base + 5] = normal.y;\r\n planeData[base + 6] = normal.z;\r\n planeData[base + 7] = 0;\r\n }\r\n\r\n if (!this._sphereColliderBuffer || this._sphereColliderBuffer.byteLength < sphereData.byteLength) {\r\n if (this._sphereColliderBuffer) {\r\n // Drain queued uploads for the old buffer before replacing it.\r\n this._device.flush();\r\n this._sphereColliderBuffer.dispose();\r\n }\r\n this._sphereColliderBuffer = this._device.createBuffer(sphereData.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._integrateBindGroup.setBuffer('sphereData', this._sphereColliderBuffer);\r\n this._constraintBindGroup?.setBuffer('sphereData', this._sphereColliderBuffer);\r\n }\r\n this._sphereColliderBuffer.bufferSubData(0, sphereData);\r\n\r\n if (!this._capsuleColliderBuffer || this._capsuleColliderBuffer.byteLength < capsuleData.byteLength) {\r\n if (this._capsuleColliderBuffer) {\r\n // Drain queued uploads for the old buffer before replacing it.\r\n this._device.flush();\r\n this._capsuleColliderBuffer.dispose();\r\n }\r\n this._capsuleColliderBuffer = this._device.createBuffer(capsuleData.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._integrateBindGroup.setBuffer('capsuleData', this._capsuleColliderBuffer);\r\n this._constraintBindGroup?.setBuffer('capsuleData', this._capsuleColliderBuffer);\r\n }\r\n this._capsuleColliderBuffer.bufferSubData(0, capsuleData);\r\n\r\n if (!this._planeColliderBuffer || this._planeColliderBuffer.byteLength < planeData.byteLength) {\r\n if (this._planeColliderBuffer) {\r\n // Drain queued uploads for the old buffer before replacing it.\r\n this._device.flush();\r\n this._planeColliderBuffer.dispose();\r\n }\r\n this._planeColliderBuffer = this._device.createBuffer(planeData.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._integrateBindGroup.setBuffer('planeData', this._planeColliderBuffer);\r\n this._constraintBindGroup?.setBuffer('planeData', this._planeColliderBuffer);\r\n }\r\n this._planeColliderBuffer.bufferSubData(0, planeData);\r\n\r\n this._integrateBindGroup.setValue('sphereCount', spheres.length);\r\n this._integrateBindGroup.setValue('capsuleCount', capsules.length);\r\n this._integrateBindGroup.setValue('planeCount', planes.length);\r\n this._constraintBindGroup?.setValue('sphereCount', spheres.length);\r\n this._constraintBindGroup?.setValue('capsuleCount', capsules.length);\r\n this._constraintBindGroup?.setValue('planeCount', planes.length);\r\n }\r\n\r\n private getSubstepPoseFollow() {\r\n const effectivePoseFollow = this.getEffectivePoseFollow();\r\n if (effectivePoseFollow <= 0) {\r\n return 0;\r\n }\r\n const totalPoseFollowApplications = Math.max(1, this._substeps);\r\n return totalPoseFollowApplications > 1\r\n ? 1 - Math.pow(Math.max(0, 1 - effectivePoseFollow), 1 / totalPoseFollowApplications)\r\n : effectivePoseFollow;\r\n }\r\n\r\n private getEffectivePoseFollow() {\r\n // Cloth uses a dense per-vertex animated target, so the same numeric follow value\r\n // feels much stronger than sparse spring chains. Square the UI value to keep the\r\n // low range usable while preserving 1 => full follow.\r\n return this._poseFollow * this._poseFollow;\r\n }\r\n\r\n private toCollisionSpacePoint(worldPoint: Vector3): Vector3 {\r\n const invWorldMatrix = this._collisionSpaceNode?.invWorldMatrix;\r\n if (!invWorldMatrix?.transformPointAffine) {\r\n return worldPoint;\r\n }\r\n return invWorldMatrix.transformPointAffine(worldPoint, new Vector3());\r\n }\r\n\r\n private toCollisionSpaceVector(worldVector: Vector3): Vector3 {\r\n const invWorldMatrix = this._collisionSpaceNode?.invWorldMatrix;\r\n if (!invWorldMatrix?.transformVectorAffine) {\r\n return worldVector;\r\n }\r\n return invWorldMatrix.transformVectorAffine(worldVector, new Vector3());\r\n }\r\n\r\n private toCollisionSpaceRadius(worldRadius: number, axisWorld?: Vector3): number {\r\n const radius = Math.max(0, Number(worldRadius) || 0);\r\n if (radius <= 0) {\r\n return 0;\r\n }\r\n const invWorldMatrix = this._collisionSpaceNode?.invWorldMatrix;\r\n if (!invWorldMatrix?.transformVectorAffine) {\r\n return radius;\r\n }\r\n if (axisWorld && axisWorld.magnitudeSq > 1e-6) {\r\n const axis = axisWorld.clone().inplaceNormalize();\r\n let tangent = Vector3.cross(\r\n Math.abs(axis.y) < 0.999 ? Vector3.axisPY() : Vector3.axisPX(),\r\n axis,\r\n new Vector3()\r\n );\r\n if (tangent.magnitudeSq <= 1e-6) {\r\n tangent = Vector3.cross(Vector3.axisPZ(), axis, tangent);\r\n }\r\n tangent.inplaceNormalize();\r\n const bitangent = Vector3.cross(axis, tangent, new Vector3()).inplaceNormalize();\r\n const localTangent = this.toCollisionSpaceVector(\r\n Vector3.scale(tangent, radius, new Vector3())\r\n ).magnitude;\r\n const localBitangent = this.toCollisionSpaceVector(\r\n Vector3.scale(bitangent, radius, new Vector3())\r\n ).magnitude;\r\n return Math.max(1e-6, (localTangent + localBitangent) * 0.5);\r\n }\r\n const localX = this.toCollisionSpaceVector(new Vector3(radius, 0, 0)).magnitude;\r\n const localY = this.toCollisionSpaceVector(new Vector3(0, radius, 0)).magnitude;\r\n const localZ = this.toCollisionSpaceVector(new Vector3(0, 0, radius)).magnitude;\r\n return Math.max(1e-6, (localX + localY + localZ) / 3);\r\n }\r\n\r\n private _onSceneUpdate() {\r\n const dt = (getDevice().frameInfo.elapsedFrame || 16.6667) * 0.001;\r\n if (this.hasAutoUpdateTarget()) {\r\n this._pendingAutoUpdateDeltaTime = dt;\r\n this._collisionSpaceNode?.scene?.queueUpdateNode?.(this._collisionSpaceNode);\r\n return;\r\n }\r\n this.update(dt);\r\n }\r\n private hasAutoUpdateTarget() {\r\n const target = this._collisionSpaceNode;\r\n return !!(target?.addPostUpdateCallback && target?.removePostUpdateCallback);\r\n }\r\n private attachAutoUpdateTarget() {\r\n if (this.hasAutoUpdateTarget()) {\r\n this._collisionSpaceNode.addPostUpdateCallback(this._meshPostUpdateCallback);\r\n }\r\n }\r\n private detachAutoUpdateTarget() {\r\n if (this.hasAutoUpdateTarget()) {\r\n this._collisionSpaceNode.removePostUpdateCallback(this._meshPostUpdateCallback);\r\n }\r\n this._pendingAutoUpdateDeltaTime = 0;\r\n }\r\n private updateSkinnedRestPositions(deltaTime = 0) {\r\n if (\r\n !this._sourcePositionData ||\r\n !this._skinningBlendIndices ||\r\n !this._skinningBlendWeights ||\r\n !this._restPositionBuffer ||\r\n !this._prevRestPositionBuffer\r\n ) {\r\n return;\r\n }\r\n const target = this._collisionSpaceNode;\r\n const skeletonId = String(target?.skeletonName ?? '');\r\n const skeleton =\r\n skeletonId && typeof target?.findSkeletonById === 'function'\r\n ? target.findSkeletonById(skeletonId)\r\n : null;\r\n if (skeleton?.skinPositionsToLocal && target?.invWorldMatrix) {\r\n const restPositions =\r\n this._dynamicRestPositionData &&\r\n this._dynamicRestPositionData.length === this._sourcePositionData.length\r\n ? this._dynamicRestPositionData\r\n : new Float32Array(this._sourcePositionData.length);\r\n skeleton.skinPositionsToLocal(\r\n this._sourcePositionData,\r\n this._skinningBlendIndices,\r\n this._skinningBlendWeights,\r\n target.invWorldMatrix,\r\n restPositions\r\n );\r\n const smoothedRestPositions = this.smoothRestPositions(restPositions, deltaTime, restPositions);\r\n this._dynamicRestPositionData = restPositions;\r\n this._restPositionBuffer.bufferSubData(0, smoothedRestPositions);\r\n this._usingDynamicRestPose = true;\r\n this.updateTargetBoundingBox(smoothedRestPositions);\r\n return;\r\n }\r\n if (this._usingDynamicRestPose) {\r\n this._restPositionBuffer.bufferSubData(0, this._sourcePositionData);\r\n this._prevRestPositionBuffer.bufferSubData(0, this._sourcePositionData);\r\n this._usingDynamicRestPose = false;\r\n this._dynamicRestPositionData = null;\r\n this._smoothedRestPositionData = null;\r\n this.updateTargetBoundingBox(this._sourcePositionData);\r\n }\r\n }\r\n\r\n private smoothRestPositions(\r\n rawRestPositions: Float32Array<ArrayBuffer>,\r\n deltaTime: number,\r\n out: Float32Array<ArrayBuffer>\r\n ) {\r\n const blend = this.getTemporalBlendFactor(deltaTime, DEFAULT_REST_POSITION_SMOOTHING_TIME);\r\n const smoothed =\r\n this._smoothedRestPositionData && this._smoothedRestPositionData.length === rawRestPositions.length\r\n ? this._smoothedRestPositionData\r\n : new Float32Array(rawRestPositions.length);\r\n if (!this._smoothedRestPositionData || blend >= 1) {\r\n smoothed.set(rawRestPositions);\r\n } else {\r\n const retain = 1 - blend;\r\n for (let i = 0; i < rawRestPositions.length; i++) {\r\n smoothed[i] = smoothed[i] * retain + rawRestPositions[i] * blend;\r\n }\r\n }\r\n out.set(smoothed);\r\n this._smoothedRestPositionData = smoothed;\r\n return out;\r\n }\r\n\r\n private getTemporalBlendFactor(deltaTime: number, smoothingTime: number) {\r\n const dt = clamp(Number(deltaTime) || 0, 0, MAX_ACCUMULATED_SIMULATION_TIME);\r\n if (dt <= 0 || smoothingTime <= 0) {\r\n return 1;\r\n }\r\n return 1 - Math.exp(-dt / smoothingTime);\r\n }\r\n\r\n private getSmoothedSphereCenter(collider: SphereCollider, blend: number) {\r\n const current = collider.center?.clone() ?? new Vector3();\r\n const cached = this._smoothedSphereCenters.get(collider);\r\n if (!cached || blend >= 1) {\r\n this._smoothedSphereCenters.set(collider, current);\r\n return current;\r\n }\r\n cached.setXYZ(\r\n cached.x + (current.x - cached.x) * blend,\r\n cached.y + (current.y - cached.y) * blend,\r\n cached.z + (current.z - cached.z) * blend\r\n );\r\n return cached;\r\n }\r\n\r\n private getSmoothedCapsuleEndpoints(collider: CapsuleCollider, blend: number) {\r\n const currentStart = collider.start?.clone() ?? new Vector3();\r\n const currentEnd = collider.end?.clone() ?? new Vector3();\r\n const cached = this._smoothedCapsuleEndpoints.get(collider);\r\n if (!cached || blend >= 1) {\r\n const next = {\r\n start: currentStart,\r\n end: currentEnd\r\n };\r\n this._smoothedCapsuleEndpoints.set(collider, next);\r\n return next;\r\n }\r\n cached.start.setXYZ(\r\n cached.start.x + (currentStart.x - cached.start.x) * blend,\r\n cached.start.y + (currentStart.y - cached.start.y) * blend,\r\n cached.start.z + (currentStart.z - cached.start.z) * blend\r\n );\r\n cached.end.setXYZ(\r\n cached.end.x + (currentEnd.x - cached.end.x) * blend,\r\n cached.end.y + (currentEnd.y - cached.end.y) * blend,\r\n cached.end.z + (currentEnd.z - cached.end.z) * blend\r\n );\r\n return cached;\r\n }\r\n\r\n private getSmoothedPlaneData(collider: PlaneCollider, blend: number) {\r\n const currentPoint = collider.point?.clone() ?? new Vector3();\r\n const currentNormal = collider.normal?.clone() ?? Vector3.axisPY();\r\n if (currentNormal.magnitudeSq > 1e-8) {\r\n currentNormal.inplaceNormalize();\r\n } else {\r\n currentNormal.setXYZ(0, 1, 0);\r\n }\r\n const cached = this._smoothedPlaneData.get(collider);\r\n if (!cached || blend >= 1) {\r\n const next = {\r\n point: currentPoint,\r\n normal: currentNormal\r\n };\r\n this._smoothedPlaneData.set(collider, next);\r\n return next;\r\n }\r\n cached.point.setXYZ(\r\n cached.point.x + (currentPoint.x - cached.point.x) * blend,\r\n cached.point.y + (currentPoint.y - cached.point.y) * blend,\r\n cached.point.z + (currentPoint.z - cached.point.z) * blend\r\n );\r\n cached.normal.setXYZ(\r\n cached.normal.x + (currentNormal.x - cached.normal.x) * blend,\r\n cached.normal.y + (currentNormal.y - cached.normal.y) * blend,\r\n cached.normal.z + (currentNormal.z - cached.normal.z) * blend\r\n );\r\n if (cached.normal.magnitudeSq > 1e-8) {\r\n cached.normal.inplaceNormalize();\r\n } else {\r\n cached.normal.setXYZ(0, 1, 0);\r\n }\r\n return cached;\r\n }\r\n\r\n private updateTargetBoundingBox(positions: Float32Array<ArrayBuffer>) {\r\n if (!positions || positions.length < 3) {\r\n return;\r\n }\r\n let minX = Number.POSITIVE_INFINITY;\r\n let minY = Number.POSITIVE_INFINITY;\r\n let minZ = Number.POSITIVE_INFINITY;\r\n let maxX = Number.NEGATIVE_INFINITY;\r\n let maxY = Number.NEGATIVE_INFINITY;\r\n let maxZ = Number.NEGATIVE_INFINITY;\r\n for (let i = 0; i + 2 < positions.length; i += 3) {\r\n const x = positions[i];\r\n const y = positions[i + 1];\r\n const z = positions[i + 2];\r\n if (!Number.isFinite(x) || !Number.isFinite(y) || !Number.isFinite(z)) {\r\n continue;\r\n }\r\n minX = Math.min(minX, x);\r\n minY = Math.min(minY, y);\r\n minZ = Math.min(minZ, z);\r\n maxX = Math.max(maxX, x);\r\n maxY = Math.max(maxY, y);\r\n maxZ = Math.max(maxZ, z);\r\n }\r\n if (!Number.isFinite(minX)) {\r\n return;\r\n }\r\n const padding = Math.max(maxX - minX, maxY - minY, maxZ - minZ) * 0.15;\r\n const bbox = new BoundingBox(\r\n new Vector3(minX - padding, minY - padding, minZ - padding),\r\n new Vector3(maxX + padding, maxY + padding, maxZ + padding)\r\n );\r\n const target = this._collisionSpaceNode;\r\n if (typeof target?.setAnimatedBoundingBox === 'function') {\r\n target.setAnimatedBoundingBox(bbox);\r\n } else {\r\n this._primitive?.setBoundingVolume(bbox);\r\n }\r\n }\r\n private commitRestPositions() {\r\n if (!this._prevRestPositionBuffer || !this._usingDynamicRestPose) {\r\n return;\r\n }\r\n if (this._dynamicRestPositionData) {\r\n this._prevRestPositionBuffer.bufferSubData(0, this._dynamicRestPositionData);\r\n }\r\n }\r\n private disableTargetSkinning() {\r\n const target = this._collisionSpaceNode;\r\n if (!target || typeof target.suspendSkinning !== 'boolean' || this._restoreSkinAnimation !== null) {\r\n return;\r\n }\r\n this._skinAnimationTarget = target;\r\n this._restoreSkinAnimation = target.suspendSkinning;\r\n target.suspendSkinning = true;\r\n target.setBoneMatrices?.(null);\r\n target.setAnimatedBoundingBox?.(null);\r\n }\r\n private restoreTargetSkinning() {\r\n if (!this._skinAnimationTarget || this._restoreSkinAnimation === null) {\r\n return;\r\n }\r\n this.detachAutoUpdateTarget();\r\n this._skinAnimationTarget.setAnimatedBoundingBox?.(null);\r\n this._skinAnimationTarget.suspendSkinning = this._restoreSkinAnimation;\r\n this._skinAnimationTarget = null;\r\n this._restoreSkinAnimation = null;\r\n }\r\n}\r\n"],"names":["encodeTypedArrayBase64","view","uint8ArrayToBase64","Uint8Array","buffer","byteOffset","byteLength","decodeTypedArrayFromBase64","ctor","base64","expectedLength","bytes","base64ToUint8Array","BYTES_PER_ELEMENT","Error","slice","result","length","isWrapBindingDataCompatible","data","sourceRestPositions","targetVertexCount","version","vertexCount","sourceVertexCount","influenceCount","WRAP_TRIANGLE_VERTEX_COUNT","resolveDevice","explicitDevice","getDevice","isGPUClothSupported","device","resolved","type","DEFAULT_DAMPING","DEFAULT_DYNAMIC_FRICTION","DEFAULT_STATIC_FRICTION","DEFAULT_STIFFNESS","DEFAULT_POSE_FOLLOW","DEFAULT_SUBSTEPS","DEFAULT_SOLVER_ITERATIONS","DEFAULT_MAX_NEIGHBORS","DEFAULT_WORKGROUP_SIZE","DEFAULT_MAX_TRIANGLES_PER_VERTEX","DEFAULT_REST_POSITION_SMOOTHING_TIME","DEFAULT_COLLIDER_SMOOTHING_TIME","FIXED_SIMULATION_TIME_STEP","MAX_ACCUMULATED_SIMULATION_TIME","MAX_SIMULATION_STEPS_PER_UPDATE","Math","max","ceil","WRAP_MIN_DISTANCE","clamp","value","min","getInitialColliderBufferFloatCount","colliders","stride","count","reduce","total","collider","getPrimitiveScalarByteSize","PBPrimitiveType","I16","I16_NORM","U16","U16_NORM","F16","I32","I32_NORM","U32","U32_NORM","F32","readPrimitiveScalar","scalarType","normalized","I8","I8_NORM","getInt8","U8","U8_NORM","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","distance3","positions","a","b","a0","b0","dx","dy","dz","sqrt","dot3","ax","ay","az","bx","by","bz","normalize3","x","y","z","fallback","hypot","buildWrapTriangleFrame","p0x","p0y","p0z","p1x","p1y","p1z","p2x","p2y","p2z","out","edge01x","edge01y","edge01z","edge02x","edge02y","edge02z","tangent","normal","fallbackAxis","abs","bitangent","closestPointOnTriangle","px","py","pz","cx","cy","cz","closestOut","baryOut","abx","aby","abz","acx","acy","acz","apx","apy","apz","d1","d2","bpx","bpy","bpz","d3","d4","vc","v","cpx","cpy","cpz","d5","d6","vb","w","va","denom","u","buildPinWeightArray","explicitWeights","explicitPinned","Float32Array","len","i","Number","isFinite","buildNeighborData","indexData","maxNeighbors","neighborMap","Array","from","Map","addEdge","mapA","mapB","oldAB","get","undefined","set","oldBA","c","totalEntries","neighborIndices","Int32Array","restLengths","fill","hasConstraint","sorted","entries","sort","j","slot","toUInt32Indices","Uint32Array","buildVertexTriangleAdjacency","maxTrianglesPerVertex","triangleCount","trianglesPerVertex","tri","base","i0","i1","i2","push","adjacency","tris","t","buildInitialSimulationPositions","options","sourcePositions","positionData","target","collisionSpaceNode","blendIndices","skinningBlendIndices","blendWeights","skinningBlendWeights","invWorldMatrix","findSkeletonById","skeletonId","String","skeletonName","skeleton","skinPositionsToLocal","resolveWrapBindPositions","mesh","basePositions","primitive","blendData","readSkinningDataFromPrimitive","createIntegrateProgram","workgroupSize","program","buildComputeProgram","compute","pb","float","storageBuffer","prevPositions","restPositions","storageBufferReadonly","prevRestPositions","invMass","sphereData","capsuleData","planeData","uint","uniform","deltaTime","damping","gravity","vec3","sphereCount","capsuleCount","planeCount","dynamicFriction","staticFriction","minDistance","main","$l","index","$builtins","globalInvocationId","$if","lessThan","mul","at","add","restX","restY","restZ","prevRestX","prevRestY","prevRestZ","freeWeight","pinWeight","sub","current","previous","rest","prevRest","restDelta","dt2","velocity","next","greaterThan","$for","sphereBase","center","radius","deltaCol","lenCol","contactNormal","div","$else","correctionDelta","correctionLen","surfaceDelta","normalStep","dot","tangentStep","normalTravel","tangentLen","dynamicBasis","staticBasis","staticLimit","lessThanEqual","dynamicRemove","capsuleBase","cStart","cRadius","cEnd","ab","abLen2","closest","ap","deltaCap","lenCap","planeBase","k","planePoint","planeNormal","planeDistance","preProject","prevOut","setAt","name","createConstraintProgram","int","stiffness","poseFollow","pos","correction","validCount","neighborStart","neighbor","greaterThanEqual","neighborBase","neighborPos","restLength","delta","offset","corrected","scale","followStrength","createFaceNormalProgram","triangleIndices","triangleNormals","indexBase","p0Base","p1Base","p2Base","p0","p1","p2","n","cross","nLen","outBase","createVertexNormalProgram","vertexTriangleAdjacency","vertexNormals","vertex","sum","valid","start","nBase","readPositionDataFromPrimitive","readVertexAttributeDataFromPrimitive","semantic","componentCount","info","getVertexBufferInfo","isPrimitiveType","cols","getNumVertices","getBufferSubData","componentByteSize","baseByteOffset","drawOffset","raw","srcOffset","src","dst","DataView","Promise","all","buildNonIndexedTriangles","primitiveType","indexStart","indexCount","indices","readIndexDataFromPrimitive","indexBuffer","getIndexBuffer","indexType","Uint16Array","createWrapDeformerProgram","sourceTriangleIndices","sourceBarycentrics","targetLocalOffsets","targetPositions","targetNormals","sourceToTargetMatrix","mat4","targetBase","influenceBase","base0","base1","base2","w0","w1","w2","vec4","xyz","basePoint","edge01","edge02","normalLen","or","bitangentLen","localOffset","deformedPosition","transformPointArrayByMatrix","matrix","source","getWrapSourceToTargetMatrix","worldMatrix","Matrix4x4","identity","multiplyAffine","GPUClothWrapBinding","_device","_source","_target","_targetPrimitive","_wrapTriangleIndexBuffer","_wrapBarycentricBuffer","_wrapLocalOffsetBuffer","_program","_bindGroup","_workgroupCount","_maxOffsetDistance","_sourceToTargetMatrix","_positionBuffer","_normalBuffer","_originalPositionBuffer","_originalNormalBuffer","_restoreSkinning","targetPrimitive","wrapTriangleIndexBuffer","wrapBarycentricBuffer","wrapLocalOffsetBuffer","bindGroup","positionBuffer","normalBuffer","originalPositionBuffer","originalNormalBuffer","workgroupCount","maxOffsetDistance","restoreSkinning","create","sourcePositionBuffer","sourceIndexData","createBindingData","createFromData","targetBasePositions","sourceToTargetBindMatrix","resolvedSourcePositions","sourcePositionsInTargetSpace","sourceTriangleCount","closestPoint","barycentrics","frame","vx","vy","vz","bestDistanceSq","POSITIVE_INFINITY","bestI0","bestI1","bestI2","bestClosestX","bestClosestY","bestClosestZ","bestBary0","bestBary1","bestBary2","triBase","distanceSq","bestBase0","bestBase1","bestBase2","deltaX","deltaY","deltaZ","_sourceIndexData","expectedElementCount","influenceElementCount","wrapSourceTriangleIndices","wrapSourceBarycentrics","wrapTargetLocalOffsets","createVertexBuffer","storage","managed","createBuffer","usage","dynamic","bufferSubData","createBindGroup","bindGroupLayouts","setBuffer","setValue","getVertexBuffer","retainObject","removeVertexBuffer","setVertexBuffer","suspendSkinning","setBoneMatrices","setAnimatedBoundingBox","binding","update","setProgram","setBindGroup","updateBoundingBox","dispose","releaseObject","sourceBBox","getAnimatedBoundingBox","getBoundingVolume","toAABB","minX","minY","minZ","maxX","NEGATIVE_INFINITY","maxY","maxZ","corners","minPoint","maxPoint","corner","padding","BoundingBox","Vector3","createGPUClothWrapBindingData","sourcePrimitive","sourceIndices","GPUClothSystem","_enabled","_disabledReason","_primitive","_prevPositionBuffer","_restPositionBuffer","_prevRestPositionBuffer","_invMassBuffer","_neighborIndexBuffer","_restLengthBuffer","_integrateProgram","_constraintProgram","_faceNormalProgram","_vertexNormalProgram","_integrateBindGroup","_constraintBindGroup","_faceNormalBindGroup","_vertexNormalBindGroup","_vertexCount","_triangleCount","_triangleWorkgroupCount","_maxNeighbors","_maxTrianglesPerVertex","_gravity","_damping","_dynamicFriction","_staticFriction","_stiffness","_poseFollow","_substeps","_solverIterations","_colliders","_sphereColliderBuffer","_capsuleColliderBuffer","_planeColliderBuffer","_sphereColliderData","_capsuleColliderData","_planeColliderData","_triangleIndexBuffer","_triangleNormalBuffer","_vertexTriangleAdjacencyBuffer","_rebuildNormals","_collisionSpaceNode","_sourcePositionData","_skinningBlendIndices","_skinningBlendWeights","_dynamicRestPositionData","_smoothedRestPositionData","_usingDynamicRestPose","_skinAnimationTarget","_restoreSkinAnimation","_boundScene","_autoUpdate","_workgroupSize","_wrapBindings","_latestInputDeltaTime","_smoothedSphereCenters","_smoothedCapsuleEndpoints","_smoothedPlaneData","_timeAccumulator","_pendingAutoUpdateDeltaTime","_meshPostUpdateCallback","supported","wantEnabled","enabled","clone","substeps","solverIterations","rebuildNormals","autoUpdate","WeakMap","_frameId","_elapsedInSeconds","deltaInSeconds","dt","initialSimulationPositions","indexDataU32","pinWeightArray","pinnedVertexWeights","pinnedVertexIndices","neighbors","invMassArray","getSubstepPoseFollow","disableTargetSkinning","updateTargetBoundingBox","updateColliderBuffers","scene","bindToScene","err","message","createFromPrimitive","skinningData","createFromMesh","setWrapTargets","targets","clearWrapTargets","uniqueTargets","Set","filter","console","error","setWrapTargetsFromBindingData","seen","entry","has","resetSimulationTiming","disabledReason","resetColliderSmoothing","addCollider","removeCollider","idx","indexOf","splice","clearColliders","detachAutoUpdateTarget","off","_onSceneUpdate","on","attachAutoUpdateTarget","unbindFromScene","frameDt","updateSkinnedRestPositions","stepCount","floor","pushDeviceStates","step","simulateStep","updateSimulationOutputs","popDeviceStates","restoreTargetSkinning","substepDt","substep","commitRestPositions","spheres","capsules","planes","blend","getTemporalBlendFactor","node","updateColliderFromNode","sphere","getSmoothedSphereCenter","capsule","smoothed","getSmoothedCapsuleEndpoints","end","plane","getSmoothedPlaneData","point","toCollisionSpacePoint","toCollisionSpaceRadius","axis","toCollisionSpaceVector","magnitudeSq","inplaceNormalize","setXYZ","flush","effectivePoseFollow","getEffectivePoseFollow","totalPoseFollowApplications","pow","worldPoint","transformPointAffine","worldVector","transformVectorAffine","worldRadius","axisWorld","axisPY","axisPX","axisPZ","localTangent","magnitude","localBitangent","localX","localY","localZ","frameInfo","elapsedFrame","hasAutoUpdateTarget","queueUpdateNode","addPostUpdateCallback","removePostUpdateCallback","smoothedRestPositions","smoothRestPositions","rawRestPositions","retain","smoothingTime","exp","cached","currentStart","currentEnd","currentPoint","currentNormal","bbox","setBoundingVolume"],"mappings":"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"}
1
+ {"version":3,"file":"gpu_cloth_system.js","sources":["../../../src/animation/cloth/gpu_cloth_system.ts"],"sourcesContent":["import type {\r\n AbstractDevice,\r\n BindGroup,\r\n GPUDataBuffer,\r\n GPUProgram,\r\n StructuredBuffer\r\n} from '@zephyr3d/device';\r\nimport {\r\n Matrix4x4,\r\n base64ToUint8Array,\r\n releaseObject,\r\n retainObject,\r\n uint8ArrayToBase64,\r\n Vector3,\r\n type Nullable\r\n} from '@zephyr3d/base';\r\nimport { getDevice } from '../../app/api';\r\nimport type { Primitive, SkinInfluenceData } from '../../render';\r\nimport { readPrimitiveAttribute, readPrimitiveIndices } from '../../render/primitive_readback';\r\nimport type { Scene } from '../../scene';\r\nimport type { MeshUpdateCallback } from '../../scene/mesh';\r\nimport { BoundingBox } from '../../utility/bounding_volume';\r\nimport type {\r\n CapsuleCollider,\r\n BoxCollider,\r\n PlaneCollider,\r\n SphereCollider,\r\n SpringCollider\r\n} from '../spring/spring_collider';\r\nimport { updateColliderFromNode } from '../spring/spring_collider';\r\nimport { warnUnsupported } from '../../utility/unsupported';\r\n\r\n/**\r\n * Options used to construct a GPU cloth simulation system.\r\n *\r\n * @public\r\n */\r\nexport type GPUClothSystemOptions = {\r\n enabled?: boolean;\r\n device?: Nullable<AbstractDevice>;\r\n primitive?: Nullable<Primitive>;\r\n collisionSpaceNode?: any;\r\n positionData?: Float32Array<ArrayBuffer>;\r\n indexData?: Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>;\r\n skinningBlendIndices?: Float32Array<ArrayBuffer>;\r\n skinningBlendWeights?: Float32Array<ArrayBuffer>;\r\n pinnedVertexWeights?: ArrayLike<number>;\r\n pinnedVertexIndices?: number[];\r\n gravity?: Vector3;\r\n damping?: number;\r\n dynamicFriction?: number;\r\n staticFriction?: number;\r\n stiffness?: number;\r\n poseFollow?: number;\r\n substeps?: number;\r\n solverIterations?: number;\r\n maxNeighbors?: number;\r\n workgroupSize?: number;\r\n colliders?: SpringCollider[];\r\n maxTrianglesPerVertex?: number;\r\n rebuildNormals?: boolean;\r\n scene?: Nullable<Scene>;\r\n autoUpdate?: boolean;\r\n};\r\n\r\n/**\r\n * Serialized wrap-binding cache data for GPU cloth attachments.\r\n *\r\n * @public\r\n */\r\nexport type GPUClothWrapBindingData = {\r\n version: 4;\r\n vertexCount: number;\r\n sourceVertexCount: number;\r\n influenceCount: number;\r\n maxOffsetDistance: number;\r\n sourceTriangleIndices: string;\r\n sourceBarycentrics: string;\r\n targetLocalOffsets: string;\r\n};\r\n\r\n/**\r\n * Target object paired with GPU cloth wrap-binding data.\r\n *\r\n * @public\r\n */\r\nexport type GPUClothWrapBindingTarget = {\r\n target: any;\r\n data: GPUClothWrapBindingData;\r\n /** Per-target-vertex blend between target skinning (0) and cloth wrapping (1). */\r\n targetWrapWeights?: Float32Array<ArrayBuffer>;\r\n};\r\n\r\nfunction normalizeTargetWrapWeights(source: ArrayLike<number> | undefined, vertexCount: number) {\r\n const result = new Float32Array(vertexCount);\r\n result.fill(1);\r\n if (!source) {\r\n return result;\r\n }\r\n const count = Math.min(vertexCount, source.length);\r\n for (let i = 0; i < count; i++) {\r\n result[i] = clamp(Number(source[i]) || 0, 0, 1);\r\n }\r\n return result;\r\n}\r\n\r\nfunction encodeTypedArrayBase64(view: ArrayBufferView) {\r\n return uint8ArrayToBase64(new Uint8Array(view.buffer, view.byteOffset, view.byteLength));\r\n}\r\n\r\nfunction decodeTypedArrayFromBase64<T extends Uint32Array | Float32Array>(\r\n ctor: {\r\n new (buffer: ArrayBuffer): T;\r\n BYTES_PER_ELEMENT: number;\r\n },\r\n base64: string,\r\n expectedLength: number\r\n) {\r\n const bytes = base64ToUint8Array(base64);\r\n const byteLength = bytes.byteLength;\r\n if (byteLength % ctor.BYTES_PER_ELEMENT !== 0) {\r\n throw new Error('GPU cloth wrap failed: binding cache data is corrupted.');\r\n }\r\n const buffer = bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength);\r\n const result = new ctor(buffer);\r\n if (expectedLength >= 0 && result.length !== expectedLength) {\r\n throw new Error('GPU cloth wrap failed: binding cache size does not match target mesh.');\r\n }\r\n return result;\r\n}\r\n\r\nfunction isWrapBindingDataCompatible(\r\n data: GPUClothWrapBindingData,\r\n sourceRestPositions: Float32Array<ArrayBuffer>,\r\n targetVertexCount: number\r\n) {\r\n return (\r\n data?.version === 4 &&\r\n data.vertexCount === targetVertexCount &&\r\n data.sourceVertexCount === (sourceRestPositions.length / 3) >> 0 &&\r\n data.influenceCount === WRAP_TRIANGLE_VERTEX_COUNT\r\n );\r\n}\r\n\r\nfunction resolveDevice(explicitDevice?: Nullable<AbstractDevice>) {\r\n if (explicitDevice) {\r\n return explicitDevice;\r\n }\r\n try {\r\n return getDevice();\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Returns whether GPU cloth is supported on the given device.\r\n *\r\n * GPU cloth in this engine is WebGPU-only. WebGL backends are explicitly unsupported.\r\n *\r\n * @public\r\n */\r\nexport function isGPUClothSupported(device?: Nullable<AbstractDevice>) {\r\n const resolved = resolveDevice(device);\r\n return resolved?.type === 'webgpu';\r\n}\r\n\r\nconst DEFAULT_DAMPING = 0.02;\r\nconst DEFAULT_DYNAMIC_FRICTION = 0.15;\r\nconst DEFAULT_STATIC_FRICTION = 0.3;\r\nconst DEFAULT_STIFFNESS = 0.3;\r\nconst DEFAULT_POSE_FOLLOW = 0;\r\nconst DEFAULT_SUBSTEPS = 2;\r\nconst DEFAULT_SOLVER_ITERATIONS = 5;\r\nconst DEFAULT_MAX_NEIGHBORS = 8;\r\nconst DEFAULT_WORKGROUP_SIZE = 64;\r\nconst DEFAULT_MAX_TRIANGLES_PER_VERTEX = 16;\r\nconst DEFAULT_REST_POSITION_SMOOTHING_TIME = 1 / 25;\r\nconst DEFAULT_COLLIDER_SMOOTHING_TIME = 1 / 30;\r\nconst FIXED_SIMULATION_TIME_STEP = 1 / 60;\r\nconst MAX_ACCUMULATED_SIMULATION_TIME = 1 / 20;\r\nconst MAX_SIMULATION_STEPS_PER_UPDATE = Math.max(\r\n 1,\r\n Math.ceil(MAX_ACCUMULATED_SIMULATION_TIME / FIXED_SIMULATION_TIME_STEP)\r\n);\r\nconst WRAP_TRIANGLE_VERTEX_COUNT = 3;\r\nconst WRAP_MIN_DISTANCE = 1e-8;\r\n\r\nfunction clamp(value: number, min: number, max: number) {\r\n return Math.min(Math.max(value, min), max);\r\n}\r\n\r\nfunction getInitialColliderBufferFloatCount(\r\n colliders: SpringCollider[] | undefined,\r\n type: SpringCollider['type'],\r\n stride: number\r\n) {\r\n const count = (colliders ?? []).reduce((total, collider) => total + (collider?.type === type ? 1 : 0), 0);\r\n return Math.max(1, count) * stride;\r\n}\r\n\r\nfunction distance3(positions: Float32Array<ArrayBuffer>, a: number, b: number) {\r\n const a0 = a * 3;\r\n const b0 = b * 3;\r\n const dx = positions[a0] - positions[b0];\r\n const dy = positions[a0 + 1] - positions[b0 + 1];\r\n const dz = positions[a0 + 2] - positions[b0 + 2];\r\n return Math.sqrt(dx * dx + dy * dy + dz * dz);\r\n}\r\n\r\nfunction dot3(ax: number, ay: number, az: number, bx: number, by: number, bz: number) {\r\n return ax * bx + ay * by + az * bz;\r\n}\r\n\r\nfunction normalize3(\r\n x: number,\r\n y: number,\r\n z: number,\r\n fallback: [number, number, number]\r\n): [number, number, number] {\r\n const length = Math.hypot(x, y, z);\r\n if (length <= WRAP_MIN_DISTANCE) {\r\n return fallback;\r\n }\r\n return [x / length, y / length, z / length];\r\n}\r\n\r\nfunction buildWrapTriangleFrame(\r\n p0x: number,\r\n p0y: number,\r\n p0z: number,\r\n p1x: number,\r\n p1y: number,\r\n p1z: number,\r\n p2x: number,\r\n p2y: number,\r\n p2z: number,\r\n out: Float32Array<ArrayBuffer> | number[]\r\n) {\r\n const edge01x = p1x - p0x;\r\n const edge01y = p1y - p0y;\r\n const edge01z = p1z - p0z;\r\n const edge02x = p2x - p0x;\r\n const edge02y = p2y - p0y;\r\n const edge02z = p2z - p0z;\r\n\r\n let tangent = normalize3(edge01x, edge01y, edge01z, [0, 0, 0]);\r\n if (tangent[0] === 0 && tangent[1] === 0 && tangent[2] === 0) {\r\n tangent = normalize3(edge02x, edge02y, edge02z, [1, 0, 0]);\r\n }\r\n\r\n let normal = normalize3(\r\n edge01y * edge02z - edge01z * edge02y,\r\n edge01z * edge02x - edge01x * edge02z,\r\n edge01x * edge02y - edge01y * edge02x,\r\n [0, 0, 0]\r\n );\r\n if (normal[0] === 0 && normal[1] === 0 && normal[2] === 0) {\r\n const fallbackAxis = Math.abs(tangent[1]) < 0.999 ? [0, 1, 0] : [1, 0, 0];\r\n normal = normalize3(\r\n tangent[1] * fallbackAxis[2] - tangent[2] * fallbackAxis[1],\r\n tangent[2] * fallbackAxis[0] - tangent[0] * fallbackAxis[2],\r\n tangent[0] * fallbackAxis[1] - tangent[1] * fallbackAxis[0],\r\n [0, 0, 1]\r\n );\r\n }\r\n\r\n let bitangent = normalize3(\r\n normal[1] * tangent[2] - normal[2] * tangent[1],\r\n normal[2] * tangent[0] - normal[0] * tangent[2],\r\n normal[0] * tangent[1] - normal[1] * tangent[0],\r\n [0, 0, 0]\r\n );\r\n if (bitangent[0] === 0 && bitangent[1] === 0 && bitangent[2] === 0) {\r\n bitangent = Math.abs(tangent[1]) < 0.999 ? [0, 1, 0] : [1, 0, 0];\r\n }\r\n\r\n normal = normalize3(\r\n tangent[1] * bitangent[2] - tangent[2] * bitangent[1],\r\n tangent[2] * bitangent[0] - tangent[0] * bitangent[2],\r\n tangent[0] * bitangent[1] - tangent[1] * bitangent[0],\r\n [0, 0, 1]\r\n );\r\n\r\n out[0] = tangent[0];\r\n out[1] = tangent[1];\r\n out[2] = tangent[2];\r\n out[3] = bitangent[0];\r\n out[4] = bitangent[1];\r\n out[5] = bitangent[2];\r\n out[6] = normal[0];\r\n out[7] = normal[1];\r\n out[8] = normal[2];\r\n}\r\n\r\nfunction closestPointOnTriangle(\r\n px: number,\r\n py: number,\r\n pz: number,\r\n ax: number,\r\n ay: number,\r\n az: number,\r\n bx: number,\r\n by: number,\r\n bz: number,\r\n cx: number,\r\n cy: number,\r\n cz: number,\r\n closestOut: Float32Array<ArrayBuffer> | number[],\r\n baryOut: Float32Array<ArrayBuffer> | number[]\r\n) {\r\n const abx = bx - ax;\r\n const aby = by - ay;\r\n const abz = bz - az;\r\n const acx = cx - ax;\r\n const acy = cy - ay;\r\n const acz = cz - az;\r\n const apx = px - ax;\r\n const apy = py - ay;\r\n const apz = pz - az;\r\n const d1 = dot3(abx, aby, abz, apx, apy, apz);\r\n const d2 = dot3(acx, acy, acz, apx, apy, apz);\r\n if (d1 <= 0 && d2 <= 0) {\r\n closestOut[0] = ax;\r\n closestOut[1] = ay;\r\n closestOut[2] = az;\r\n baryOut[0] = 1;\r\n baryOut[1] = 0;\r\n baryOut[2] = 0;\r\n } else {\r\n const bpx = px - bx;\r\n const bpy = py - by;\r\n const bpz = pz - bz;\r\n const d3 = dot3(abx, aby, abz, bpx, bpy, bpz);\r\n const d4 = dot3(acx, acy, acz, bpx, bpy, bpz);\r\n if (d3 >= 0 && d4 <= d3) {\r\n closestOut[0] = bx;\r\n closestOut[1] = by;\r\n closestOut[2] = bz;\r\n baryOut[0] = 0;\r\n baryOut[1] = 1;\r\n baryOut[2] = 0;\r\n } else {\r\n const vc = d1 * d4 - d3 * d2;\r\n if (vc <= 0 && d1 >= 0 && d3 <= 0) {\r\n const v = d1 / Math.max(WRAP_MIN_DISTANCE, d1 - d3);\r\n closestOut[0] = ax + abx * v;\r\n closestOut[1] = ay + aby * v;\r\n closestOut[2] = az + abz * v;\r\n baryOut[0] = 1 - v;\r\n baryOut[1] = v;\r\n baryOut[2] = 0;\r\n } else {\r\n const cpx = px - cx;\r\n const cpy = py - cy;\r\n const cpz = pz - cz;\r\n const d5 = dot3(abx, aby, abz, cpx, cpy, cpz);\r\n const d6 = dot3(acx, acy, acz, cpx, cpy, cpz);\r\n if (d6 >= 0 && d5 <= d6) {\r\n closestOut[0] = cx;\r\n closestOut[1] = cy;\r\n closestOut[2] = cz;\r\n baryOut[0] = 0;\r\n baryOut[1] = 0;\r\n baryOut[2] = 1;\r\n } else {\r\n const vb = d5 * d2 - d1 * d6;\r\n if (vb <= 0 && d2 >= 0 && d6 <= 0) {\r\n const w = d2 / Math.max(WRAP_MIN_DISTANCE, d2 - d6);\r\n closestOut[0] = ax + acx * w;\r\n closestOut[1] = ay + acy * w;\r\n closestOut[2] = az + acz * w;\r\n baryOut[0] = 1 - w;\r\n baryOut[1] = 0;\r\n baryOut[2] = w;\r\n } else {\r\n const va = d3 * d6 - d5 * d4;\r\n if (va <= 0 && d4 - d3 >= 0 && d5 - d6 >= 0) {\r\n const w = (d4 - d3) / Math.max(WRAP_MIN_DISTANCE, d4 - d3 + d5 - d6);\r\n closestOut[0] = bx + (cx - bx) * w;\r\n closestOut[1] = by + (cy - by) * w;\r\n closestOut[2] = bz + (cz - bz) * w;\r\n baryOut[0] = 0;\r\n baryOut[1] = 1 - w;\r\n baryOut[2] = w;\r\n } else {\r\n const denom = 1 / Math.max(WRAP_MIN_DISTANCE, va + vb + vc);\r\n const v = vb * denom;\r\n const w = vc * denom;\r\n const u = 1 - v - w;\r\n closestOut[0] = ax * u + bx * v + cx * w;\r\n closestOut[1] = ay * u + by * v + cy * w;\r\n closestOut[2] = az * u + bz * v + cz * w;\r\n baryOut[0] = u;\r\n baryOut[1] = v;\r\n baryOut[2] = w;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n const dx = px - closestOut[0];\r\n const dy = py - closestOut[1];\r\n const dz = pz - closestOut[2];\r\n return dx * dx + dy * dy + dz * dz;\r\n}\r\n\r\nfunction buildPinWeightArray(\r\n positions: Float32Array<ArrayBuffer>,\r\n explicitWeights?: ArrayLike<number>,\r\n explicitPinned?: number[]\r\n): Float32Array<ArrayBuffer> {\r\n const vertexCount = (positions.length / 3) >> 0;\r\n const result = new Float32Array(vertexCount);\r\n if (explicitWeights && explicitWeights.length > 0) {\r\n const len = Math.min(vertexCount, explicitWeights.length);\r\n for (let i = 0; i < len; i++) {\r\n result[i] = clamp(Number(explicitWeights[i]) || 0, 0, 1);\r\n }\r\n return result;\r\n }\r\n if (explicitPinned && explicitPinned.length > 0) {\r\n for (const i of explicitPinned) {\r\n if (Number.isFinite(i) && i >= 0 && i < vertexCount) {\r\n result[i >> 0] = 1;\r\n }\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nfunction buildNeighborData(\r\n positions: Float32Array<ArrayBuffer>,\r\n indexData: Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>,\r\n maxNeighbors: number\r\n) {\r\n const vertexCount = (positions.length / 3) >> 0;\r\n const neighborMap: Array<Map<number, number>> = Array.from({ length: vertexCount }, () => new Map());\r\n\r\n const addEdge = (a: number, b: number) => {\r\n if (a < 0 || b < 0 || a >= vertexCount || b >= vertexCount || a === b) {\r\n return;\r\n }\r\n const len = distance3(positions, a, b);\r\n const mapA = neighborMap[a];\r\n const mapB = neighborMap[b];\r\n const oldAB = mapA.get(b);\r\n if (oldAB === undefined || len < oldAB) {\r\n mapA.set(b, len);\r\n }\r\n const oldBA = mapB.get(a);\r\n if (oldBA === undefined || len < oldBA) {\r\n mapB.set(a, len);\r\n }\r\n };\r\n\r\n for (let i = 0; i + 2 < indexData.length; i += 3) {\r\n const a = indexData[i];\r\n const b = indexData[i + 1];\r\n const c = indexData[i + 2];\r\n addEdge(a, b);\r\n addEdge(b, c);\r\n addEdge(c, a);\r\n }\r\n\r\n const totalEntries = vertexCount * maxNeighbors;\r\n const neighborIndices = new Int32Array(totalEntries);\r\n const restLengths = new Float32Array(totalEntries);\r\n neighborIndices.fill(-1);\r\n\r\n let hasConstraint = false;\r\n for (let i = 0; i < vertexCount; i++) {\r\n const sorted = [...neighborMap[i].entries()].sort((a, b) => a[1] - b[1]).slice(0, maxNeighbors);\r\n for (let j = 0; j < sorted.length; j++) {\r\n const slot = i * maxNeighbors + j;\r\n neighborIndices[slot] = sorted[j][0];\r\n restLengths[slot] = sorted[j][1];\r\n hasConstraint = true;\r\n }\r\n }\r\n\r\n return {\r\n neighborIndices,\r\n restLengths,\r\n hasConstraint\r\n };\r\n}\r\n\r\nfunction toUInt32Indices(indexData: Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>) {\r\n if (indexData instanceof Uint32Array) {\r\n return indexData;\r\n }\r\n const out = new Uint32Array(indexData.length);\r\n for (let i = 0; i < indexData.length; i++) {\r\n out[i] = indexData[i];\r\n }\r\n return out;\r\n}\r\n\r\nfunction buildVertexTriangleAdjacency(\r\n vertexCount: number,\r\n indexData: Uint32Array<ArrayBuffer>,\r\n maxTrianglesPerVertex: number\r\n) {\r\n const triangleCount = (indexData.length / 3) >> 0;\r\n const trianglesPerVertex: number[][] = Array.from({ length: vertexCount }, () => []);\r\n for (let tri = 0; tri < triangleCount; tri++) {\r\n const base = tri * 3;\r\n const i0 = indexData[base];\r\n const i1 = indexData[base + 1];\r\n const i2 = indexData[base + 2];\r\n if (i0 < vertexCount) {\r\n trianglesPerVertex[i0].push(tri);\r\n }\r\n if (i1 < vertexCount) {\r\n trianglesPerVertex[i1].push(tri);\r\n }\r\n if (i2 < vertexCount) {\r\n trianglesPerVertex[i2].push(tri);\r\n }\r\n }\r\n const adjacency = new Int32Array(vertexCount * maxTrianglesPerVertex);\r\n adjacency.fill(-1);\r\n for (let i = 0; i < vertexCount; i++) {\r\n const tris = trianglesPerVertex[i];\r\n const len = Math.min(maxTrianglesPerVertex, tris.length);\r\n for (let t = 0; t < len; t++) {\r\n adjacency[i * maxTrianglesPerVertex + t] = tris[t];\r\n }\r\n }\r\n return {\r\n triangleCount,\r\n adjacency\r\n };\r\n}\r\n\r\nfunction buildInitialSimulationPositions(options?: GPUClothSystemOptions) {\r\n const sourcePositions = options?.positionData;\r\n if (!sourcePositions) {\r\n return null;\r\n }\r\n const target = options?.collisionSpaceNode;\r\n const blendIndices = options?.skinningBlendIndices;\r\n const blendWeights = options?.skinningBlendWeights;\r\n if (\r\n !target?.invWorldMatrix ||\r\n !blendIndices ||\r\n !blendWeights ||\r\n typeof target?.findSkeletonById !== 'function'\r\n ) {\r\n return new Float32Array(sourcePositions);\r\n }\r\n const skeletonId = String(target.skeletonName ?? '');\r\n const skeleton = skeletonId ? target.findSkeletonById(skeletonId) : null;\r\n if (!skeleton?.skinPositionsToLocal) {\r\n return new Float32Array(sourcePositions);\r\n }\r\n return skeleton.skinPositionsToLocal(sourcePositions, blendIndices, blendWeights, target.invWorldMatrix);\r\n}\r\n\r\nasync function resolveWrapBindPositions(\r\n mesh: any,\r\n basePositions: Float32Array<ArrayBuffer>\r\n): Promise<Float32Array<ArrayBuffer>> {\r\n if (!basePositions || basePositions.length === 0) {\r\n return new Float32Array(0);\r\n }\r\n const primitive = mesh?.primitive;\r\n if (!primitive) {\r\n return new Float32Array(basePositions);\r\n }\r\n const blendData = await readSkinningDataFromPrimitive(primitive);\r\n if (\r\n !mesh?.invWorldMatrix ||\r\n !blendData?.blendIndices ||\r\n !blendData?.blendWeights ||\r\n typeof mesh?.findSkeletonById !== 'function'\r\n ) {\r\n return new Float32Array(basePositions);\r\n }\r\n const skeletonId = String(mesh.skeletonName ?? '');\r\n const skeleton = skeletonId ? mesh.findSkeletonById(skeletonId) : null;\r\n if (!skeleton?.skinPositionsToLocal) {\r\n return new Float32Array(basePositions);\r\n }\r\n return skeleton.skinPositionsToLocal(\r\n basePositions,\r\n blendData.blendIndices,\r\n blendData.blendWeights,\r\n mesh.invWorldMatrix\r\n );\r\n}\r\n\r\nfunction createIntegrateProgram(device: AbstractDevice, workgroupSize: number) {\r\n const program = device.buildComputeProgram({\r\n workgroupSize: [workgroupSize, 1, 1],\r\n compute(pb) {\r\n this.positions = pb.float[0]().storageBuffer(0);\r\n this.prevPositions = pb.float[0]().storageBuffer(0);\r\n this.restPositions = pb.float[0]().storageBufferReadonly(0);\r\n this.prevRestPositions = pb.float[0]().storageBufferReadonly(0);\r\n this.invMass = pb.float[0]().storageBufferReadonly(0);\r\n this.sphereData = pb.float[0]().storageBufferReadonly(0);\r\n this.capsuleData = pb.float[0]().storageBufferReadonly(0);\r\n this.planeData = pb.float[0]().storageBufferReadonly(0);\r\n this.boxData = pb.float[0]().storageBufferReadonly(0);\r\n this.vertexCount = pb.uint().uniform(0);\r\n this.deltaTime = pb.float().uniform(0);\r\n this.damping = pb.float().uniform(0);\r\n this.gravity = pb.vec3().uniform(0);\r\n this.sphereCount = pb.uint().uniform(0);\r\n this.capsuleCount = pb.uint().uniform(0);\r\n this.planeCount = pb.uint().uniform(0);\r\n this.boxCount = pb.uint().uniform(0);\r\n this.dynamicFriction = pb.float().uniform(0);\r\n this.staticFriction = pb.float().uniform(0);\r\n this.minDistance = pb.float().uniform(0);\r\n pb.main(function () {\r\n this.$l.index = this.$builtins.globalInvocationId.x;\r\n this.$if(pb.lessThan(this.index, this.vertexCount), function () {\r\n this.$l.base = pb.mul(this.index, 3);\r\n this.$l.x = this.positions.at(this.base);\r\n this.$l.y = this.positions.at(pb.add(this.base, 1));\r\n this.$l.z = this.positions.at(pb.add(this.base, 2));\r\n this.$l.px = this.prevPositions.at(this.base);\r\n this.$l.py = this.prevPositions.at(pb.add(this.base, 1));\r\n this.$l.pz = this.prevPositions.at(pb.add(this.base, 2));\r\n this.$l.restX = this.restPositions.at(this.base);\r\n this.$l.restY = this.restPositions.at(pb.add(this.base, 1));\r\n this.$l.restZ = this.restPositions.at(pb.add(this.base, 2));\r\n this.$l.prevRestX = this.prevRestPositions.at(this.base);\r\n this.$l.prevRestY = this.prevRestPositions.at(pb.add(this.base, 1));\r\n this.$l.prevRestZ = this.prevRestPositions.at(pb.add(this.base, 2));\r\n this.$l.freeWeight = this.invMass.at(this.index);\r\n this.$l.pinWeight = pb.sub(1, this.freeWeight);\r\n this.$l.current = pb.vec3(this.x, this.y, this.z);\r\n this.$l.previous = pb.vec3(this.px, this.py, this.pz);\r\n this.$l.rest = pb.vec3(this.restX, this.restY, this.restZ);\r\n this.$l.prevRest = pb.vec3(this.prevRestX, this.prevRestY, this.prevRestZ);\r\n this.$l.restDelta = pb.sub(this.rest, this.prevRest);\r\n this.current = pb.add(this.current, this.restDelta);\r\n this.previous = pb.add(this.previous, this.restDelta);\r\n this.$l.dt2 = pb.mul(this.deltaTime, this.deltaTime);\r\n // Damping is modeled as velocity loss strength: 0 keeps full inertia, 1 removes it entirely.\r\n this.$l.velocity = pb.mul(\r\n pb.sub(this.current, this.previous),\r\n pb.mul(pb.sub(1, this.damping), this.freeWeight)\r\n );\r\n this.$l.next = pb.add(\r\n this.current,\r\n this.velocity,\r\n pb.mul(this.gravity, pb.mul(this.dt2, this.freeWeight))\r\n );\r\n\r\n this.$if(pb.greaterThan(this.freeWeight, this.minDistance), function () {\r\n this.$for(pb.uint('i'), 0, this.sphereCount, function () {\r\n this.$l.sphereBase = pb.mul(this.i, 4);\r\n this.$l.center = pb.vec3(\r\n this.sphereData.at(this.sphereBase),\r\n this.sphereData.at(pb.add(this.sphereBase, 1)),\r\n this.sphereData.at(pb.add(this.sphereBase, 2))\r\n );\r\n this.$l.radius = this.sphereData.at(pb.add(this.sphereBase, 3));\r\n this.$l.deltaCol = pb.sub(this.next, this.center);\r\n this.$l.lenCol = pb.length(this.deltaCol);\r\n this.$if(pb.lessThan(this.lenCol, this.radius), function () {\r\n this.$l.contactNormal = pb.vec3(0, 1, 0);\r\n this.$if(pb.greaterThan(this.lenCol, this.minDistance), function () {\r\n this.contactNormal = pb.div(this.deltaCol, this.lenCol);\r\n this.next = pb.add(this.center, pb.mul(this.contactNormal, this.radius));\r\n }).$else(function () {\r\n this.next = pb.add(this.center, pb.vec3(0, this.radius, 0));\r\n });\r\n this.$l.correctionDelta = pb.sub(this.next, pb.add(this.center, this.deltaCol));\r\n this.$l.correctionLen = pb.length(this.correctionDelta);\r\n this.$l.surfaceDelta = pb.sub(this.next, this.current);\r\n this.$l.normalStep = pb.mul(\r\n this.contactNormal,\r\n pb.dot(this.surfaceDelta, this.contactNormal)\r\n );\r\n this.$l.tangentStep = pb.sub(this.surfaceDelta, this.normalStep);\r\n this.$l.normalTravel = pb.length(this.normalStep);\r\n this.$l.tangentLen = pb.length(this.tangentStep);\r\n this.$if(pb.greaterThan(this.tangentLen, this.minDistance), function () {\r\n this.$l.dynamicBasis = pb.max(\r\n this.correctionLen,\r\n pb.max(this.normalTravel, pb.mul(this.tangentLen, 0.5))\r\n );\r\n this.$l.staticBasis = pb.max(\r\n this.correctionLen,\r\n pb.max(this.normalTravel, this.tangentLen)\r\n );\r\n this.$l.staticLimit = pb.max(\r\n this.minDistance,\r\n pb.mul(this.staticBasis, pb.mul(this.staticFriction, 2))\r\n );\r\n this.$if(pb.lessThanEqual(this.tangentLen, this.staticLimit), function () {\r\n this.next = pb.sub(this.next, this.tangentStep);\r\n }).$else(function () {\r\n this.$l.dynamicRemove = pb.min(\r\n this.tangentLen,\r\n pb.mul(this.dynamicBasis, this.dynamicFriction)\r\n );\r\n this.next = pb.sub(\r\n this.next,\r\n pb.mul(pb.div(this.tangentStep, this.tangentLen), this.dynamicRemove)\r\n );\r\n });\r\n });\r\n });\r\n });\r\n\r\n this.$for(pb.uint('j'), 0, this.capsuleCount, function () {\r\n this.$l.capsuleBase = pb.mul(this.j, 8);\r\n this.$l.cStart = pb.vec3(\r\n this.capsuleData.at(this.capsuleBase),\r\n this.capsuleData.at(pb.add(this.capsuleBase, 1)),\r\n this.capsuleData.at(pb.add(this.capsuleBase, 2))\r\n );\r\n this.$l.cRadius = this.capsuleData.at(pb.add(this.capsuleBase, 3));\r\n this.$l.cEnd = pb.vec3(\r\n this.capsuleData.at(pb.add(this.capsuleBase, 4)),\r\n this.capsuleData.at(pb.add(this.capsuleBase, 5)),\r\n this.capsuleData.at(pb.add(this.capsuleBase, 6))\r\n );\r\n this.$l.ab = pb.sub(this.cEnd, this.cStart);\r\n this.$l.abLen2 = pb.dot(this.ab, this.ab);\r\n this.$l.closest = this.cStart;\r\n this.$if(pb.greaterThan(this.abLen2, this.minDistance), function () {\r\n this.$l.ap = pb.sub(this.next, this.cStart);\r\n this.$l.t = pb.clamp(pb.div(pb.dot(this.ap, this.ab), this.abLen2), 0, 1);\r\n this.closest = pb.add(this.cStart, pb.mul(this.ab, this.t));\r\n });\r\n this.$l.deltaCap = pb.sub(this.next, this.closest);\r\n this.$l.lenCap = pb.length(this.deltaCap);\r\n this.$if(pb.lessThan(this.lenCap, this.cRadius), function () {\r\n this.$l.contactNormal = pb.vec3(0, 1, 0);\r\n this.$if(pb.greaterThan(this.lenCap, this.minDistance), function () {\r\n this.contactNormal = pb.div(this.deltaCap, this.lenCap);\r\n this.next = pb.add(this.closest, pb.mul(this.contactNormal, this.cRadius));\r\n }).$else(function () {\r\n this.next = pb.add(this.closest, pb.vec3(0, this.cRadius, 0));\r\n });\r\n this.$l.correctionDelta = pb.sub(this.next, pb.add(this.closest, this.deltaCap));\r\n this.$l.correctionLen = pb.length(this.correctionDelta);\r\n this.$l.surfaceDelta = pb.sub(this.next, this.current);\r\n this.$l.normalStep = pb.mul(\r\n this.contactNormal,\r\n pb.dot(this.surfaceDelta, this.contactNormal)\r\n );\r\n this.$l.tangentStep = pb.sub(this.surfaceDelta, this.normalStep);\r\n this.$l.normalTravel = pb.length(this.normalStep);\r\n this.$l.tangentLen = pb.length(this.tangentStep);\r\n this.$if(pb.greaterThan(this.tangentLen, this.minDistance), function () {\r\n this.$l.dynamicBasis = pb.max(\r\n this.correctionLen,\r\n pb.max(this.normalTravel, pb.mul(this.tangentLen, 0.5))\r\n );\r\n this.$l.staticBasis = pb.max(\r\n this.correctionLen,\r\n pb.max(this.normalTravel, this.tangentLen)\r\n );\r\n this.$l.staticLimit = pb.max(\r\n this.minDistance,\r\n pb.mul(this.staticBasis, pb.mul(this.staticFriction, 2))\r\n );\r\n this.$if(pb.lessThanEqual(this.tangentLen, this.staticLimit), function () {\r\n this.next = pb.sub(this.next, this.tangentStep);\r\n }).$else(function () {\r\n this.$l.dynamicRemove = pb.min(\r\n this.tangentLen,\r\n pb.mul(this.dynamicBasis, this.dynamicFriction)\r\n );\r\n this.next = pb.sub(\r\n this.next,\r\n pb.mul(pb.div(this.tangentStep, this.tangentLen), this.dynamicRemove)\r\n );\r\n });\r\n });\r\n });\r\n });\r\n\r\n this.$for(pb.uint('k'), 0, this.planeCount, function () {\r\n this.$l.planeBase = pb.mul(this.k, 8);\r\n this.$l.planePoint = pb.vec3(\r\n this.planeData.at(this.planeBase),\r\n this.planeData.at(pb.add(this.planeBase, 1)),\r\n this.planeData.at(pb.add(this.planeBase, 2))\r\n );\r\n this.$l.planeNormal = pb.vec3(\r\n this.planeData.at(pb.add(this.planeBase, 4)),\r\n this.planeData.at(pb.add(this.planeBase, 5)),\r\n this.planeData.at(pb.add(this.planeBase, 6))\r\n );\r\n this.$l.planeDistance = pb.dot(pb.sub(this.next, this.planePoint), this.planeNormal);\r\n this.$if(pb.lessThan(this.planeDistance, 0), function () {\r\n this.$l.contactNormal = this.planeNormal;\r\n this.$l.preProject = this.next;\r\n this.next = pb.sub(this.next, pb.mul(this.contactNormal, this.planeDistance));\r\n this.$l.correctionDelta = pb.sub(this.next, this.preProject);\r\n this.$l.correctionLen = pb.length(this.correctionDelta);\r\n this.$l.surfaceDelta = pb.sub(this.next, this.current);\r\n this.$l.normalStep = pb.mul(\r\n this.contactNormal,\r\n pb.dot(this.surfaceDelta, this.contactNormal)\r\n );\r\n this.$l.tangentStep = pb.sub(this.surfaceDelta, this.normalStep);\r\n this.$l.normalTravel = pb.length(this.normalStep);\r\n this.$l.tangentLen = pb.length(this.tangentStep);\r\n this.$if(pb.greaterThan(this.tangentLen, this.minDistance), function () {\r\n this.$l.dynamicBasis = pb.max(\r\n this.correctionLen,\r\n pb.max(this.normalTravel, pb.mul(this.tangentLen, 0.5))\r\n );\r\n this.$l.staticBasis = pb.max(\r\n this.correctionLen,\r\n pb.max(this.normalTravel, this.tangentLen)\r\n );\r\n this.$l.staticLimit = pb.max(\r\n this.minDistance,\r\n pb.mul(this.staticBasis, pb.mul(this.staticFriction, 2))\r\n );\r\n this.$if(pb.lessThanEqual(this.tangentLen, this.staticLimit), function () {\r\n this.next = pb.sub(this.next, this.tangentStep);\r\n }).$else(function () {\r\n this.$l.dynamicRemove = pb.min(\r\n this.tangentLen,\r\n pb.mul(this.dynamicBasis, this.dynamicFriction)\r\n );\r\n this.next = pb.sub(\r\n this.next,\r\n pb.mul(pb.div(this.tangentStep, this.tangentLen), this.dynamicRemove)\r\n );\r\n });\r\n });\r\n });\r\n });\r\n });\r\n\r\n this.$for(pb.uint('b'), 0, this.boxCount, function () {\r\n this.$l.boxBase = pb.mul(this.b, 16);\r\n this.$l.boxCenter = pb.vec3(\r\n this.boxData.at(this.boxBase),\r\n this.boxData.at(pb.add(this.boxBase, 1)),\r\n this.boxData.at(pb.add(this.boxBase, 2))\r\n );\r\n this.$l.boxHalf = pb.vec3(\r\n this.boxData.at(pb.add(this.boxBase, 3)),\r\n this.boxData.at(pb.add(this.boxBase, 4)),\r\n this.boxData.at(pb.add(this.boxBase, 5))\r\n );\r\n this.$l.boxAxisX = pb.vec3(\r\n this.boxData.at(pb.add(this.boxBase, 6)),\r\n this.boxData.at(pb.add(this.boxBase, 7)),\r\n this.boxData.at(pb.add(this.boxBase, 8))\r\n );\r\n this.$l.boxAxisY = pb.vec3(\r\n this.boxData.at(pb.add(this.boxBase, 9)),\r\n this.boxData.at(pb.add(this.boxBase, 10)),\r\n this.boxData.at(pb.add(this.boxBase, 11))\r\n );\r\n this.$l.boxAxisZ = pb.vec3(\r\n this.boxData.at(pb.add(this.boxBase, 12)),\r\n this.boxData.at(pb.add(this.boxBase, 13)),\r\n this.boxData.at(pb.add(this.boxBase, 14))\r\n );\r\n this.$l.boxRel = pb.sub(this.next, this.boxCenter);\r\n this.$l.boxLocal = pb.vec3(\r\n pb.dot(this.boxRel, this.boxAxisX),\r\n pb.dot(this.boxRel, this.boxAxisY),\r\n pb.dot(this.boxRel, this.boxAxisZ)\r\n );\r\n this.$l.boxPen = pb.sub(this.boxHalf, pb.abs(this.boxLocal));\r\n this.$if(\r\n pb.and(\r\n pb.and(pb.greaterThan(this.boxPen.x, 0), pb.greaterThan(this.boxPen.y, 0)),\r\n pb.greaterThan(this.boxPen.z, 0)\r\n ),\r\n function () {\r\n this.$l.boxAxis = this.boxAxisX;\r\n this.$l.boxDepth = this.boxPen.x;\r\n this.$l.boxSign = pb.select(\r\n pb.float(1),\r\n pb.float(-1),\r\n pb.greaterThanEqual(this.boxLocal.x, 0)\r\n );\r\n this.$if(pb.lessThan(this.boxPen.y, this.boxDepth), function () {\r\n this.boxAxis = this.boxAxisY;\r\n this.boxDepth = this.boxPen.y;\r\n this.boxSign = pb.select(\r\n pb.float(1),\r\n pb.float(-1),\r\n pb.greaterThanEqual(this.boxLocal.y, 0)\r\n );\r\n });\r\n this.$if(pb.lessThan(this.boxPen.z, this.boxDepth), function () {\r\n this.boxAxis = this.boxAxisZ;\r\n this.boxDepth = this.boxPen.z;\r\n this.boxSign = pb.select(\r\n pb.float(1),\r\n pb.float(-1),\r\n pb.greaterThanEqual(this.boxLocal.z, 0)\r\n );\r\n });\r\n this.$l.boxSign = this.boxSign;\r\n this.next = pb.add(this.next, pb.mul(this.boxAxis, pb.mul(this.boxSign, this.boxDepth)));\r\n }\r\n );\r\n });\r\n\r\n this.next = pb.add(pb.mul(this.next, this.freeWeight), pb.mul(this.rest, this.pinWeight));\r\n this.$l.prevOut = pb.add(pb.mul(this.current, this.freeWeight), pb.mul(this.rest, this.pinWeight));\r\n this.prevPositions.setAt(this.base, this.prevOut.x);\r\n this.prevPositions.setAt(pb.add(this.base, 1), this.prevOut.y);\r\n this.prevPositions.setAt(pb.add(this.base, 2), this.prevOut.z);\r\n this.positions.setAt(this.base, this.next.x);\r\n this.positions.setAt(pb.add(this.base, 1), this.next.y);\r\n this.positions.setAt(pb.add(this.base, 2), this.next.z);\r\n });\r\n });\r\n }\r\n });\r\n if (program) {\r\n program.name = '@GPUCloth_Integrate';\r\n }\r\n return program;\r\n}\r\n\r\nfunction createConstraintProgram(device: AbstractDevice, workgroupSize: number) {\r\n const program = device.buildComputeProgram({\r\n workgroupSize: [workgroupSize, 1, 1],\r\n compute(pb) {\r\n this.positions = pb.float[0]().storageBuffer(0);\r\n this.restPositions = pb.float[0]().storageBufferReadonly(0);\r\n this.invMass = pb.float[0]().storageBufferReadonly(0);\r\n this.neighborIndices = pb.int[0]().storageBufferReadonly(0);\r\n this.restLengths = pb.float[0]().storageBufferReadonly(0);\r\n this.sphereData = pb.float[0]().storageBufferReadonly(0);\r\n this.capsuleData = pb.float[0]().storageBufferReadonly(0);\r\n this.planeData = pb.float[0]().storageBufferReadonly(0);\r\n this.boxData = pb.float[0]().storageBufferReadonly(0);\r\n this.vertexCount = pb.uint().uniform(0);\r\n this.maxNeighbors = pb.uint().uniform(0);\r\n this.stiffness = pb.float().uniform(0);\r\n this.poseFollow = pb.float().uniform(0);\r\n this.sphereCount = pb.uint().uniform(0);\r\n this.capsuleCount = pb.uint().uniform(0);\r\n this.planeCount = pb.uint().uniform(0);\r\n this.boxCount = pb.uint().uniform(0);\r\n this.dynamicFriction = pb.float().uniform(0);\r\n this.staticFriction = pb.float().uniform(0);\r\n this.minDistance = pb.float().uniform(0);\r\n pb.main(function () {\r\n this.$l.index = this.$builtins.globalInvocationId.x;\r\n this.$if(pb.lessThan(this.index, this.vertexCount), function () {\r\n this.$l.freeWeight = this.invMass.at(this.index);\r\n this.$l.pinWeight = pb.sub(1, this.freeWeight);\r\n this.$l.base = pb.mul(this.index, 3);\r\n this.$l.rest = pb.vec3(\r\n this.restPositions.at(this.base),\r\n this.restPositions.at(pb.add(this.base, 1)),\r\n this.restPositions.at(pb.add(this.base, 2))\r\n );\r\n this.$if(pb.greaterThan(this.freeWeight, this.minDistance), function () {\r\n this.$l.pos = pb.vec3(\r\n this.positions.at(this.base),\r\n this.positions.at(pb.add(this.base, 1)),\r\n this.positions.at(pb.add(this.base, 2))\r\n );\r\n this.$l.correction = pb.vec3(0);\r\n this.$l.validCount = pb.uint(0);\r\n this.$l.neighborStart = pb.mul(this.index, this.maxNeighbors);\r\n this.$for(pb.uint('i'), 0, this.maxNeighbors, function () {\r\n this.$l.slot = pb.add(this.neighborStart, this.i);\r\n this.$l.neighbor = this.neighborIndices.at(this.slot);\r\n this.$if(pb.greaterThanEqual(this.neighbor, 0), function () {\r\n this.$l.neighborBase = pb.mul(pb.uint(this.neighbor), 3);\r\n this.$l.neighborPos = pb.vec3(\r\n this.positions.at(this.neighborBase),\r\n this.positions.at(pb.add(this.neighborBase, 1)),\r\n this.positions.at(pb.add(this.neighborBase, 2))\r\n );\r\n this.$l.restLength = this.restLengths.at(this.slot);\r\n this.$l.delta = pb.sub(this.pos, this.neighborPos);\r\n this.$l.len = pb.length(this.delta);\r\n this.$if(pb.greaterThan(this.len, this.minDistance), function () {\r\n this.$l.offset = pb.mul(pb.div(this.delta, this.len), pb.sub(this.len, this.restLength));\r\n this.correction = pb.add(this.correction, this.offset);\r\n this.validCount = pb.add(this.validCount, 1);\r\n });\r\n });\r\n });\r\n this.$l.corrected = this.pos;\r\n this.$if(pb.greaterThan(this.validCount, 0), function () {\r\n this.$l.scale = pb.div(pb.mul(this.stiffness, this.freeWeight), pb.float(this.validCount));\r\n this.corrected = pb.sub(this.pos, pb.mul(this.correction, this.scale));\r\n });\r\n this.$if(pb.greaterThan(this.poseFollow, this.minDistance), function () {\r\n this.$l.followStrength = pb.mul(this.poseFollow, this.freeWeight);\r\n this.corrected = pb.add(\r\n this.corrected,\r\n pb.mul(pb.sub(this.rest, this.corrected), this.followStrength)\r\n );\r\n });\r\n this.corrected = pb.add(\r\n pb.mul(this.corrected, this.freeWeight),\r\n pb.mul(this.rest, this.pinWeight)\r\n );\r\n this.$for(pb.uint('i'), 0, this.sphereCount, function () {\r\n this.$l.sphereBase = pb.mul(this.i, 4);\r\n this.$l.center = pb.vec3(\r\n this.sphereData.at(this.sphereBase),\r\n this.sphereData.at(pb.add(this.sphereBase, 1)),\r\n this.sphereData.at(pb.add(this.sphereBase, 2))\r\n );\r\n this.$l.radius = this.sphereData.at(pb.add(this.sphereBase, 3));\r\n this.$l.deltaCol = pb.sub(this.corrected, this.center);\r\n this.$l.lenCol = pb.length(this.deltaCol);\r\n this.$if(pb.lessThan(this.lenCol, this.radius), function () {\r\n this.$if(pb.greaterThan(this.lenCol, this.minDistance), function () {\r\n this.corrected = pb.add(\r\n this.center,\r\n pb.mul(pb.div(this.deltaCol, this.lenCol), this.radius)\r\n );\r\n }).$else(function () {\r\n this.corrected = pb.add(this.center, pb.vec3(0, this.radius, 0));\r\n });\r\n });\r\n });\r\n this.$for(pb.uint('j'), 0, this.capsuleCount, function () {\r\n this.$l.capsuleBase = pb.mul(this.j, 8);\r\n this.$l.cStart = pb.vec3(\r\n this.capsuleData.at(this.capsuleBase),\r\n this.capsuleData.at(pb.add(this.capsuleBase, 1)),\r\n this.capsuleData.at(pb.add(this.capsuleBase, 2))\r\n );\r\n this.$l.cRadius = this.capsuleData.at(pb.add(this.capsuleBase, 3));\r\n this.$l.cEnd = pb.vec3(\r\n this.capsuleData.at(pb.add(this.capsuleBase, 4)),\r\n this.capsuleData.at(pb.add(this.capsuleBase, 5)),\r\n this.capsuleData.at(pb.add(this.capsuleBase, 6))\r\n );\r\n this.$l.ab = pb.sub(this.cEnd, this.cStart);\r\n this.$l.abLen2 = pb.dot(this.ab, this.ab);\r\n this.$l.closest = this.cStart;\r\n this.$if(pb.greaterThan(this.abLen2, this.minDistance), function () {\r\n this.$l.ap = pb.sub(this.corrected, this.cStart);\r\n this.$l.t = pb.clamp(pb.div(pb.dot(this.ap, this.ab), this.abLen2), 0, 1);\r\n this.closest = pb.add(this.cStart, pb.mul(this.ab, this.t));\r\n });\r\n this.$l.deltaCap = pb.sub(this.corrected, this.closest);\r\n this.$l.lenCap = pb.length(this.deltaCap);\r\n this.$if(pb.lessThan(this.lenCap, this.cRadius), function () {\r\n this.$if(pb.greaterThan(this.lenCap, this.minDistance), function () {\r\n this.corrected = pb.add(\r\n this.closest,\r\n pb.mul(pb.div(this.deltaCap, this.lenCap), this.cRadius)\r\n );\r\n }).$else(function () {\r\n this.corrected = pb.add(this.closest, pb.vec3(0, this.cRadius, 0));\r\n });\r\n });\r\n });\r\n this.$for(pb.uint('k'), 0, this.planeCount, function () {\r\n this.$l.planeBase = pb.mul(this.k, 8);\r\n this.$l.planePoint = pb.vec3(\r\n this.planeData.at(this.planeBase),\r\n this.planeData.at(pb.add(this.planeBase, 1)),\r\n this.planeData.at(pb.add(this.planeBase, 2))\r\n );\r\n this.$l.planeNormal = pb.vec3(\r\n this.planeData.at(pb.add(this.planeBase, 4)),\r\n this.planeData.at(pb.add(this.planeBase, 5)),\r\n this.planeData.at(pb.add(this.planeBase, 6))\r\n );\r\n this.$l.planeDistance = pb.dot(pb.sub(this.corrected, this.planePoint), this.planeNormal);\r\n this.$if(pb.lessThan(this.planeDistance, 0), function () {\r\n this.corrected = pb.sub(this.corrected, pb.mul(this.planeNormal, this.planeDistance));\r\n });\r\n });\r\n this.$for(pb.uint('b'), 0, this.boxCount, function () {\r\n this.$l.boxBase = pb.mul(this.b, 16);\r\n this.$l.boxCenter = pb.vec3(\r\n this.boxData.at(this.boxBase),\r\n this.boxData.at(pb.add(this.boxBase, 1)),\r\n this.boxData.at(pb.add(this.boxBase, 2))\r\n );\r\n this.$l.boxHalf = pb.vec3(\r\n this.boxData.at(pb.add(this.boxBase, 3)),\r\n this.boxData.at(pb.add(this.boxBase, 4)),\r\n this.boxData.at(pb.add(this.boxBase, 5))\r\n );\r\n this.$l.boxAxisX = pb.vec3(\r\n this.boxData.at(pb.add(this.boxBase, 6)),\r\n this.boxData.at(pb.add(this.boxBase, 7)),\r\n this.boxData.at(pb.add(this.boxBase, 8))\r\n );\r\n this.$l.boxAxisY = pb.vec3(\r\n this.boxData.at(pb.add(this.boxBase, 9)),\r\n this.boxData.at(pb.add(this.boxBase, 10)),\r\n this.boxData.at(pb.add(this.boxBase, 11))\r\n );\r\n this.$l.boxAxisZ = pb.vec3(\r\n this.boxData.at(pb.add(this.boxBase, 12)),\r\n this.boxData.at(pb.add(this.boxBase, 13)),\r\n this.boxData.at(pb.add(this.boxBase, 14))\r\n );\r\n this.$l.boxRel = pb.sub(this.corrected, this.boxCenter);\r\n this.$l.boxLocal = pb.vec3(\r\n pb.dot(this.boxRel, this.boxAxisX),\r\n pb.dot(this.boxRel, this.boxAxisY),\r\n pb.dot(this.boxRel, this.boxAxisZ)\r\n );\r\n this.$l.boxPen = pb.sub(this.boxHalf, pb.abs(this.boxLocal));\r\n this.$if(\r\n pb.and(\r\n pb.and(pb.greaterThan(this.boxPen.x, 0), pb.greaterThan(this.boxPen.y, 0)),\r\n pb.greaterThan(this.boxPen.z, 0)\r\n ),\r\n function () {\r\n this.$l.boxAxis = this.boxAxisX;\r\n this.$l.boxDepth = this.boxPen.x;\r\n this.$l.boxSign = pb.select(\r\n pb.float(1),\r\n pb.float(-1),\r\n pb.greaterThanEqual(this.boxLocal.x, 0)\r\n );\r\n this.$if(pb.lessThan(this.boxPen.y, this.boxDepth), function () {\r\n this.boxAxis = this.boxAxisY;\r\n this.boxDepth = this.boxPen.y;\r\n this.boxSign = pb.select(\r\n pb.float(1),\r\n pb.float(-1),\r\n pb.greaterThanEqual(this.boxLocal.y, 0)\r\n );\r\n });\r\n this.$if(pb.lessThan(this.boxPen.z, this.boxDepth), function () {\r\n this.boxAxis = this.boxAxisZ;\r\n this.boxDepth = this.boxPen.z;\r\n this.boxSign = pb.select(\r\n pb.float(1),\r\n pb.float(-1),\r\n pb.greaterThanEqual(this.boxLocal.z, 0)\r\n );\r\n });\r\n this.$l.boxSign = this.boxSign;\r\n this.corrected = pb.add(\r\n this.corrected,\r\n pb.mul(this.boxAxis, pb.mul(this.boxSign, this.boxDepth))\r\n );\r\n }\r\n );\r\n });\r\n this.positions.setAt(this.base, this.corrected.x);\r\n this.positions.setAt(pb.add(this.base, 1), this.corrected.y);\r\n this.positions.setAt(pb.add(this.base, 2), this.corrected.z);\r\n }).$else(function () {\r\n this.positions.setAt(this.base, this.rest.x);\r\n this.positions.setAt(pb.add(this.base, 1), this.rest.y);\r\n this.positions.setAt(pb.add(this.base, 2), this.rest.z);\r\n });\r\n });\r\n });\r\n }\r\n });\r\n if (program) {\r\n program.name = '@GPUCloth_Constraint';\r\n }\r\n return program;\r\n}\r\n\r\nfunction createFaceNormalProgram(device: AbstractDevice, workgroupSize: number) {\r\n const program = device.buildComputeProgram({\r\n workgroupSize: [workgroupSize, 1, 1],\r\n compute(pb) {\r\n this.positions = pb.float[0]().storageBufferReadonly(0);\r\n this.triangleIndices = pb.uint[0]().storageBufferReadonly(0);\r\n this.triangleNormals = pb.float[0]().storageBuffer(0);\r\n this.triangleCount = pb.uint().uniform(0);\r\n this.minDistance = pb.float().uniform(0);\r\n pb.main(function () {\r\n this.$l.tri = this.$builtins.globalInvocationId.x;\r\n this.$if(pb.lessThan(this.tri, this.triangleCount), function () {\r\n this.$l.indexBase = pb.mul(this.tri, 3);\r\n this.$l.i0 = this.triangleIndices.at(this.indexBase);\r\n this.$l.i1 = this.triangleIndices.at(pb.add(this.indexBase, 1));\r\n this.$l.i2 = this.triangleIndices.at(pb.add(this.indexBase, 2));\r\n this.$l.p0Base = pb.mul(this.i0, 3);\r\n this.$l.p1Base = pb.mul(this.i1, 3);\r\n this.$l.p2Base = pb.mul(this.i2, 3);\r\n this.$l.p0 = pb.vec3(\r\n this.positions.at(this.p0Base),\r\n this.positions.at(pb.add(this.p0Base, 1)),\r\n this.positions.at(pb.add(this.p0Base, 2))\r\n );\r\n this.$l.p1 = pb.vec3(\r\n this.positions.at(this.p1Base),\r\n this.positions.at(pb.add(this.p1Base, 1)),\r\n this.positions.at(pb.add(this.p1Base, 2))\r\n );\r\n this.$l.p2 = pb.vec3(\r\n this.positions.at(this.p2Base),\r\n this.positions.at(pb.add(this.p2Base, 1)),\r\n this.positions.at(pb.add(this.p2Base, 2))\r\n );\r\n this.$l.n = pb.cross(pb.sub(this.p1, this.p0), pb.sub(this.p2, this.p0));\r\n this.$l.nLen = pb.length(this.n);\r\n this.$if(pb.greaterThan(this.nLen, this.minDistance), function () {\r\n this.n = pb.div(this.n, this.nLen);\r\n }).$else(function () {\r\n this.n = pb.vec3(0, 1, 0);\r\n });\r\n this.$l.outBase = pb.mul(this.tri, 3);\r\n this.triangleNormals.setAt(this.outBase, this.n.x);\r\n this.triangleNormals.setAt(pb.add(this.outBase, 1), this.n.y);\r\n this.triangleNormals.setAt(pb.add(this.outBase, 2), this.n.z);\r\n });\r\n });\r\n }\r\n });\r\n if (program) {\r\n program.name = '@GPUCloth_FaceNormal';\r\n }\r\n return program;\r\n}\r\n\r\nfunction createVertexNormalProgram(device: AbstractDevice, workgroupSize: number) {\r\n const program = device.buildComputeProgram({\r\n workgroupSize: [workgroupSize, 1, 1],\r\n compute(pb) {\r\n this.triangleNormals = pb.float[0]().storageBufferReadonly(0);\r\n this.vertexTriangleAdjacency = pb.int[0]().storageBufferReadonly(0);\r\n this.vertexNormals = pb.float[0]().storageBuffer(0);\r\n this.vertexCount = pb.uint().uniform(0);\r\n this.maxTrianglesPerVertex = pb.uint().uniform(0);\r\n this.minDistance = pb.float().uniform(0);\r\n pb.main(function () {\r\n this.$l.vertex = this.$builtins.globalInvocationId.x;\r\n this.$if(pb.lessThan(this.vertex, this.vertexCount), function () {\r\n this.$l.sum = pb.vec3(0);\r\n this.$l.valid = pb.uint(0);\r\n this.$l.start = pb.mul(this.vertex, this.maxTrianglesPerVertex);\r\n this.$for(pb.uint('i'), 0, this.maxTrianglesPerVertex, function () {\r\n this.$l.tri = this.vertexTriangleAdjacency.at(pb.add(this.start, this.i));\r\n this.$if(pb.greaterThanEqual(this.tri, 0), function () {\r\n this.$l.nBase = pb.mul(pb.uint(this.tri), 3);\r\n this.sum = pb.add(\r\n this.sum,\r\n pb.vec3(\r\n this.triangleNormals.at(this.nBase),\r\n this.triangleNormals.at(pb.add(this.nBase, 1)),\r\n this.triangleNormals.at(pb.add(this.nBase, 2))\r\n )\r\n );\r\n this.valid = pb.add(this.valid, 1);\r\n });\r\n });\r\n this.$if(pb.greaterThan(this.valid, 0), function () {\r\n this.sum = pb.div(this.sum, pb.float(this.valid));\r\n }).$else(function () {\r\n this.sum = pb.vec3(0, 1, 0);\r\n });\r\n this.$l.len = pb.length(this.sum);\r\n this.$if(pb.greaterThan(this.len, this.minDistance), function () {\r\n this.sum = pb.div(this.sum, this.len);\r\n }).$else(function () {\r\n this.sum = pb.vec3(0, 1, 0);\r\n });\r\n this.$l.outBase = pb.mul(this.vertex, 3);\r\n this.vertexNormals.setAt(this.outBase, this.sum.x);\r\n this.vertexNormals.setAt(pb.add(this.outBase, 1), this.sum.y);\r\n this.vertexNormals.setAt(pb.add(this.outBase, 2), this.sum.z);\r\n });\r\n });\r\n }\r\n });\r\n if (program) {\r\n program.name = '@GPUCloth_VertexNormal';\r\n }\r\n return program;\r\n}\r\n\r\nasync function readPositionDataFromPrimitive(primitive: Primitive) {\r\n const positions = await readVertexAttributeDataFromPrimitive(primitive, 'position', 3);\r\n if (!positions) {\r\n throw new Error('GPU cloth initialization failed: primitive has no position buffer.');\r\n }\r\n return positions;\r\n}\r\n\r\nasync function readVertexAttributeDataFromPrimitive(\r\n primitive: Primitive,\r\n semantic: 'position' | 'normal' | 'blendIndices' | 'blendWeights',\r\n componentCount: number\r\n) {\r\n try {\r\n return await readPrimitiveAttribute(primitive, semantic, componentCount);\r\n } catch (err) {\r\n throw new Error(`GPU cloth initialization failed: ${err instanceof Error ? err.message : err}`);\r\n }\r\n}\r\n\r\nasync function readSkinningDataFromPrimitive(primitive: Primitive) {\r\n try {\r\n const [blendIndices, blendWeights] = await Promise.all([\r\n readVertexAttributeDataFromPrimitive(primitive, 'blendIndices', 4),\r\n readVertexAttributeDataFromPrimitive(primitive, 'blendWeights', 4)\r\n ]);\r\n if (!blendIndices || !blendWeights) {\r\n return null;\r\n }\r\n return { blendIndices, blendWeights, influenceCount: 4 };\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\ntype MeshSkinningSource = {\r\n primitive: Nullable<Primitive>;\r\n getSkinInfluenceData?: () => Nullable<SkinInfluenceData>;\r\n};\r\n\r\nasync function readSkinningDataFromMesh(mesh: MeshSkinningSource) {\r\n if (!mesh.primitive) {\r\n return null;\r\n }\r\n const base = await readSkinningDataFromPrimitive(mesh.primitive);\r\n if (!base) {\r\n return null;\r\n }\r\n const extra = mesh.getSkinInfluenceData?.() ?? null;\r\n const influenceCount = Math.max(4, Math.floor(Number(extra?.influenceCount) || 4));\r\n if (!extra || influenceCount <= 4) {\r\n return base;\r\n }\r\n const vertexCount = mesh.primitive.getNumVertices();\r\n const pairCount = Math.ceil((influenceCount - 4) / 2);\r\n if (extra.data.length < vertexCount * pairCount * 4) {\r\n return base;\r\n }\r\n const blendIndices = new Float32Array(vertexCount * influenceCount);\r\n const blendWeights = new Float32Array(vertexCount * influenceCount);\r\n for (let vertex = 0; vertex < vertexCount; vertex++) {\r\n const baseSource = vertex * 4;\r\n const target = vertex * influenceCount;\r\n blendIndices.set(base.blendIndices.subarray(baseSource, baseSource + 4), target);\r\n blendWeights.set(base.blendWeights.subarray(baseSource, baseSource + 4), target);\r\n for (let influence = 4; influence < influenceCount; influence++) {\r\n const extraInfluence = influence - 4;\r\n const source = (vertex * pairCount + (extraInfluence >> 1)) * 4 + (extraInfluence & 1) * 2;\r\n blendIndices[target + influence] = Number(extra.data[source]) || 0;\r\n blendWeights[target + influence] = Number(extra.data[source + 1]) || 0;\r\n }\r\n }\r\n return { blendIndices, blendWeights, influenceCount };\r\n}\r\n\r\n/**\r\n * The primitive's full-detail triangles. With mesh LODs the index buffer holds\r\n * every level in its own range; reading all of it would stack them together.\r\n */\r\nasync function readIndexDataFromPrimitive(primitive: Primitive) {\r\n try {\r\n return await readPrimitiveIndices(primitive);\r\n } catch (err) {\r\n throw new Error(`GPU cloth initialization failed: ${err instanceof Error ? err.message : err}`);\r\n }\r\n}\r\n\r\nfunction createWrapDeformerProgram(device: AbstractDevice, workgroupSize: number) {\r\n const program = device.buildComputeProgram({\r\n workgroupSize: [workgroupSize, 1, 1],\r\n compute(pb) {\r\n this.sourcePositions = pb.float[0]().storageBufferReadonly(0);\r\n this.sourceTriangleIndices = pb.uint[0]().storageBufferReadonly(0);\r\n this.sourceBarycentrics = pb.float[0]().storageBufferReadonly(0);\r\n this.targetLocalOffsets = pb.float[0]().storageBufferReadonly(0);\r\n this.targetSkinPositions = pb.float[0]().storageBufferReadonly(0);\r\n this.targetSkinNormals = pb.float[0]().storageBufferReadonly(0);\r\n this.targetWrapWeights = pb.float[0]().storageBufferReadonly(0);\r\n this.targetPositions = pb.float[0]().storageBuffer(0);\r\n this.targetNormals = pb.float[0]().storageBuffer(0);\r\n this.vertexCount = pb.uint().uniform(0);\r\n this.sourceToTargetMatrix = pb.mat4().uniform(0);\r\n this.minDistance = pb.float().uniform(0);\r\n this.hasTargetNormals = pb.float().uniform(0);\r\n pb.main(function () {\r\n this.$l.vertex = this.$builtins.globalInvocationId.x;\r\n this.$if(pb.lessThan(this.vertex, this.vertexCount), function () {\r\n this.$l.targetBase = pb.mul(this.vertex, 3);\r\n this.$l.influenceBase = pb.mul(this.vertex, WRAP_TRIANGLE_VERTEX_COUNT);\r\n this.$l.i0 = this.sourceTriangleIndices.at(this.influenceBase);\r\n this.$l.i1 = this.sourceTriangleIndices.at(pb.add(this.influenceBase, 1));\r\n this.$l.i2 = this.sourceTriangleIndices.at(pb.add(this.influenceBase, 2));\r\n this.$l.base0 = pb.mul(this.i0, 3);\r\n this.$l.base1 = pb.mul(this.i1, 3);\r\n this.$l.base2 = pb.mul(this.i2, 3);\r\n this.$l.w0 = this.sourceBarycentrics.at(this.influenceBase);\r\n this.$l.w1 = this.sourceBarycentrics.at(pb.add(this.influenceBase, 1));\r\n this.$l.w2 = this.sourceBarycentrics.at(pb.add(this.influenceBase, 2));\r\n this.$l.p0 = pb.mul(\r\n this.sourceToTargetMatrix,\r\n pb.vec4(\r\n this.sourcePositions.at(this.base0),\r\n this.sourcePositions.at(pb.add(this.base0, 1)),\r\n this.sourcePositions.at(pb.add(this.base0, 2)),\r\n 1\r\n )\r\n ).xyz;\r\n this.$l.p1 = pb.mul(\r\n this.sourceToTargetMatrix,\r\n pb.vec4(\r\n this.sourcePositions.at(this.base1),\r\n this.sourcePositions.at(pb.add(this.base1, 1)),\r\n this.sourcePositions.at(pb.add(this.base1, 2)),\r\n 1\r\n )\r\n ).xyz;\r\n this.$l.p2 = pb.mul(\r\n this.sourceToTargetMatrix,\r\n pb.vec4(\r\n this.sourcePositions.at(this.base2),\r\n this.sourcePositions.at(pb.add(this.base2, 1)),\r\n this.sourcePositions.at(pb.add(this.base2, 2)),\r\n 1\r\n )\r\n ).xyz;\r\n this.$l.basePoint = pb.add(\r\n pb.mul(this.p0, this.w0),\r\n pb.mul(this.p1, this.w1),\r\n pb.mul(this.p2, this.w2)\r\n );\r\n this.$l.edge01 = pb.sub(this.p1, this.p0);\r\n this.$l.edge02 = pb.sub(this.p2, this.p0);\r\n this.$l.tangent = this.edge01;\r\n this.$l.tangentLen = pb.length(this.tangent);\r\n this.$if(pb.lessThanEqual(this.tangentLen, this.minDistance), function () {\r\n this.tangent = this.edge02;\r\n this.tangentLen = pb.length(this.tangent);\r\n });\r\n this.$if(pb.greaterThan(this.tangentLen, this.minDistance), function () {\r\n this.tangent = pb.div(this.tangent, this.tangentLen);\r\n }).$else(function () {\r\n this.tangent = pb.vec3(1, 0, 0);\r\n });\r\n this.$l.normal = pb.cross(this.edge01, this.edge02);\r\n this.$l.normalLen = pb.length(this.normal);\r\n this.$if(pb.greaterThan(this.normalLen, this.minDistance), function () {\r\n this.normal = pb.div(this.normal, this.normalLen);\r\n }).$else(function () {\r\n this.$l.fallbackAxis = pb.vec3(0, 1, 0);\r\n this.$if(\r\n pb.or(pb.greaterThan(this.tangent.y, 0.999), pb.lessThan(this.tangent.y, -0.999)),\r\n function () {\r\n this.fallbackAxis = pb.vec3(1, 0, 0);\r\n }\r\n );\r\n this.normal = pb.cross(this.tangent, this.fallbackAxis);\r\n this.normalLen = pb.length(this.normal);\r\n this.$if(pb.greaterThan(this.normalLen, this.minDistance), function () {\r\n this.normal = pb.div(this.normal, this.normalLen);\r\n }).$else(function () {\r\n this.normal = pb.vec3(0, 0, 1);\r\n });\r\n });\r\n this.$l.bitangent = pb.cross(this.normal, this.tangent);\r\n this.$l.bitangentLen = pb.length(this.bitangent);\r\n this.$if(pb.greaterThan(this.bitangentLen, this.minDistance), function () {\r\n this.bitangent = pb.div(this.bitangent, this.bitangentLen);\r\n }).$else(function () {\r\n this.bitangent = pb.vec3(0, 1, 0);\r\n });\r\n this.normal = pb.cross(this.tangent, this.bitangent);\r\n this.normalLen = pb.length(this.normal);\r\n this.$if(pb.greaterThan(this.normalLen, this.minDistance), function () {\r\n this.normal = pb.div(this.normal, this.normalLen);\r\n }).$else(function () {\r\n this.normal = pb.vec3(0, 0, 1);\r\n });\r\n this.$l.localOffset = pb.vec3(\r\n this.targetLocalOffsets.at(this.targetBase),\r\n this.targetLocalOffsets.at(pb.add(this.targetBase, 1)),\r\n this.targetLocalOffsets.at(pb.add(this.targetBase, 2))\r\n );\r\n this.$l.deformedPosition = pb.add(\r\n this.basePoint,\r\n pb.add(\r\n pb.mul(this.tangent, this.localOffset.x),\r\n pb.mul(this.bitangent, this.localOffset.y),\r\n pb.mul(this.normal, this.localOffset.z)\r\n )\r\n );\r\n this.$l.wrapWeight = this.targetWrapWeights.at(this.vertex);\r\n this.$l.skinPosition = pb.vec3(\r\n this.targetSkinPositions.at(this.targetBase),\r\n this.targetSkinPositions.at(pb.add(this.targetBase, 1)),\r\n this.targetSkinPositions.at(pb.add(this.targetBase, 2))\r\n );\r\n this.deformedPosition = pb.add(\r\n pb.mul(this.skinPosition, pb.sub(1, this.wrapWeight)),\r\n pb.mul(this.deformedPosition, this.wrapWeight)\r\n );\r\n this.$l.skinNormal = pb.vec3(\r\n this.targetSkinNormals.at(this.targetBase),\r\n this.targetSkinNormals.at(pb.add(this.targetBase, 1)),\r\n this.targetSkinNormals.at(pb.add(this.targetBase, 2))\r\n );\r\n this.$l.normalWeight = pb.max(this.wrapWeight, pb.sub(1, this.hasTargetNormals));\r\n this.normal = pb.add(\r\n pb.mul(this.skinNormal, pb.sub(1, this.normalWeight)),\r\n pb.mul(this.normal, this.normalWeight)\r\n );\r\n this.normalLen = pb.length(this.normal);\r\n this.$if(pb.greaterThan(this.normalLen, this.minDistance), function () {\r\n this.normal = pb.div(this.normal, this.normalLen);\r\n }).$else(function () {\r\n this.normal = pb.vec3(0, 1, 0);\r\n });\r\n this.targetPositions.setAt(this.targetBase, this.deformedPosition.x);\r\n this.targetPositions.setAt(pb.add(this.targetBase, 1), this.deformedPosition.y);\r\n this.targetPositions.setAt(pb.add(this.targetBase, 2), this.deformedPosition.z);\r\n this.targetNormals.setAt(this.targetBase, this.normal.x);\r\n this.targetNormals.setAt(pb.add(this.targetBase, 1), this.normal.y);\r\n this.targetNormals.setAt(pb.add(this.targetBase, 2), this.normal.z);\r\n });\r\n });\r\n }\r\n });\r\n if (program) {\r\n program.name = '@GPUCloth_DisplacementWrapTarget';\r\n }\r\n return program;\r\n}\r\n\r\nfunction transformPointArrayByMatrix(\r\n matrix: Matrix4x4,\r\n source: Float32Array<ArrayBuffer>,\r\n out?: Float32Array<ArrayBuffer>\r\n) {\r\n const target = out && out.length === source.length ? out : new Float32Array(source.length);\r\n for (let i = 0; i + 2 < source.length; i += 3) {\r\n const x = source[i];\r\n const y = source[i + 1];\r\n const z = source[i + 2];\r\n target[i] = matrix[0] * x + matrix[4] * y + matrix[8] * z + matrix[12];\r\n target[i + 1] = matrix[1] * x + matrix[5] * y + matrix[9] * z + matrix[13];\r\n target[i + 2] = matrix[2] * x + matrix[6] * y + matrix[10] * z + matrix[14];\r\n }\r\n return target;\r\n}\r\n\r\nfunction getWrapSourceToTargetMatrix(source: any, target: any, out?: Matrix4x4) {\r\n if (!source?.worldMatrix || !target?.invWorldMatrix) {\r\n return (out ?? new Matrix4x4()).identity();\r\n }\r\n return Matrix4x4.multiplyAffine(target.invWorldMatrix, source.worldMatrix, out);\r\n}\r\n\r\n/** @internal Conservative bounds for the blend of wrapped and skinned target vertices. */\r\nexport function calculateGPUClothWrapBoundingBox(\r\n sourceBBox: BoundingBox,\r\n sourceToTargetMatrix: Matrix4x4,\r\n skinPositions: Float32Array,\r\n offsetDistances: Float32Array,\r\n wrapWeights: Float32Array\r\n) {\r\n const wrappedBox = sourceBBox.transform(sourceToTargetMatrix);\r\n let minX = Number.POSITIVE_INFINITY;\r\n let minY = Number.POSITIVE_INFINITY;\r\n let minZ = Number.POSITIVE_INFINITY;\r\n let maxX = Number.NEGATIVE_INFINITY;\r\n let maxY = Number.NEGATIVE_INFINITY;\r\n let maxZ = Number.NEGATIVE_INFINITY;\r\n for (let vertex = 0; vertex < wrapWeights.length; vertex++) {\r\n const base = vertex * 3;\r\n const weight = wrapWeights[vertex];\r\n const skinWeight = 1 - weight;\r\n const radius = weight * offsetDistances[vertex] + 0.001;\r\n minX = Math.min(minX, skinWeight * skinPositions[base] + weight * wrappedBox.minPoint.x - radius);\r\n minY = Math.min(minY, skinWeight * skinPositions[base + 1] + weight * wrappedBox.minPoint.y - radius);\r\n minZ = Math.min(minZ, skinWeight * skinPositions[base + 2] + weight * wrappedBox.minPoint.z - radius);\r\n maxX = Math.max(maxX, skinWeight * skinPositions[base] + weight * wrappedBox.maxPoint.x + radius);\r\n maxY = Math.max(maxY, skinWeight * skinPositions[base + 1] + weight * wrappedBox.maxPoint.y + radius);\r\n maxZ = Math.max(maxZ, skinWeight * skinPositions[base + 2] + weight * wrappedBox.maxPoint.z + radius);\r\n }\r\n return new BoundingBox(new Vector3(minX, minY, minZ), new Vector3(maxX, maxY, maxZ));\r\n}\r\n\r\nclass GPUClothWrapBinding {\r\n private readonly _device: AbstractDevice;\r\n private readonly _source: any;\r\n private readonly _target: any;\r\n private readonly _targetPrimitive: Primitive;\r\n private readonly _wrapTriangleIndexBuffer: GPUDataBuffer;\r\n private readonly _wrapBarycentricBuffer: GPUDataBuffer;\r\n private readonly _wrapLocalOffsetBuffer: GPUDataBuffer;\r\n private readonly _targetSkinPositionBuffer: GPUDataBuffer;\r\n private readonly _targetSkinNormalBuffer: GPUDataBuffer;\r\n private readonly _targetWrapWeightBuffer: GPUDataBuffer;\r\n private readonly _program: GPUProgram;\r\n private readonly _bindGroup: BindGroup;\r\n private readonly _workgroupCount: number;\r\n private readonly _targetOffsetDistances: Float32Array<ArrayBuffer>;\r\n private readonly _targetWrapWeights: Float32Array<ArrayBuffer>;\r\n private readonly _sourceToTargetMatrix: Matrix4x4;\r\n private readonly _positionBuffer: StructuredBuffer;\r\n private readonly _normalBuffer: StructuredBuffer;\r\n private readonly _originalPositionBuffer: Nullable<StructuredBuffer>;\r\n private readonly _originalNormalBuffer: Nullable<StructuredBuffer>;\r\n private readonly _restoreSkinning: Nullable<boolean>;\r\n private readonly _targetBasePositions: Float32Array<ArrayBuffer>;\r\n private readonly _targetBaseNormals: Float32Array<ArrayBuffer>;\r\n private readonly _targetBlendIndices: Nullable<Float32Array<ArrayBuffer>>;\r\n private readonly _targetBlendWeights: Nullable<Float32Array<ArrayBuffer>>;\r\n private readonly _targetSkinnedPositions: Float32Array<ArrayBuffer>;\r\n private readonly _targetSkinnedNormals: Float32Array<ArrayBuffer>;\r\n private readonly _hasPartialWrap: boolean;\r\n\r\n private constructor(\r\n device: AbstractDevice,\r\n source: any,\r\n target: any,\r\n targetPrimitive: Primitive,\r\n wrapTriangleIndexBuffer: GPUDataBuffer,\r\n wrapBarycentricBuffer: GPUDataBuffer,\r\n wrapLocalOffsetBuffer: GPUDataBuffer,\r\n targetSkinPositionBuffer: GPUDataBuffer,\r\n targetSkinNormalBuffer: GPUDataBuffer,\r\n targetWrapWeightBuffer: GPUDataBuffer,\r\n program: GPUProgram,\r\n bindGroup: BindGroup,\r\n positionBuffer: StructuredBuffer,\r\n normalBuffer: StructuredBuffer,\r\n originalPositionBuffer: Nullable<StructuredBuffer>,\r\n originalNormalBuffer: Nullable<StructuredBuffer>,\r\n workgroupCount: number,\r\n targetOffsetDistances: Float32Array<ArrayBuffer>,\r\n restoreSkinning: Nullable<boolean>,\r\n targetBasePositions: Float32Array<ArrayBuffer>,\r\n targetBaseNormals: Float32Array<ArrayBuffer>,\r\n targetBlendIndices: Nullable<Float32Array<ArrayBuffer>>,\r\n targetBlendWeights: Nullable<Float32Array<ArrayBuffer>>,\r\n targetWrapWeights: Float32Array<ArrayBuffer>\r\n ) {\r\n this._device = device;\r\n this._source = source;\r\n this._target = target;\r\n this._targetPrimitive = targetPrimitive;\r\n this._wrapTriangleIndexBuffer = wrapTriangleIndexBuffer;\r\n this._wrapBarycentricBuffer = wrapBarycentricBuffer;\r\n this._wrapLocalOffsetBuffer = wrapLocalOffsetBuffer;\r\n this._targetSkinPositionBuffer = targetSkinPositionBuffer;\r\n this._targetSkinNormalBuffer = targetSkinNormalBuffer;\r\n this._targetWrapWeightBuffer = targetWrapWeightBuffer;\r\n this._program = program;\r\n this._bindGroup = bindGroup;\r\n this._workgroupCount = workgroupCount;\r\n this._targetOffsetDistances = targetOffsetDistances;\r\n this._targetWrapWeights = targetWrapWeights;\r\n this._sourceToTargetMatrix = new Matrix4x4();\r\n this._positionBuffer = positionBuffer;\r\n this._normalBuffer = normalBuffer;\r\n this._originalPositionBuffer = originalPositionBuffer;\r\n this._originalNormalBuffer = originalNormalBuffer;\r\n this._restoreSkinning = restoreSkinning;\r\n this._targetBasePositions = targetBasePositions;\r\n this._targetBaseNormals = targetBaseNormals;\r\n this._targetBlendIndices = targetBlendIndices;\r\n this._targetBlendWeights = targetBlendWeights;\r\n this._targetSkinnedPositions = new Float32Array(targetBasePositions);\r\n this._targetSkinnedNormals = new Float32Array(targetBaseNormals);\r\n this._hasPartialWrap = targetWrapWeights.some((weight) => weight < 1 - 1e-6);\r\n }\r\n\r\n static async create(\r\n device: AbstractDevice,\r\n source: any,\r\n sourcePositionBuffer: StructuredBuffer,\r\n sourceRestPositions: Float32Array<ArrayBuffer>,\r\n sourceIndexData: Uint32Array<ArrayBuffer>,\r\n target: any,\r\n workgroupSize: number,\r\n targetWrapWeights?: ArrayLike<number>\r\n ) {\r\n const data = await GPUClothWrapBinding.createBindingData(\r\n source,\r\n sourceRestPositions,\r\n sourceIndexData,\r\n target\r\n );\r\n return GPUClothWrapBinding.createFromData(\r\n device,\r\n source,\r\n sourcePositionBuffer,\r\n sourceRestPositions,\r\n sourceIndexData,\r\n target,\r\n workgroupSize,\r\n data,\r\n targetWrapWeights\r\n );\r\n }\r\n\r\n static async createBindingData(\r\n source: any,\r\n sourceRestPositions: Float32Array<ArrayBuffer>,\r\n sourceIndexData: Uint32Array<ArrayBuffer>,\r\n target: any\r\n ): Promise<GPUClothWrapBindingData> {\r\n if (!target?.primitive) {\r\n throw new Error('GPU cloth wrap failed: target mesh has no primitive.');\r\n }\r\n const targetPrimitive = target.primitive as Primitive;\r\n const targetBasePositions = await readPositionDataFromPrimitive(targetPrimitive);\r\n const sourceToTargetBindMatrix = getWrapSourceToTargetMatrix(source, target);\r\n const [resolvedSourcePositions, targetPositions] = await Promise.all([\r\n resolveWrapBindPositions(source, sourceRestPositions),\r\n resolveWrapBindPositions(target, targetBasePositions)\r\n ]);\r\n const sourcePositionsInTargetSpace = transformPointArrayByMatrix(\r\n sourceToTargetBindMatrix,\r\n resolvedSourcePositions\r\n );\r\n const sourceVertexCount = (sourcePositionsInTargetSpace.length / 3) >> 0;\r\n const sourceTriangleCount = (sourceIndexData.length / 3) >> 0;\r\n if (sourceVertexCount <= 0) {\r\n throw new Error('GPU cloth wrap failed: source mesh has no vertices.');\r\n }\r\n if (sourceTriangleCount <= 0) {\r\n throw new Error('GPU cloth wrap failed: source mesh has no triangles.');\r\n }\r\n const vertexCount = (targetPositions.length / 3) >> 0;\r\n const sourceTriangleIndices = new Uint32Array(vertexCount * WRAP_TRIANGLE_VERTEX_COUNT);\r\n const sourceBarycentrics = new Float32Array(vertexCount * WRAP_TRIANGLE_VERTEX_COUNT);\r\n const targetLocalOffsets = new Float32Array(vertexCount * 3);\r\n let maxOffsetDistance = 0;\r\n const closestPoint = new Float32Array(3);\r\n const barycentrics = new Float32Array(3);\r\n const frame = new Float32Array(9);\r\n for (let vertex = 0; vertex < vertexCount; vertex++) {\r\n const targetBase = vertex * 3;\r\n const vx = targetPositions[targetBase];\r\n const vy = targetPositions[targetBase + 1];\r\n const vz = targetPositions[targetBase + 2];\r\n let bestDistanceSq = Number.POSITIVE_INFINITY;\r\n let bestI0 = 0;\r\n let bestI1 = 0;\r\n let bestI2 = 0;\r\n let bestClosestX = vx;\r\n let bestClosestY = vy;\r\n let bestClosestZ = vz;\r\n let bestBary0 = 1;\r\n let bestBary1 = 0;\r\n let bestBary2 = 0;\r\n for (let tri = 0; tri < sourceTriangleCount; tri++) {\r\n const triBase = tri * 3;\r\n const i0 = sourceIndexData[triBase];\r\n const i1 = sourceIndexData[triBase + 1];\r\n const i2 = sourceIndexData[triBase + 2];\r\n if (i0 >= sourceVertexCount || i1 >= sourceVertexCount || i2 >= sourceVertexCount) {\r\n continue;\r\n }\r\n const base0 = i0 * 3;\r\n const base1 = i1 * 3;\r\n const base2 = i2 * 3;\r\n const distanceSq = closestPointOnTriangle(\r\n vx,\r\n vy,\r\n vz,\r\n sourcePositionsInTargetSpace[base0],\r\n sourcePositionsInTargetSpace[base0 + 1],\r\n sourcePositionsInTargetSpace[base0 + 2],\r\n sourcePositionsInTargetSpace[base1],\r\n sourcePositionsInTargetSpace[base1 + 1],\r\n sourcePositionsInTargetSpace[base1 + 2],\r\n sourcePositionsInTargetSpace[base2],\r\n sourcePositionsInTargetSpace[base2 + 1],\r\n sourcePositionsInTargetSpace[base2 + 2],\r\n closestPoint,\r\n barycentrics\r\n );\r\n if (distanceSq < bestDistanceSq) {\r\n bestDistanceSq = distanceSq;\r\n bestI0 = i0;\r\n bestI1 = i1;\r\n bestI2 = i2;\r\n bestClosestX = closestPoint[0];\r\n bestClosestY = closestPoint[1];\r\n bestClosestZ = closestPoint[2];\r\n bestBary0 = barycentrics[0];\r\n bestBary1 = barycentrics[1];\r\n bestBary2 = barycentrics[2];\r\n }\r\n }\r\n if (!Number.isFinite(bestDistanceSq)) {\r\n throw new Error('GPU cloth wrap failed: source mesh triangle data is invalid.');\r\n }\r\n const influenceBase = vertex * WRAP_TRIANGLE_VERTEX_COUNT;\r\n sourceTriangleIndices[influenceBase] = bestI0;\r\n sourceTriangleIndices[influenceBase + 1] = bestI1;\r\n sourceTriangleIndices[influenceBase + 2] = bestI2;\r\n sourceBarycentrics[influenceBase] = bestBary0;\r\n sourceBarycentrics[influenceBase + 1] = bestBary1;\r\n sourceBarycentrics[influenceBase + 2] = bestBary2;\r\n const bestBase0 = bestI0 * 3;\r\n const bestBase1 = bestI1 * 3;\r\n const bestBase2 = bestI2 * 3;\r\n buildWrapTriangleFrame(\r\n sourcePositionsInTargetSpace[bestBase0],\r\n sourcePositionsInTargetSpace[bestBase0 + 1],\r\n sourcePositionsInTargetSpace[bestBase0 + 2],\r\n sourcePositionsInTargetSpace[bestBase1],\r\n sourcePositionsInTargetSpace[bestBase1 + 1],\r\n sourcePositionsInTargetSpace[bestBase1 + 2],\r\n sourcePositionsInTargetSpace[bestBase2],\r\n sourcePositionsInTargetSpace[bestBase2 + 1],\r\n sourcePositionsInTargetSpace[bestBase2 + 2],\r\n frame\r\n );\r\n const deltaX = vx - bestClosestX;\r\n const deltaY = vy - bestClosestY;\r\n const deltaZ = vz - bestClosestZ;\r\n targetLocalOffsets[targetBase] = dot3(deltaX, deltaY, deltaZ, frame[0], frame[1], frame[2]);\r\n targetLocalOffsets[targetBase + 1] = dot3(deltaX, deltaY, deltaZ, frame[3], frame[4], frame[5]);\r\n targetLocalOffsets[targetBase + 2] = dot3(deltaX, deltaY, deltaZ, frame[6], frame[7], frame[8]);\r\n maxOffsetDistance = Math.max(maxOffsetDistance, Math.sqrt(bestDistanceSq));\r\n }\r\n\r\n return {\r\n version: 4,\r\n vertexCount,\r\n sourceVertexCount,\r\n influenceCount: WRAP_TRIANGLE_VERTEX_COUNT,\r\n maxOffsetDistance,\r\n sourceTriangleIndices: encodeTypedArrayBase64(sourceTriangleIndices),\r\n sourceBarycentrics: encodeTypedArrayBase64(sourceBarycentrics),\r\n targetLocalOffsets: encodeTypedArrayBase64(targetLocalOffsets)\r\n };\r\n }\r\n\r\n static async createFromData(\r\n device: AbstractDevice,\r\n source: any,\r\n sourcePositionBuffer: StructuredBuffer,\r\n sourceRestPositions: Float32Array<ArrayBuffer>,\r\n _sourceIndexData: Uint32Array<ArrayBuffer>,\r\n target: any,\r\n workgroupSize: number,\r\n data: GPUClothWrapBindingData,\r\n targetWrapWeightSource?: ArrayLike<number>\r\n ) {\r\n if (!target?.primitive) {\r\n throw new Error('GPU cloth wrap failed: target mesh has no primitive.');\r\n }\r\n const targetPrimitive = target.primitive as Primitive;\r\n const vertexCount = targetPrimitive.getNumVertices();\r\n if (!isWrapBindingDataCompatible(data, sourceRestPositions, vertexCount)) {\r\n throw new Error('GPU cloth wrap failed: binding cache is incompatible with current meshes.');\r\n }\r\n const [targetBasePositions, targetBaseNormalsSource, targetSkinningData] = await Promise.all([\r\n readPositionDataFromPrimitive(targetPrimitive),\r\n readVertexAttributeDataFromPrimitive(targetPrimitive, 'normal', 3),\r\n readSkinningDataFromMesh(target)\r\n ]);\r\n const expectedElementCount = vertexCount * 3;\r\n const hasTargetNormals = !!targetBaseNormalsSource;\r\n const targetBaseNormals = targetBaseNormalsSource ?? new Float32Array(expectedElementCount);\r\n const targetWrapWeights = normalizeTargetWrapWeights(targetWrapWeightSource, vertexCount);\r\n const influenceElementCount = vertexCount * data.influenceCount;\r\n const wrapSourceTriangleIndices = decodeTypedArrayFromBase64(\r\n Uint32Array,\r\n data.sourceTriangleIndices,\r\n influenceElementCount\r\n );\r\n const wrapSourceBarycentrics = decodeTypedArrayFromBase64(\r\n Float32Array,\r\n data.sourceBarycentrics,\r\n influenceElementCount\r\n );\r\n const wrapTargetLocalOffsets = decodeTypedArrayFromBase64(\r\n Float32Array,\r\n data.targetLocalOffsets,\r\n expectedElementCount\r\n );\r\n const targetOffsetDistances = new Float32Array(vertexCount);\r\n for (let vertex = 0; vertex < vertexCount; vertex++) {\r\n const base = vertex * 3;\r\n targetOffsetDistances[vertex] = Math.hypot(\r\n wrapTargetLocalOffsets[base],\r\n wrapTargetLocalOffsets[base + 1],\r\n wrapTargetLocalOffsets[base + 2]\r\n );\r\n }\r\n const positionBuffer = device.createVertexBuffer(\r\n 'position_f32x3',\r\n new Float32Array(expectedElementCount),\r\n {\r\n storage: true,\r\n managed: false\r\n }\r\n );\r\n if (!positionBuffer) {\r\n throw new Error('GPU cloth wrap failed: could not create target position buffer.');\r\n }\r\n const normalBuffer = device.createVertexBuffer('normal_f32x3', new Float32Array(expectedElementCount), {\r\n storage: true,\r\n managed: false\r\n });\r\n if (!normalBuffer) {\r\n throw new Error('GPU cloth wrap failed: could not create target normal buffer.');\r\n }\r\n\r\n const wrapTriangleIndexBuffer = device.createBuffer(wrapSourceTriangleIndices.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n wrapTriangleIndexBuffer.bufferSubData(0, wrapSourceTriangleIndices);\r\n const wrapBarycentricBuffer = device.createBuffer(wrapSourceBarycentrics.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n wrapBarycentricBuffer.bufferSubData(0, wrapSourceBarycentrics);\r\n const wrapLocalOffsetBuffer = device.createBuffer(wrapTargetLocalOffsets.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n wrapLocalOffsetBuffer.bufferSubData(0, wrapTargetLocalOffsets);\r\n const targetSkinPositionBuffer = device.createBuffer(targetBasePositions.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n targetSkinPositionBuffer.bufferSubData(0, targetBasePositions);\r\n const targetSkinNormalBuffer = device.createBuffer(targetBaseNormals.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n targetSkinNormalBuffer.bufferSubData(0, targetBaseNormals);\r\n const targetWrapWeightBuffer = device.createBuffer(targetWrapWeights.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n targetWrapWeightBuffer.bufferSubData(0, targetWrapWeights);\r\n const program = createWrapDeformerProgram(device, workgroupSize);\r\n if (!program) {\r\n throw new Error('GPU cloth wrap failed: could not create compute program.');\r\n }\r\n const bindGroup = device.createBindGroup(program.bindGroupLayouts[0]);\r\n bindGroup.setBuffer('sourcePositions', sourcePositionBuffer);\r\n bindGroup.setBuffer('sourceTriangleIndices', wrapTriangleIndexBuffer);\r\n bindGroup.setBuffer('sourceBarycentrics', wrapBarycentricBuffer);\r\n bindGroup.setBuffer('targetLocalOffsets', wrapLocalOffsetBuffer);\r\n bindGroup.setBuffer('targetSkinPositions', targetSkinPositionBuffer);\r\n bindGroup.setBuffer('targetSkinNormals', targetSkinNormalBuffer);\r\n bindGroup.setBuffer('targetWrapWeights', targetWrapWeightBuffer);\r\n bindGroup.setBuffer('targetPositions', positionBuffer);\r\n bindGroup.setBuffer('targetNormals', normalBuffer);\r\n const sourceToTargetBindMatrix = getWrapSourceToTargetMatrix(source, target);\r\n bindGroup.setValue('vertexCount', vertexCount);\r\n bindGroup.setValue('sourceToTargetMatrix', sourceToTargetBindMatrix);\r\n bindGroup.setValue('minDistance', 1e-5);\r\n bindGroup.setValue('hasTargetNormals', hasTargetNormals ? 1 : 0);\r\n\r\n const originalPositionBuffer = targetPrimitive.getVertexBuffer('position');\r\n const originalNormalBuffer = targetPrimitive.getVertexBuffer('normal');\r\n retainObject(originalPositionBuffer);\r\n retainObject(originalNormalBuffer);\r\n targetPrimitive.removeVertexBuffer('position');\r\n targetPrimitive.setVertexBuffer(positionBuffer!);\r\n targetPrimitive.removeVertexBuffer('normal');\r\n targetPrimitive.setVertexBuffer(normalBuffer!);\r\n\r\n let restoreSkinning: Nullable<boolean> = null;\r\n if (typeof target?.suspendSkinning === 'boolean') {\r\n restoreSkinning = target.suspendSkinning;\r\n target.suspendSkinning = true;\r\n target.setBoneMatrices?.(null);\r\n target.setAnimatedBoundingBox?.(null);\r\n }\r\n\r\n const binding = new GPUClothWrapBinding(\r\n device,\r\n source,\r\n target,\r\n targetPrimitive,\r\n wrapTriangleIndexBuffer,\r\n wrapBarycentricBuffer,\r\n wrapLocalOffsetBuffer,\r\n targetSkinPositionBuffer,\r\n targetSkinNormalBuffer,\r\n targetWrapWeightBuffer,\r\n program,\r\n bindGroup,\r\n positionBuffer!,\r\n normalBuffer!,\r\n originalPositionBuffer,\r\n originalNormalBuffer,\r\n Math.max(1, Math.ceil(vertexCount / workgroupSize)),\r\n targetOffsetDistances,\r\n restoreSkinning,\r\n targetBasePositions,\r\n targetBaseNormals,\r\n targetSkinningData?.blendIndices ?? null,\r\n targetSkinningData?.blendWeights ?? null,\r\n targetWrapWeights\r\n );\r\n binding.update();\r\n return binding;\r\n }\r\n\r\n update() {\r\n this.updateTargetSkinning();\r\n getWrapSourceToTargetMatrix(this._source, this._target, this._sourceToTargetMatrix);\r\n this._bindGroup.setValue('sourceToTargetMatrix', this._sourceToTargetMatrix);\r\n this._device.setProgram(this._program);\r\n this._device.setBindGroup(0, this._bindGroup);\r\n this._device.compute(this._workgroupCount, 1, 1);\r\n this.updateBoundingBox();\r\n }\r\n\r\n dispose() {\r\n this._bindGroup.dispose();\r\n this._program.dispose();\r\n this._wrapTriangleIndexBuffer.dispose();\r\n this._wrapBarycentricBuffer.dispose();\r\n this._wrapLocalOffsetBuffer.dispose();\r\n this._targetSkinPositionBuffer.dispose();\r\n this._targetSkinNormalBuffer.dispose();\r\n this._targetWrapWeightBuffer.dispose();\r\n if (this._targetPrimitive) {\r\n this._targetPrimitive.removeVertexBuffer('position');\r\n if (this._originalPositionBuffer) {\r\n this._targetPrimitive.setVertexBuffer(this._originalPositionBuffer);\r\n }\r\n this._targetPrimitive.removeVertexBuffer('normal');\r\n if (this._originalNormalBuffer) {\r\n this._targetPrimitive.setVertexBuffer(this._originalNormalBuffer);\r\n }\r\n }\r\n releaseObject(this._originalPositionBuffer);\r\n releaseObject(this._originalNormalBuffer);\r\n this._positionBuffer.dispose();\r\n this._normalBuffer.dispose();\r\n if (this._target && this._restoreSkinning !== null) {\r\n this._target.setAnimatedBoundingBox?.(null);\r\n this._target.suspendSkinning = this._restoreSkinning;\r\n }\r\n }\r\n\r\n private updateTargetSkinning() {\r\n if (!this._hasPartialWrap) {\r\n return;\r\n }\r\n const skeletonId = String(this._target?.skeletonName ?? '');\r\n const skeleton =\r\n skeletonId && typeof this._target?.findSkeletonById === 'function'\r\n ? this._target.findSkeletonById(skeletonId)\r\n : null;\r\n if (\r\n skeleton?.skinPositionsToLocal &&\r\n this._targetBlendIndices &&\r\n this._targetBlendWeights &&\r\n this._target?.invWorldMatrix\r\n ) {\r\n skeleton.skinPositionsToLocal(\r\n this._targetBasePositions,\r\n this._targetBlendIndices,\r\n this._targetBlendWeights,\r\n this._target.invWorldMatrix,\r\n this._targetSkinnedPositions\r\n );\r\n if (skeleton.skinDirectionsToLocal && this._targetBaseNormals.length > 0) {\r\n skeleton.skinDirectionsToLocal(\r\n this._targetBaseNormals,\r\n this._targetBlendIndices,\r\n this._targetBlendWeights,\r\n this._target.invWorldMatrix,\r\n this._targetSkinnedNormals\r\n );\r\n }\r\n } else {\r\n this._targetSkinnedPositions.set(this._targetBasePositions);\r\n this._targetSkinnedNormals.set(this._targetBaseNormals);\r\n }\r\n this._targetSkinPositionBuffer.bufferSubData(0, this._targetSkinnedPositions);\r\n this._targetSkinNormalBuffer.bufferSubData(0, this._targetSkinnedNormals);\r\n }\r\n\r\n private updateBoundingBox() {\r\n const sourceBBox =\r\n this._source?.getAnimatedBoundingBox?.() ??\r\n this._source?.primitive?.getBoundingVolume?.()?.toAABB?.() ??\r\n null;\r\n if (!sourceBBox) {\r\n return;\r\n }\r\n getWrapSourceToTargetMatrix(this._source, this._target, this._sourceToTargetMatrix);\r\n this._target?.setAnimatedBoundingBox?.(\r\n calculateGPUClothWrapBoundingBox(\r\n sourceBBox,\r\n this._sourceToTargetMatrix,\r\n this._targetSkinnedPositions,\r\n this._targetOffsetDistances,\r\n this._targetWrapWeights\r\n )\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Creates wrap-binding cache data between a source cloth mesh and a target mesh.\r\n *\r\n * @public\r\n */\r\nexport async function createGPUClothWrapBindingData(\r\n source: any,\r\n target: any\r\n): Promise<GPUClothWrapBindingData> {\r\n if (!source?.primitive) {\r\n throw new Error('GPU cloth wrap failed: source mesh has no primitive.');\r\n }\r\n const sourcePrimitive = source.primitive as Primitive;\r\n const sourcePositions = await readPositionDataFromPrimitive(sourcePrimitive);\r\n const sourceIndices = toUInt32Indices(await readIndexDataFromPrimitive(sourcePrimitive));\r\n return GPUClothWrapBinding.createBindingData(source, sourcePositions, sourceIndices, target);\r\n}\r\n\r\n/**\r\n * WebGPU-only cloth simulation entry.\r\n *\r\n * On non-WebGPU backends (including WebGL), the system is always disabled.\r\n *\r\n * @public\r\n */\r\nexport class GPUClothSystem {\r\n private _enabled: boolean;\r\n private _disabledReason: Nullable<string>;\r\n private _device: Nullable<AbstractDevice>;\r\n private _primitive: Nullable<Primitive>;\r\n private _originalPositionBuffer: Nullable<StructuredBuffer>;\r\n private _originalNormalBuffer: Nullable<StructuredBuffer>;\r\n private _positionBuffer: Nullable<StructuredBuffer>;\r\n private _sourceIndexData: Nullable<Uint32Array<ArrayBuffer>>;\r\n private _prevPositionBuffer: Nullable<GPUDataBuffer>;\r\n private _restPositionBuffer: Nullable<GPUDataBuffer>;\r\n private _prevRestPositionBuffer: Nullable<GPUDataBuffer>;\r\n private _invMassBuffer: Nullable<GPUDataBuffer>;\r\n private _neighborIndexBuffer: Nullable<GPUDataBuffer>;\r\n private _restLengthBuffer: Nullable<GPUDataBuffer>;\r\n private _integrateProgram: Nullable<GPUProgram>;\r\n private _constraintProgram: Nullable<GPUProgram>;\r\n private _faceNormalProgram: Nullable<GPUProgram>;\r\n private _vertexNormalProgram: Nullable<GPUProgram>;\r\n private _integrateBindGroup: Nullable<BindGroup>;\r\n private _constraintBindGroup: Nullable<BindGroup>;\r\n private _faceNormalBindGroup: Nullable<BindGroup>;\r\n private _vertexNormalBindGroup: Nullable<BindGroup>;\r\n private _vertexCount: number;\r\n private _workgroupCount: number;\r\n private _triangleCount: number;\r\n private _triangleWorkgroupCount: number;\r\n private _maxNeighbors: number;\r\n private _maxTrianglesPerVertex: number;\r\n private _gravity: Vector3;\r\n private _damping: number;\r\n private _dynamicFriction: number;\r\n private _staticFriction: number;\r\n private _stiffness: number;\r\n private _poseFollow: number;\r\n private _substeps: number;\r\n private _solverIterations: number;\r\n private _colliders: SpringCollider[];\r\n private _sphereColliderBuffer: Nullable<GPUDataBuffer>;\r\n private _capsuleColliderBuffer: Nullable<GPUDataBuffer>;\r\n private _planeColliderBuffer: Nullable<GPUDataBuffer>;\r\n private _boxColliderBuffer: Nullable<GPUDataBuffer>;\r\n private _sphereColliderData: Float32Array<ArrayBuffer>;\r\n private _capsuleColliderData: Float32Array<ArrayBuffer>;\r\n private _planeColliderData: Float32Array<ArrayBuffer>;\r\n private _boxColliderData: Float32Array<ArrayBuffer>;\r\n private _triangleIndexBuffer: Nullable<GPUDataBuffer>;\r\n private _triangleNormalBuffer: Nullable<GPUDataBuffer>;\r\n private _vertexTriangleAdjacencyBuffer: Nullable<GPUDataBuffer>;\r\n private _normalBuffer: Nullable<StructuredBuffer>;\r\n private _rebuildNormals: boolean;\r\n private _collisionSpaceNode: any;\r\n private _sourcePositionData: Nullable<Float32Array<ArrayBuffer>>;\r\n private _skinningBlendIndices: Nullable<Float32Array<ArrayBuffer>>;\r\n private _skinningBlendWeights: Nullable<Float32Array<ArrayBuffer>>;\r\n private _dynamicRestPositionData: Nullable<Float32Array<ArrayBuffer>>;\r\n private _smoothedRestPositionData: Nullable<Float32Array<ArrayBuffer>>;\r\n private _usingDynamicRestPose: boolean;\r\n private _skinAnimationTarget: any;\r\n private _restoreSkinAnimation: Nullable<boolean>;\r\n private _boundScene: Nullable<Scene>;\r\n private _autoUpdate: boolean;\r\n private _workgroupSize: number;\r\n private _wrapBindings: GPUClothWrapBinding[];\r\n private _latestInputDeltaTime: number;\r\n private _smoothedSphereCenters: WeakMap<SphereCollider, Vector3>;\r\n private _smoothedCapsuleEndpoints: WeakMap<CapsuleCollider, { start: Vector3; end: Vector3 }>;\r\n private _smoothedPlaneData: WeakMap<PlaneCollider, { point: Vector3; normal: Vector3 }>;\r\n private _timeAccumulator: number;\r\n private _pendingAutoUpdateDeltaTime: number;\r\n private readonly _meshPostUpdateCallback: MeshUpdateCallback;\r\n\r\n constructor(options?: GPUClothSystemOptions) {\r\n this._device = resolveDevice(options?.device ?? null);\r\n const supported = isGPUClothSupported(this._device);\r\n const wantEnabled = options?.enabled ?? true;\r\n this._enabled = false;\r\n this._disabledReason = null;\r\n this._primitive = options?.primitive ?? null;\r\n this._originalPositionBuffer = null;\r\n this._originalNormalBuffer = null;\r\n this._positionBuffer = null;\r\n this._sourceIndexData = null;\r\n this._prevPositionBuffer = null;\r\n this._restPositionBuffer = null;\r\n this._prevRestPositionBuffer = null;\r\n this._invMassBuffer = null;\r\n this._neighborIndexBuffer = null;\r\n this._restLengthBuffer = null;\r\n this._integrateProgram = null;\r\n this._constraintProgram = null;\r\n this._faceNormalProgram = null;\r\n this._vertexNormalProgram = null;\r\n this._integrateBindGroup = null;\r\n this._constraintBindGroup = null;\r\n this._faceNormalBindGroup = null;\r\n this._vertexNormalBindGroup = null;\r\n this._vertexCount = 0;\r\n this._workgroupCount = 0;\r\n this._triangleCount = 0;\r\n this._triangleWorkgroupCount = 0;\r\n this._maxNeighbors = clamp(options?.maxNeighbors ?? DEFAULT_MAX_NEIGHBORS, 1, 64) | 0;\r\n this._maxTrianglesPerVertex = clamp(\r\n options?.maxTrianglesPerVertex ?? DEFAULT_MAX_TRIANGLES_PER_VERTEX,\r\n 1,\r\n 64\r\n );\r\n this._gravity = options?.gravity?.clone() ?? new Vector3(0, -9.8, 0);\r\n this._damping = clamp(options?.damping ?? DEFAULT_DAMPING, 0, 1);\r\n this._dynamicFriction = clamp(options?.dynamicFriction ?? DEFAULT_DYNAMIC_FRICTION, 0, 1);\r\n this._staticFriction = clamp(options?.staticFriction ?? DEFAULT_STATIC_FRICTION, 0, 1);\r\n this._stiffness = clamp(options?.stiffness ?? DEFAULT_STIFFNESS, 0, 1);\r\n this._poseFollow = clamp(options?.poseFollow ?? DEFAULT_POSE_FOLLOW, 0, 1);\r\n this._substeps = clamp(options?.substeps ?? DEFAULT_SUBSTEPS, 1, 8) | 0;\r\n this._solverIterations = Math.max(1, (options?.solverIterations ?? DEFAULT_SOLVER_ITERATIONS) | 0);\r\n this._colliders = [...(options?.colliders ?? [])];\r\n this._sphereColliderBuffer = null;\r\n this._capsuleColliderBuffer = null;\r\n this._planeColliderBuffer = null;\r\n this._boxColliderBuffer = null;\r\n this._sphereColliderData = new Float32Array(\r\n getInitialColliderBufferFloatCount(this._colliders, 'sphere', 4)\r\n );\r\n this._capsuleColliderData = new Float32Array(\r\n getInitialColliderBufferFloatCount(this._colliders, 'capsule', 8)\r\n );\r\n this._planeColliderData = new Float32Array(\r\n getInitialColliderBufferFloatCount(this._colliders, 'plane', 8)\r\n );\r\n this._boxColliderData = new Float32Array(getInitialColliderBufferFloatCount(this._colliders, 'box', 16));\r\n this._triangleIndexBuffer = null;\r\n this._triangleNormalBuffer = null;\r\n this._vertexTriangleAdjacencyBuffer = null;\r\n this._normalBuffer = null;\r\n this._rebuildNormals = options?.rebuildNormals ?? true;\r\n this._collisionSpaceNode = options?.collisionSpaceNode ?? null;\r\n this._sourcePositionData = options?.positionData ? new Float32Array(options.positionData) : null;\r\n this._skinningBlendIndices = options?.skinningBlendIndices\r\n ? new Float32Array(options.skinningBlendIndices)\r\n : null;\r\n this._skinningBlendWeights = options?.skinningBlendWeights\r\n ? new Float32Array(options.skinningBlendWeights)\r\n : null;\r\n this._dynamicRestPositionData = null;\r\n this._smoothedRestPositionData = null;\r\n this._usingDynamicRestPose = false;\r\n this._skinAnimationTarget = null;\r\n this._restoreSkinAnimation = null;\r\n this._boundScene = null;\r\n this._autoUpdate = options?.autoUpdate ?? true;\r\n this._workgroupSize = clamp(options?.workgroupSize ?? DEFAULT_WORKGROUP_SIZE, 1, 256) | 0;\r\n this._wrapBindings = [];\r\n this._latestInputDeltaTime = 0;\r\n this._smoothedSphereCenters = new WeakMap();\r\n this._smoothedCapsuleEndpoints = new WeakMap();\r\n this._smoothedPlaneData = new WeakMap();\r\n this._timeAccumulator = 0;\r\n this._pendingAutoUpdateDeltaTime = 0;\r\n this._meshPostUpdateCallback = (_frameId, _elapsedInSeconds, deltaInSeconds) => {\r\n const dt = this._pendingAutoUpdateDeltaTime || deltaInSeconds;\r\n if (dt > 0) {\r\n this._pendingAutoUpdateDeltaTime = 0;\r\n this.update(dt);\r\n }\r\n };\r\n\r\n if (!supported) {\r\n this._disabledReason = 'GPU cloth is disabled: current backend is not WebGPU.';\r\n if (wantEnabled) {\r\n warnUnsupported('GPU cloth (GPUClothComponent)', 'WebGPU', 'the cloth does not move');\r\n }\r\n return;\r\n }\r\n\r\n if (!this._device) {\r\n this._disabledReason = 'GPU cloth is disabled: no active rendering device.';\r\n return;\r\n }\r\n\r\n if (!this._primitive) {\r\n this._disabledReason = 'GPU cloth is disabled: primitive is required.';\r\n return;\r\n }\r\n\r\n if (!options?.positionData || !options?.indexData) {\r\n this._disabledReason =\r\n 'GPU cloth is disabled: positionData and indexData are required. Use createFromPrimitive(...) to build them automatically.';\r\n return;\r\n }\r\n\r\n const vertexCount = (options.positionData.length / 3) >> 0;\r\n if (vertexCount <= 0 || options.positionData.length % 3 !== 0) {\r\n this._disabledReason = 'GPU cloth is disabled: invalid positionData.';\r\n return;\r\n }\r\n if (options.indexData.length < 3 || options.indexData.length % 3 !== 0) {\r\n this._disabledReason = 'GPU cloth is disabled: indexData must be triangle indices.';\r\n return;\r\n }\r\n\r\n const initialSimulationPositions =\r\n buildInitialSimulationPositions(options) ?? new Float32Array(options.positionData);\r\n const workgroupSize = this._workgroupSize;\r\n const indexDataU32 = toUInt32Indices(options.indexData);\r\n this._sourceIndexData = new Uint32Array(indexDataU32);\r\n const pinWeightArray = buildPinWeightArray(\r\n initialSimulationPositions,\r\n options.pinnedVertexWeights,\r\n options.pinnedVertexIndices\r\n );\r\n const neighbors = buildNeighborData(initialSimulationPositions, options.indexData, this._maxNeighbors);\r\n const adjacency = buildVertexTriangleAdjacency(vertexCount, indexDataU32, this._maxTrianglesPerVertex);\r\n if (!neighbors.hasConstraint) {\r\n this._disabledReason = 'GPU cloth is disabled: could not build cloth constraints from indexData.';\r\n return;\r\n }\r\n\r\n try {\r\n this._positionBuffer = this._device.createVertexBuffer('position_f32x3', initialSimulationPositions, {\r\n storage: true,\r\n managed: false\r\n });\r\n if (!this._positionBuffer) {\r\n this._disabledReason = 'GPU cloth is disabled: failed to create cloth position buffer.';\r\n return;\r\n }\r\n this._prevPositionBuffer = this._device.createBuffer(options.positionData.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._prevPositionBuffer.bufferSubData(0, initialSimulationPositions);\r\n\r\n this._restPositionBuffer = this._device.createBuffer(options.positionData.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._restPositionBuffer.bufferSubData(0, initialSimulationPositions);\r\n\r\n this._prevRestPositionBuffer = this._device.createBuffer(options.positionData.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._prevRestPositionBuffer.bufferSubData(0, initialSimulationPositions);\r\n\r\n const invMassArray = new Float32Array(vertexCount);\r\n for (let i = 0; i < vertexCount; i++) {\r\n invMassArray[i] = 1 - pinWeightArray[i];\r\n }\r\n this._invMassBuffer = this._device.createBuffer(invMassArray.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._invMassBuffer.bufferSubData(0, invMassArray);\r\n\r\n this._neighborIndexBuffer = this._device.createBuffer(neighbors.neighborIndices.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._neighborIndexBuffer.bufferSubData(0, neighbors.neighborIndices);\r\n\r\n this._restLengthBuffer = this._device.createBuffer(neighbors.restLengths.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._restLengthBuffer.bufferSubData(0, neighbors.restLengths);\r\n\r\n this._triangleIndexBuffer = this._device.createBuffer(indexDataU32.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._triangleIndexBuffer.bufferSubData(0, indexDataU32);\r\n\r\n this._triangleNormalBuffer = this._device.createBuffer(adjacency.triangleCount * 3 * 4, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n\r\n this._vertexTriangleAdjacencyBuffer = this._device.createBuffer(adjacency.adjacency.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._vertexTriangleAdjacencyBuffer.bufferSubData(0, adjacency.adjacency);\r\n\r\n this._sphereColliderBuffer = this._device.createBuffer(this._sphereColliderData.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._sphereColliderBuffer.bufferSubData(0, this._sphereColliderData);\r\n\r\n this._capsuleColliderBuffer = this._device.createBuffer(this._capsuleColliderData.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._capsuleColliderBuffer.bufferSubData(0, this._capsuleColliderData);\r\n\r\n this._planeColliderBuffer = this._device.createBuffer(this._planeColliderData.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._planeColliderBuffer.bufferSubData(0, this._planeColliderData);\r\n\r\n this._boxColliderBuffer = this._device.createBuffer(this._boxColliderData.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._boxColliderBuffer.bufferSubData(0, this._boxColliderData);\r\n\r\n this._integrateProgram = createIntegrateProgram(this._device, workgroupSize);\r\n this._constraintProgram = createConstraintProgram(this._device, workgroupSize);\r\n if (!this._integrateProgram || !this._constraintProgram) {\r\n this._disabledReason = 'GPU cloth is disabled: failed to create compute programs.';\r\n return;\r\n }\r\n\r\n this._integrateBindGroup = this._device.createBindGroup(this._integrateProgram.bindGroupLayouts[0]);\r\n this._integrateBindGroup.setBuffer('positions', this._positionBuffer!);\r\n this._integrateBindGroup.setBuffer('prevPositions', this._prevPositionBuffer);\r\n this._integrateBindGroup.setBuffer('restPositions', this._restPositionBuffer);\r\n this._integrateBindGroup.setBuffer('prevRestPositions', this._prevRestPositionBuffer);\r\n this._integrateBindGroup.setBuffer('invMass', this._invMassBuffer);\r\n this._integrateBindGroup.setBuffer('sphereData', this._sphereColliderBuffer);\r\n this._integrateBindGroup.setBuffer('capsuleData', this._capsuleColliderBuffer);\r\n this._integrateBindGroup.setBuffer('planeData', this._planeColliderBuffer);\r\n this._integrateBindGroup.setBuffer('boxData', this._boxColliderBuffer);\r\n this._integrateBindGroup.setValue('vertexCount', vertexCount);\r\n this._integrateBindGroup.setValue('damping', this._damping);\r\n this._integrateBindGroup.setValue('gravity', this._gravity);\r\n this._integrateBindGroup.setValue('sphereCount', 0);\r\n this._integrateBindGroup.setValue('capsuleCount', 0);\r\n this._integrateBindGroup.setValue('planeCount', 0);\r\n this._integrateBindGroup.setValue('boxCount', 0);\r\n this._integrateBindGroup.setValue('dynamicFriction', this._dynamicFriction);\r\n this._integrateBindGroup.setValue('staticFriction', this._staticFriction);\r\n this._integrateBindGroup.setValue('minDistance', 1e-5);\r\n\r\n this._constraintBindGroup = this._device.createBindGroup(this._constraintProgram.bindGroupLayouts[0]);\r\n this._constraintBindGroup.setBuffer('positions', this._positionBuffer!);\r\n this._constraintBindGroup.setBuffer('restPositions', this._restPositionBuffer);\r\n this._constraintBindGroup.setBuffer('invMass', this._invMassBuffer);\r\n this._constraintBindGroup.setBuffer('neighborIndices', this._neighborIndexBuffer);\r\n this._constraintBindGroup.setBuffer('restLengths', this._restLengthBuffer);\r\n this._constraintBindGroup.setBuffer('sphereData', this._sphereColliderBuffer);\r\n this._constraintBindGroup.setBuffer('capsuleData', this._capsuleColliderBuffer);\r\n this._constraintBindGroup.setBuffer('planeData', this._planeColliderBuffer);\r\n this._constraintBindGroup.setBuffer('boxData', this._boxColliderBuffer);\r\n this._constraintBindGroup.setValue('vertexCount', vertexCount);\r\n this._constraintBindGroup.setValue('maxNeighbors', this._maxNeighbors);\r\n this._constraintBindGroup.setValue('stiffness', this._stiffness);\r\n this._constraintBindGroup.setValue('poseFollow', this.getSubstepPoseFollow());\r\n this._constraintBindGroup.setValue('sphereCount', 0);\r\n this._constraintBindGroup.setValue('capsuleCount', 0);\r\n this._constraintBindGroup.setValue('planeCount', 0);\r\n this._constraintBindGroup.setValue('boxCount', 0);\r\n this._constraintBindGroup.setValue('dynamicFriction', this._dynamicFriction);\r\n this._constraintBindGroup.setValue('staticFriction', this._staticFriction);\r\n this._constraintBindGroup.setValue('minDistance', 1e-5);\r\n\r\n if (this._rebuildNormals) {\r\n this._normalBuffer = this._device.createVertexBuffer(\r\n 'normal_f32x3',\r\n new Float32Array(vertexCount * 3),\r\n {\r\n storage: true,\r\n managed: false\r\n }\r\n );\r\n if (this._normalBuffer) {\r\n this._faceNormalProgram = createFaceNormalProgram(this._device, workgroupSize);\r\n this._vertexNormalProgram = createVertexNormalProgram(this._device, workgroupSize);\r\n if (!this._faceNormalProgram || !this._vertexNormalProgram) {\r\n this._disabledReason = 'GPU cloth is disabled: failed to create normal reconstruction programs.';\r\n return;\r\n }\r\n this._faceNormalBindGroup = this._device.createBindGroup(\r\n this._faceNormalProgram.bindGroupLayouts[0]\r\n );\r\n this._faceNormalBindGroup.setBuffer('positions', this._positionBuffer!);\r\n this._faceNormalBindGroup.setBuffer('triangleIndices', this._triangleIndexBuffer);\r\n this._faceNormalBindGroup.setBuffer('triangleNormals', this._triangleNormalBuffer);\r\n this._faceNormalBindGroup.setValue('triangleCount', adjacency.triangleCount);\r\n this._faceNormalBindGroup.setValue('minDistance', 1e-5);\r\n\r\n this._vertexNormalBindGroup = this._device.createBindGroup(\r\n this._vertexNormalProgram.bindGroupLayouts[0]\r\n );\r\n this._vertexNormalBindGroup.setBuffer('triangleNormals', this._triangleNormalBuffer);\r\n this._vertexNormalBindGroup.setBuffer(\r\n 'vertexTriangleAdjacency',\r\n this._vertexTriangleAdjacencyBuffer\r\n );\r\n this._vertexNormalBindGroup.setBuffer('vertexNormals', this._normalBuffer);\r\n this._vertexNormalBindGroup.setValue('vertexCount', vertexCount);\r\n this._vertexNormalBindGroup.setValue('maxTrianglesPerVertex', this._maxTrianglesPerVertex);\r\n this._vertexNormalBindGroup.setValue('minDistance', 1e-5);\r\n }\r\n }\r\n\r\n this._originalPositionBuffer = this._primitive.getVertexBuffer('position');\r\n retainObject(this._originalPositionBuffer);\r\n this._primitive.removeVertexBuffer('position');\r\n this._primitive.setVertexBuffer(this._positionBuffer!);\r\n if (this._normalBuffer) {\r\n this._originalNormalBuffer = this._primitive.getVertexBuffer('normal');\r\n retainObject(this._originalNormalBuffer);\r\n this._primitive.removeVertexBuffer('normal');\r\n this._primitive.setVertexBuffer(this._normalBuffer);\r\n }\r\n this._vertexCount = vertexCount;\r\n this._workgroupCount = Math.max(1, Math.ceil(vertexCount / workgroupSize));\r\n this._triangleCount = adjacency.triangleCount;\r\n this._triangleWorkgroupCount = Math.max(1, Math.ceil(this._triangleCount / workgroupSize));\r\n this.disableTargetSkinning();\r\n this.updateTargetBoundingBox(initialSimulationPositions);\r\n this.updateColliderBuffers();\r\n if (this._autoUpdate && options?.scene) {\r\n this.bindToScene(options.scene);\r\n }\r\n this._enabled = !!wantEnabled;\r\n this._disabledReason = null;\r\n } catch (err) {\r\n this._disabledReason = `GPU cloth initialization failed: ${\r\n err instanceof Error ? err.message : String(err)\r\n }`;\r\n this._enabled = false;\r\n }\r\n }\r\n\r\n static async createFromPrimitive(\r\n primitive: Primitive,\r\n options?: Omit<GPUClothSystemOptions, 'primitive' | 'positionData' | 'indexData'>\r\n ) {\r\n const positionData = await readPositionDataFromPrimitive(primitive);\r\n const skinningData = await readSkinningDataFromPrimitive(primitive);\r\n const indexData = await readIndexDataFromPrimitive(primitive);\r\n return new GPUClothSystem({\r\n ...options,\r\n primitive,\r\n positionData,\r\n indexData,\r\n skinningBlendIndices: skinningData?.blendIndices ?? undefined,\r\n skinningBlendWeights: skinningData?.blendWeights ?? undefined\r\n });\r\n }\r\n\r\n static async createFromMesh(\r\n mesh: MeshSkinningSource & { scene?: Nullable<Scene> },\r\n options?: Omit<GPUClothSystemOptions, 'primitive' | 'positionData' | 'indexData' | 'scene'>\r\n ) {\r\n if (!mesh.primitive) {\r\n throw new Error('GPU cloth initialization failed: mesh has no primitive.');\r\n }\r\n const positionData = await readPositionDataFromPrimitive(mesh.primitive);\r\n const skinningData = await readSkinningDataFromMesh(mesh);\r\n const indexData = await readIndexDataFromPrimitive(mesh.primitive);\r\n return new GPUClothSystem({\r\n ...options,\r\n primitive: mesh.primitive,\r\n positionData,\r\n indexData,\r\n skinningBlendIndices: skinningData?.blendIndices ?? undefined,\r\n skinningBlendWeights: skinningData?.blendWeights ?? undefined,\r\n collisionSpaceNode: mesh,\r\n scene: mesh.scene ?? null\r\n });\r\n }\r\n\r\n async setWrapTargets(targets: any[]) {\r\n this.clearWrapTargets();\r\n if (\r\n !this.supported ||\r\n !this._device ||\r\n !this._positionBuffer ||\r\n !this._sourcePositionData ||\r\n !this._sourceIndexData\r\n ) {\r\n return;\r\n }\r\n const uniqueTargets = [\r\n ...new Set((targets ?? []).filter((target) => target?.primitive && target !== this._collisionSpaceNode))\r\n ];\r\n for (const target of uniqueTargets) {\r\n try {\r\n const binding = await GPUClothWrapBinding.create(\r\n this._device,\r\n this._collisionSpaceNode,\r\n this._positionBuffer,\r\n this._sourcePositionData,\r\n this._sourceIndexData,\r\n target,\r\n this._workgroupSize\r\n );\r\n this._wrapBindings.push(binding);\r\n } catch (err) {\r\n console.error('GPU cloth wrap target initialization failed:', err);\r\n }\r\n }\r\n }\r\n\r\n async setWrapTargetsFromBindingData(targets: GPUClothWrapBindingTarget[]) {\r\n this.clearWrapTargets();\r\n if (\r\n !this.supported ||\r\n !this._device ||\r\n !this._positionBuffer ||\r\n !this._sourcePositionData ||\r\n !this._sourceIndexData\r\n ) {\r\n return;\r\n }\r\n const seen = new Set<any>();\r\n for (const entry of targets ?? []) {\r\n const target = entry?.target;\r\n if (!target?.primitive || target === this._collisionSpaceNode || seen.has(target)) {\r\n continue;\r\n }\r\n seen.add(target);\r\n try {\r\n const binding = await GPUClothWrapBinding.createFromData(\r\n this._device,\r\n this._collisionSpaceNode,\r\n this._positionBuffer,\r\n this._sourcePositionData,\r\n this._sourceIndexData,\r\n target,\r\n this._workgroupSize,\r\n entry.data,\r\n entry.targetWrapWeights\r\n );\r\n this._wrapBindings.push(binding);\r\n } catch (err) {\r\n console.error('GPU cloth wrap target binding cache initialization failed:', err);\r\n }\r\n }\r\n }\r\n\r\n clearWrapTargets() {\r\n if (this._wrapBindings.length === 0) {\r\n return;\r\n }\r\n for (const binding of this._wrapBindings) {\r\n binding.dispose();\r\n }\r\n this._wrapBindings = [];\r\n }\r\n\r\n get enabled() {\r\n return this._enabled;\r\n }\r\n\r\n set enabled(value: boolean) {\r\n const enabled = this.supported && !!value;\r\n if (this._enabled !== enabled) {\r\n this.resetSimulationTiming();\r\n }\r\n this._enabled = enabled;\r\n }\r\n\r\n get supported() {\r\n return this._disabledReason === null;\r\n }\r\n\r\n get disabledReason() {\r\n return this._disabledReason;\r\n }\r\n\r\n get colliders() {\r\n return this._colliders;\r\n }\r\n\r\n set colliders(value: SpringCollider[]) {\r\n this._colliders = [...(value ?? [])];\r\n this.resetColliderSmoothing();\r\n this.updateColliderBuffers();\r\n }\r\n\r\n addCollider(collider: SpringCollider) {\r\n this._colliders.push(collider);\r\n this.updateColliderBuffers();\r\n }\r\n\r\n removeCollider(collider: SpringCollider) {\r\n const idx = this._colliders.indexOf(collider);\r\n if (idx >= 0) {\r\n this._colliders.splice(idx, 1);\r\n this.updateColliderBuffers();\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n clearColliders() {\r\n this._colliders.length = 0;\r\n this.resetColliderSmoothing();\r\n this.updateColliderBuffers();\r\n }\r\n\r\n get gravity() {\r\n return this._gravity;\r\n }\r\n\r\n set gravity(value: Vector3) {\r\n this._gravity.set(value);\r\n }\r\n\r\n get damping() {\r\n return this._damping;\r\n }\r\n\r\n set damping(value: number) {\r\n this._damping = clamp(value, 0, 1);\r\n }\r\n\r\n get dynamicFriction() {\r\n return this._dynamicFriction;\r\n }\r\n\r\n set dynamicFriction(value: number) {\r\n this._dynamicFriction = clamp(value, 0, 1);\r\n }\r\n\r\n get staticFriction() {\r\n return this._staticFriction;\r\n }\r\n\r\n set staticFriction(value: number) {\r\n this._staticFriction = clamp(value, 0, 1);\r\n }\r\n\r\n get stiffness() {\r\n return this._stiffness;\r\n }\r\n\r\n set stiffness(value: number) {\r\n this._stiffness = clamp(value, 0, 1);\r\n }\r\n\r\n get poseFollow() {\r\n return this._poseFollow;\r\n }\r\n\r\n set poseFollow(value: number) {\r\n this._poseFollow = clamp(value, 0, 1);\r\n }\r\n\r\n get solverIterations() {\r\n return this._solverIterations;\r\n }\r\n\r\n set solverIterations(value: number) {\r\n this._solverIterations = Math.max(1, value | 0);\r\n }\r\n\r\n get substeps() {\r\n return this._substeps;\r\n }\r\n\r\n set substeps(value: number) {\r\n this._substeps = clamp(value, 1, 8) | 0;\r\n }\r\n\r\n get vertexCount() {\r\n return this._vertexCount;\r\n }\r\n\r\n bindToScene(scene: Nullable<Scene>) {\r\n if (this._boundScene === scene) {\r\n return;\r\n }\r\n this.detachAutoUpdateTarget();\r\n if (this._boundScene) {\r\n this._boundScene.off('update', this._onSceneUpdate, this);\r\n }\r\n this._boundScene = scene ?? null;\r\n if (this._boundScene) {\r\n this._boundScene.on('update', this._onSceneUpdate, this);\r\n this.attachAutoUpdateTarget();\r\n }\r\n }\r\n\r\n unbindFromScene() {\r\n this.bindToScene(null);\r\n }\r\n\r\n update(deltaTime: number) {\r\n if (!this._enabled) {\r\n return;\r\n }\r\n if (\r\n !this._device ||\r\n !this._integrateProgram ||\r\n !this._constraintProgram ||\r\n !this._integrateBindGroup ||\r\n !this._constraintBindGroup\r\n ) {\r\n return;\r\n }\r\n const frameDt = clamp(Number(deltaTime) || 0, 0, MAX_ACCUMULATED_SIMULATION_TIME);\r\n this._latestInputDeltaTime = frameDt;\r\n this.updateSkinnedRestPositions(frameDt);\r\n this.updateColliderBuffers(frameDt);\r\n if (frameDt <= 0) {\r\n return;\r\n }\r\n this._timeAccumulator = Math.min(this._timeAccumulator + frameDt, MAX_ACCUMULATED_SIMULATION_TIME);\r\n const stepCount = Math.min(\r\n MAX_SIMULATION_STEPS_PER_UPDATE,\r\n Math.floor((this._timeAccumulator + 1e-8) / FIXED_SIMULATION_TIME_STEP)\r\n );\r\n if (stepCount <= 0) {\r\n return;\r\n }\r\n this._timeAccumulator = Math.max(0, this._timeAccumulator - stepCount * FIXED_SIMULATION_TIME_STEP);\r\n this._device.pushDeviceStates();\r\n try {\r\n for (let step = 0; step < stepCount; step++) {\r\n this.simulateStep(FIXED_SIMULATION_TIME_STEP);\r\n }\r\n this.updateSimulationOutputs();\r\n } finally {\r\n this._device.popDeviceStates();\r\n }\r\n }\r\n\r\n dispose() {\r\n this.unbindFromScene();\r\n this.clearWrapTargets();\r\n this.restoreTargetSkinning();\r\n if (this._primitive) {\r\n if (this._positionBuffer) {\r\n this._primitive.removeVertexBuffer('position');\r\n if (this._originalPositionBuffer) {\r\n this._primitive.setVertexBuffer(this._originalPositionBuffer);\r\n }\r\n }\r\n if (this._normalBuffer || this._originalNormalBuffer) {\r\n this._primitive.removeVertexBuffer('normal');\r\n if (this._originalNormalBuffer) {\r\n this._primitive.setVertexBuffer(this._originalNormalBuffer);\r\n }\r\n }\r\n }\r\n this._integrateBindGroup?.dispose();\r\n this._integrateBindGroup = null;\r\n this._constraintBindGroup?.dispose();\r\n this._constraintBindGroup = null;\r\n this._faceNormalBindGroup?.dispose();\r\n this._faceNormalBindGroup = null;\r\n this._vertexNormalBindGroup?.dispose();\r\n this._vertexNormalBindGroup = null;\r\n this._integrateProgram?.dispose();\r\n this._integrateProgram = null;\r\n this._constraintProgram?.dispose();\r\n this._constraintProgram = null;\r\n this._faceNormalProgram?.dispose();\r\n this._faceNormalProgram = null;\r\n this._vertexNormalProgram?.dispose();\r\n this._vertexNormalProgram = null;\r\n this._prevPositionBuffer?.dispose();\r\n this._prevPositionBuffer = null;\r\n this._restPositionBuffer?.dispose();\r\n this._restPositionBuffer = null;\r\n this._prevRestPositionBuffer?.dispose();\r\n this._prevRestPositionBuffer = null;\r\n this._invMassBuffer?.dispose();\r\n this._invMassBuffer = null;\r\n this._neighborIndexBuffer?.dispose();\r\n this._neighborIndexBuffer = null;\r\n this._restLengthBuffer?.dispose();\r\n this._restLengthBuffer = null;\r\n this._triangleIndexBuffer?.dispose();\r\n this._triangleIndexBuffer = null;\r\n this._triangleNormalBuffer?.dispose();\r\n this._triangleNormalBuffer = null;\r\n this._vertexTriangleAdjacencyBuffer?.dispose();\r\n this._vertexTriangleAdjacencyBuffer = null;\r\n this._sphereColliderBuffer?.dispose();\r\n this._sphereColliderBuffer = null;\r\n this._capsuleColliderBuffer?.dispose();\r\n this._capsuleColliderBuffer = null;\r\n this._planeColliderBuffer?.dispose();\r\n this._planeColliderBuffer = null;\r\n this._boxColliderBuffer?.dispose();\r\n this._boxColliderBuffer = null;\r\n releaseObject(this._originalPositionBuffer);\r\n this._originalPositionBuffer = null;\r\n releaseObject(this._originalNormalBuffer);\r\n this._originalNormalBuffer = null;\r\n this._enabled = false;\r\n this.resetSimulationTiming();\r\n }\r\n\r\n private simulateStep(deltaTime: number) {\r\n const substeps = this._substeps;\r\n const substepDt = deltaTime / substeps;\r\n try {\r\n for (let substep = 0; substep < substeps; substep++) {\r\n this._integrateBindGroup!.setValue('deltaTime', substepDt);\r\n this._integrateBindGroup!.setValue('damping', this._damping);\r\n this._integrateBindGroup!.setValue('gravity', this._gravity);\r\n this._integrateBindGroup!.setValue('dynamicFriction', this._dynamicFriction);\r\n this._integrateBindGroup!.setValue('staticFriction', this._staticFriction);\r\n this._device!.setProgram(this._integrateProgram!);\r\n this._device!.setBindGroup(0, this._integrateBindGroup!);\r\n this._device!.compute(this._workgroupCount, 1, 1);\r\n\r\n this._constraintBindGroup!.setValue('stiffness', this._stiffness);\r\n this._constraintBindGroup!.setValue('dynamicFriction', this._dynamicFriction);\r\n this._constraintBindGroup!.setValue('staticFriction', this._staticFriction);\r\n this._device!.setProgram(this._constraintProgram!);\r\n this._device!.setBindGroup(0, this._constraintBindGroup!);\r\n for (let i = 0; i < this._solverIterations; i++) {\r\n this._constraintBindGroup!.setValue(\r\n 'poseFollow',\r\n i === this._solverIterations - 1 ? this.getSubstepPoseFollow() : 0\r\n );\r\n this._device!.compute(this._workgroupCount, 1, 1);\r\n }\r\n }\r\n } finally {\r\n // Advance the animated rest pose once per fixed simulation step so a\r\n // single dropped frame does not inject the same pose delta repeatedly.\r\n this.commitRestPositions();\r\n }\r\n }\r\n\r\n private updateSimulationOutputs() {\r\n if (\r\n this._rebuildNormals &&\r\n this._faceNormalProgram &&\r\n this._vertexNormalProgram &&\r\n this._faceNormalBindGroup &&\r\n this._vertexNormalBindGroup\r\n ) {\r\n this._device!.setProgram(this._faceNormalProgram);\r\n this._device!.setBindGroup(0, this._faceNormalBindGroup);\r\n this._device!.compute(this._triangleWorkgroupCount, 1, 1);\r\n\r\n this._device!.setProgram(this._vertexNormalProgram);\r\n this._device!.setBindGroup(0, this._vertexNormalBindGroup);\r\n this._device!.compute(this._workgroupCount, 1, 1);\r\n }\r\n for (const binding of this._wrapBindings) {\r\n binding.update();\r\n }\r\n }\r\n\r\n private resetSimulationTiming() {\r\n this._timeAccumulator = 0;\r\n this._latestInputDeltaTime = 0;\r\n this._pendingAutoUpdateDeltaTime = 0;\r\n this._smoothedRestPositionData = null;\r\n this.resetColliderSmoothing();\r\n }\r\n\r\n private resetColliderSmoothing() {\r\n this._smoothedSphereCenters = new WeakMap();\r\n this._smoothedCapsuleEndpoints = new WeakMap();\r\n this._smoothedPlaneData = new WeakMap();\r\n }\r\n\r\n private updateColliderBuffers(deltaTime = this._latestInputDeltaTime) {\r\n if (!this._device || !this._integrateBindGroup) {\r\n return;\r\n }\r\n\r\n const spheres: { collider: SphereCollider; center: Vector3 }[] = [];\r\n const capsules: { collider: CapsuleCollider; start: Vector3; end: Vector3 }[] = [];\r\n const planes: { collider: PlaneCollider; point: Vector3; normal: Vector3 }[] = [];\r\n const boxes: { collider: BoxCollider }[] = [];\r\n const blend = this.getTemporalBlendFactor(deltaTime, DEFAULT_COLLIDER_SMOOTHING_TIME);\r\n for (const collider of this._colliders) {\r\n if (!collider?.enabled) {\r\n continue;\r\n }\r\n if (collider.node) {\r\n updateColliderFromNode(collider);\r\n }\r\n if (collider.type === 'sphere') {\r\n const sphere = collider as SphereCollider;\r\n spheres.push({\r\n collider: sphere,\r\n center: this.getSmoothedSphereCenter(sphere, blend)\r\n });\r\n } else if (collider.type === 'capsule') {\r\n const capsule = collider as CapsuleCollider;\r\n const smoothed = this.getSmoothedCapsuleEndpoints(capsule, blend);\r\n capsules.push({\r\n collider: capsule,\r\n start: smoothed.start,\r\n end: smoothed.end\r\n });\r\n } else if (collider.type === 'plane') {\r\n const plane = collider as PlaneCollider;\r\n const smoothed = this.getSmoothedPlaneData(plane, blend);\r\n planes.push({\r\n collider: plane,\r\n point: smoothed.point,\r\n normal: smoothed.normal\r\n });\r\n } else if (collider.type === 'box') {\r\n boxes.push({ collider: collider as BoxCollider });\r\n }\r\n }\r\n\r\n const sphereData = new Float32Array(Math.max(1, spheres.length) * 4);\r\n for (let i = 0; i < spheres.length; i++) {\r\n const base = i * 4;\r\n const center = this.toCollisionSpacePoint(spheres[i].center);\r\n sphereData[base] = center.x;\r\n sphereData[base + 1] = center.y;\r\n sphereData[base + 2] = center.z;\r\n sphereData[base + 3] = this.toCollisionSpaceRadius(spheres[i].collider.radius);\r\n }\r\n\r\n const capsuleData = new Float32Array(Math.max(1, capsules.length) * 8);\r\n for (let i = 0; i < capsules.length; i++) {\r\n const base = i * 8;\r\n const start = this.toCollisionSpacePoint(capsules[i].start);\r\n const end = this.toCollisionSpacePoint(capsules[i].end);\r\n const axis = Vector3.sub(capsules[i].end, capsules[i].start, new Vector3());\r\n capsuleData[base] = start.x;\r\n capsuleData[base + 1] = start.y;\r\n capsuleData[base + 2] = start.z;\r\n capsuleData[base + 3] = this.toCollisionSpaceRadius(capsules[i].collider.radius, axis);\r\n capsuleData[base + 4] = end.x;\r\n capsuleData[base + 5] = end.y;\r\n capsuleData[base + 6] = end.z;\r\n capsuleData[base + 7] = 0;\r\n }\r\n\r\n const planeData = new Float32Array(Math.max(1, planes.length) * 8);\r\n for (let i = 0; i < planes.length; i++) {\r\n const base = i * 8;\r\n const point = this.toCollisionSpacePoint(planes[i].point);\r\n const normal = this.toCollisionSpaceVector(planes[i].normal);\r\n if (normal.magnitudeSq > 1e-8) {\r\n normal.inplaceNormalize();\r\n } else {\r\n normal.setXYZ(0, 1, 0);\r\n }\r\n planeData[base] = point.x;\r\n planeData[base + 1] = point.y;\r\n planeData[base + 2] = point.z;\r\n planeData[base + 3] = 0;\r\n planeData[base + 4] = normal.x;\r\n planeData[base + 5] = normal.y;\r\n planeData[base + 6] = normal.z;\r\n planeData[base + 7] = 0;\r\n }\r\n const boxData = new Float32Array(Math.max(1, boxes.length) * 16);\r\n for (let i = 0; i < boxes.length; i++) {\r\n const base = i * 16;\r\n const box = boxes[i].collider;\r\n const center = this.toCollisionSpacePoint(box.center);\r\n const axisX = this.toCollisionSpaceVector(box.axes[0]);\r\n const axisY = this.toCollisionSpaceVector(box.axes[1]);\r\n const axisZ = this.toCollisionSpaceVector(box.axes[2]);\r\n boxData[base] = center.x;\r\n boxData[base + 1] = center.y;\r\n boxData[base + 2] = center.z;\r\n boxData[base + 3] = this.toCollisionSpaceRadius(box.halfExtents.x);\r\n boxData[base + 4] = this.toCollisionSpaceRadius(box.halfExtents.y);\r\n boxData[base + 5] = this.toCollisionSpaceRadius(box.halfExtents.z);\r\n boxData[base + 6] = axisX.x;\r\n boxData[base + 7] = axisX.y;\r\n boxData[base + 8] = axisX.z;\r\n boxData[base + 9] = axisY.x;\r\n boxData[base + 10] = axisY.y;\r\n boxData[base + 11] = axisY.z;\r\n boxData[base + 12] = axisZ.x;\r\n boxData[base + 13] = axisZ.y;\r\n boxData[base + 14] = axisZ.z;\r\n boxData[base + 15] = 0;\r\n }\r\n\r\n if (!this._sphereColliderBuffer || this._sphereColliderBuffer.byteLength < sphereData.byteLength) {\r\n if (this._sphereColliderBuffer) {\r\n // Drain queued uploads for the old buffer before replacing it.\r\n this._device.flush();\r\n this._sphereColliderBuffer.dispose();\r\n }\r\n this._sphereColliderBuffer = this._device.createBuffer(sphereData.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._integrateBindGroup.setBuffer('sphereData', this._sphereColliderBuffer);\r\n this._constraintBindGroup?.setBuffer('sphereData', this._sphereColliderBuffer);\r\n }\r\n this._sphereColliderBuffer.bufferSubData(0, sphereData);\r\n\r\n if (!this._capsuleColliderBuffer || this._capsuleColliderBuffer.byteLength < capsuleData.byteLength) {\r\n if (this._capsuleColliderBuffer) {\r\n // Drain queued uploads for the old buffer before replacing it.\r\n this._device.flush();\r\n this._capsuleColliderBuffer.dispose();\r\n }\r\n this._capsuleColliderBuffer = this._device.createBuffer(capsuleData.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._integrateBindGroup.setBuffer('capsuleData', this._capsuleColliderBuffer);\r\n this._constraintBindGroup?.setBuffer('capsuleData', this._capsuleColliderBuffer);\r\n }\r\n this._capsuleColliderBuffer.bufferSubData(0, capsuleData);\r\n\r\n if (!this._planeColliderBuffer || this._planeColliderBuffer.byteLength < planeData.byteLength) {\r\n if (this._planeColliderBuffer) {\r\n // Drain queued uploads for the old buffer before replacing it.\r\n this._device.flush();\r\n this._planeColliderBuffer.dispose();\r\n }\r\n this._planeColliderBuffer = this._device.createBuffer(planeData.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._integrateBindGroup.setBuffer('planeData', this._planeColliderBuffer);\r\n this._constraintBindGroup?.setBuffer('planeData', this._planeColliderBuffer);\r\n }\r\n this._planeColliderBuffer.bufferSubData(0, planeData);\r\n\r\n if (!this._boxColliderBuffer || this._boxColliderBuffer.byteLength < boxData.byteLength) {\r\n if (this._boxColliderBuffer) {\r\n this._device.flush();\r\n this._boxColliderBuffer.dispose();\r\n }\r\n this._boxColliderBuffer = this._device.createBuffer(boxData.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._integrateBindGroup.setBuffer('boxData', this._boxColliderBuffer);\r\n this._constraintBindGroup?.setBuffer('boxData', this._boxColliderBuffer);\r\n }\r\n this._boxColliderBuffer.bufferSubData(0, boxData);\r\n\r\n this._integrateBindGroup.setValue('sphereCount', spheres.length);\r\n this._integrateBindGroup.setValue('capsuleCount', capsules.length);\r\n this._integrateBindGroup.setValue('planeCount', planes.length);\r\n this._integrateBindGroup.setValue('boxCount', boxes.length);\r\n this._constraintBindGroup?.setValue('sphereCount', spheres.length);\r\n this._constraintBindGroup?.setValue('capsuleCount', capsules.length);\r\n this._constraintBindGroup?.setValue('planeCount', planes.length);\r\n this._constraintBindGroup?.setValue('boxCount', boxes.length);\r\n }\r\n\r\n private getSubstepPoseFollow() {\r\n const effectivePoseFollow = this.getEffectivePoseFollow();\r\n if (effectivePoseFollow <= 0) {\r\n return 0;\r\n }\r\n const totalPoseFollowApplications = Math.max(1, this._substeps);\r\n return totalPoseFollowApplications > 1\r\n ? 1 - Math.pow(Math.max(0, 1 - effectivePoseFollow), 1 / totalPoseFollowApplications)\r\n : effectivePoseFollow;\r\n }\r\n\r\n private getEffectivePoseFollow() {\r\n // Cloth uses a dense per-vertex animated target, so the same numeric follow value\r\n // feels much stronger than sparse spring chains. Square the UI value to keep the\r\n // low range usable while preserving 1 => full follow.\r\n return this._poseFollow * this._poseFollow;\r\n }\r\n\r\n private toCollisionSpacePoint(worldPoint: Vector3): Vector3 {\r\n const invWorldMatrix = this._collisionSpaceNode?.invWorldMatrix;\r\n if (!invWorldMatrix?.transformPointAffine) {\r\n return worldPoint;\r\n }\r\n return invWorldMatrix.transformPointAffine(worldPoint, new Vector3());\r\n }\r\n\r\n private toCollisionSpaceVector(worldVector: Vector3): Vector3 {\r\n const invWorldMatrix = this._collisionSpaceNode?.invWorldMatrix;\r\n if (!invWorldMatrix?.transformVectorAffine) {\r\n return worldVector;\r\n }\r\n return invWorldMatrix.transformVectorAffine(worldVector, new Vector3());\r\n }\r\n\r\n private toCollisionSpaceRadius(worldRadius: number, axisWorld?: Vector3): number {\r\n const radius = Math.max(0, Number(worldRadius) || 0);\r\n if (radius <= 0) {\r\n return 0;\r\n }\r\n const invWorldMatrix = this._collisionSpaceNode?.invWorldMatrix;\r\n if (!invWorldMatrix?.transformVectorAffine) {\r\n return radius;\r\n }\r\n if (axisWorld && axisWorld.magnitudeSq > 1e-6) {\r\n const axis = axisWorld.clone().inplaceNormalize();\r\n let tangent = Vector3.cross(\r\n Math.abs(axis.y) < 0.999 ? Vector3.axisPY() : Vector3.axisPX(),\r\n axis,\r\n new Vector3()\r\n );\r\n if (tangent.magnitudeSq <= 1e-6) {\r\n tangent = Vector3.cross(Vector3.axisPZ(), axis, tangent);\r\n }\r\n tangent.inplaceNormalize();\r\n const bitangent = Vector3.cross(axis, tangent, new Vector3()).inplaceNormalize();\r\n const localTangent = this.toCollisionSpaceVector(\r\n Vector3.scale(tangent, radius, new Vector3())\r\n ).magnitude;\r\n const localBitangent = this.toCollisionSpaceVector(\r\n Vector3.scale(bitangent, radius, new Vector3())\r\n ).magnitude;\r\n return Math.max(1e-6, (localTangent + localBitangent) * 0.5);\r\n }\r\n const localX = this.toCollisionSpaceVector(new Vector3(radius, 0, 0)).magnitude;\r\n const localY = this.toCollisionSpaceVector(new Vector3(0, radius, 0)).magnitude;\r\n const localZ = this.toCollisionSpaceVector(new Vector3(0, 0, radius)).magnitude;\r\n return Math.max(1e-6, (localX + localY + localZ) / 3);\r\n }\r\n\r\n private _onSceneUpdate() {\r\n const dt = (getDevice().frameInfo.elapsedFrame || 16.6667) * 0.001;\r\n if (this.hasAutoUpdateTarget()) {\r\n this._pendingAutoUpdateDeltaTime = dt;\r\n this._collisionSpaceNode?.scene?.queueUpdateNode?.(this._collisionSpaceNode);\r\n return;\r\n }\r\n this.update(dt);\r\n }\r\n private hasAutoUpdateTarget() {\r\n const target = this._collisionSpaceNode;\r\n return !!(target?.addPostUpdateCallback && target?.removePostUpdateCallback);\r\n }\r\n private attachAutoUpdateTarget() {\r\n if (this.hasAutoUpdateTarget()) {\r\n this._collisionSpaceNode.addPostUpdateCallback(this._meshPostUpdateCallback);\r\n }\r\n }\r\n private detachAutoUpdateTarget() {\r\n if (this.hasAutoUpdateTarget()) {\r\n this._collisionSpaceNode.removePostUpdateCallback(this._meshPostUpdateCallback);\r\n }\r\n this._pendingAutoUpdateDeltaTime = 0;\r\n }\r\n private updateSkinnedRestPositions(deltaTime = 0) {\r\n if (\r\n !this._sourcePositionData ||\r\n !this._skinningBlendIndices ||\r\n !this._skinningBlendWeights ||\r\n !this._restPositionBuffer ||\r\n !this._prevRestPositionBuffer\r\n ) {\r\n return;\r\n }\r\n const target = this._collisionSpaceNode;\r\n const skeletonId = String(target?.skeletonName ?? '');\r\n const skeleton =\r\n skeletonId && typeof target?.findSkeletonById === 'function'\r\n ? target.findSkeletonById(skeletonId)\r\n : null;\r\n if (skeleton?.skinPositionsToLocal && target?.invWorldMatrix) {\r\n const restPositions =\r\n this._dynamicRestPositionData &&\r\n this._dynamicRestPositionData.length === this._sourcePositionData.length\r\n ? this._dynamicRestPositionData\r\n : new Float32Array(this._sourcePositionData.length);\r\n skeleton.skinPositionsToLocal(\r\n this._sourcePositionData,\r\n this._skinningBlendIndices,\r\n this._skinningBlendWeights,\r\n target.invWorldMatrix,\r\n restPositions\r\n );\r\n const smoothedRestPositions = this.smoothRestPositions(restPositions, deltaTime, restPositions);\r\n this._dynamicRestPositionData = restPositions;\r\n this._restPositionBuffer.bufferSubData(0, smoothedRestPositions);\r\n this._usingDynamicRestPose = true;\r\n this.updateTargetBoundingBox(smoothedRestPositions);\r\n return;\r\n }\r\n if (this._usingDynamicRestPose) {\r\n this._restPositionBuffer.bufferSubData(0, this._sourcePositionData);\r\n this._prevRestPositionBuffer.bufferSubData(0, this._sourcePositionData);\r\n this._usingDynamicRestPose = false;\r\n this._dynamicRestPositionData = null;\r\n this._smoothedRestPositionData = null;\r\n this.updateTargetBoundingBox(this._sourcePositionData);\r\n }\r\n }\r\n\r\n private smoothRestPositions(\r\n rawRestPositions: Float32Array<ArrayBuffer>,\r\n deltaTime: number,\r\n out: Float32Array<ArrayBuffer>\r\n ) {\r\n const blend = this.getTemporalBlendFactor(deltaTime, DEFAULT_REST_POSITION_SMOOTHING_TIME);\r\n const smoothed =\r\n this._smoothedRestPositionData && this._smoothedRestPositionData.length === rawRestPositions.length\r\n ? this._smoothedRestPositionData\r\n : new Float32Array(rawRestPositions.length);\r\n if (!this._smoothedRestPositionData || blend >= 1) {\r\n smoothed.set(rawRestPositions);\r\n } else {\r\n const retain = 1 - blend;\r\n for (let i = 0; i < rawRestPositions.length; i++) {\r\n smoothed[i] = smoothed[i] * retain + rawRestPositions[i] * blend;\r\n }\r\n }\r\n out.set(smoothed);\r\n this._smoothedRestPositionData = smoothed;\r\n return out;\r\n }\r\n\r\n private getTemporalBlendFactor(deltaTime: number, smoothingTime: number) {\r\n const dt = clamp(Number(deltaTime) || 0, 0, MAX_ACCUMULATED_SIMULATION_TIME);\r\n if (dt <= 0 || smoothingTime <= 0) {\r\n return 1;\r\n }\r\n return 1 - Math.exp(-dt / smoothingTime);\r\n }\r\n\r\n private getSmoothedSphereCenter(collider: SphereCollider, blend: number) {\r\n const current = collider.center?.clone() ?? new Vector3();\r\n const cached = this._smoothedSphereCenters.get(collider);\r\n if (!cached || blend >= 1) {\r\n this._smoothedSphereCenters.set(collider, current);\r\n return current;\r\n }\r\n cached.setXYZ(\r\n cached.x + (current.x - cached.x) * blend,\r\n cached.y + (current.y - cached.y) * blend,\r\n cached.z + (current.z - cached.z) * blend\r\n );\r\n return cached;\r\n }\r\n\r\n private getSmoothedCapsuleEndpoints(collider: CapsuleCollider, blend: number) {\r\n const currentStart = collider.start?.clone() ?? new Vector3();\r\n const currentEnd = collider.end?.clone() ?? new Vector3();\r\n const cached = this._smoothedCapsuleEndpoints.get(collider);\r\n if (!cached || blend >= 1) {\r\n const next = {\r\n start: currentStart,\r\n end: currentEnd\r\n };\r\n this._smoothedCapsuleEndpoints.set(collider, next);\r\n return next;\r\n }\r\n cached.start.setXYZ(\r\n cached.start.x + (currentStart.x - cached.start.x) * blend,\r\n cached.start.y + (currentStart.y - cached.start.y) * blend,\r\n cached.start.z + (currentStart.z - cached.start.z) * blend\r\n );\r\n cached.end.setXYZ(\r\n cached.end.x + (currentEnd.x - cached.end.x) * blend,\r\n cached.end.y + (currentEnd.y - cached.end.y) * blend,\r\n cached.end.z + (currentEnd.z - cached.end.z) * blend\r\n );\r\n return cached;\r\n }\r\n\r\n private getSmoothedPlaneData(collider: PlaneCollider, blend: number) {\r\n const currentPoint = collider.point?.clone() ?? new Vector3();\r\n const currentNormal = collider.normal?.clone() ?? Vector3.axisPY();\r\n if (currentNormal.magnitudeSq > 1e-8) {\r\n currentNormal.inplaceNormalize();\r\n } else {\r\n currentNormal.setXYZ(0, 1, 0);\r\n }\r\n const cached = this._smoothedPlaneData.get(collider);\r\n if (!cached || blend >= 1) {\r\n const next = {\r\n point: currentPoint,\r\n normal: currentNormal\r\n };\r\n this._smoothedPlaneData.set(collider, next);\r\n return next;\r\n }\r\n cached.point.setXYZ(\r\n cached.point.x + (currentPoint.x - cached.point.x) * blend,\r\n cached.point.y + (currentPoint.y - cached.point.y) * blend,\r\n cached.point.z + (currentPoint.z - cached.point.z) * blend\r\n );\r\n cached.normal.setXYZ(\r\n cached.normal.x + (currentNormal.x - cached.normal.x) * blend,\r\n cached.normal.y + (currentNormal.y - cached.normal.y) * blend,\r\n cached.normal.z + (currentNormal.z - cached.normal.z) * blend\r\n );\r\n if (cached.normal.magnitudeSq > 1e-8) {\r\n cached.normal.inplaceNormalize();\r\n } else {\r\n cached.normal.setXYZ(0, 1, 0);\r\n }\r\n return cached;\r\n }\r\n\r\n private updateTargetBoundingBox(positions: Float32Array<ArrayBuffer>) {\r\n if (!positions || positions.length < 3) {\r\n return;\r\n }\r\n let minX = Number.POSITIVE_INFINITY;\r\n let minY = Number.POSITIVE_INFINITY;\r\n let minZ = Number.POSITIVE_INFINITY;\r\n let maxX = Number.NEGATIVE_INFINITY;\r\n let maxY = Number.NEGATIVE_INFINITY;\r\n let maxZ = Number.NEGATIVE_INFINITY;\r\n for (let i = 0; i + 2 < positions.length; i += 3) {\r\n const x = positions[i];\r\n const y = positions[i + 1];\r\n const z = positions[i + 2];\r\n if (!Number.isFinite(x) || !Number.isFinite(y) || !Number.isFinite(z)) {\r\n continue;\r\n }\r\n minX = Math.min(minX, x);\r\n minY = Math.min(minY, y);\r\n minZ = Math.min(minZ, z);\r\n maxX = Math.max(maxX, x);\r\n maxY = Math.max(maxY, y);\r\n maxZ = Math.max(maxZ, z);\r\n }\r\n if (!Number.isFinite(minX)) {\r\n return;\r\n }\r\n const padding = Math.max(maxX - minX, maxY - minY, maxZ - minZ) * 0.15;\r\n const bbox = new BoundingBox(\r\n new Vector3(minX - padding, minY - padding, minZ - padding),\r\n new Vector3(maxX + padding, maxY + padding, maxZ + padding)\r\n );\r\n const target = this._collisionSpaceNode;\r\n if (typeof target?.setAnimatedBoundingBox === 'function') {\r\n target.setAnimatedBoundingBox(bbox);\r\n } else {\r\n this._primitive?.setBoundingVolume(bbox);\r\n }\r\n }\r\n private commitRestPositions() {\r\n if (!this._prevRestPositionBuffer || !this._usingDynamicRestPose) {\r\n return;\r\n }\r\n if (this._dynamicRestPositionData) {\r\n this._prevRestPositionBuffer.bufferSubData(0, this._dynamicRestPositionData);\r\n }\r\n }\r\n private disableTargetSkinning() {\r\n const target = this._collisionSpaceNode;\r\n if (!target || typeof target.suspendSkinning !== 'boolean' || this._restoreSkinAnimation !== null) {\r\n return;\r\n }\r\n this._skinAnimationTarget = target;\r\n this._restoreSkinAnimation = target.suspendSkinning;\r\n target.suspendSkinning = true;\r\n target.setBoneMatrices?.(null);\r\n target.setAnimatedBoundingBox?.(null);\r\n }\r\n private restoreTargetSkinning() {\r\n if (!this._skinAnimationTarget || this._restoreSkinAnimation === null) {\r\n return;\r\n }\r\n this.detachAutoUpdateTarget();\r\n this._skinAnimationTarget.setAnimatedBoundingBox?.(null);\r\n this._skinAnimationTarget.suspendSkinning = this._restoreSkinAnimation;\r\n this._skinAnimationTarget = null;\r\n this._restoreSkinAnimation = null;\r\n }\r\n}\r\n"],"names":["normalizeTargetWrapWeights","source","vertexCount","result","Float32Array","fill","count","Math","min","length","i","clamp","Number","encodeTypedArrayBase64","view","uint8ArrayToBase64","Uint8Array","buffer","byteOffset","byteLength","decodeTypedArrayFromBase64","ctor","base64","expectedLength","bytes","base64ToUint8Array","BYTES_PER_ELEMENT","Error","slice","isWrapBindingDataCompatible","data","sourceRestPositions","targetVertexCount","version","sourceVertexCount","influenceCount","WRAP_TRIANGLE_VERTEX_COUNT","resolveDevice","explicitDevice","getDevice","isGPUClothSupported","device","resolved","type","DEFAULT_DAMPING","DEFAULT_DYNAMIC_FRICTION","DEFAULT_STATIC_FRICTION","DEFAULT_STIFFNESS","DEFAULT_POSE_FOLLOW","DEFAULT_SUBSTEPS","DEFAULT_SOLVER_ITERATIONS","DEFAULT_MAX_NEIGHBORS","DEFAULT_WORKGROUP_SIZE","DEFAULT_MAX_TRIANGLES_PER_VERTEX","DEFAULT_REST_POSITION_SMOOTHING_TIME","DEFAULT_COLLIDER_SMOOTHING_TIME","FIXED_SIMULATION_TIME_STEP","MAX_ACCUMULATED_SIMULATION_TIME","MAX_SIMULATION_STEPS_PER_UPDATE","max","ceil","WRAP_MIN_DISTANCE","value","getInitialColliderBufferFloatCount","colliders","stride","reduce","total","collider","distance3","positions","a","b","a0","b0","dx","dy","dz","sqrt","dot3","ax","ay","az","bx","by","bz","normalize3","x","y","z","fallback","hypot","buildWrapTriangleFrame","p0x","p0y","p0z","p1x","p1y","p1z","p2x","p2y","p2z","out","edge01x","edge01y","edge01z","edge02x","edge02y","edge02z","tangent","normal","fallbackAxis","abs","bitangent","closestPointOnTriangle","px","py","pz","cx","cy","cz","closestOut","baryOut","abx","aby","abz","acx","acy","acz","apx","apy","apz","d1","d2","bpx","bpy","bpz","d3","d4","vc","v","cpx","cpy","cpz","d5","d6","vb","w","va","denom","u","buildPinWeightArray","explicitWeights","explicitPinned","len","isFinite","buildNeighborData","indexData","maxNeighbors","neighborMap","Array","from","Map","addEdge","mapA","mapB","oldAB","get","undefined","set","oldBA","c","totalEntries","neighborIndices","Int32Array","restLengths","hasConstraint","sorted","entries","sort","j","slot","toUInt32Indices","Uint32Array","buildVertexTriangleAdjacency","maxTrianglesPerVertex","triangleCount","trianglesPerVertex","tri","base","i0","i1","i2","push","adjacency","tris","t","buildInitialSimulationPositions","options","sourcePositions","positionData","target","collisionSpaceNode","blendIndices","skinningBlendIndices","blendWeights","skinningBlendWeights","invWorldMatrix","findSkeletonById","skeletonId","String","skeletonName","skeleton","skinPositionsToLocal","resolveWrapBindPositions","mesh","basePositions","primitive","blendData","readSkinningDataFromPrimitive","createIntegrateProgram","workgroupSize","program","buildComputeProgram","compute","pb","float","storageBuffer","prevPositions","restPositions","storageBufferReadonly","prevRestPositions","invMass","sphereData","capsuleData","planeData","boxData","uint","uniform","deltaTime","damping","gravity","vec3","sphereCount","capsuleCount","planeCount","boxCount","dynamicFriction","staticFriction","minDistance","main","$l","index","$builtins","globalInvocationId","$if","lessThan","mul","at","add","restX","restY","restZ","prevRestX","prevRestY","prevRestZ","freeWeight","pinWeight","sub","current","previous","rest","prevRest","restDelta","dt2","velocity","next","greaterThan","$for","sphereBase","center","radius","deltaCol","lenCol","contactNormal","div","$else","correctionDelta","correctionLen","surfaceDelta","normalStep","dot","tangentStep","normalTravel","tangentLen","dynamicBasis","staticBasis","staticLimit","lessThanEqual","dynamicRemove","capsuleBase","cStart","cRadius","cEnd","ab","abLen2","closest","ap","deltaCap","lenCap","planeBase","k","planePoint","planeNormal","planeDistance","preProject","boxBase","boxCenter","boxHalf","boxAxisX","boxAxisY","boxAxisZ","boxRel","boxLocal","boxPen","and","boxAxis","boxDepth","boxSign","select","greaterThanEqual","prevOut","setAt","name","createConstraintProgram","int","stiffness","poseFollow","pos","correction","validCount","neighborStart","neighbor","neighborBase","neighborPos","restLength","delta","offset","corrected","scale","followStrength","createFaceNormalProgram","triangleIndices","triangleNormals","indexBase","p0Base","p1Base","p2Base","p0","p1","p2","n","cross","nLen","outBase","createVertexNormalProgram","vertexTriangleAdjacency","vertexNormals","vertex","sum","valid","start","nBase","readPositionDataFromPrimitive","readVertexAttributeDataFromPrimitive","semantic","componentCount","readPrimitiveAttribute","err","message","Promise","all","readSkinningDataFromMesh","extra","getSkinInfluenceData","floor","getNumVertices","pairCount","baseSource","subarray","influence","extraInfluence","readIndexDataFromPrimitive","readPrimitiveIndices","createWrapDeformerProgram","sourceTriangleIndices","sourceBarycentrics","targetLocalOffsets","targetSkinPositions","targetSkinNormals","targetWrapWeights","targetPositions","targetNormals","sourceToTargetMatrix","mat4","hasTargetNormals","targetBase","influenceBase","base0","base1","base2","w0","w1","w2","vec4","xyz","basePoint","edge01","edge02","normalLen","or","bitangentLen","localOffset","deformedPosition","wrapWeight","skinPosition","skinNormal","normalWeight","transformPointArrayByMatrix","matrix","getWrapSourceToTargetMatrix","worldMatrix","Matrix4x4","identity","multiplyAffine","calculateGPUClothWrapBoundingBox","sourceBBox","skinPositions","offsetDistances","wrapWeights","wrappedBox","transform","minX","POSITIVE_INFINITY","minY","minZ","maxX","NEGATIVE_INFINITY","maxY","maxZ","weight","skinWeight","minPoint","maxPoint","BoundingBox","Vector3","GPUClothWrapBinding","_device","_source","_target","_targetPrimitive","_wrapTriangleIndexBuffer","_wrapBarycentricBuffer","_wrapLocalOffsetBuffer","_targetSkinPositionBuffer","_targetSkinNormalBuffer","_targetWrapWeightBuffer","_program","_bindGroup","_workgroupCount","_targetOffsetDistances","_targetWrapWeights","_sourceToTargetMatrix","_positionBuffer","_normalBuffer","_originalPositionBuffer","_originalNormalBuffer","_restoreSkinning","_targetBasePositions","_targetBaseNormals","_targetBlendIndices","_targetBlendWeights","_targetSkinnedPositions","_targetSkinnedNormals","_hasPartialWrap","targetPrimitive","wrapTriangleIndexBuffer","wrapBarycentricBuffer","wrapLocalOffsetBuffer","targetSkinPositionBuffer","targetSkinNormalBuffer","targetWrapWeightBuffer","bindGroup","positionBuffer","normalBuffer","originalPositionBuffer","originalNormalBuffer","workgroupCount","targetOffsetDistances","restoreSkinning","targetBasePositions","targetBaseNormals","targetBlendIndices","targetBlendWeights","some","create","sourcePositionBuffer","sourceIndexData","createBindingData","createFromData","sourceToTargetBindMatrix","resolvedSourcePositions","sourcePositionsInTargetSpace","sourceTriangleCount","maxOffsetDistance","closestPoint","barycentrics","frame","vx","vy","vz","bestDistanceSq","bestI0","bestI1","bestI2","bestClosestX","bestClosestY","bestClosestZ","bestBary0","bestBary1","bestBary2","triBase","distanceSq","bestBase0","bestBase1","bestBase2","deltaX","deltaY","deltaZ","_sourceIndexData","targetWrapWeightSource","targetBaseNormalsSource","targetSkinningData","expectedElementCount","influenceElementCount","wrapSourceTriangleIndices","wrapSourceBarycentrics","wrapTargetLocalOffsets","createVertexBuffer","storage","managed","createBuffer","usage","dynamic","bufferSubData","createBindGroup","bindGroupLayouts","setBuffer","setValue","getVertexBuffer","retainObject","removeVertexBuffer","setVertexBuffer","suspendSkinning","setBoneMatrices","setAnimatedBoundingBox","binding","update","updateTargetSkinning","setProgram","setBindGroup","updateBoundingBox","dispose","releaseObject","skinDirectionsToLocal","getAnimatedBoundingBox","getBoundingVolume","toAABB","createGPUClothWrapBindingData","sourcePrimitive","sourceIndices","GPUClothSystem","_enabled","_disabledReason","_primitive","_prevPositionBuffer","_restPositionBuffer","_prevRestPositionBuffer","_invMassBuffer","_neighborIndexBuffer","_restLengthBuffer","_integrateProgram","_constraintProgram","_faceNormalProgram","_vertexNormalProgram","_integrateBindGroup","_constraintBindGroup","_faceNormalBindGroup","_vertexNormalBindGroup","_vertexCount","_triangleCount","_triangleWorkgroupCount","_maxNeighbors","_maxTrianglesPerVertex","_gravity","_damping","_dynamicFriction","_staticFriction","_stiffness","_poseFollow","_substeps","_solverIterations","_colliders","_sphereColliderBuffer","_capsuleColliderBuffer","_planeColliderBuffer","_boxColliderBuffer","_sphereColliderData","_capsuleColliderData","_planeColliderData","_boxColliderData","_triangleIndexBuffer","_triangleNormalBuffer","_vertexTriangleAdjacencyBuffer","_rebuildNormals","_collisionSpaceNode","_sourcePositionData","_skinningBlendIndices","_skinningBlendWeights","_dynamicRestPositionData","_smoothedRestPositionData","_usingDynamicRestPose","_skinAnimationTarget","_restoreSkinAnimation","_boundScene","_autoUpdate","_workgroupSize","_wrapBindings","_latestInputDeltaTime","_smoothedSphereCenters","_smoothedCapsuleEndpoints","_smoothedPlaneData","_timeAccumulator","_pendingAutoUpdateDeltaTime","_meshPostUpdateCallback","supported","wantEnabled","enabled","clone","substeps","solverIterations","rebuildNormals","autoUpdate","WeakMap","_frameId","_elapsedInSeconds","deltaInSeconds","dt","warnUnsupported","initialSimulationPositions","indexDataU32","pinWeightArray","pinnedVertexWeights","pinnedVertexIndices","neighbors","invMassArray","getSubstepPoseFollow","disableTargetSkinning","updateTargetBoundingBox","updateColliderBuffers","scene","bindToScene","createFromPrimitive","skinningData","createFromMesh","setWrapTargets","targets","clearWrapTargets","uniqueTargets","Set","filter","console","error","setWrapTargetsFromBindingData","seen","entry","has","resetSimulationTiming","disabledReason","resetColliderSmoothing","addCollider","removeCollider","idx","indexOf","splice","clearColliders","detachAutoUpdateTarget","off","_onSceneUpdate","on","attachAutoUpdateTarget","unbindFromScene","frameDt","updateSkinnedRestPositions","stepCount","pushDeviceStates","step","simulateStep","updateSimulationOutputs","popDeviceStates","restoreTargetSkinning","substepDt","substep","commitRestPositions","spheres","capsules","planes","boxes","blend","getTemporalBlendFactor","node","updateColliderFromNode","sphere","getSmoothedSphereCenter","capsule","smoothed","getSmoothedCapsuleEndpoints","end","plane","getSmoothedPlaneData","point","toCollisionSpacePoint","toCollisionSpaceRadius","axis","toCollisionSpaceVector","magnitudeSq","inplaceNormalize","setXYZ","box","axisX","axes","axisY","axisZ","halfExtents","flush","effectivePoseFollow","getEffectivePoseFollow","totalPoseFollowApplications","pow","worldPoint","transformPointAffine","worldVector","transformVectorAffine","worldRadius","axisWorld","axisPY","axisPX","axisPZ","localTangent","magnitude","localBitangent","localX","localY","localZ","frameInfo","elapsedFrame","hasAutoUpdateTarget","queueUpdateNode","addPostUpdateCallback","removePostUpdateCallback","smoothedRestPositions","smoothRestPositions","rawRestPositions","retain","smoothingTime","exp","cached","currentStart","currentEnd","currentPoint","currentNormal","padding","bbox","setBoundingVolume"],"mappings":"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"}