@zephyr3d/scene 0.9.4 → 0.9.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (517) hide show
  1. package/dist/animation/animationmask.js +224 -0
  2. package/dist/animation/animationmask.js.map +1 -0
  3. package/dist/animation/animationset.js +268 -67
  4. package/dist/animation/animationset.js.map +1 -1
  5. package/dist/animation/animationtrack.js.map +1 -1
  6. package/dist/animation/eulerrotationtrack.js +3 -0
  7. package/dist/animation/eulerrotationtrack.js.map +1 -1
  8. package/dist/animation/fixed_geometry_cache_track.js +7 -0
  9. package/dist/animation/fixed_geometry_cache_track.js.map +1 -1
  10. package/dist/animation/ik_modifier.js.map +1 -1
  11. package/dist/animation/joint_dynamics/collision.js +6 -4
  12. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  13. package/dist/animation/joint_dynamics/controller.js +390 -43
  14. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  15. package/dist/animation/joint_dynamics/joint_dynamics_system.js +62 -3
  16. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  17. package/dist/animation/joint_dynamics/solver.js +4 -3
  18. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  19. package/dist/animation/joint_dynamics/types.js.map +1 -1
  20. package/dist/animation/joint_dynamics_modifier.js +2 -0
  21. package/dist/animation/joint_dynamics_modifier.js.map +1 -1
  22. package/dist/animation/morphtarget.js +3 -72
  23. package/dist/animation/morphtarget.js.map +1 -1
  24. package/dist/animation/morphtrack.js +3 -0
  25. package/dist/animation/morphtrack.js.map +1 -1
  26. package/dist/animation/pca_geometry_cache_track.js +3 -0
  27. package/dist/animation/pca_geometry_cache_track.js.map +1 -1
  28. package/dist/animation/proptrack.js +3 -0
  29. package/dist/animation/proptrack.js.map +1 -1
  30. package/dist/animation/rotationtrack.js +3 -0
  31. package/dist/animation/rotationtrack.js.map +1 -1
  32. package/dist/animation/scaletrack.js +3 -0
  33. package/dist/animation/scaletrack.js.map +1 -1
  34. package/dist/animation/skeleton.js +254 -79
  35. package/dist/animation/skeleton.js.map +1 -1
  36. package/dist/animation/skeleton_modifier.js.map +1 -1
  37. package/dist/animation/spring_modifier.js.map +1 -1
  38. package/dist/animation/translationtrack.js +3 -0
  39. package/dist/animation/translationtrack.js.map +1 -1
  40. package/dist/app/engine.js +171 -107
  41. package/dist/app/engine.js.map +1 -1
  42. package/dist/app/scriptregistry.js +251 -80
  43. package/dist/app/scriptregistry.js.map +1 -1
  44. package/dist/asset/assetmanager.js +344 -365
  45. package/dist/asset/assetmanager.js.map +1 -1
  46. package/dist/asset/loaders/loader.js +1 -6
  47. package/dist/asset/loaders/loader.js.map +1 -1
  48. package/dist/asset/loaders/zabc/zabc_loader.js.map +1 -1
  49. package/dist/asset/model.js +1000 -131
  50. package/dist/asset/model.js.map +1 -1
  51. package/dist/avatar/wardrobe.js +474 -0
  52. package/dist/avatar/wardrobe.js.map +1 -0
  53. package/dist/index.d.ts +1126 -199
  54. package/dist/index.js +3 -2
  55. package/dist/index.js.map +1 -1
  56. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +6 -3
  57. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  58. package/dist/material/mixins/pbr/common.js +72 -15
  59. package/dist/material/mixins/pbr/common.js.map +1 -1
  60. package/dist/material/msdf_text.js +3 -3
  61. package/dist/material/msdf_text.js.map +1 -1
  62. package/dist/material/msdf_text_sprite.js +4 -4
  63. package/dist/material/msdf_text_sprite.js.map +1 -1
  64. package/dist/material/pbrblueprint.js +102 -102
  65. package/dist/material/pbrblueprint.js.map +1 -1
  66. package/dist/render/envlight.js +54 -1
  67. package/dist/render/envlight.js.map +1 -1
  68. package/dist/render/sky.js +9 -0
  69. package/dist/render/sky.js.map +1 -1
  70. package/dist/scene/batchgroup.js +11 -13
  71. package/dist/scene/batchgroup.js.map +1 -1
  72. package/dist/scene/environment.js +15 -2
  73. package/dist/scene/environment.js.map +1 -1
  74. package/dist/scene/mesh.js +79 -16
  75. package/dist/scene/mesh.js.map +1 -1
  76. package/dist/scene/scene.js +1 -0
  77. package/dist/scene/scene.js.map +1 -1
  78. package/dist/scene/scene_node.js +203 -2
  79. package/dist/scene/scene_node.js.map +1 -1
  80. package/dist/text/font/cff_font.js +890 -0
  81. package/dist/text/font/cff_font.js.map +1 -0
  82. package/dist/text/font/font_asset.js +17 -3
  83. package/dist/text/font/font_asset.js.map +1 -1
  84. package/dist/text/msdf/generator.js.map +1 -1
  85. package/dist/text/msdf/shape.js +4 -1
  86. package/dist/text/msdf/shape.js.map +1 -1
  87. package/dist/text/runtime/msdf_text_atlas_manager.js +4 -1
  88. package/dist/text/runtime/msdf_text_atlas_manager.js.map +1 -1
  89. package/dist/utility/blueprint/material/inputs.js +1157 -1154
  90. package/dist/utility/blueprint/material/inputs.js.map +1 -1
  91. package/dist/utility/bounding_volume.js.map +1 -1
  92. package/dist/utility/pmrem.js +34 -8
  93. package/dist/utility/pmrem.js.map +1 -1
  94. package/dist/utility/serialization/manager.js +22 -9
  95. package/dist/utility/serialization/manager.js.map +1 -1
  96. package/dist/utility/serialization/scene/animation.js +700 -7
  97. package/dist/utility/serialization/scene/animation.js.map +1 -1
  98. package/dist/utility/serialization/scene/mesh.js +64 -4
  99. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  100. package/dist/utility/serialization/scene/node.js +187 -8
  101. package/dist/utility/serialization/scene/node.js.map +1 -1
  102. package/dist/utility/serialization/types.js.map +1 -1
  103. package/dist/utility/textures/sheenlut.js +138 -0
  104. package/dist/utility/textures/sheenlut.js.map +1 -0
  105. package/package.json +2 -2
  106. package/dist/animation/ik/ik_chain_builder.js +0 -68
  107. package/dist/animation/ik/ik_chain_builder.js.map +0 -1
  108. package/dist/animation/ik/ik_pole_constraint.js +0 -123
  109. package/dist/animation/ik/ik_pole_constraint.js.map +0 -1
  110. package/dist/animation/ik/ik_track.js +0 -96
  111. package/dist/animation/ik/ik_track.js.map +0 -1
  112. package/dist/animation/ik_postprocessor.js +0 -71
  113. package/dist/animation/ik_postprocessor.js.map +0 -1
  114. package/dist/animation/joint_dynamics/math.js +0 -16
  115. package/dist/animation/joint_dynamics/math.js.map +0 -1
  116. package/dist/animation/manual_transform_processor.js +0 -156
  117. package/dist/animation/manual_transform_processor.js.map +0 -1
  118. package/dist/animation/skeleton_postprocessor.js +0 -50
  119. package/dist/animation/skeleton_postprocessor.js.map +0 -1
  120. package/dist/animation/spring2/collision.js +0 -469
  121. package/dist/animation/spring2/collision.js.map +0 -1
  122. package/dist/animation/spring2/constraints.js +0 -329
  123. package/dist/animation/spring2/constraints.js.map +0 -1
  124. package/dist/animation/spring2/controller.js +0 -434
  125. package/dist/animation/spring2/controller.js.map +0 -1
  126. package/dist/animation/spring2/math.js +0 -16
  127. package/dist/animation/spring2/math.js.map +0 -1
  128. package/dist/animation/spring2/solver.js +0 -624
  129. package/dist/animation/spring2/solver.js.map +0 -1
  130. package/dist/animation/spring2/spring_system.js +0 -118
  131. package/dist/animation/spring2/spring_system.js.map +0 -1
  132. package/dist/animation/spring2/types.js +0 -19
  133. package/dist/animation/spring2/types.js.map +0 -1
  134. package/dist/animation/spring_postprocessor.js +0 -54
  135. package/dist/animation/spring_postprocessor.js.map +0 -1
  136. package/dist/asset/loaders/gltf/gltf_loader.js +0 -1273
  137. package/dist/asset/loaders/gltf/gltf_loader.js.map +0 -1
  138. package/dist/asset/loaders/gltf/helpers.js +0 -331
  139. package/dist/asset/loaders/gltf/helpers.js.map +0 -1
  140. package/dist/material/sprite3d.js +0 -301
  141. package/dist/material/sprite3d.js.map +0 -1
  142. package/dist/material/sprite3d_std.js +0 -116
  143. package/dist/material/sprite3d_std.js.map +0 -1
  144. package/dist/material/sprite3dblueprint.js +0 -235
  145. package/dist/material/sprite3dblueprint.js.map +0 -1
  146. package/dist/material/sprite_sdf.js +0 -106
  147. package/dist/material/sprite_sdf.js.map +0 -1
  148. package/dist/material/terrainmaterial.js +0 -368
  149. package/dist/material/terrainmaterial.js.map +0 -1
  150. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +0 -38
  151. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +0 -1
  152. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +0 -10
  153. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +0 -1
  154. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +0 -127
  155. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +0 -1
  156. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +0 -263
  157. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +0 -1
  158. package/dist/render/deferredlightpass.js +0 -510
  159. package/dist/render/deferredlightpass.js.map +0 -1
  160. package/dist/render/deferredshadowlightpass.js +0 -428
  161. package/dist/render/deferredshadowlightpass.js.map +0 -1
  162. package/dist/render/gbufferpass.js +0 -50
  163. package/dist/render/gbufferpass.js.map +0 -1
  164. package/dist/scene/sdftextsprite.js +0 -322
  165. package/dist/scene/sdftextsprite.js.map +0 -1
  166. package/dist/scene/sprite3d.js +0 -18
  167. package/dist/scene/sprite3d.js.map +0 -1
  168. package/dist/scene/terrain/grass.js +0 -280
  169. package/dist/scene/terrain/grass.js.map +0 -1
  170. package/dist/scene/terrain/heightfield.js +0 -475
  171. package/dist/scene/terrain/heightfield.js.map +0 -1
  172. package/dist/scene/terrain/patch.js +0 -532
  173. package/dist/scene/terrain/patch.js.map +0 -1
  174. package/dist/scene/terrain/quadtree.js +0 -461
  175. package/dist/scene/terrain/quadtree.js.map +0 -1
  176. package/dist/scene/terrain/terrain.js +0 -231
  177. package/dist/scene/terrain/terrain.js.map +0 -1
  178. package/dist/src/animation/animation.js +0 -127
  179. package/dist/src/animation/animation.js.map +0 -1
  180. package/dist/src/animation/animationset.js +0 -255
  181. package/dist/src/animation/animationset.js.map +0 -1
  182. package/dist/src/animation/animationtrack.js +0 -34
  183. package/dist/src/animation/animationtrack.js.map +0 -1
  184. package/dist/src/animation/eulerrotationtrack.js +0 -52
  185. package/dist/src/animation/eulerrotationtrack.js.map +0 -1
  186. package/dist/src/animation/morphtarget.js +0 -93
  187. package/dist/src/animation/morphtarget.js.map +0 -1
  188. package/dist/src/animation/morphtrack.js +0 -70
  189. package/dist/src/animation/morphtrack.js.map +0 -1
  190. package/dist/src/animation/proptrack.js +0 -161
  191. package/dist/src/animation/proptrack.js.map +0 -1
  192. package/dist/src/animation/rotationtrack.js +0 -51
  193. package/dist/src/animation/rotationtrack.js.map +0 -1
  194. package/dist/src/animation/scaletrack.js +0 -50
  195. package/dist/src/animation/scaletrack.js.map +0 -1
  196. package/dist/src/animation/skeleton.js +0 -204
  197. package/dist/src/animation/skeleton.js.map +0 -1
  198. package/dist/src/animation/translationtrack.js +0 -50
  199. package/dist/src/animation/translationtrack.js.map +0 -1
  200. package/dist/src/app/app.js +0 -129
  201. package/dist/src/app/app.js.map +0 -1
  202. package/dist/src/app/inputmgr.js +0 -267
  203. package/dist/src/app/inputmgr.js.map +0 -1
  204. package/dist/src/asset/assetmanager.js +0 -404
  205. package/dist/src/asset/assetmanager.js.map +0 -1
  206. package/dist/src/asset/builtin.js +0 -337
  207. package/dist/src/asset/builtin.js.map +0 -1
  208. package/dist/src/asset/loaders/dds/dds.js +0 -470
  209. package/dist/src/asset/loaders/dds/dds.js.map +0 -1
  210. package/dist/src/asset/loaders/dds/dds_loader.js +0 -28
  211. package/dist/src/asset/loaders/dds/dds_loader.js.map +0 -1
  212. package/dist/src/asset/loaders/gltf/gltf_loader.js +0 -1265
  213. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +0 -1
  214. package/dist/src/asset/loaders/gltf/helpers.js +0 -327
  215. package/dist/src/asset/loaders/gltf/helpers.js.map +0 -1
  216. package/dist/src/asset/loaders/hdr/hdr.js +0 -180
  217. package/dist/src/asset/loaders/hdr/hdr.js.map +0 -1
  218. package/dist/src/asset/loaders/image/tga_Loader.js +0 -116
  219. package/dist/src/asset/loaders/image/tga_Loader.js.map +0 -1
  220. package/dist/src/asset/loaders/image/webimage_loader.js +0 -63
  221. package/dist/src/asset/loaders/image/webimage_loader.js.map +0 -1
  222. package/dist/src/asset/loaders/loader.js +0 -45
  223. package/dist/src/asset/loaders/loader.js.map +0 -1
  224. package/dist/src/asset/model.js +0 -414
  225. package/dist/src/asset/model.js.map +0 -1
  226. package/dist/src/blitter/bilateralblur.js +0 -221
  227. package/dist/src/blitter/bilateralblur.js.map +0 -1
  228. package/dist/src/blitter/blitter.js +0 -390
  229. package/dist/src/blitter/blitter.js.map +0 -1
  230. package/dist/src/blitter/box.js +0 -118
  231. package/dist/src/blitter/box.js.map +0 -1
  232. package/dist/src/blitter/copy.js +0 -22
  233. package/dist/src/blitter/copy.js.map +0 -1
  234. package/dist/src/blitter/gaussianblur.js +0 -228
  235. package/dist/src/blitter/gaussianblur.js.map +0 -1
  236. package/dist/src/camera/base.js +0 -92
  237. package/dist/src/camera/base.js.map +0 -1
  238. package/dist/src/camera/camera.js +0 -1005
  239. package/dist/src/camera/camera.js.map +0 -1
  240. package/dist/src/camera/fps.js +0 -238
  241. package/dist/src/camera/fps.js.map +0 -1
  242. package/dist/src/camera/orbit.js +0 -245
  243. package/dist/src/camera/orbit.js.map +0 -1
  244. package/dist/src/camera/orthocamera.js +0 -167
  245. package/dist/src/camera/orthocamera.js.map +0 -1
  246. package/dist/src/camera/perspectivecamera.js +0 -141
  247. package/dist/src/camera/perspectivecamera.js.map +0 -1
  248. package/dist/src/index.js +0 -120
  249. package/dist/src/index.js.map +0 -1
  250. package/dist/src/material/blinn.js +0 -81
  251. package/dist/src/material/blinn.js.map +0 -1
  252. package/dist/src/material/grassmaterial.js +0 -113
  253. package/dist/src/material/grassmaterial.js.map +0 -1
  254. package/dist/src/material/lambert.js +0 -92
  255. package/dist/src/material/lambert.js.map +0 -1
  256. package/dist/src/material/material.js +0 -301
  257. package/dist/src/material/material.js.map +0 -1
  258. package/dist/src/material/meshmaterial.js +0 -704
  259. package/dist/src/material/meshmaterial.js.map +0 -1
  260. package/dist/src/material/mixins/albedocolor.js +0 -76
  261. package/dist/src/material/mixins/albedocolor.js.map +0 -1
  262. package/dist/src/material/mixins/foliage.js +0 -47
  263. package/dist/src/material/mixins/foliage.js.map +0 -1
  264. package/dist/src/material/mixins/lightmodel/blinnphong.js +0 -112
  265. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +0 -1
  266. package/dist/src/material/mixins/lightmodel/lambert.js +0 -58
  267. package/dist/src/material/mixins/lightmodel/lambert.js.map +0 -1
  268. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +0 -178
  269. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +0 -1
  270. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +0 -139
  271. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +0 -1
  272. package/dist/src/material/mixins/lit.js +0 -476
  273. package/dist/src/material/mixins/lit.js.map +0 -1
  274. package/dist/src/material/mixins/pbr/common.js +0 -918
  275. package/dist/src/material/mixins/pbr/common.js.map +0 -1
  276. package/dist/src/material/mixins/texture.js +0 -172
  277. package/dist/src/material/mixins/texture.js.map +0 -1
  278. package/dist/src/material/mixins/vertexcolor.js +0 -56
  279. package/dist/src/material/mixins/vertexcolor.js.map +0 -1
  280. package/dist/src/material/particle.js +0 -178
  281. package/dist/src/material/particle.js.map +0 -1
  282. package/dist/src/material/pbrmr.js +0 -97
  283. package/dist/src/material/pbrmr.js.map +0 -1
  284. package/dist/src/material/pbrsg.js +0 -97
  285. package/dist/src/material/pbrsg.js.map +0 -1
  286. package/dist/src/material/shader/helper.js +0 -1209
  287. package/dist/src/material/shader/helper.js.map +0 -1
  288. package/dist/src/material/terrain-cm.js +0 -606
  289. package/dist/src/material/terrain-cm.js.map +0 -1
  290. package/dist/src/material/terrainmaterial.js +0 -375
  291. package/dist/src/material/terrainmaterial.js.map +0 -1
  292. package/dist/src/material/unlit.js +0 -41
  293. package/dist/src/material/unlit.js.map +0 -1
  294. package/dist/src/material/water.js +0 -417
  295. package/dist/src/material/water.js.map +0 -1
  296. package/dist/src/posteffect/bloom.js +0 -361
  297. package/dist/src/posteffect/bloom.js.map +0 -1
  298. package/dist/src/posteffect/compositor.js +0 -226
  299. package/dist/src/posteffect/compositor.js.map +0 -1
  300. package/dist/src/posteffect/fxaa.js +0 -273
  301. package/dist/src/posteffect/fxaa.js.map +0 -1
  302. package/dist/src/posteffect/grayscale.js +0 -69
  303. package/dist/src/posteffect/grayscale.js.map +0 -1
  304. package/dist/src/posteffect/motionblur.js +0 -96
  305. package/dist/src/posteffect/motionblur.js.map +0 -1
  306. package/dist/src/posteffect/posteffect.js +0 -126
  307. package/dist/src/posteffect/posteffect.js.map +0 -1
  308. package/dist/src/posteffect/sao.js +0 -324
  309. package/dist/src/posteffect/sao.js.map +0 -1
  310. package/dist/src/posteffect/ssr.js +0 -489
  311. package/dist/src/posteffect/ssr.js.map +0 -1
  312. package/dist/src/posteffect/taa.js +0 -172
  313. package/dist/src/posteffect/taa.js.map +0 -1
  314. package/dist/src/posteffect/tonemap.js +0 -94
  315. package/dist/src/posteffect/tonemap.js.map +0 -1
  316. package/dist/src/render/abuffer_oit.js +0 -361
  317. package/dist/src/render/abuffer_oit.js.map +0 -1
  318. package/dist/src/render/clipmap.js +0 -851
  319. package/dist/src/render/clipmap.js.map +0 -1
  320. package/dist/src/render/cluster_light.js +0 -333
  321. package/dist/src/render/cluster_light.js.map +0 -1
  322. package/dist/src/render/cull_visitor.js +0 -187
  323. package/dist/src/render/cull_visitor.js.map +0 -1
  324. package/dist/src/render/depthpass.js +0 -68
  325. package/dist/src/render/depthpass.js.map +0 -1
  326. package/dist/src/render/drawable_mixin.js +0 -227
  327. package/dist/src/render/drawable_mixin.js.map +0 -1
  328. package/dist/src/render/envlight.js +0 -463
  329. package/dist/src/render/envlight.js.map +0 -1
  330. package/dist/src/render/fbm_wavegenerator.js +0 -251
  331. package/dist/src/render/fbm_wavegenerator.js.map +0 -1
  332. package/dist/src/render/fft_wavegenerator.js +0 -1006
  333. package/dist/src/render/fft_wavegenerator.js.map +0 -1
  334. package/dist/src/render/fullscreenquad.js +0 -38
  335. package/dist/src/render/fullscreenquad.js.map +0 -1
  336. package/dist/src/render/gerstner_wavegenerator.js +0 -314
  337. package/dist/src/render/gerstner_wavegenerator.js.map +0 -1
  338. package/dist/src/render/globalbindgroup_allocator.js +0 -60
  339. package/dist/src/render/globalbindgroup_allocator.js.map +0 -1
  340. package/dist/src/render/hzb.js +0 -273
  341. package/dist/src/render/hzb.js.map +0 -1
  342. package/dist/src/render/lightpass.js +0 -172
  343. package/dist/src/render/lightpass.js.map +0 -1
  344. package/dist/src/render/objectcolorpass.js +0 -51
  345. package/dist/src/render/objectcolorpass.js.map +0 -1
  346. package/dist/src/render/primitive.js +0 -364
  347. package/dist/src/render/primitive.js.map +0 -1
  348. package/dist/src/render/render_queue.js +0 -467
  349. package/dist/src/render/render_queue.js.map +0 -1
  350. package/dist/src/render/renderbundle_wrapper.js +0 -152
  351. package/dist/src/render/renderbundle_wrapper.js.map +0 -1
  352. package/dist/src/render/renderer.js +0 -455
  353. package/dist/src/render/renderer.js.map +0 -1
  354. package/dist/src/render/renderpass.js +0 -200
  355. package/dist/src/render/renderpass.js.map +0 -1
  356. package/dist/src/render/shadowmap_pass.js +0 -56
  357. package/dist/src/render/shadowmap_pass.js.map +0 -1
  358. package/dist/src/render/sky.js +0 -1103
  359. package/dist/src/render/sky.js.map +0 -1
  360. package/dist/src/render/weightedblended_oit.js +0 -168
  361. package/dist/src/render/weightedblended_oit.js.map +0 -1
  362. package/dist/src/scene/batchgroup.js +0 -162
  363. package/dist/src/scene/batchgroup.js.map +0 -1
  364. package/dist/src/scene/environment.js +0 -209
  365. package/dist/src/scene/environment.js.map +0 -1
  366. package/dist/src/scene/graph_node.js +0 -72
  367. package/dist/src/scene/graph_node.js.map +0 -1
  368. package/dist/src/scene/light.js +0 -416
  369. package/dist/src/scene/light.js.map +0 -1
  370. package/dist/src/scene/mesh.js +0 -341
  371. package/dist/src/scene/mesh.js.map +0 -1
  372. package/dist/src/scene/octree.js +0 -649
  373. package/dist/src/scene/octree.js.map +0 -1
  374. package/dist/src/scene/particlesys.js +0 -738
  375. package/dist/src/scene/particlesys.js.map +0 -1
  376. package/dist/src/scene/raycast_visitor.js +0 -103
  377. package/dist/src/scene/raycast_visitor.js.map +0 -1
  378. package/dist/src/scene/scene.js +0 -284
  379. package/dist/src/scene/scene.js.map +0 -1
  380. package/dist/src/scene/scene_node.js +0 -732
  381. package/dist/src/scene/scene_node.js.map +0 -1
  382. package/dist/src/scene/terrain/grass.js +0 -278
  383. package/dist/src/scene/terrain/grass.js.map +0 -1
  384. package/dist/src/scene/terrain/heightfield.js +0 -475
  385. package/dist/src/scene/terrain/heightfield.js.map +0 -1
  386. package/dist/src/scene/terrain/patch.js +0 -530
  387. package/dist/src/scene/terrain/patch.js.map +0 -1
  388. package/dist/src/scene/terrain/quadtree.js +0 -461
  389. package/dist/src/scene/terrain/quadtree.js.map +0 -1
  390. package/dist/src/scene/terrain/terrain.js +0 -246
  391. package/dist/src/scene/terrain/terrain.js.map +0 -1
  392. package/dist/src/scene/terrain-cm/grass.js +0 -594
  393. package/dist/src/scene/terrain-cm/grass.js.map +0 -1
  394. package/dist/src/scene/terrain-cm/grassmaterial.js +0 -159
  395. package/dist/src/scene/terrain-cm/grassmaterial.js.map +0 -1
  396. package/dist/src/scene/terrain-cm/terrain-cm.js +0 -538
  397. package/dist/src/scene/terrain-cm/terrain-cm.js.map +0 -1
  398. package/dist/src/scene/water.js +0 -374
  399. package/dist/src/scene/water.js.map +0 -1
  400. package/dist/src/shaders/atmosphere.js +0 -957
  401. package/dist/src/shaders/atmosphere.js.map +0 -1
  402. package/dist/src/shaders/fog.js +0 -112
  403. package/dist/src/shaders/fog.js.map +0 -1
  404. package/dist/src/shaders/misc.js +0 -266
  405. package/dist/src/shaders/misc.js.map +0 -1
  406. package/dist/src/shaders/noise.js +0 -222
  407. package/dist/src/shaders/noise.js.map +0 -1
  408. package/dist/src/shaders/pbr.js +0 -51
  409. package/dist/src/shaders/pbr.js.map +0 -1
  410. package/dist/src/shaders/shadow.js +0 -636
  411. package/dist/src/shaders/shadow.js.map +0 -1
  412. package/dist/src/shaders/ssr.js +0 -490
  413. package/dist/src/shaders/ssr.js.map +0 -1
  414. package/dist/src/shaders/temporal.js +0 -215
  415. package/dist/src/shaders/temporal.js.map +0 -1
  416. package/dist/src/shaders/water.js +0 -756
  417. package/dist/src/shaders/water.js.map +0 -1
  418. package/dist/src/shadow/esm.js +0 -237
  419. package/dist/src/shadow/esm.js.map +0 -1
  420. package/dist/src/shadow/pcf_opt.js +0 -181
  421. package/dist/src/shadow/pcf_opt.js.map +0 -1
  422. package/dist/src/shadow/pcf_pd.js +0 -189
  423. package/dist/src/shadow/pcf_pd.js.map +0 -1
  424. package/dist/src/shadow/shader.js +0 -37
  425. package/dist/src/shadow/shader.js.map +0 -1
  426. package/dist/src/shadow/shadow_impl.js +0 -15
  427. package/dist/src/shadow/shadow_impl.js.map +0 -1
  428. package/dist/src/shadow/shadowmapper.js +0 -790
  429. package/dist/src/shadow/shadowmapper.js.map +0 -1
  430. package/dist/src/shadow/ssm.js +0 -159
  431. package/dist/src/shadow/ssm.js.map +0 -1
  432. package/dist/src/shadow/vsm.js +0 -297
  433. package/dist/src/shadow/vsm.js.map +0 -1
  434. package/dist/src/shapes/box.js +0 -386
  435. package/dist/src/shapes/box.js.map +0 -1
  436. package/dist/src/shapes/cylinder.js +0 -125
  437. package/dist/src/shapes/cylinder.js.map +0 -1
  438. package/dist/src/shapes/plane.js +0 -88
  439. package/dist/src/shapes/plane.js.map +0 -1
  440. package/dist/src/shapes/shape.js +0 -87
  441. package/dist/src/shapes/shape.js.map +0 -1
  442. package/dist/src/shapes/sphere.js +0 -114
  443. package/dist/src/shapes/sphere.js.map +0 -1
  444. package/dist/src/shapes/tetrahedron.js +0 -188
  445. package/dist/src/shapes/tetrahedron.js.map +0 -1
  446. package/dist/src/shapes/torus.js +0 -111
  447. package/dist/src/shapes/torus.js.map +0 -1
  448. package/dist/src/utility/aabbtree.js +0 -400
  449. package/dist/src/utility/aabbtree.js.map +0 -1
  450. package/dist/src/utility/bounding_volume.js +0 -29
  451. package/dist/src/utility/bounding_volume.js.map +0 -1
  452. package/dist/src/utility/debug.js +0 -28
  453. package/dist/src/utility/debug.js.map +0 -1
  454. package/dist/src/utility/draco/decoder.js +0 -116
  455. package/dist/src/utility/draco/decoder.js.map +0 -1
  456. package/dist/src/utility/misc.js +0 -105
  457. package/dist/src/utility/misc.js.map +0 -1
  458. package/dist/src/utility/panorama.js +0 -163
  459. package/dist/src/utility/panorama.js.map +0 -1
  460. package/dist/src/utility/pmrem.js +0 -354
  461. package/dist/src/utility/pmrem.js.map +0 -1
  462. package/dist/src/utility/rendermipmap.js +0 -115
  463. package/dist/src/utility/rendermipmap.js.map +0 -1
  464. package/dist/src/utility/serialization/json.js +0 -402
  465. package/dist/src/utility/serialization/json.js.map +0 -1
  466. package/dist/src/utility/serialization/manager.js +0 -623
  467. package/dist/src/utility/serialization/manager.js.map +0 -1
  468. package/dist/src/utility/serialization/scene/animation.js +0 -248
  469. package/dist/src/utility/serialization/scene/animation.js.map +0 -1
  470. package/dist/src/utility/serialization/scene/batch.js +0 -59
  471. package/dist/src/utility/serialization/scene/batch.js.map +0 -1
  472. package/dist/src/utility/serialization/scene/camera.js +0 -790
  473. package/dist/src/utility/serialization/scene/camera.js.map +0 -1
  474. package/dist/src/utility/serialization/scene/common.js +0 -222
  475. package/dist/src/utility/serialization/scene/common.js.map +0 -1
  476. package/dist/src/utility/serialization/scene/light.js +0 -575
  477. package/dist/src/utility/serialization/scene/light.js.map +0 -1
  478. package/dist/src/utility/serialization/scene/material.js +0 -1111
  479. package/dist/src/utility/serialization/scene/material.js.map +0 -1
  480. package/dist/src/utility/serialization/scene/mesh.js +0 -148
  481. package/dist/src/utility/serialization/scene/mesh.js.map +0 -1
  482. package/dist/src/utility/serialization/scene/misc.js +0 -39
  483. package/dist/src/utility/serialization/scene/misc.js.map +0 -1
  484. package/dist/src/utility/serialization/scene/node.js +0 -451
  485. package/dist/src/utility/serialization/scene/node.js.map +0 -1
  486. package/dist/src/utility/serialization/scene/particle.js +0 -425
  487. package/dist/src/utility/serialization/scene/particle.js.map +0 -1
  488. package/dist/src/utility/serialization/scene/primitive.js +0 -692
  489. package/dist/src/utility/serialization/scene/primitive.js.map +0 -1
  490. package/dist/src/utility/serialization/scene/scene.js +0 -704
  491. package/dist/src/utility/serialization/scene/scene.js.map +0 -1
  492. package/dist/src/utility/serialization/scene/terrain.js +0 -488
  493. package/dist/src/utility/serialization/scene/terrain.js.map +0 -1
  494. package/dist/src/utility/serialization/scene/water.js +0 -465
  495. package/dist/src/utility/serialization/scene/water.js.map +0 -1
  496. package/dist/src/utility/shprojector.js +0 -297
  497. package/dist/src/utility/shprojector.js.map +0 -1
  498. package/dist/src/utility/textures/ggxlut.js +0 -213
  499. package/dist/src/utility/textures/ggxlut.js.map +0 -1
  500. package/dist/src/utility/textures/gradientnoise.js +0 -62
  501. package/dist/src/utility/textures/gradientnoise.js.map +0 -1
  502. package/dist/src/utility/textures/randomnoise.js +0 -41
  503. package/dist/src/utility/textures/randomnoise.js.map +0 -1
  504. package/dist/src/values.js +0 -162
  505. package/dist/src/values.js.map +0 -1
  506. package/dist/utility/blueprint/material/common.js +0 -7
  507. package/dist/utility/blueprint/material/common.js.map +0 -1
  508. package/dist/utility/serialization/blueprint/constants.js +0 -255
  509. package/dist/utility/serialization/blueprint/constants.js.map +0 -1
  510. package/dist/utility/serialization/blueprint/material/constants.js +0 -203
  511. package/dist/utility/serialization/blueprint/material/constants.js.map +0 -1
  512. package/dist/utility/serialization/blueprint/material/texture.js +0 -165
  513. package/dist/utility/serialization/blueprint/material/texture.js.map +0 -1
  514. package/dist/utility/serialization/scene/cloth_script.js +0 -834
  515. package/dist/utility/serialization/scene/cloth_script.js.map +0 -1
  516. package/dist/utility/serialization/scene/spring_script.js +0 -596
  517. package/dist/utility/serialization/scene/spring_script.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"joint_dynamics_system.js","sources":["../../../src/animation/joint_dynamics/joint_dynamics_system.ts"],"sourcesContent":["import type { DeepPartial } from '@zephyr3d/base';\r\nimport { InterpolatorScalar, Vector3 } from '@zephyr3d/base';\r\nimport { Quaternion } from '@zephyr3d/base';\r\nimport { SceneNode } from '../../scene/scene_node';\r\nimport type {\r\n ControllerConfig,\r\n JointDynamicsColliderHandle,\r\n JointDynamicsFlatPlaneHandle,\r\n JointDynamicsGrabberHandle\r\n} from './controller';\r\nimport { JointDynamicsSystemController } from './controller';\r\nimport { ColliderForce, type BoneNode, type ColliderR, type GrabberR, type TransformAccess } from './types';\r\n\r\nconst _quat = new Quaternion();\r\n\r\nconst _defaultTA = createTransformAccess(new SceneNode(null));\r\n\r\n/**\r\n * Create a transform adapter that lets the joint dynamics solver read from and write to a SceneNode.\r\n *\r\n * @param obj - Scene node to expose through the TransformAccess interface.\r\n * @returns A TransformAccess wrapper backed by the supplied scene node.\r\n *\r\n * @public\r\n */\r\nexport function createTransformAccess(obj: SceneNode): TransformAccess {\r\n return {\r\n getWorldPosition(): Vector3 {\r\n return obj.getWorldPosition();\r\n },\r\n getWorldRotation(): Quaternion {\r\n const q = new Quaternion();\r\n obj.worldMatrix.decompose(null, q, null);\r\n return q;\r\n },\r\n getWorldScale(): Vector3 {\r\n const s = new Vector3();\r\n obj.worldMatrix.decompose(s, null, null);\r\n return s;\r\n },\r\n getLocalPosition(): Vector3 {\r\n return obj.position.clone();\r\n },\r\n getLocalRotation(): Quaternion {\r\n return obj.rotation.clone();\r\n },\r\n getLocalScale(): Vector3 {\r\n return obj.scale.clone();\r\n },\r\n setWorldPosition(p: Vector3): void {\r\n if (obj.parent) {\r\n obj.position = obj.parent.invWorldMatrix.transformPointAffine(p);\r\n } else {\r\n obj.position.set(p);\r\n }\r\n },\r\n setWorldRotation(q: Quaternion): void {\r\n // Convert world rotation to local: localRot = inverse(parentWorldRot) * worldRot\r\n if (obj.parent) {\r\n obj.parent.worldMatrix.decompose(null, _quat, null);\r\n Quaternion.multiply(Quaternion.inverse(_quat), q, obj.rotation);\r\n } else {\r\n obj.rotation.set(q);\r\n }\r\n },\r\n setLocalPosition(p: Vector3): void {\r\n obj.position.set(p);\r\n },\r\n setLocalRotation(q: Quaternion): void {\r\n obj.rotation.set(q);\r\n },\r\n setLocalScale(s: Vector3): void {\r\n obj.scale.set(s);\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Describes the bone chains simulated by a JointDynamicsSystem.\r\n *\r\n * Each chain is defined by an inclusive start and end node. The end node must be\r\n * a descendant of the start node.\r\n *\r\n * @public\r\n */\r\nexport type JointChainConfig = {\r\n /** Root transform used for root motion compensation. */\r\n systemRoot: SceneNode;\r\n /** Bone chains to simulate. */\r\n chains: { start: SceneNode; end: SceneNode }[];\r\n};\r\n\r\n/**\r\n * Configuration used to construct a JointDynamicsSystem.\r\n *\r\n * @public\r\n */\r\nexport type JointDynamicSystemConfig = {\r\n /** Bone chain topology and root transform. */\r\n chainConfig: JointChainConfig;\r\n /** Optional controller configuration overrides. */\r\n controllerConfig?: DeepPartial<ControllerConfig, 2>;\r\n};\r\n\r\n/**\r\n * Physics system for spring-like joint dynamics on scene node bone chains.\r\n *\r\n * The system builds particles and constraints from one or more bone chains,\r\n * advances them with Verlet integration, solves constraints and collisions, and\r\n * writes the resulting positions and rotations back to the scene graph.\r\n *\r\n * @public\r\n */\r\nexport class JointDynamicsSystem {\r\n private _controller: JointDynamicsSystemController;\r\n /**\r\n * Create a joint dynamics system for one or more bone chains.\r\n *\r\n * @param config - Bone chain topology and controller configuration.\r\n * @param colliders - Optional colliders to register during initialization.\r\n * @param grabbers - Optional grabbers to register during initialization.\r\n * @param flatPlanes - Optional world-space planes that dynamic points cannot cross.\r\n */\r\n constructor(\r\n config: JointDynamicSystemConfig,\r\n colliders: { r: ColliderR; transform: TransformAccess }[] = [],\r\n grabbers: {\r\n r: GrabberR;\r\n transform: TransformAccess;\r\n enabled: boolean;\r\n }[] = [],\r\n flatPlanes: { up: Vector3; position: Vector3 }[] = []\r\n ) {\r\n const rootPoints: BoneNode[] = [];\r\n const boneNodes: BoneNode[] = [];\r\n const pointTransforms: TransformAccess[] = [];\r\n let index = 0;\r\n for (const chain of config.chainConfig.chains) {\r\n const chainNodes = this.collectChainNodes(chain.start, chain.end);\r\n for (let i = 0; i < chainNodes.length; i++) {\r\n const node = chainNodes[i];\r\n const boneNode = {\r\n index: index++,\r\n position: node.getWorldPosition(),\r\n children: [],\r\n isFixed: i === 0, // Fix the first bone in the chain\r\n depth: i\r\n };\r\n boneNodes.push(boneNode);\r\n pointTransforms.push(createTransformAccess(node));\r\n if (i > 0) {\r\n boneNodes[boneNodes.length - 2].children.push(boneNode);\r\n }\r\n if (i === 0) {\r\n rootPoints.push(boneNode);\r\n }\r\n }\r\n }\r\n const systemRoot = createTransformAccess(config.chainConfig.systemRoot);\r\n const defaultConfig = this.getDefaultControllerConfig();\r\n const controllerConfig: ControllerConfig = {\r\n ...defaultConfig,\r\n ...config?.controllerConfig,\r\n angleLimitConfig: { ...defaultConfig.angleLimitConfig, ...config?.controllerConfig?.angleLimitConfig },\r\n curves: { ...defaultConfig.curves, ...config?.controllerConfig?.curves },\r\n constraintOptions: {\r\n ...defaultConfig.constraintOptions,\r\n ...config?.controllerConfig?.constraintOptions\r\n }\r\n };\r\n this._controller = new JointDynamicsSystemController(controllerConfig);\r\n this._controller.initialize(systemRoot, rootPoints, pointTransforms, colliders, grabbers, flatPlanes);\r\n }\r\n\r\n /**\r\n * Get the low-level controller that owns simulation state and advanced runtime controls.\r\n *\r\n * Most callers should prefer the convenience methods on JointDynamicsSystem.\r\n *\r\n * @returns The underlying joint dynamics controller.\r\n */\r\n get controller(): JointDynamicsSystemController {\r\n return this._controller;\r\n }\r\n\r\n /**\r\n * Add a fully configured collider at runtime.\r\n *\r\n * The collider transform is read from the supplied scene node every simulation step.\r\n * If no transform is supplied, the collider is created at the identity transform.\r\n *\r\n * @param r - Read-only collider parameters.\r\n * @param transform - Optional scene node that drives the collider transform.\r\n * @returns A stable handle that remains valid until this collider is removed.\r\n */\r\n addCollider(r: ColliderR, transform?: SceneNode): JointDynamicsColliderHandle {\r\n return this._controller.addCollider(r, transform ? createTransformAccess(transform) : _defaultTA);\r\n }\r\n\r\n /**\r\n * Add a spherical collider at runtime.\r\n *\r\n * The collider transform is read from the supplied scene node every simulation step.\r\n * If no transform is supplied, the collider is created at the identity transform.\r\n *\r\n * @param radius - Sphere radius in world units before transform scaling.\r\n * @param transform - Optional scene node that drives the collider transform.\r\n * @param friction - Contact friction coefficient applied by this collider. Defaults to 0.\r\n * @param inversed - If true, points are constrained inside the sphere instead of pushed out.\r\n * @returns A stable handle that remains valid until this collider is removed.\r\n */\r\n addSphereCollider(\r\n radius: number,\r\n transform?: SceneNode,\r\n friction?: number,\r\n inversed?: boolean\r\n ): JointDynamicsColliderHandle {\r\n return this.addCollider(\r\n {\r\n forceType: ColliderForce.Off,\r\n friction: friction ?? 0,\r\n height: 0,\r\n isInverseCollider: inversed ?? false,\r\n radius,\r\n radiusTailScale: 1\r\n },\r\n transform\r\n );\r\n }\r\n\r\n /**\r\n * Add a capsule collider at runtime.\r\n *\r\n * The capsule is aligned to the collider transform's local Y axis. Its head radius is\r\n * `radius`, its tail radius is `radius * radiusTailScale`, and `height` defines the\r\n * distance between the capsule ends before transform scaling.\r\n *\r\n * @param radius - Capsule head radius in world units before transform scaling.\r\n * @param height - Capsule length in world units before transform scaling.\r\n * @param transform - Optional scene node that drives the collider transform.\r\n * @param radiusTailScale - Tail radius multiplier relative to the head radius. Defaults to 1.\r\n * @param friction - Contact friction coefficient applied by this collider. Defaults to 0.\r\n * @param inversed - If true, points are constrained inside the capsule instead of pushed out.\r\n * @returns A stable handle that remains valid until this collider is removed.\r\n */\r\n addCapsuleCollider(\r\n radius: number,\r\n height: number,\r\n transform?: SceneNode,\r\n radiusTailScale?: number,\r\n friction?: number,\r\n inversed?: boolean\r\n ): JointDynamicsColliderHandle {\r\n return this.addCollider(\r\n {\r\n forceType: ColliderForce.Off,\r\n friction: friction ?? 0,\r\n height,\r\n isInverseCollider: inversed ?? false,\r\n radius,\r\n radiusTailScale: radiusTailScale ?? 1\r\n },\r\n transform\r\n );\r\n }\r\n\r\n /**\r\n * Enable or disable a collider by stable handle.\r\n *\r\n * Disabled colliders remain registered but are ignored by simulation until re-enabled.\r\n *\r\n * @param handle - Collider handle returned by addCollider, addSphereCollider, or addCapsuleCollider.\r\n * @param enabled - Whether the collider should participate in simulation.\r\n * @returns true if the handle is valid and the enabled state was updated.\r\n */\r\n setColliderEnabled(handle: JointDynamicsColliderHandle, enabled: boolean): boolean {\r\n return this._controller.setColliderEnabled(handle, enabled);\r\n }\r\n\r\n /**\r\n * Remove a collider by stable handle.\r\n *\r\n * @param handle - Collider handle returned by addCollider, addSphereCollider, or addCapsuleCollider.\r\n * @returns true if the collider existed and was removed.\r\n */\r\n removeCollider(handle: JointDynamicsColliderHandle): boolean {\r\n return this._controller.removeCollider(handle);\r\n }\r\n\r\n /**\r\n * Remove a collider by current array index.\r\n *\r\n * Prefer removeCollider(handle) for runtime-owned colliders.\r\n *\r\n * @param index - Current collider array index.\r\n * @returns true if the collider existed and was removed.\r\n */\r\n removeColliderAt(index: number): boolean {\r\n return this._controller.removeColliderAt(index);\r\n }\r\n\r\n /**\r\n * Add a flat plane collider at runtime.\r\n *\r\n * Flat planes are infinite world-space planes. The normal points toward the allowed side,\r\n * and dynamic points are pushed back when they move behind the plane.\r\n *\r\n * @param up - Plane normal in world space.\r\n * @param position - A point on the plane in world space.\r\n * @returns A stable handle that remains valid until this flat plane is removed.\r\n */\r\n addFlatPlane(up: Vector3, position: Vector3): JointDynamicsFlatPlaneHandle {\r\n return this._controller.addFlatPlane(up, position);\r\n }\r\n\r\n /**\r\n * Enable or disable a flat plane by stable handle.\r\n *\r\n * Disabled flat planes remain registered but are ignored by simulation until re-enabled.\r\n *\r\n * @param handle - Flat plane handle returned by addFlatPlane.\r\n * @param enabled - Whether the flat plane should participate in simulation.\r\n * @returns true if the handle is valid and the enabled state was updated.\r\n */\r\n setFlatPlaneEnabled(handle: JointDynamicsFlatPlaneHandle, enabled: boolean): boolean {\r\n return this._controller.setFlatPlaneEnabled(handle, enabled);\r\n }\r\n\r\n /**\r\n * Remove a flat plane by stable handle.\r\n *\r\n * @param handle - Flat plane handle returned by addFlatPlane.\r\n * @returns true if the flat plane existed and was removed.\r\n */\r\n removeFlatPlane(handle: JointDynamicsFlatPlaneHandle): boolean {\r\n return this._controller.removeFlatPlane(handle);\r\n }\r\n\r\n /**\r\n * Remove a flat plane by current array index.\r\n * Prefer removeFlatPlane(handle) for runtime-owned flat planes.\r\n *\r\n * @param index - Current flat plane array index.\r\n * @returns true if the flat plane existed and was removed.\r\n */\r\n removeFlatPlaneAt(index: number): boolean {\r\n return this._controller.removeFlatPlaneAt(index);\r\n }\r\n\r\n /**\r\n * Add a grabber at runtime.\r\n *\r\n * The grabber transform is read from the supplied scene node every simulation step.\r\n * If no transform is supplied, the grabber is created at the identity transform.\r\n *\r\n * @param r - Read-only grabber parameters.\r\n * @param transform - Optional scene node that drives the grabber transform.\r\n * @returns A stable handle that remains valid until this grabber is removed.\r\n */\r\n addGrabber(r: GrabberR, transform?: SceneNode): JointDynamicsGrabberHandle {\r\n return this._controller.addGrabber(r, transform ? createTransformAccess(transform) : _defaultTA, false);\r\n }\r\n\r\n /**\r\n * Enable or disable a grabber by stable handle.\r\n *\r\n * Disabling a grabber also releases any points currently held by it.\r\n *\r\n * @param handle - Grabber handle returned by addGrabber.\r\n * @param enabled - Whether the grabber should participate in simulation.\r\n * @returns true if the handle is valid and the enabled state was updated.\r\n */\r\n setGrabberEnabled(handle: JointDynamicsGrabberHandle, enabled: boolean): boolean {\r\n return this._controller.setGrabberEnabled(handle, enabled);\r\n }\r\n\r\n /**\r\n * Remove a grabber by stable handle.\r\n *\r\n * @param handle - Grabber handle returned by addGrabber.\r\n * @returns true if the grabber existed and was removed.\r\n */\r\n removeGrabber(handle: JointDynamicsGrabberHandle): boolean {\r\n return this._controller.removeGrabber(handle);\r\n }\r\n\r\n /**\r\n * Remove a grabber by current array index.\r\n *\r\n * Prefer removeGrabber(handle) for runtime-owned grabbers.\r\n *\r\n * @param index - Current grabber array index.\r\n * @returns true if the grabber existed and was removed.\r\n */\r\n removeGrabberAt(index: number): boolean {\r\n return this._controller.removeGrabberAt(index);\r\n }\r\n\r\n private collectChainNodes(start: SceneNode, end: SceneNode): SceneNode[] {\r\n if (!start.isParentOf(end)) {\r\n throw new Error('Invalid chain: end node must be a descendant of start node');\r\n }\r\n const nodes: SceneNode[] = [];\r\n let current: SceneNode = end;\r\n for (;;) {\r\n nodes.unshift(current);\r\n if (current === start) {\r\n break;\r\n }\r\n current = current.parent!;\r\n }\r\n return nodes;\r\n }\r\n /**\r\n * Advance the physics simulation and write the resulting transforms back to the chain nodes.\r\n *\r\n * @param deltaTime - Frame time step in seconds. Values larger than 0.033 are clamped for stability.\r\n */\r\n update(deltaTime: number): void {\r\n // Clamp deltaTime to prevent instability\r\n const dt = Math.min(deltaTime, 0.033); // Max 30 FPS\r\n // simulation\r\n this._controller.step(dt);\r\n }\r\n /** @internal */\r\n private getDefaultControllerConfig(): ControllerConfig {\r\n return {\r\n gravity: new Vector3(0, -9.8, 0),\r\n relaxation: 3,\r\n subSteps: 3,\r\n enableSurfaceCollision: false,\r\n windForce: Vector3.zero(),\r\n rootSlideLimit: -1,\r\n rootRotateLimit: -1,\r\n constraintShrinkLimit: 1,\r\n blendRatio: 0,\r\n stabilizationFrameRate: 60,\r\n isFakeWave: false,\r\n fakeWaveSpeed: 0,\r\n fakeWavePower: 0,\r\n angleLimitConfig: { angleLimit: -1, limitFromRoot: false },\r\n enableBroadPhase: false,\r\n preserveTwist: false,\r\n curves: {\r\n gravityScale: InterpolatorScalar.constant(1),\r\n windForceScale: InterpolatorScalar.constant(1),\r\n massScale: InterpolatorScalar.constant(1),\r\n resistance: InterpolatorScalar.constant(0.95),\r\n hardness: InterpolatorScalar.constant(0.001),\r\n friction: InterpolatorScalar.constant(0.5),\r\n pointRadius: InterpolatorScalar.constant(0.05),\r\n sliderJointLength: InterpolatorScalar.constant(0),\r\n allShrinkScale: InterpolatorScalar.constant(1),\r\n allStretchScale: InterpolatorScalar.constant(1),\r\n structuralShrinkVertical: InterpolatorScalar.constant(1),\r\n structuralStretchVertical: InterpolatorScalar.constant(1),\r\n structuralShrinkHorizontal: InterpolatorScalar.constant(0.5),\r\n structuralStretchHorizontal: InterpolatorScalar.constant(0.5),\r\n shearShrink: InterpolatorScalar.constant(0.5),\r\n shearStretch: InterpolatorScalar.constant(0.5),\r\n bendingShrinkVertical: InterpolatorScalar.constant(0.5),\r\n bendingStretchVertical: InterpolatorScalar.constant(0.5),\r\n bendingShrinkHorizontal: InterpolatorScalar.constant(0.5),\r\n bendingStretchHorizontal: InterpolatorScalar.constant(0.5),\r\n fakeWavePower: InterpolatorScalar.constant(0),\r\n fakeWaveFreq: InterpolatorScalar.constant(0)\r\n },\r\n constraintOptions: {\r\n structuralVertical: false,\r\n structuralHorizontal: false,\r\n shear: false,\r\n bendingVertical: false,\r\n bendingHorizontal: false,\r\n isLoop: false,\r\n collideStructuralVertical: false,\r\n collideStructuralHorizontal: false,\r\n collideShear: false,\r\n enableSurfaceCollision: false\r\n }\r\n };\r\n }\r\n}\r\n"],"names":["_quat","Quaternion","_defaultTA","createTransformAccess","SceneNode","obj","getWorldPosition","getWorldRotation","q","worldMatrix","decompose","getWorldScale","s","Vector3","getLocalPosition","position","clone","getLocalRotation","rotation","getLocalScale","scale","setWorldPosition","p","parent","invWorldMatrix","transformPointAffine","set","setWorldRotation","multiply","inverse","setLocalPosition","setLocalRotation","setLocalScale","JointDynamicsSystem","_controller","config","colliders","grabbers","flatPlanes","rootPoints","boneNodes","pointTransforms","index","chain","chainConfig","chains","chainNodes","collectChainNodes","start","end","i","length","node","boneNode","children","isFixed","depth","push","systemRoot","defaultConfig","getDefaultControllerConfig","controllerConfig","angleLimitConfig","curves","constraintOptions","JointDynamicsSystemController","initialize","controller","addCollider","r","transform","addSphereCollider","radius","friction","inversed","forceType","ColliderForce","Off","height","isInverseCollider","radiusTailScale","addCapsuleCollider","setColliderEnabled","handle","enabled","removeCollider","removeColliderAt","addFlatPlane","up","setFlatPlaneEnabled","removeFlatPlane","removeFlatPlaneAt","addGrabber","setGrabberEnabled","removeGrabber","removeGrabberAt","isParentOf","Error","nodes","current","unshift","update","deltaTime","dt","Math","min","step","gravity","relaxation","subSteps","enableSurfaceCollision","windForce","zero","rootSlideLimit","rootRotateLimit","constraintShrinkLimit","blendRatio","stabilizationFrameRate","isFakeWave","fakeWaveSpeed","fakeWavePower","angleLimit","limitFromRoot","enableBroadPhase","preserveTwist","gravityScale","InterpolatorScalar","constant","windForceScale","massScale","resistance","hardness","pointRadius","sliderJointLength","allShrinkScale","allStretchScale","structuralShrinkVertical","structuralStretchVertical","structuralShrinkHorizontal","structuralStretchHorizontal","shearShrink","shearStretch","bendingShrinkVertical","bendingStretchVertical","bendingShrinkHorizontal","bendingStretchHorizontal","fakeWaveFreq","structuralVertical","structuralHorizontal","shear","bendingVertical","bendingHorizontal","isLoop","collideStructuralVertical","collideStructuralHorizontal","collideShear"],"mappings":"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"}
1
+ {"version":3,"file":"joint_dynamics_system.js","sources":["../../../src/animation/joint_dynamics/joint_dynamics_system.ts"],"sourcesContent":["import type { DeepPartial } from '@zephyr3d/base';\r\nimport { InterpolatorScalar, Vector3 } from '@zephyr3d/base';\r\nimport { Quaternion } from '@zephyr3d/base';\r\nimport { SceneNode } from '../../scene/scene_node';\r\nimport type {\r\n ControllerConfig,\r\n JointDynamicsColliderSnapshot,\r\n JointDynamicsColliderHandle,\r\n JointDynamicsFlatPlaneSnapshot,\r\n JointDynamicsFlatPlaneHandle,\r\n JointDynamicsGrabberSnapshot,\r\n JointDynamicsGrabberHandle\r\n} from './controller';\r\nimport { JointDynamicsSystemController } from './controller';\r\nimport { ColliderForce, type BoneNode, type ColliderR, type GrabberR, type TransformAccess } from './types';\r\nimport type { SkeletonBindPose } from '../skeleton';\r\n\r\nconst _quat = new Quaternion();\r\n\r\nconst _defaultTA = createTransformAccess(new SceneNode(null), false);\r\n\r\n/**\r\n * Create a transform adapter that lets the joint dynamics solver read from and write to a SceneNode.\r\n *\r\n * @param obj - Scene node to expose through the TransformAccess interface.\r\n * @returns A TransformAccess wrapper backed by the supplied scene node.\r\n *\r\n * @public\r\n */\r\nexport function createTransformAccess(obj: SceneNode, exposeNode = true): TransformAccess {\r\n return {\r\n ...(exposeNode ? { node: obj } : {}),\r\n getWorldPosition(): Vector3 {\r\n return obj.getWorldPosition();\r\n },\r\n getWorldRotation(): Quaternion {\r\n const q = new Quaternion();\r\n obj.worldMatrix.decompose(null, q, null);\r\n return q;\r\n },\r\n getWorldScale(): Vector3 {\r\n const s = new Vector3();\r\n obj.worldMatrix.decompose(s, null, null);\r\n return s;\r\n },\r\n getLocalPosition(): Vector3 {\r\n return obj.position.clone();\r\n },\r\n getLocalRotation(): Quaternion {\r\n return obj.rotation.clone();\r\n },\r\n getLocalScale(): Vector3 {\r\n return obj.scale.clone();\r\n },\r\n setWorldPosition(p: Vector3): void {\r\n if (obj.parent) {\r\n obj.position = obj.parent.invWorldMatrix.transformPointAffine(p);\r\n } else {\r\n obj.position.set(p);\r\n }\r\n },\r\n setWorldRotation(q: Quaternion): void {\r\n // Convert world rotation to local: localRot = inverse(parentWorldRot) * worldRot\r\n if (obj.parent) {\r\n obj.parent.worldMatrix.decompose(null, _quat, null);\r\n Quaternion.multiply(Quaternion.inverse(_quat), q, obj.rotation);\r\n } else {\r\n obj.rotation.set(q);\r\n }\r\n },\r\n setLocalPosition(p: Vector3): void {\r\n obj.position.set(p);\r\n },\r\n setLocalRotation(q: Quaternion): void {\r\n obj.rotation.set(q);\r\n },\r\n setLocalScale(s: Vector3): void {\r\n obj.scale.set(s);\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Describes the bone chains simulated by a JointDynamicsSystem.\r\n *\r\n * Each chain is defined by an inclusive start and end node. The end node must be\r\n * a descendant of the start node.\r\n *\r\n * @public\r\n */\r\nexport type JointChainConfig = {\r\n /** Root transform used for root motion compensation. */\r\n systemRoot: SceneNode;\r\n /** Bone chains to simulate. */\r\n chains: { start: SceneNode; end: SceneNode }[];\r\n};\r\n\r\n/**\r\n * Configuration used to construct a JointDynamicsSystem.\r\n *\r\n * @public\r\n */\r\nexport type JointDynamicSystemConfig = {\r\n /** Bone chain topology and root transform. */\r\n chainConfig: JointChainConfig;\r\n /** Optional controller configuration overrides. */\r\n controllerConfig?: DeepPartial<ControllerConfig, 2>;\r\n};\r\n\r\n/**\r\n * Physics system for spring-like joint dynamics on scene node bone chains.\r\n *\r\n * The system builds particles and constraints from one or more bone chains,\r\n * advances them with Verlet integration, solves constraints and collisions, and\r\n * writes the resulting positions and rotations back to the scene graph.\r\n *\r\n * @public\r\n */\r\nexport class JointDynamicsSystem {\r\n private _controller: JointDynamicsSystemController;\r\n private _chainConfig: JointChainConfig;\r\n private _bindPose: WeakMap<SceneNode, SkeletonBindPose>;\r\n /**\r\n * Create a joint dynamics system for one or more bone chains.\r\n *\r\n * @param config - Bone chain topology and controller configuration.\r\n * @param colliders - Optional colliders to register during initialization.\r\n * @param grabbers - Optional grabbers to register during initialization.\r\n * @param flatPlanes - Optional world-space planes that dynamic points cannot cross.\r\n */\r\n constructor(\r\n config: JointDynamicSystemConfig,\r\n colliders: { r: ColliderR; transform: TransformAccess }[] = [],\r\n grabbers: {\r\n r: GrabberR;\r\n transform: TransformAccess;\r\n enabled: boolean;\r\n }[] = [],\r\n flatPlanes: { up: Vector3; position: Vector3 }[] = []\r\n ) {\r\n this._chainConfig = {\r\n systemRoot: config.chainConfig.systemRoot,\r\n chains: config.chainConfig.chains.map((chain) => ({ start: chain.start, end: chain.end }))\r\n };\r\n this._bindPose = new WeakMap();\r\n const rootPoints: BoneNode[] = [];\r\n const boneNodes: BoneNode[] = [];\r\n const pointTransforms: TransformAccess[] = [];\r\n let index = 0;\r\n for (const chain of config.chainConfig.chains) {\r\n const chainNodes = this.collectChainNodes(chain.start, chain.end);\r\n for (let i = 0; i < chainNodes.length; i++) {\r\n const node = chainNodes[i];\r\n this._bindPose.set(node, {\r\n position: node.position.clone(),\r\n rotation: node.rotation.clone(),\r\n scale: node.scale.clone()\r\n });\r\n const boneNode = {\r\n index: index++,\r\n position: node.getWorldPosition(),\r\n children: [],\r\n isFixed: i === 0, // Fix the first bone in the chain\r\n depth: i\r\n };\r\n boneNodes.push(boneNode);\r\n pointTransforms.push(createTransformAccess(node));\r\n if (i > 0) {\r\n boneNodes[boneNodes.length - 2].children.push(boneNode);\r\n }\r\n if (i === 0) {\r\n rootPoints.push(boneNode);\r\n }\r\n }\r\n }\r\n const systemRoot = createTransformAccess(config.chainConfig.systemRoot);\r\n const defaultConfig = this.getDefaultControllerConfig();\r\n const controllerConfig: ControllerConfig = {\r\n ...defaultConfig,\r\n ...config?.controllerConfig,\r\n angleLimitConfig: { ...defaultConfig.angleLimitConfig, ...config?.controllerConfig?.angleLimitConfig },\r\n curves: { ...defaultConfig.curves, ...config?.controllerConfig?.curves },\r\n constraintOptions: {\r\n ...defaultConfig.constraintOptions,\r\n ...config?.controllerConfig?.constraintOptions\r\n }\r\n };\r\n this._controller = new JointDynamicsSystemController(controllerConfig);\r\n this._controller.initialize(systemRoot, rootPoints, pointTransforms, colliders, grabbers, flatPlanes);\r\n }\r\n\r\n /**\r\n * Get the low-level controller that owns simulation state and advanced runtime controls.\r\n *\r\n * Most callers should prefer the convenience methods on JointDynamicsSystem.\r\n *\r\n * @returns The underlying joint dynamics controller.\r\n */\r\n get controller(): JointDynamicsSystemController {\r\n return this._controller;\r\n }\r\n\r\n /**\r\n * Get the node chain topology used to construct this system.\r\n */\r\n get chainConfig(): JointChainConfig {\r\n return {\r\n systemRoot: this._chainConfig.systemRoot,\r\n chains: this._chainConfig.chains.map((chain) => ({ start: chain.start, end: chain.end }))\r\n };\r\n }\r\n\r\n /**\r\n * Returns detached collider snapshots for serialization.\r\n */\r\n getColliderSnapshots(): JointDynamicsColliderSnapshot[] {\r\n return this._controller.getColliderSnapshots();\r\n }\r\n\r\n /**\r\n * Returns detached flat-plane snapshots for serialization.\r\n */\r\n getFlatPlaneSnapshots(): JointDynamicsFlatPlaneSnapshot[] {\r\n return this._controller.getFlatPlaneSnapshots();\r\n }\r\n\r\n /**\r\n * Returns detached grabber snapshots for serialization.\r\n */\r\n getGrabberSnapshots(): JointDynamicsGrabberSnapshot[] {\r\n return this._controller.getGrabberSnapshots();\r\n }\r\n\r\n /**\r\n * Reset chain nodes to bind pose\r\n */\r\n resetChains() {\r\n for (const chain of this._chainConfig.chains) {\r\n const chainNodes = this.collectChainNodes(chain.start, chain.end);\r\n for (const node of chainNodes) {\r\n const bindPose = this._bindPose.get(node);\r\n if (bindPose) {\r\n node.position = bindPose.position;\r\n node.rotation = bindPose.rotation;\r\n node.scale = bindPose.scale;\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Add a fully configured collider at runtime.\r\n *\r\n * The collider transform is read from the supplied scene node every simula ; ion step.\r\n * If no transform is supplied, the collider is created at the identity transform.\r\n *\r\n * @param r - Read-only collider parameters.\r\n * @param transform - Optional scene node that drives the collider transform.\r\n * @returns A stable handle that remains valid until this collider is removed.\r\n */\r\n addCollider(r: ColliderR, transform?: SceneNode): JointDynamicsColliderHandle {\r\n return this._controller.addCollider(r, transform ? createTransformAccess(transform) : _defaultTA);\r\n }\r\n\r\n /**\r\n * Add a spherical collider at runtime.\r\n *\r\n * The collider transform is read from the supplied scene node every simulation step.\r\n * If no transform is supplied, the collider is created at the identity transform.\r\n *\r\n * @param radius - Sphere radius in world units before transform scaling.\r\n * @param transform - Optional scene node that drives the collider transform.\r\n * @param friction - Contact friction coefficient applied by this collider. Defaults to 0.\r\n * @param inversed - If true, points are constrained inside the sphere instead of pushed out.\r\n * @returns A stable handle that remains valid until this collider is removed.\r\n */\r\n addSphereCollider(\r\n radius: number,\r\n transform?: SceneNode,\r\n friction?: number,\r\n inversed?: boolean\r\n ): JointDynamicsColliderHandle {\r\n return this.addCollider(\r\n {\r\n forceType: ColliderForce.Off,\r\n friction: friction ?? 0,\r\n height: 0,\r\n isInverseCollider: inversed ?? false,\r\n radius,\r\n radiusTailScale: 1\r\n },\r\n transform\r\n );\r\n }\r\n\r\n /**\r\n * Add a capsule collider at runtime.\r\n *\r\n * The capsule is aligned to the collider transform's local Y axis. Its head radius is\r\n * `radius`, its tail radius is `radius * radiusTailScale`, and `height` defines the\r\n * distance between the capsule ends before transform scaling.\r\n *\r\n * @param radius - Capsule head radius in world units before transform scaling.\r\n * @param height - Capsule length in world units before transform scaling.\r\n * @param transform - Optional scene node that drives the collider transform.\r\n * @param radiusTailScale - Tail radius multiplier relative to the head radius. Defaults to 1.\r\n * @param friction - Contact friction coefficient applied by this collider. Defaults to 0.\r\n * @param inversed - If true, points are constrained inside the capsule instead of pushed out.\r\n * @returns A stable handle that remains valid until this collider is removed.\r\n */\r\n addCapsuleCollider(\r\n radius: number,\r\n height: number,\r\n transform?: SceneNode,\r\n radiusTailScale?: number,\r\n friction?: number,\r\n inversed?: boolean\r\n ): JointDynamicsColliderHandle {\r\n return this.addCollider(\r\n {\r\n forceType: ColliderForce.Off,\r\n friction: friction ?? 0,\r\n height,\r\n isInverseCollider: inversed ?? false,\r\n radius,\r\n radiusTailScale: radiusTailScale ?? 1\r\n },\r\n transform\r\n );\r\n }\r\n\r\n /**\r\n * Enable or disable a collider by stable handle.\r\n *\r\n * Disabled colliders remain registered but are ignored by simulation until re-enabled.\r\n *\r\n * @param handle - Collider handle returned by addCollider, addSphereCollider, or addCapsuleCollider.\r\n * @param enabled - Whether the collider should participate in simulation.\r\n * @returns true if the handle is valid and the enabled state was updated.\r\n */\r\n setColliderEnabled(handle: JointDynamicsColliderHandle, enabled: boolean): boolean {\r\n return this._controller.setColliderEnabled(handle, enabled);\r\n }\r\n\r\n /**\r\n * Remove a collider by stable handle.\r\n *\r\n * @param handle - Collider handle returned by addCollider, addSphereCollider, or addCapsuleCollider.\r\n * @returns true if the collider existed and was removed.\r\n */\r\n removeCollider(handle: JointDynamicsColliderHandle): boolean {\r\n return this._controller.removeCollider(handle);\r\n }\r\n\r\n /**\r\n * Remove a collider by current array index.\r\n *\r\n * Prefer removeCollider(handle) for runtime-owned colliders.\r\n *\r\n * @param index - Current collider array index.\r\n * @returns true if the collider existed and was removed.\r\n */\r\n removeColliderAt(index: number): boolean {\r\n return this._controller.removeColliderAt(index);\r\n }\r\n\r\n /**\r\n * Add a flat plane collider at runtime.\r\n *\r\n * Flat planes are infinite world-space planes. The normal points toward the allowed side,\r\n * and dynamic points are pushed back when they move behind the plane.\r\n *\r\n * @param up - Plane normal in world space.\r\n * @param position - A point on the plane in world space.\r\n * @returns A stable handle that remains valid until this flat plane is removed.\r\n */\r\n addFlatPlane(up: Vector3, position: Vector3): JointDynamicsFlatPlaneHandle {\r\n return this._controller.addFlatPlane(up, position);\r\n }\r\n\r\n /**\r\n * Enable or disable a flat plane by stable handle.\r\n *\r\n * Disabled flat planes remain registered but are ignored by simulation until re-enabled.\r\n *\r\n * @param handle - Flat plane handle returned by addFlatPlane.\r\n * @param enabled - Whether the flat plane should participate in simulation.\r\n * @returns true if the handle is valid and the enabled state was updated.\r\n */\r\n setFlatPlaneEnabled(handle: JointDynamicsFlatPlaneHandle, enabled: boolean): boolean {\r\n return this._controller.setFlatPlaneEnabled(handle, enabled);\r\n }\r\n\r\n /**\r\n * Remove a flat plane by stable handle.\r\n *\r\n * @param handle - Flat plane handle returned by addFlatPlane.\r\n * @returns true if the flat plane existed and was removed.\r\n */\r\n removeFlatPlane(handle: JointDynamicsFlatPlaneHandle): boolean {\r\n return this._controller.removeFlatPlane(handle);\r\n }\r\n\r\n /**\r\n * Remove a flat plane by current array index.\r\n * Prefer removeFlatPlane(handle) for runtime-owned flat planes.\r\n *\r\n * @param index - Current flat plane array index.\r\n * @returns true if the flat plane existed and was removed.\r\n */\r\n removeFlatPlaneAt(index: number): boolean {\r\n return this._controller.removeFlatPlaneAt(index);\r\n }\r\n\r\n /**\r\n * Add a grabber at runtime.\r\n *\r\n * The grabber transform is read from the supplied scene node every simulation step.\r\n * If no transform is supplied, the grabber is created at the identity transform.\r\n *\r\n * @param r - Read-only grabber parameters.\r\n * @param transform - Optional scene node that drives the grabber transform.\r\n * @returns A stable handle that remains valid until this grabber is removed.\r\n */\r\n addGrabber(r: GrabberR, transform?: SceneNode): JointDynamicsGrabberHandle {\r\n return this._controller.addGrabber(r, transform ? createTransformAccess(transform) : _defaultTA, false);\r\n }\r\n\r\n /**\r\n * Enable or disable a grabber by stable handle.\r\n *\r\n * Disabling a grabber also releases any points currently held by it.\r\n *\r\n * @param handle - Grabber handle returned by addGrabber.\r\n * @param enabled - Whether the grabber should participate in simulation.\r\n * @returns true if the handle is valid and the enabled state was updated.\r\n */\r\n setGrabberEnabled(handle: JointDynamicsGrabberHandle, enabled: boolean): boolean {\r\n return this._controller.setGrabberEnabled(handle, enabled);\r\n }\r\n\r\n /**\r\n * Remove a grabber by stable handle.\r\n *\r\n * @param handle - Grabber handle returned by addGrabber.\r\n * @returns true if the grabber existed and was removed.\r\n */\r\n removeGrabber(handle: JointDynamicsGrabberHandle): boolean {\r\n return this._controller.removeGrabber(handle);\r\n }\r\n\r\n /**\r\n * Remove a grabber by current array index.\r\n *\r\n * Prefer removeGrabber(handle) for runtime-owned grabbers.\r\n *\r\n * @param index - Current grabber array index.\r\n * @returns true if the grabber existed and was removed.\r\n */\r\n removeGrabberAt(index: number): boolean {\r\n return this._controller.removeGrabberAt(index);\r\n }\r\n\r\n private collectChainNodes(start: SceneNode, end: SceneNode): SceneNode[] {\r\n if (!start.isParentOf(end)) {\r\n throw new Error('Invalid chain: end node must be a descendant of start node');\r\n }\r\n const nodes: SceneNode[] = [];\r\n let current: SceneNode = end;\r\n for (;;) {\r\n nodes.unshift(current);\r\n if (current === start) {\r\n break;\r\n }\r\n current = current.parent!;\r\n }\r\n return nodes;\r\n }\r\n /**\r\n * Advance the physics simulation and write the resulting transforms back to the chain nodes.\r\n *\r\n * @param deltaTime - Frame time step in seconds. Values larger than 0.033 are clamped for stability.\r\n */\r\n update(deltaTime: number): void {\r\n // Clamp deltaTime to prevent instability\r\n const dt = Math.min(deltaTime, 0.033); // Max 30 FPS\r\n // simulation\r\n this._controller.step(dt);\r\n }\r\n /** @internal */\r\n private getDefaultControllerConfig(): ControllerConfig {\r\n return {\r\n gravity: new Vector3(0, -9.8, 0),\r\n relaxation: 3,\r\n subSteps: 3,\r\n enableSurfaceCollision: false,\r\n windForce: Vector3.zero(),\r\n rootSlideLimit: -1,\r\n rootRotateLimit: -1,\r\n constraintShrinkLimit: 1,\r\n blendRatio: 0,\r\n stabilizationFrameRate: 60,\r\n isFakeWave: false,\r\n fakeWaveSpeed: 0,\r\n fakeWavePower: 0,\r\n angleLimitConfig: { angleLimit: -1, limitFromRoot: false },\r\n enableBroadPhase: false,\r\n preserveTwist: false,\r\n curves: {\r\n gravityScale: InterpolatorScalar.constant(1),\r\n windForceScale: InterpolatorScalar.constant(1),\r\n massScale: InterpolatorScalar.constant(1),\r\n resistance: InterpolatorScalar.constant(0.95),\r\n hardness: InterpolatorScalar.constant(0.001),\r\n friction: InterpolatorScalar.constant(0.5),\r\n pointRadius: InterpolatorScalar.constant(0.05),\r\n sliderJointLength: InterpolatorScalar.constant(0),\r\n allShrinkScale: InterpolatorScalar.constant(1),\r\n allStretchScale: InterpolatorScalar.constant(1),\r\n structuralShrinkVertical: InterpolatorScalar.constant(1),\r\n structuralStretchVertical: InterpolatorScalar.constant(1),\r\n structuralShrinkHorizontal: InterpolatorScalar.constant(0.5),\r\n structuralStretchHorizontal: InterpolatorScalar.constant(0.5),\r\n shearShrink: InterpolatorScalar.constant(0.5),\r\n shearStretch: InterpolatorScalar.constant(0.5),\r\n bendingShrinkVertical: InterpolatorScalar.constant(0.5),\r\n bendingStretchVertical: InterpolatorScalar.constant(0.5),\r\n bendingShrinkHorizontal: InterpolatorScalar.constant(0.5),\r\n bendingStretchHorizontal: InterpolatorScalar.constant(0.5),\r\n fakeWavePower: InterpolatorScalar.constant(0),\r\n fakeWaveFreq: InterpolatorScalar.constant(0)\r\n },\r\n constraintOptions: {\r\n structuralVertical: false,\r\n structuralHorizontal: false,\r\n shear: false,\r\n bendingVertical: false,\r\n bendingHorizontal: false,\r\n isLoop: false,\r\n collideStructuralVertical: false,\r\n collideStructuralHorizontal: false,\r\n collideShear: false,\r\n enableSurfaceCollision: false\r\n }\r\n };\r\n }\r\n}\r\n"],"names":["_quat","Quaternion","_defaultTA","createTransformAccess","SceneNode","obj","exposeNode","node","getWorldPosition","getWorldRotation","q","worldMatrix","decompose","getWorldScale","s","Vector3","getLocalPosition","position","clone","getLocalRotation","rotation","getLocalScale","scale","setWorldPosition","p","parent","invWorldMatrix","transformPointAffine","set","setWorldRotation","multiply","inverse","setLocalPosition","setLocalRotation","setLocalScale","JointDynamicsSystem","_controller","_chainConfig","_bindPose","config","colliders","grabbers","flatPlanes","systemRoot","chainConfig","chains","map","chain","start","end","WeakMap","rootPoints","boneNodes","pointTransforms","index","chainNodes","collectChainNodes","i","length","boneNode","children","isFixed","depth","push","defaultConfig","getDefaultControllerConfig","controllerConfig","angleLimitConfig","curves","constraintOptions","JointDynamicsSystemController","initialize","controller","getColliderSnapshots","getFlatPlaneSnapshots","getGrabberSnapshots","resetChains","bindPose","get","addCollider","r","transform","addSphereCollider","radius","friction","inversed","forceType","ColliderForce","Off","height","isInverseCollider","radiusTailScale","addCapsuleCollider","setColliderEnabled","handle","enabled","removeCollider","removeColliderAt","addFlatPlane","up","setFlatPlaneEnabled","removeFlatPlane","removeFlatPlaneAt","addGrabber","setGrabberEnabled","removeGrabber","removeGrabberAt","isParentOf","Error","nodes","current","unshift","update","deltaTime","dt","Math","min","step","gravity","relaxation","subSteps","enableSurfaceCollision","windForce","zero","rootSlideLimit","rootRotateLimit","constraintShrinkLimit","blendRatio","stabilizationFrameRate","isFakeWave","fakeWaveSpeed","fakeWavePower","angleLimit","limitFromRoot","enableBroadPhase","preserveTwist","gravityScale","InterpolatorScalar","constant","windForceScale","massScale","resistance","hardness","pointRadius","sliderJointLength","allShrinkScale","allStretchScale","structuralShrinkVertical","structuralStretchVertical","structuralShrinkHorizontal","structuralStretchHorizontal","shearShrink","shearStretch","bendingShrinkVertical","bendingStretchVertical","bendingShrinkHorizontal","bendingStretchHorizontal","fakeWaveFreq","structuralVertical","structuralHorizontal","shear","bendingVertical","bendingHorizontal","isLoop","collideStructuralVertical","collideStructuralHorizontal","collideShear"],"mappings":"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"}
@@ -115,10 +115,11 @@ function colliderUpdate(collidersR, collidersRW, stepDelta) {
115
115
  const ws = colRW.worldScale;
116
116
  const worldScaleUniform = (ws.x + ws.y + ws.z) / 3;
117
117
  colRW.radius = colR.radius * worldScaleUniform;
118
+ colRW.height = colR.height * worldScaleUniform;
118
119
  Vector3.lerp(colRW.positionPreviousTransform, colRW.positionCurrentTransform, stepDelta, curPos);
119
120
  Quaternion.slerp(colRW.directionPreviousTransform, colRW.directionCurrentTransform, stepDelta, curDir);
120
- computeCapsule(curPos, curDir, colR.height, colRW.positionCurrent, colRW.directionCurrent);
121
- if (colR.height > EPSILON) {
121
+ computeCapsule(curPos, curDir, colRW.height, colRW.positionCurrent, colRW.directionCurrent);
122
+ if (colRW.height > EPSILON) {
122
123
  Vector3.scale(colRW.directionCurrent, 0.5, _computeCapsuleHalfDir);
123
124
  Vector3.add(colRW.positionCurrent, _computeCapsuleHalfDir, colRW.boundsCenter);
124
125
  colRW.boundsRadius = Math.sqrt(colRW.directionCurrent.magnitudeSq) * 0.5 + Math.max(colRW.radius, colRW.radius * colR.radiusTailScale);
@@ -131,7 +132,7 @@ function colliderUpdate(collidersR, collidersRW, stepDelta) {
131
132
  colRW.worldToLocal.transformPointAffine(colRW.positionCurrent, center);
132
133
  Vector3.sub(center, corner, colRW.localBoundsMin);
133
134
  Vector3.add(center, corner, colRW.localBoundsMax);
134
- if (colR.height > EPSILON) {
135
+ if (colRW.height > EPSILON) {
135
136
  Vector3.scale(VEC3_ONE, colR.radius * colR.radiusTailScale, tailCorner);
136
137
  Vector3.add(colRW.positionCurrent, colRW.directionCurrent, tailCenter);
137
138
  colRW.worldToLocal.transformPointAffine(tailCenter, tailCenter);