@zephyr3d/scene 0.7.1 → 0.8.1

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 (441) hide show
  1. package/dist/animation/animation.js +0 -18
  2. package/dist/animation/animation.js.map +1 -1
  3. package/dist/animation/animationset.js +200 -3
  4. package/dist/animation/animationset.js.map +1 -1
  5. package/dist/animation/ik/ccd_solver.js +371 -0
  6. package/dist/animation/ik/ccd_solver.js.map +1 -0
  7. package/dist/animation/ik/fabrik_solver.js +398 -0
  8. package/dist/animation/ik/fabrik_solver.js.map +1 -0
  9. package/dist/animation/ik/ik_angle_constraint.js +181 -0
  10. package/dist/animation/ik/ik_angle_constraint.js.map +1 -0
  11. package/dist/animation/ik/ik_chain.js +163 -0
  12. package/dist/animation/ik/ik_chain.js.map +1 -0
  13. package/dist/animation/ik/ik_constraint.js +25 -0
  14. package/dist/animation/ik/ik_constraint.js.map +1 -0
  15. package/dist/animation/ik/ik_pole_constraint.js +128 -0
  16. package/dist/animation/ik/ik_pole_constraint.js.map +1 -0
  17. package/dist/animation/ik/ik_solver.js +48 -0
  18. package/dist/animation/ik/ik_solver.js.map +1 -0
  19. package/dist/animation/ik/ik_track.js +96 -0
  20. package/dist/animation/ik/ik_track.js.map +1 -0
  21. package/dist/animation/ik/ik_utils.js +191 -0
  22. package/dist/animation/ik/ik_utils.js.map +1 -0
  23. package/dist/animation/ik/two_bone_ik_solver.js +331 -0
  24. package/dist/animation/ik/two_bone_ik_solver.js.map +1 -0
  25. package/dist/animation/ik_modifier.js +61 -0
  26. package/dist/animation/ik_modifier.js.map +1 -0
  27. package/dist/animation/ik_postprocessor.js +71 -0
  28. package/dist/animation/ik_postprocessor.js.map +1 -0
  29. package/dist/animation/manual_transform_processor.js +156 -0
  30. package/dist/animation/manual_transform_processor.js.map +1 -0
  31. package/dist/animation/skeleton.js +55 -51
  32. package/dist/animation/skeleton.js.map +1 -1
  33. package/dist/animation/skeleton_modifier.js +38 -0
  34. package/dist/animation/skeleton_modifier.js.map +1 -0
  35. package/dist/animation/skeleton_postprocessor.js +50 -0
  36. package/dist/animation/skeleton_postprocessor.js.map +1 -0
  37. package/dist/animation/spring/multi_chain_spring_system.js +503 -0
  38. package/dist/animation/spring/multi_chain_spring_system.js.map +1 -0
  39. package/dist/animation/spring/spring_bone.js +240 -0
  40. package/dist/animation/spring/spring_bone.js.map +1 -0
  41. package/dist/animation/spring/spring_bone_collider.js +198 -0
  42. package/dist/animation/spring/spring_bone_collider.js.map +1 -0
  43. package/dist/animation/spring/spring_bone_constraint.js +170 -0
  44. package/dist/animation/spring/spring_bone_constraint.js.map +1 -0
  45. package/dist/animation/spring/spring_bone_system.js +328 -0
  46. package/dist/animation/spring/spring_bone_system.js.map +1 -0
  47. package/dist/animation/spring/spring_chain.js +103 -0
  48. package/dist/animation/spring/spring_chain.js.map +1 -0
  49. package/dist/animation/spring/spring_collider.js +247 -0
  50. package/dist/animation/spring/spring_collider.js.map +1 -0
  51. package/dist/animation/spring/spring_constraint.js +21 -0
  52. package/dist/animation/spring/spring_constraint.js.map +1 -0
  53. package/dist/animation/spring/spring_particle.js +20 -0
  54. package/dist/animation/spring/spring_particle.js.map +1 -0
  55. package/dist/animation/spring/spring_system.js +526 -0
  56. package/dist/animation/spring/spring_system.js.map +1 -0
  57. package/dist/animation/spring_modifier.js +45 -0
  58. package/dist/animation/spring_modifier.js.map +1 -0
  59. package/dist/animation/spring_postprocessor.js +54 -0
  60. package/dist/animation/spring_postprocessor.js.map +1 -0
  61. package/dist/app/screen.js +1 -1
  62. package/dist/app/screen.js.map +1 -1
  63. package/dist/asset/model.js +10 -6
  64. package/dist/asset/model.js.map +1 -1
  65. package/dist/camera/perspectivecamera.js +3 -3
  66. package/dist/camera/perspectivecamera.js.map +1 -1
  67. package/dist/index.d.ts +1400 -4
  68. package/dist/index.js +16 -0
  69. package/dist/index.js.map +1 -1
  70. package/dist/material/mixins/lightmodel/blinnphong.js +66 -4
  71. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  72. package/dist/material/mixins/pbr/common.js +20 -17
  73. package/dist/material/mixins/pbr/common.js.map +1 -1
  74. package/dist/material/shader/helper.js +5 -3
  75. package/dist/material/shader/helper.js.map +1 -1
  76. package/dist/render/gpu_picking.js +100 -0
  77. package/dist/render/gpu_picking.js.map +1 -0
  78. package/dist/render/rendergraph/device_pool_allocator.js +41 -0
  79. package/dist/render/rendergraph/device_pool_allocator.js.map +1 -0
  80. package/dist/render/rendergraph/executor.js +146 -0
  81. package/dist/render/rendergraph/executor.js.map +1 -0
  82. package/dist/render/rendergraph/forward_plus_builder.js +414 -0
  83. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -0
  84. package/dist/render/rendergraph/rendergraph.js +306 -0
  85. package/dist/render/rendergraph/rendergraph.js.map +1 -0
  86. package/dist/render/rendergraph/types.js +57 -0
  87. package/dist/render/rendergraph/types.js.map +1 -0
  88. package/dist/render/sky_motion_vector.js +85 -0
  89. package/dist/render/sky_motion_vector.js.map +1 -0
  90. package/dist/scene/mesh.js +15 -23
  91. package/dist/scene/mesh.js.map +1 -1
  92. package/dist/utility/serialization/scene/animation.js +24 -23
  93. package/dist/utility/serialization/scene/animation.js.map +1 -1
  94. package/dist/utility/serialization/scene/material.js +62 -0
  95. package/dist/utility/serialization/scene/material.js.map +1 -1
  96. package/dist/utility/serialization/scene/node.js +1 -1
  97. package/package.json +3 -3
  98. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +0 -38
  99. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +0 -1
  100. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +0 -10
  101. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +0 -1
  102. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +0 -127
  103. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +0 -1
  104. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +0 -263
  105. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +0 -1
  106. package/dist/src/animation/animation.js +0 -127
  107. package/dist/src/animation/animation.js.map +0 -1
  108. package/dist/src/animation/animationset.js +0 -255
  109. package/dist/src/animation/animationset.js.map +0 -1
  110. package/dist/src/animation/animationtrack.js +0 -34
  111. package/dist/src/animation/animationtrack.js.map +0 -1
  112. package/dist/src/animation/eulerrotationtrack.js +0 -52
  113. package/dist/src/animation/eulerrotationtrack.js.map +0 -1
  114. package/dist/src/animation/morphtarget.js +0 -93
  115. package/dist/src/animation/morphtarget.js.map +0 -1
  116. package/dist/src/animation/morphtrack.js +0 -70
  117. package/dist/src/animation/morphtrack.js.map +0 -1
  118. package/dist/src/animation/proptrack.js +0 -161
  119. package/dist/src/animation/proptrack.js.map +0 -1
  120. package/dist/src/animation/rotationtrack.js +0 -51
  121. package/dist/src/animation/rotationtrack.js.map +0 -1
  122. package/dist/src/animation/scaletrack.js +0 -50
  123. package/dist/src/animation/scaletrack.js.map +0 -1
  124. package/dist/src/animation/skeleton.js +0 -204
  125. package/dist/src/animation/skeleton.js.map +0 -1
  126. package/dist/src/animation/translationtrack.js +0 -50
  127. package/dist/src/animation/translationtrack.js.map +0 -1
  128. package/dist/src/app/app.js +0 -129
  129. package/dist/src/app/app.js.map +0 -1
  130. package/dist/src/app/inputmgr.js +0 -267
  131. package/dist/src/app/inputmgr.js.map +0 -1
  132. package/dist/src/asset/assetmanager.js +0 -404
  133. package/dist/src/asset/assetmanager.js.map +0 -1
  134. package/dist/src/asset/builtin.js +0 -337
  135. package/dist/src/asset/builtin.js.map +0 -1
  136. package/dist/src/asset/loaders/dds/dds.js +0 -470
  137. package/dist/src/asset/loaders/dds/dds.js.map +0 -1
  138. package/dist/src/asset/loaders/dds/dds_loader.js +0 -28
  139. package/dist/src/asset/loaders/dds/dds_loader.js.map +0 -1
  140. package/dist/src/asset/loaders/gltf/gltf_loader.js +0 -1265
  141. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +0 -1
  142. package/dist/src/asset/loaders/gltf/helpers.js +0 -327
  143. package/dist/src/asset/loaders/gltf/helpers.js.map +0 -1
  144. package/dist/src/asset/loaders/hdr/hdr.js +0 -180
  145. package/dist/src/asset/loaders/hdr/hdr.js.map +0 -1
  146. package/dist/src/asset/loaders/image/tga_Loader.js +0 -116
  147. package/dist/src/asset/loaders/image/tga_Loader.js.map +0 -1
  148. package/dist/src/asset/loaders/image/webimage_loader.js +0 -63
  149. package/dist/src/asset/loaders/image/webimage_loader.js.map +0 -1
  150. package/dist/src/asset/loaders/loader.js +0 -45
  151. package/dist/src/asset/loaders/loader.js.map +0 -1
  152. package/dist/src/asset/model.js +0 -414
  153. package/dist/src/asset/model.js.map +0 -1
  154. package/dist/src/blitter/bilateralblur.js +0 -221
  155. package/dist/src/blitter/bilateralblur.js.map +0 -1
  156. package/dist/src/blitter/blitter.js +0 -390
  157. package/dist/src/blitter/blitter.js.map +0 -1
  158. package/dist/src/blitter/box.js +0 -118
  159. package/dist/src/blitter/box.js.map +0 -1
  160. package/dist/src/blitter/copy.js +0 -22
  161. package/dist/src/blitter/copy.js.map +0 -1
  162. package/dist/src/blitter/gaussianblur.js +0 -228
  163. package/dist/src/blitter/gaussianblur.js.map +0 -1
  164. package/dist/src/camera/base.js +0 -92
  165. package/dist/src/camera/base.js.map +0 -1
  166. package/dist/src/camera/camera.js +0 -1005
  167. package/dist/src/camera/camera.js.map +0 -1
  168. package/dist/src/camera/fps.js +0 -238
  169. package/dist/src/camera/fps.js.map +0 -1
  170. package/dist/src/camera/orbit.js +0 -245
  171. package/dist/src/camera/orbit.js.map +0 -1
  172. package/dist/src/camera/orthocamera.js +0 -167
  173. package/dist/src/camera/orthocamera.js.map +0 -1
  174. package/dist/src/camera/perspectivecamera.js +0 -141
  175. package/dist/src/camera/perspectivecamera.js.map +0 -1
  176. package/dist/src/index.js +0 -120
  177. package/dist/src/index.js.map +0 -1
  178. package/dist/src/material/blinn.js +0 -81
  179. package/dist/src/material/blinn.js.map +0 -1
  180. package/dist/src/material/grassmaterial.js +0 -113
  181. package/dist/src/material/grassmaterial.js.map +0 -1
  182. package/dist/src/material/lambert.js +0 -92
  183. package/dist/src/material/lambert.js.map +0 -1
  184. package/dist/src/material/material.js +0 -301
  185. package/dist/src/material/material.js.map +0 -1
  186. package/dist/src/material/meshmaterial.js +0 -704
  187. package/dist/src/material/meshmaterial.js.map +0 -1
  188. package/dist/src/material/mixins/albedocolor.js +0 -76
  189. package/dist/src/material/mixins/albedocolor.js.map +0 -1
  190. package/dist/src/material/mixins/foliage.js +0 -47
  191. package/dist/src/material/mixins/foliage.js.map +0 -1
  192. package/dist/src/material/mixins/lightmodel/blinnphong.js +0 -112
  193. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +0 -1
  194. package/dist/src/material/mixins/lightmodel/lambert.js +0 -58
  195. package/dist/src/material/mixins/lightmodel/lambert.js.map +0 -1
  196. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +0 -178
  197. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +0 -1
  198. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +0 -139
  199. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +0 -1
  200. package/dist/src/material/mixins/lit.js +0 -476
  201. package/dist/src/material/mixins/lit.js.map +0 -1
  202. package/dist/src/material/mixins/pbr/common.js +0 -918
  203. package/dist/src/material/mixins/pbr/common.js.map +0 -1
  204. package/dist/src/material/mixins/texture.js +0 -172
  205. package/dist/src/material/mixins/texture.js.map +0 -1
  206. package/dist/src/material/mixins/vertexcolor.js +0 -56
  207. package/dist/src/material/mixins/vertexcolor.js.map +0 -1
  208. package/dist/src/material/particle.js +0 -178
  209. package/dist/src/material/particle.js.map +0 -1
  210. package/dist/src/material/pbrmr.js +0 -97
  211. package/dist/src/material/pbrmr.js.map +0 -1
  212. package/dist/src/material/pbrsg.js +0 -97
  213. package/dist/src/material/pbrsg.js.map +0 -1
  214. package/dist/src/material/shader/helper.js +0 -1209
  215. package/dist/src/material/shader/helper.js.map +0 -1
  216. package/dist/src/material/terrain-cm.js +0 -606
  217. package/dist/src/material/terrain-cm.js.map +0 -1
  218. package/dist/src/material/terrainmaterial.js +0 -375
  219. package/dist/src/material/terrainmaterial.js.map +0 -1
  220. package/dist/src/material/unlit.js +0 -41
  221. package/dist/src/material/unlit.js.map +0 -1
  222. package/dist/src/material/water.js +0 -417
  223. package/dist/src/material/water.js.map +0 -1
  224. package/dist/src/posteffect/bloom.js +0 -361
  225. package/dist/src/posteffect/bloom.js.map +0 -1
  226. package/dist/src/posteffect/compositor.js +0 -226
  227. package/dist/src/posteffect/compositor.js.map +0 -1
  228. package/dist/src/posteffect/fxaa.js +0 -273
  229. package/dist/src/posteffect/fxaa.js.map +0 -1
  230. package/dist/src/posteffect/grayscale.js +0 -69
  231. package/dist/src/posteffect/grayscale.js.map +0 -1
  232. package/dist/src/posteffect/motionblur.js +0 -96
  233. package/dist/src/posteffect/motionblur.js.map +0 -1
  234. package/dist/src/posteffect/posteffect.js +0 -126
  235. package/dist/src/posteffect/posteffect.js.map +0 -1
  236. package/dist/src/posteffect/sao.js +0 -324
  237. package/dist/src/posteffect/sao.js.map +0 -1
  238. package/dist/src/posteffect/ssr.js +0 -489
  239. package/dist/src/posteffect/ssr.js.map +0 -1
  240. package/dist/src/posteffect/taa.js +0 -172
  241. package/dist/src/posteffect/taa.js.map +0 -1
  242. package/dist/src/posteffect/tonemap.js +0 -94
  243. package/dist/src/posteffect/tonemap.js.map +0 -1
  244. package/dist/src/render/abuffer_oit.js +0 -361
  245. package/dist/src/render/abuffer_oit.js.map +0 -1
  246. package/dist/src/render/clipmap.js +0 -851
  247. package/dist/src/render/clipmap.js.map +0 -1
  248. package/dist/src/render/cluster_light.js +0 -333
  249. package/dist/src/render/cluster_light.js.map +0 -1
  250. package/dist/src/render/cull_visitor.js +0 -187
  251. package/dist/src/render/cull_visitor.js.map +0 -1
  252. package/dist/src/render/depthpass.js +0 -68
  253. package/dist/src/render/depthpass.js.map +0 -1
  254. package/dist/src/render/drawable_mixin.js +0 -227
  255. package/dist/src/render/drawable_mixin.js.map +0 -1
  256. package/dist/src/render/envlight.js +0 -463
  257. package/dist/src/render/envlight.js.map +0 -1
  258. package/dist/src/render/fbm_wavegenerator.js +0 -251
  259. package/dist/src/render/fbm_wavegenerator.js.map +0 -1
  260. package/dist/src/render/fft_wavegenerator.js +0 -1006
  261. package/dist/src/render/fft_wavegenerator.js.map +0 -1
  262. package/dist/src/render/fullscreenquad.js +0 -38
  263. package/dist/src/render/fullscreenquad.js.map +0 -1
  264. package/dist/src/render/gerstner_wavegenerator.js +0 -314
  265. package/dist/src/render/gerstner_wavegenerator.js.map +0 -1
  266. package/dist/src/render/globalbindgroup_allocator.js +0 -60
  267. package/dist/src/render/globalbindgroup_allocator.js.map +0 -1
  268. package/dist/src/render/hzb.js +0 -273
  269. package/dist/src/render/hzb.js.map +0 -1
  270. package/dist/src/render/lightpass.js +0 -172
  271. package/dist/src/render/lightpass.js.map +0 -1
  272. package/dist/src/render/objectcolorpass.js +0 -51
  273. package/dist/src/render/objectcolorpass.js.map +0 -1
  274. package/dist/src/render/primitive.js +0 -364
  275. package/dist/src/render/primitive.js.map +0 -1
  276. package/dist/src/render/render_queue.js +0 -467
  277. package/dist/src/render/render_queue.js.map +0 -1
  278. package/dist/src/render/renderbundle_wrapper.js +0 -152
  279. package/dist/src/render/renderbundle_wrapper.js.map +0 -1
  280. package/dist/src/render/renderer.js +0 -455
  281. package/dist/src/render/renderer.js.map +0 -1
  282. package/dist/src/render/renderpass.js +0 -200
  283. package/dist/src/render/renderpass.js.map +0 -1
  284. package/dist/src/render/shadowmap_pass.js +0 -56
  285. package/dist/src/render/shadowmap_pass.js.map +0 -1
  286. package/dist/src/render/sky.js +0 -1103
  287. package/dist/src/render/sky.js.map +0 -1
  288. package/dist/src/render/weightedblended_oit.js +0 -168
  289. package/dist/src/render/weightedblended_oit.js.map +0 -1
  290. package/dist/src/scene/batchgroup.js +0 -162
  291. package/dist/src/scene/batchgroup.js.map +0 -1
  292. package/dist/src/scene/environment.js +0 -209
  293. package/dist/src/scene/environment.js.map +0 -1
  294. package/dist/src/scene/graph_node.js +0 -72
  295. package/dist/src/scene/graph_node.js.map +0 -1
  296. package/dist/src/scene/light.js +0 -416
  297. package/dist/src/scene/light.js.map +0 -1
  298. package/dist/src/scene/mesh.js +0 -341
  299. package/dist/src/scene/mesh.js.map +0 -1
  300. package/dist/src/scene/octree.js +0 -649
  301. package/dist/src/scene/octree.js.map +0 -1
  302. package/dist/src/scene/particlesys.js +0 -738
  303. package/dist/src/scene/particlesys.js.map +0 -1
  304. package/dist/src/scene/raycast_visitor.js +0 -103
  305. package/dist/src/scene/raycast_visitor.js.map +0 -1
  306. package/dist/src/scene/scene.js +0 -284
  307. package/dist/src/scene/scene.js.map +0 -1
  308. package/dist/src/scene/scene_node.js +0 -732
  309. package/dist/src/scene/scene_node.js.map +0 -1
  310. package/dist/src/scene/terrain/grass.js +0 -278
  311. package/dist/src/scene/terrain/grass.js.map +0 -1
  312. package/dist/src/scene/terrain/heightfield.js +0 -475
  313. package/dist/src/scene/terrain/heightfield.js.map +0 -1
  314. package/dist/src/scene/terrain/patch.js +0 -530
  315. package/dist/src/scene/terrain/patch.js.map +0 -1
  316. package/dist/src/scene/terrain/quadtree.js +0 -461
  317. package/dist/src/scene/terrain/quadtree.js.map +0 -1
  318. package/dist/src/scene/terrain/terrain.js +0 -246
  319. package/dist/src/scene/terrain/terrain.js.map +0 -1
  320. package/dist/src/scene/terrain-cm/grass.js +0 -594
  321. package/dist/src/scene/terrain-cm/grass.js.map +0 -1
  322. package/dist/src/scene/terrain-cm/grassmaterial.js +0 -159
  323. package/dist/src/scene/terrain-cm/grassmaterial.js.map +0 -1
  324. package/dist/src/scene/terrain-cm/terrain-cm.js +0 -538
  325. package/dist/src/scene/terrain-cm/terrain-cm.js.map +0 -1
  326. package/dist/src/scene/water.js +0 -374
  327. package/dist/src/scene/water.js.map +0 -1
  328. package/dist/src/shaders/atmosphere.js +0 -957
  329. package/dist/src/shaders/atmosphere.js.map +0 -1
  330. package/dist/src/shaders/fog.js +0 -112
  331. package/dist/src/shaders/fog.js.map +0 -1
  332. package/dist/src/shaders/misc.js +0 -266
  333. package/dist/src/shaders/misc.js.map +0 -1
  334. package/dist/src/shaders/noise.js +0 -222
  335. package/dist/src/shaders/noise.js.map +0 -1
  336. package/dist/src/shaders/pbr.js +0 -51
  337. package/dist/src/shaders/pbr.js.map +0 -1
  338. package/dist/src/shaders/shadow.js +0 -636
  339. package/dist/src/shaders/shadow.js.map +0 -1
  340. package/dist/src/shaders/ssr.js +0 -490
  341. package/dist/src/shaders/ssr.js.map +0 -1
  342. package/dist/src/shaders/temporal.js +0 -215
  343. package/dist/src/shaders/temporal.js.map +0 -1
  344. package/dist/src/shaders/water.js +0 -756
  345. package/dist/src/shaders/water.js.map +0 -1
  346. package/dist/src/shadow/esm.js +0 -237
  347. package/dist/src/shadow/esm.js.map +0 -1
  348. package/dist/src/shadow/pcf_opt.js +0 -181
  349. package/dist/src/shadow/pcf_opt.js.map +0 -1
  350. package/dist/src/shadow/pcf_pd.js +0 -189
  351. package/dist/src/shadow/pcf_pd.js.map +0 -1
  352. package/dist/src/shadow/shader.js +0 -37
  353. package/dist/src/shadow/shader.js.map +0 -1
  354. package/dist/src/shadow/shadow_impl.js +0 -15
  355. package/dist/src/shadow/shadow_impl.js.map +0 -1
  356. package/dist/src/shadow/shadowmapper.js +0 -790
  357. package/dist/src/shadow/shadowmapper.js.map +0 -1
  358. package/dist/src/shadow/ssm.js +0 -159
  359. package/dist/src/shadow/ssm.js.map +0 -1
  360. package/dist/src/shadow/vsm.js +0 -297
  361. package/dist/src/shadow/vsm.js.map +0 -1
  362. package/dist/src/shapes/box.js +0 -386
  363. package/dist/src/shapes/box.js.map +0 -1
  364. package/dist/src/shapes/cylinder.js +0 -125
  365. package/dist/src/shapes/cylinder.js.map +0 -1
  366. package/dist/src/shapes/plane.js +0 -88
  367. package/dist/src/shapes/plane.js.map +0 -1
  368. package/dist/src/shapes/shape.js +0 -87
  369. package/dist/src/shapes/shape.js.map +0 -1
  370. package/dist/src/shapes/sphere.js +0 -114
  371. package/dist/src/shapes/sphere.js.map +0 -1
  372. package/dist/src/shapes/tetrahedron.js +0 -188
  373. package/dist/src/shapes/tetrahedron.js.map +0 -1
  374. package/dist/src/shapes/torus.js +0 -111
  375. package/dist/src/shapes/torus.js.map +0 -1
  376. package/dist/src/utility/aabbtree.js +0 -400
  377. package/dist/src/utility/aabbtree.js.map +0 -1
  378. package/dist/src/utility/bounding_volume.js +0 -29
  379. package/dist/src/utility/bounding_volume.js.map +0 -1
  380. package/dist/src/utility/debug.js +0 -28
  381. package/dist/src/utility/debug.js.map +0 -1
  382. package/dist/src/utility/draco/decoder.js +0 -116
  383. package/dist/src/utility/draco/decoder.js.map +0 -1
  384. package/dist/src/utility/misc.js +0 -105
  385. package/dist/src/utility/misc.js.map +0 -1
  386. package/dist/src/utility/panorama.js +0 -163
  387. package/dist/src/utility/panorama.js.map +0 -1
  388. package/dist/src/utility/pmrem.js +0 -354
  389. package/dist/src/utility/pmrem.js.map +0 -1
  390. package/dist/src/utility/rendermipmap.js +0 -115
  391. package/dist/src/utility/rendermipmap.js.map +0 -1
  392. package/dist/src/utility/serialization/json.js +0 -402
  393. package/dist/src/utility/serialization/json.js.map +0 -1
  394. package/dist/src/utility/serialization/manager.js +0 -623
  395. package/dist/src/utility/serialization/manager.js.map +0 -1
  396. package/dist/src/utility/serialization/scene/animation.js +0 -248
  397. package/dist/src/utility/serialization/scene/animation.js.map +0 -1
  398. package/dist/src/utility/serialization/scene/batch.js +0 -59
  399. package/dist/src/utility/serialization/scene/batch.js.map +0 -1
  400. package/dist/src/utility/serialization/scene/camera.js +0 -790
  401. package/dist/src/utility/serialization/scene/camera.js.map +0 -1
  402. package/dist/src/utility/serialization/scene/common.js +0 -222
  403. package/dist/src/utility/serialization/scene/common.js.map +0 -1
  404. package/dist/src/utility/serialization/scene/light.js +0 -575
  405. package/dist/src/utility/serialization/scene/light.js.map +0 -1
  406. package/dist/src/utility/serialization/scene/material.js +0 -1111
  407. package/dist/src/utility/serialization/scene/material.js.map +0 -1
  408. package/dist/src/utility/serialization/scene/mesh.js +0 -148
  409. package/dist/src/utility/serialization/scene/mesh.js.map +0 -1
  410. package/dist/src/utility/serialization/scene/misc.js +0 -39
  411. package/dist/src/utility/serialization/scene/misc.js.map +0 -1
  412. package/dist/src/utility/serialization/scene/node.js +0 -451
  413. package/dist/src/utility/serialization/scene/node.js.map +0 -1
  414. package/dist/src/utility/serialization/scene/particle.js +0 -425
  415. package/dist/src/utility/serialization/scene/particle.js.map +0 -1
  416. package/dist/src/utility/serialization/scene/primitive.js +0 -692
  417. package/dist/src/utility/serialization/scene/primitive.js.map +0 -1
  418. package/dist/src/utility/serialization/scene/scene.js +0 -704
  419. package/dist/src/utility/serialization/scene/scene.js.map +0 -1
  420. package/dist/src/utility/serialization/scene/terrain.js +0 -488
  421. package/dist/src/utility/serialization/scene/terrain.js.map +0 -1
  422. package/dist/src/utility/serialization/scene/water.js +0 -465
  423. package/dist/src/utility/serialization/scene/water.js.map +0 -1
  424. package/dist/src/utility/shprojector.js +0 -297
  425. package/dist/src/utility/shprojector.js.map +0 -1
  426. package/dist/src/utility/textures/ggxlut.js +0 -213
  427. package/dist/src/utility/textures/ggxlut.js.map +0 -1
  428. package/dist/src/utility/textures/gradientnoise.js +0 -62
  429. package/dist/src/utility/textures/gradientnoise.js.map +0 -1
  430. package/dist/src/utility/textures/randomnoise.js +0 -41
  431. package/dist/src/utility/textures/randomnoise.js.map +0 -1
  432. package/dist/src/values.js +0 -162
  433. package/dist/src/values.js.map +0 -1
  434. package/dist/utility/blueprint/material/common.js +0 -7
  435. package/dist/utility/blueprint/material/common.js.map +0 -1
  436. package/dist/utility/serialization/blueprint/constants.js +0 -255
  437. package/dist/utility/serialization/blueprint/constants.js.map +0 -1
  438. package/dist/utility/serialization/blueprint/material/constants.js +0 -203
  439. package/dist/utility/serialization/blueprint/material/constants.js.map +0 -1
  440. package/dist/utility/serialization/blueprint/material/texture.js +0 -165
  441. package/dist/utility/serialization/blueprint/material/texture.js.map +0 -1
package/dist/index.d.ts CHANGED
@@ -2229,6 +2229,9 @@ declare class LambertMaterial extends LambertMaterial_base implements Clonable<L
2229
2229
  */
2230
2230
  type IMixinBlinnPhong = {
2231
2231
  shininess: number;
2232
+ scatterWrap: number;
2233
+ scatterWidth: number;
2234
+ scatterColor: Vector4;
2232
2235
  blinnPhongLight(scope: PBInsideFunctionScope, worldPos: PBShaderExp, normal: PBShaderExp, viewVec: PBShaderExp, albedo: PBShaderExp, outRoughness?: PBShaderExp): PBShaderExp;
2233
2236
  } & IMixinLight;
2234
2237
  /**
@@ -4919,7 +4922,11 @@ declare class AssetSkeleton extends NamedObject {
4919
4922
  /** Inverse of the binding matrices of the joints */
4920
4923
  inverseBindMatrices: Matrix4x4[];
4921
4924
  /** Binding pose matrices of the joints */
4922
- bindPoseMatrices: Matrix4x4[];
4925
+ bindPose: {
4926
+ position: Vector3;
4927
+ rotation: Quaternion;
4928
+ scale: Vector3;
4929
+ }[];
4923
4930
  /**
4924
4931
  * Creates an instance of AssetSkeleton
4925
4932
  * @param name - Name of the skeleton
@@ -12092,6 +12099,55 @@ declare class Scene extends Scene_base implements IRenderable {
12092
12099
  protected onDispose(): void;
12093
12100
  }
12094
12101
 
12102
+ /**
12103
+ * Abstract base class for skeleton post-processors.
12104
+ *
12105
+ * Post-processors are applied after the base animation/bind pose layer,
12106
+ * allowing procedural modifications like IK, spring physics, or manual overrides.
12107
+ *
12108
+ * @public
12109
+ */
12110
+ declare abstract class SkeletonModifier {
12111
+ /** Blend weight for this processor [0-1] */
12112
+ protected _weight: number;
12113
+ /** Whether this processor is enabled */
12114
+ protected _enabled: boolean;
12115
+ constructor(weight?: number);
12116
+ /**
12117
+ * Get the blend weight [0-1]
12118
+ */
12119
+ get weight(): number;
12120
+ /**
12121
+ * Set the blend weight [0-1]
12122
+ */
12123
+ set weight(value: number);
12124
+ /**
12125
+ * Get whether this processor is enabled
12126
+ */
12127
+ get enabled(): boolean;
12128
+ /**
12129
+ * Set whether this processor is enabled
12130
+ */
12131
+ set enabled(value: boolean);
12132
+ /**
12133
+ * Apply post-processing to skeleton joints.
12134
+ *
12135
+ * This method is called after the base animation/bind pose has been applied.
12136
+ * Implementations should modify joint transforms and blend with the current state
12137
+ * using the processor's weight.
12138
+ *
12139
+ * @param skeleton - The skeleton to process
12140
+ * @param deltaTime - Time elapsed since last frame (in seconds)
12141
+ */
12142
+ abstract apply(skeleton: Skeleton, deltaTime: number): void;
12143
+ /**
12144
+ * Reset the processor to its initial state.
12145
+ *
12146
+ * Called when the skeleton or animation state changes significantly.
12147
+ */
12148
+ abstract reset(): void;
12149
+ }
12150
+
12095
12151
  /**
12096
12152
  * Skinned bounding box information for a submesh.
12097
12153
  *
@@ -12149,9 +12205,9 @@ declare class Skeleton extends Disposable {
12149
12205
  * @param inverseBindMatrices - Inverse bind matrices for each joint.
12150
12206
  * @param bindPoseMatrices - Bind pose matrices for each joint (model-space).
12151
12207
  */
12152
- constructor(joints: SceneNode[], inverseBindMatrices: Matrix4x4[], bindPoseMatrices: Matrix4x4[], jointTransforms?: {
12153
- scale: Vector3;
12208
+ constructor(joints: SceneNode[], inverseBindMatrices: Matrix4x4[], bindPose: {
12154
12209
  rotation: Quaternion;
12210
+ scale: Vector3;
12155
12211
  position: Vector3;
12156
12212
  }[]);
12157
12213
  set playing(b: boolean);
@@ -12162,6 +12218,24 @@ declare class Skeleton extends Disposable {
12162
12218
  * Each matrix is stored in 4 texels (one row per texel, RGBA = 4 floats).
12163
12219
  */
12164
12220
  get jointTexture(): Texture2D<unknown>;
12221
+ /**
12222
+ * Get joint index by joint node
12223
+ * @param joint - joint node
12224
+ * @returns The index of the joint
12225
+ */
12226
+ getJointIndex(joint: SceneNode): number;
12227
+ /**
12228
+ * Get joint index by joint name
12229
+ * @param jointName - joint name
12230
+ * @returns The index of the joint
12231
+ */
12232
+ getJointIndexByName(jointName: string): number;
12233
+ /**
12234
+ * Get all modifiers attached to this skeleton.
12235
+ *
12236
+ * @public
12237
+ */
12238
+ get modifiers(): SkeletonModifier[];
12165
12239
  /**
12166
12240
  * Dispose GPU resources and references held by the skeleton.
12167
12241
  *
@@ -12375,6 +12449,21 @@ declare class AnimationSet extends Disposable implements IDisposable {
12375
12449
  * @param options - Optional fade-out configuration.
12376
12450
  */
12377
12451
  stopAnimation(name: string, options?: StopAnimationOptions): void;
12452
+ /**
12453
+ * Copy an animation clip from another AnimationSet into this one.
12454
+ *
12455
+ * Prerequisites:
12456
+ * - Both sets must reference skeletons with identical joint names and counts.
12457
+ * - The source clip must exist in `sourceSet`.
12458
+ *
12459
+ * @param sourceSet - The AnimationSet to copy from.
12460
+ * @param animationName - Name of the clip to copy.
12461
+ * @param targetName - Name for the new clip in this set. Defaults to `animationName`.
12462
+ * @param excludeJoint - Optional predicate; joints whose name returns true are excluded from
12463
+ * skeleton structure matching.
12464
+ * @returns The newly created AnimationClip, or null on failure.
12465
+ */
12466
+ copyAnimationFrom(sourceSet: AnimationSet, animationName: string, targetName?: string, excludeJoint?: (jointName: string) => boolean): AnimationClip | null;
12378
12467
  /**
12379
12468
  * Dispose the animation set and release owned resources.
12380
12469
  *
@@ -12875,6 +12964,1313 @@ declare class MorphTargetTrack extends AnimationTrack<MorphState> {
12875
12964
  reset(node: SceneNode): void;
12876
12965
  }
12877
12966
 
12967
+ /**
12968
+ * Represents a joint in an IK chain.
12969
+ *
12970
+ * @public
12971
+ */
12972
+ interface IKJoint {
12973
+ /** The scene node associated with this joint */
12974
+ node: SceneNode;
12975
+ /** Current position in world space (updated during solving) */
12976
+ position: Vector3;
12977
+ /** Original position before solving (for reference) */
12978
+ originalPosition: Vector3;
12979
+ /** Current rotation in world space */
12980
+ rotation: Quaternion;
12981
+ /** Original rotation before solving (for reference) */
12982
+ originalRotation: Quaternion;
12983
+ /** Length of the bone from this joint to the next (0 for end effector) */
12984
+ boneLength: number;
12985
+ /** Previous IK world rotation (for twist continuity across frames) */
12986
+ previousIKRotation?: Quaternion;
12987
+ /** Previous twist angle in radians (for twist smoothing) */
12988
+ previousTwist?: number;
12989
+ }
12990
+
12991
+ /**
12992
+ * Base class for IK constraints.
12993
+ *
12994
+ * Constraints are applied after each FABRIK iteration to enforce
12995
+ * joint limitations (angle limits, pole vectors, etc.).
12996
+ *
12997
+ * @public
12998
+ */
12999
+ declare abstract class IKConstraint {
13000
+ /** The joint index this constraint applies to */
13001
+ protected _jointIndex: number;
13002
+ /**
13003
+ * Create an IK constraint.
13004
+ *
13005
+ * @param jointIndex - Index of the joint in the chain (0 = root)
13006
+ */
13007
+ constructor(jointIndex: number);
13008
+ /**
13009
+ * Get the joint index this constraint applies to.
13010
+ */
13011
+ get jointIndex(): number;
13012
+ /**
13013
+ * Apply the constraint to the joint chain.
13014
+ *
13015
+ * This method modifies joint positions to satisfy the constraint.
13016
+ *
13017
+ * @param joints - Array of all joints in the chain
13018
+ */
13019
+ abstract apply(joints: IKJoint[]): void;
13020
+ }
13021
+ /**
13022
+ * Twist constraint configuration for a joint.
13023
+ *
13024
+ * @public
13025
+ */
13026
+ interface TwistConstraint {
13027
+ /** Minimum twist angle in radians */
13028
+ minTwist: number;
13029
+ /** Maximum twist angle in radians */
13030
+ maxTwist: number;
13031
+ /** Smoothing factor [0-1], 0 = no smoothing, 1 = full smoothing */
13032
+ smoothFactor: number;
13033
+ }
13034
+
13035
+ /**
13036
+ * Represents a chain of joints for IK solving.
13037
+ *
13038
+ * @public
13039
+ */
13040
+ declare class IKChain {
13041
+ /** Array of joints in the chain (root to end effector) */
13042
+ private _joints;
13043
+ /** Total length of the chain */
13044
+ private _totalLength;
13045
+ /** Constraints applied to joints */
13046
+ private _constraints;
13047
+ /**
13048
+ * Create an IK chain from an array of scene nodes.
13049
+ *
13050
+ * @param nodes - Array of scene nodes from root to end effector
13051
+ */
13052
+ constructor(nodes: SceneNode[]);
13053
+ /**
13054
+ * Create an IK chain by traversing from a start node to an end node.
13055
+ *
13056
+ * @remarks
13057
+ * This method walks up the parent chain from the end node until it
13058
+ * reaches the start node, building the joint chain in the process.
13059
+ *
13060
+ * @param startNode - The root joint of the chain
13061
+ * @param endNode - The end effector joint
13062
+ * @returns The created IK chain
13063
+ */
13064
+ static fromNodeHierarchy(startNode: SceneNode, endNode: SceneNode): IKChain;
13065
+ /**
13066
+ * Get all joints in the chain.
13067
+ */
13068
+ get joints(): IKJoint[];
13069
+ /**
13070
+ * Get the root joint (first joint in the chain).
13071
+ */
13072
+ get root(): IKJoint;
13073
+ /**
13074
+ * Get the end effector (last joint in the chain).
13075
+ */
13076
+ get endEffector(): IKJoint;
13077
+ /**
13078
+ * Get the total length of the chain.
13079
+ */
13080
+ get totalLength(): number;
13081
+ /**
13082
+ * Get the number of joints in the chain.
13083
+ */
13084
+ get length(): number;
13085
+ /**
13086
+ * Update joint positions from their scene nodes.
13087
+ */
13088
+ updateFromNodes(): void;
13089
+ /**
13090
+ * Store current positions as original positions.
13091
+ */
13092
+ storeOriginalPositions(): void;
13093
+ /**
13094
+ * Restore joints to their original positions.
13095
+ */
13096
+ restoreOriginalPositions(): void;
13097
+ /**
13098
+ * Add a constraint to a specific joint.
13099
+ *
13100
+ * @param constraint - The constraint to add
13101
+ */
13102
+ addConstraint(constraint: IKConstraint): void;
13103
+ /**
13104
+ * Remove a constraint from the chain.
13105
+ *
13106
+ * @param constraint - The constraint to remove
13107
+ * @returns True if the constraint was found and removed
13108
+ */
13109
+ removeConstraint(constraint: IKConstraint): boolean;
13110
+ /**
13111
+ * Clear all constraints from the chain.
13112
+ */
13113
+ clearConstraints(): void;
13114
+ /**
13115
+ * Get all constraints in the chain.
13116
+ */
13117
+ get constraints(): readonly IKConstraint[];
13118
+ /**
13119
+ * Apply all constraints to the joint chain.
13120
+ */
13121
+ applyConstraints(): void;
13122
+ }
13123
+
13124
+ /**
13125
+ * Base class for IK solvers.
13126
+ *
13127
+ * @public
13128
+ */
13129
+ declare abstract class IKSolver {
13130
+ /** The IK chain to solve */
13131
+ protected _chain: IKChain;
13132
+ /** Maximum number of iterations */
13133
+ protected _maxIterations: number;
13134
+ /** Convergence tolerance (distance threshold) */
13135
+ protected _tolerance: number;
13136
+ /**
13137
+ * Create an IK solver.
13138
+ *
13139
+ * @param chain - The IK chain to solve
13140
+ * @param maxIterations - Maximum number of iterations (default: 10)
13141
+ * @param tolerance - Convergence tolerance in world units (default: 0.001)
13142
+ */
13143
+ constructor(chain: IKChain, maxIterations?: number, tolerance?: number);
13144
+ /**
13145
+ * Get the IK chain.
13146
+ */
13147
+ get chain(): IKChain;
13148
+ /**
13149
+ * Set maximum number of iterations.
13150
+ */
13151
+ setMaxIterations(value: number): void;
13152
+ /**
13153
+ * Get maximum number of iterations.
13154
+ */
13155
+ getMaxIterations(): number;
13156
+ /**
13157
+ * Set convergence tolerance.
13158
+ */
13159
+ setTolerance(value: number): void;
13160
+ /**
13161
+ * Get convergence tolerance.
13162
+ */
13163
+ getTolerance(): number;
13164
+ /**
13165
+ * Solve the IK chain to reach the target position.
13166
+ *
13167
+ * @param target - Target position for the end effector
13168
+ * @returns True if converged, false otherwise
13169
+ */
13170
+ abstract solve(target: Vector3): boolean;
13171
+ /**
13172
+ * Apply the solved positions to the scene nodes as rotations.
13173
+ *
13174
+ * @param weight - Blend weight (0 = original, 1 = full IK)
13175
+ */
13176
+ abstract applyToNodes(weight?: number): void;
13177
+ }
13178
+
13179
+ /**
13180
+ * Skeleton modifier for IK solvers.
13181
+ *
13182
+ * Integrates IK solving into the skeleton post-processing pipeline.
13183
+ * The IK solver is executed each frame and results are blended with the base animation.
13184
+ *
13185
+ * @public
13186
+ */
13187
+ declare class IKModifier<Solver extends IKSolver = IKSolver> extends SkeletonModifier {
13188
+ private _solver;
13189
+ private _target;
13190
+ /**
13191
+ * Create an IK post-processor.
13192
+ *
13193
+ * @param solver - The IK solver to integrate
13194
+ * @param target - Target position for the end effector
13195
+ * @param weight - Blend weight [0-1] (default: 1.0)
13196
+ */
13197
+ constructor(solver: Solver, target: Vector3, weight?: number);
13198
+ /**
13199
+ * Get the IK solver.
13200
+ */
13201
+ get solver(): Solver;
13202
+ /**
13203
+ * Get the current target position.
13204
+ */
13205
+ get target(): Vector3;
13206
+ /**
13207
+ * Set the target position for the end effector.
13208
+ *
13209
+ * @param target - New target position (will be cloned)
13210
+ */
13211
+ setTarget(target: Vector3): void;
13212
+ /**
13213
+ * Apply IK solving to skeleton joints.
13214
+ */
13215
+ apply(_skeleton: Skeleton, _deltaTime: number): void;
13216
+ /**
13217
+ * Reset the IK solver to initial state.
13218
+ */
13219
+ reset(): void;
13220
+ }
13221
+
13222
+ /**
13223
+ * Represents a particle in the spring system
13224
+ *
13225
+ * @public
13226
+ */
13227
+ interface SpringParticle {
13228
+ /** Current position in world space */
13229
+ position: Vector3;
13230
+ /** Previous position for Verlet integration */
13231
+ prevPosition: Vector3;
13232
+ /** Original position for reset */
13233
+ originalPosition: Vector3;
13234
+ /** Original world rotation (for calculating rotation delta) */
13235
+ originalRotation: Quaternion | null;
13236
+ /** Mass of the particle (affects inertia) */
13237
+ mass: number;
13238
+ /** Damping coefficient [0-1] (0 = no damping, 1 = full damping) */
13239
+ damping: number;
13240
+ /** Whether this particle is fixed (anchor point) */
13241
+ fixed: boolean;
13242
+ /** Associated scene node (optional) */
13243
+ node: Nullable<SceneNode>;
13244
+ /** Previous frame position (used to calculate velocity for inertial forces) */
13245
+ lastFramePosition: Vector3;
13246
+ /** Position history for rotation center estimation (for fixed particles) */
13247
+ positionHistory?: Vector3[];
13248
+ }
13249
+ /**
13250
+ * Creates a new spring particle
13251
+ *
13252
+ * @public
13253
+ */
13254
+ declare function createSpringParticle(position: Vector3, options?: {
13255
+ mass?: number;
13256
+ damping?: number;
13257
+ fixed?: boolean;
13258
+ node?: SceneNode;
13259
+ originalRotation?: Quaternion;
13260
+ }): SpringParticle;
13261
+
13262
+ /**
13263
+ * Represents a spring constraint between two particles
13264
+ *
13265
+ * @public
13266
+ */
13267
+ interface SpringConstraint {
13268
+ /** Index of the first particle */
13269
+ particleA: number;
13270
+ /** Index of the second particle */
13271
+ particleB: number;
13272
+ /** Rest length of the spring */
13273
+ restLength: number;
13274
+ /** Stiffness coefficient [0-1] used by Verlet solver (0 = no constraint, 1 = rigid) */
13275
+ stiffness: number;
13276
+ /**
13277
+ * XPBD compliance (inverse stiffness) in m/N.
13278
+ * 0 = perfectly rigid, larger values = softer spring.
13279
+ * Typical ranges: 0 (rigid) ~ 1e-7 (very stiff) ~ 1e-3 (soft cloth) ~ 1e-1 (rubber band).
13280
+ * Only used when solver is 'xpbd'.
13281
+ */
13282
+ compliance: number;
13283
+ /**
13284
+ * XPBD Lagrange multiplier accumulator, reset to 0 at the start of each time step.
13285
+ * Managed internally by the solver — do not set manually.
13286
+ */
13287
+ lambda: number;
13288
+ }
13289
+ /**
13290
+ * Creates a new spring constraint
13291
+ *
13292
+ * @public
13293
+ */
13294
+ declare function createSpringConstraint(particleA: number, particleB: number, restLength: number, stiffness?: number, compliance?: number): SpringConstraint;
13295
+
13296
+ /**
13297
+ * Manages a chain of spring particles and constraints
13298
+ *
13299
+ * @public
13300
+ */
13301
+ declare class SpringChain {
13302
+ /** Array of particles in the chain */
13303
+ particles: SpringParticle[];
13304
+ /** Array of constraints between particles */
13305
+ constraints: SpringConstraint[];
13306
+ constructor();
13307
+ /**
13308
+ * Creates a spring chain from a bone hierarchy
13309
+ * @param startNode - Root node of the bone chain
13310
+ * @param endNode - End node of the bone chain (optional, if null uses all descendants)
13311
+ * @param options - Additional options
13312
+ * @returns A new SpringChain instance
13313
+ */
13314
+ static fromBoneChain(startNode: SceneNode, endNode?: SceneNode | null, options?: {
13315
+ mass?: number;
13316
+ damping?: number;
13317
+ stiffness?: number;
13318
+ }): SpringChain;
13319
+ /**
13320
+ * Adds a particle to the chain
13321
+ * @param particle - The particle to add
13322
+ * @returns The index of the added particle
13323
+ */
13324
+ addParticle(particle: SpringParticle): number;
13325
+ /**
13326
+ * Adds a constraint to the chain
13327
+ * @param constraint - The constraint to add
13328
+ */
13329
+ addConstraint(constraint: SpringConstraint): void;
13330
+ /**
13331
+ * Adds cross constraints between particles for cloth-like behavior
13332
+ * @param stiffness - Stiffness of the cross constraints
13333
+ * @param skipDistance - Distance between particles to connect (default: 2)
13334
+ */
13335
+ addCrossConstraints(stiffness?: number, skipDistance?: number): void;
13336
+ /**
13337
+ * Resets all particles to their original positions
13338
+ */
13339
+ reset(): void;
13340
+ }
13341
+
13342
+ /**
13343
+ * Base interface for spring collision shapes
13344
+ *
13345
+ * @public
13346
+ */
13347
+ interface SpringCollider {
13348
+ /** Type of collider */
13349
+ type: 'sphere' | 'capsule' | 'plane';
13350
+ /** Associated scene node (optional, for dynamic colliders) */
13351
+ node?: Nullable<SceneNode>;
13352
+ /** Whether this collider is enabled */
13353
+ enabled: boolean;
13354
+ }
13355
+ /**
13356
+ * Sphere collider for spring collision detection
13357
+ *
13358
+ * @public
13359
+ */
13360
+ interface SphereCollider extends SpringCollider {
13361
+ type: 'sphere';
13362
+ /** Center position in world space */
13363
+ center: Vector3;
13364
+ /** Radius of the sphere */
13365
+ radius: number;
13366
+ /** Local offset from node (if node is set) */
13367
+ localOffset?: Vector3;
13368
+ }
13369
+ /**
13370
+ * Capsule collider for spring collision detection
13371
+ *
13372
+ * @public
13373
+ */
13374
+ interface CapsuleCollider extends SpringCollider {
13375
+ type: 'capsule';
13376
+ /** Start point of the capsule axis in world space */
13377
+ start: Vector3;
13378
+ /** End point of the capsule axis in world space */
13379
+ end: Vector3;
13380
+ /** Radius of the capsule */
13381
+ radius: number;
13382
+ /** Local start offset from node (if node is set) */
13383
+ localStartOffset?: Vector3;
13384
+ /** Local end offset from node (if node is set) */
13385
+ localEndOffset?: Vector3;
13386
+ }
13387
+ /**
13388
+ * Plane collider for spring collision detection
13389
+ *
13390
+ * @public
13391
+ */
13392
+ interface PlaneCollider extends SpringCollider {
13393
+ type: 'plane';
13394
+ /** Point on the plane in world space */
13395
+ point: Vector3;
13396
+ /** Normal vector of the plane (should be normalized) */
13397
+ normal: Vector3;
13398
+ /** Local point offset from node (if node is set) */
13399
+ localPointOffset?: Vector3;
13400
+ /** Local normal direction (if node is set) */
13401
+ localNormal?: Vector3;
13402
+ }
13403
+ /**
13404
+ * Creates a sphere collider
13405
+ * @param centerOrOffset - Center position in world space, or local offset if node is provided
13406
+ * @param radius - Radius of the sphere
13407
+ * @param node - Optional scene node to attach to (if provided, centerOrOffset is treated as local offset)
13408
+ *
13409
+ * @public
13410
+ */
13411
+ declare function createSphereCollider(centerOrOffset: Vector3, radius: number, node?: SceneNode): SphereCollider;
13412
+ /**
13413
+ * Creates a capsule collider
13414
+ * @param startOrOffset - Start point in world space, or local offset if node is provided
13415
+ * @param endOrOffset - End point in world space, or local offset if node is provided
13416
+ * @param radius - Radius of the capsule
13417
+ * @param node - Optional scene node to attach to (if provided, offsets are treated as local)
13418
+ *
13419
+ * @public
13420
+ */
13421
+ declare function createCapsuleCollider(startOrOffset: Vector3, endOrOffset: Vector3, radius: number, node?: SceneNode): CapsuleCollider;
13422
+ /**
13423
+ * Creates a plane collider
13424
+ * @param pointOrOffset - Point on plane in world space, or local offset if node is provided
13425
+ * @param normal - Normal vector (will be normalized)
13426
+ * @param node - Optional scene node to attach to (if provided, pointOrOffset is treated as local offset)
13427
+ *
13428
+ * @public
13429
+ */
13430
+ declare function createPlaneCollider(pointOrOffset: Vector3, normal: Vector3, node?: SceneNode): PlaneCollider;
13431
+ /**
13432
+ * Resolves collision between a particle and a sphere collider
13433
+ * @returns true if collision occurred
13434
+ *
13435
+ * @public
13436
+ */
13437
+ declare function resolveSphereCollision(particlePos: Vector3, collider: SphereCollider): boolean;
13438
+ /**
13439
+ * Resolves collision between a particle and a capsule collider
13440
+ * @returns true if collision occurred
13441
+ *
13442
+ * @public
13443
+ */
13444
+ declare function resolveCapsuleCollision(particlePos: Vector3, collider: CapsuleCollider): boolean;
13445
+ /**
13446
+ * Resolves collision between a particle and a plane collider
13447
+ * @returns true if collision occurred
13448
+ *
13449
+ * @public
13450
+ */
13451
+ declare function resolvePlaneCollision(particlePos: Vector3, collider: PlaneCollider): boolean;
13452
+ /**
13453
+ * Updates collider position from its associated node
13454
+ *
13455
+ * @public
13456
+ */
13457
+ declare function updateColliderFromNode(collider: SpringCollider): void;
13458
+
13459
+ /**
13460
+ * Options for creating a SpringSystem
13461
+ *
13462
+ * @public
13463
+ */
13464
+ interface SpringSystemOptions {
13465
+ /** Number of constraint solver iterations (default: 5) */
13466
+ iterations?: number;
13467
+ /** Gravity force vector (default: (0, -9.8, 0)) */
13468
+ gravity?: Vector3;
13469
+ /** Wind force vector (default: (0, 0, 0)) */
13470
+ wind?: Vector3;
13471
+ /** Enable inertial forces (centrifugal/Coriolis) when root rotates (default: true) */
13472
+ enableInertialForces?: boolean;
13473
+ /** Centrifugal force multiplier (default: 1.0) */
13474
+ centrifugalScale?: number;
13475
+ /** Coriolis force multiplier (default: 1.0) */
13476
+ coriolisScale?: number;
13477
+ /**
13478
+ * Constraint solver type (default: 'verlet').
13479
+ * - 'verlet': Classic Verlet integration with iterative position correction.
13480
+ * stiffness [0-1] controls correction strength per iteration.
13481
+ * - 'xpbd': Extended Position-Based Dynamics (Müller et al. 2020).
13482
+ * Uses compliance (inverse stiffness in m/N) for physically correct,
13483
+ * iteration-count-independent constraint solving.
13484
+ */
13485
+ solver?: 'verlet' | 'xpbd';
13486
+ }
13487
+ /**
13488
+ * Physics engine for spring-based particle simulation
13489
+ * Uses Verlet integration and iterative constraint solving
13490
+ *
13491
+ * @public
13492
+ */
13493
+ declare class SpringSystem {
13494
+ private _chain;
13495
+ private _iterations;
13496
+ private _gravity;
13497
+ private _wind;
13498
+ private _enableInertialForces;
13499
+ private _centrifugalScale;
13500
+ private _coriolisScale;
13501
+ private _colliders;
13502
+ private _solver;
13503
+ constructor(chain: SpringChain, options?: SpringSystemOptions);
13504
+ /**
13505
+ * Updates the physics simulation
13506
+ * @param deltaTime - Time step in seconds
13507
+ */
13508
+ update(deltaTime: number): void;
13509
+ /**
13510
+ * Updates fixed particles to match their scene node positions
13511
+ */
13512
+ private updateFixedParticles;
13513
+ /**
13514
+ * Calculates global rotation parameters from fixed particle movements
13515
+ * Uses position history to estimate rotation center
13516
+ */
13517
+ private calculateGlobalRotation;
13518
+ /**
13519
+ * Estimates rotation center from a single particle's position history
13520
+ * Uses circular motion fitting
13521
+ */
13522
+ private estimateRotationCenterFromHistory;
13523
+ /**
13524
+ * Calculates the center of a circle passing through 3 points
13525
+ * Uses perpendicular bisector method
13526
+ */
13527
+ private calculateCircleCenter;
13528
+ /**
13529
+ * Calculates inertial acceleration for a particle in a rotating reference frame
13530
+ */
13531
+ private calculateInertialAcceleration;
13532
+ /**
13533
+ * Solves a single spring constraint using XPBD (Extended Position-Based Dynamics).
13534
+ *
13535
+ * Reference: Müller et al., "Detailed Rigid Body Simulation with Extended Position Based Dynamics", 2020.
13536
+ *
13537
+ * The XPBD correction for a distance constraint C(x) = |x_b - x_a| - L is:
13538
+ * α̃ = compliance / dt² (scaled compliance)
13539
+ * Δλ = (-C - α̃·λ) / (w_a + w_b + α̃)
13540
+ * λ += Δλ
13541
+ * Δx_a = -w_a · Δλ · n̂
13542
+ * Δx_b = +w_b · Δλ · n̂
13543
+ * where w = 1/mass (0 for fixed particles), n̂ = unit vector from a to b.
13544
+ */
13545
+ private solveConstraintXPBD;
13546
+ /**
13547
+ * Solves a single spring constraint (Verlet / PBD)
13548
+ */
13549
+ private solveConstraint;
13550
+ /**
13551
+ * Solves collisions for all particles
13552
+ */
13553
+ private solveCollisions;
13554
+ /**
13555
+ * Applies simulation results to scene nodes
13556
+ * @param weight - Blend weight [0-1] (default: 1.0)
13557
+ */
13558
+ applyToNodes(weight?: number): void;
13559
+ /**
13560
+ * Resets the simulation to initial state
13561
+ */
13562
+ reset(): void;
13563
+ /**
13564
+ * Gets the spring chain
13565
+ */
13566
+ get chain(): SpringChain;
13567
+ /**
13568
+ * Gets the current gravity
13569
+ */
13570
+ get gravity(): Vector3;
13571
+ set gravity(gravity: Vector3);
13572
+ /**
13573
+ * Gets the current wind
13574
+ */
13575
+ get wind(): Vector3;
13576
+ set wind(wind: Vector3);
13577
+ /**
13578
+ * Gets the number of iterations
13579
+ */
13580
+ get iterations(): number;
13581
+ set iterations(count: number);
13582
+ /**
13583
+ * Gets whether inertial forces are enabled
13584
+ */
13585
+ get enableInertialForces(): boolean;
13586
+ set enableInertialForces(enabled: boolean);
13587
+ /**
13588
+ * Gets the centrifugal force scale
13589
+ */
13590
+ get centrifugalScale(): number;
13591
+ set centrifugalScale(scale: number);
13592
+ /**
13593
+ * Gets the Coriolis force scale
13594
+ */
13595
+ get coriolisScale(): number;
13596
+ /**
13597
+ * Sets the Coriolis force scale
13598
+ */
13599
+ set coriolisScale(scale: number);
13600
+ /**
13601
+ * Gets the constraint solver type
13602
+ */
13603
+ get solver(): 'verlet' | 'xpbd';
13604
+ /**
13605
+ * Sets the constraint solver type.
13606
+ * Switching to 'xpbd' resets all Lagrange multipliers.
13607
+ */
13608
+ set solver(type: 'verlet' | 'xpbd');
13609
+ /**
13610
+ * Adds a collider to the system
13611
+ */
13612
+ addCollider(collider: SpringCollider): void;
13613
+ /**
13614
+ * Removes a collider from the system
13615
+ */
13616
+ removeCollider(collider: SpringCollider): boolean;
13617
+ /**
13618
+ * Clears all colliders
13619
+ */
13620
+ clearColliders(): void;
13621
+ /**
13622
+ * Gets all colliders
13623
+ */
13624
+ get colliders(): SpringCollider[];
13625
+ }
13626
+
13627
+ /**
13628
+ * Post-processor wrapper for spring physics systems.
13629
+ *
13630
+ * Integrates spring-based physics simulation into the skeleton post-processing pipeline.
13631
+ * The spring system is updated each frame and results are blended with the base animation.
13632
+ *
13633
+ * @public
13634
+ */
13635
+ declare class SpringModifier extends SkeletonModifier {
13636
+ private _springSystem;
13637
+ /**
13638
+ * Create a spring post-processor.
13639
+ *
13640
+ * @param springSystem - The spring system to integrate
13641
+ * @param weight - Blend weight [0-1] (default: 1.0)
13642
+ */
13643
+ constructor(springSystem: SpringSystem, weight?: number);
13644
+ /**
13645
+ * Get the spring system.
13646
+ */
13647
+ get springSystem(): SpringSystem;
13648
+ /**
13649
+ * Apply spring physics to skeleton joints.
13650
+ */
13651
+ apply(_skeleton: Skeleton, deltaTime: number): void;
13652
+ /**
13653
+ * Reset the spring system to initial state.
13654
+ */
13655
+ reset(): void;
13656
+ }
13657
+
13658
+ /**
13659
+ * FABRIK (Forward And Backward Reaching Inverse Kinematics) solver.
13660
+ *
13661
+ * @remarks
13662
+ * FABRIK is an iterative IK algorithm that alternates between:
13663
+ * 1. Forward pass: Move from end effector to root, pulling joints toward target
13664
+ * 2. Backward pass: Move from root to end effector, restoring root position
13665
+ *
13666
+ * Supports multiple pole vectors to control the bending direction of different joints.
13667
+ *
13668
+ * @public
13669
+ */
13670
+ declare class FABRIKSolver extends IKSolver {
13671
+ /** Map of joint index to pole vector configuration */
13672
+ private _poleVectors;
13673
+ /** Twist constraints for each joint (indexed by joint index) */
13674
+ private _twistConstraints;
13675
+ /**
13676
+ * Create a FABRIK solver.
13677
+ *
13678
+ * @param chain - The IK chain to solve
13679
+ * @param maxIterations - Maximum number of iterations (default: 15)
13680
+ * @param tolerance - Convergence tolerance in world units (default: 0.001)
13681
+ */
13682
+ constructor(chain: IKChain, maxIterations?: number, tolerance?: number);
13683
+ /**
13684
+ * Set twist constraint for a specific joint.
13685
+ *
13686
+ * @param jointIndex - Index of the joint
13687
+ * @param minTwist - Minimum twist angle in radians
13688
+ * @param maxTwist - Maximum twist angle in radians
13689
+ * @param smoothFactor - Smoothing factor [0-1] (default: 0.3)
13690
+ */
13691
+ setTwistConstraint(jointIndex: number, minTwist: number, maxTwist: number, smoothFactor?: number): void;
13692
+ /**
13693
+ * Get twist constraint for a specific joint.
13694
+ *
13695
+ * @param jointIndex - Index of the joint
13696
+ * @returns Twist constraint or undefined if not set
13697
+ */
13698
+ getTwistConstraint(jointIndex: number): TwistConstraint | undefined;
13699
+ /**
13700
+ * Remove twist constraint for a specific joint.
13701
+ *
13702
+ * @param jointIndex - Index of the joint
13703
+ * @returns True if a constraint was removed
13704
+ */
13705
+ removeTwistConstraint(jointIndex: number): boolean;
13706
+ /**
13707
+ * Clear all twist constraints.
13708
+ */
13709
+ clearTwistConstraints(): void;
13710
+ /**
13711
+ * Set pole vector for a specific joint.
13712
+ *
13713
+ * @param jointIndex - Index of the joint to apply pole vector to
13714
+ * @param poleVector - Pole vector position in world space
13715
+ * @param weight - Weight of the pole vector constraint (0-1, default: 1)
13716
+ */
13717
+ setPoleVector(jointIndex: number, poleVector: Vector3, weight?: number): void;
13718
+ /**
13719
+ * Remove pole vector for a specific joint.
13720
+ *
13721
+ * @param jointIndex - Index of the joint to remove pole vector from
13722
+ * @returns True if a pole vector was removed, false if none existed
13723
+ */
13724
+ removePoleVector(jointIndex: number): boolean;
13725
+ /**
13726
+ * Clear all pole vectors.
13727
+ */
13728
+ clearPoleVectors(): void;
13729
+ /**
13730
+ * Get pole vector configuration for a specific joint.
13731
+ *
13732
+ * @param jointIndex - Index of the joint
13733
+ * @returns Pole vector configuration or undefined if not set
13734
+ */
13735
+ getPoleVector(jointIndex: number): {
13736
+ position: Vector3;
13737
+ weight: number;
13738
+ } | undefined;
13739
+ /**
13740
+ * Check if a joint has a pole vector.
13741
+ *
13742
+ * @param jointIndex - Index of the joint
13743
+ * @returns True if the joint has a pole vector
13744
+ */
13745
+ hasPoleVector(jointIndex: number): boolean;
13746
+ /**
13747
+ * Solve the IK chain to reach the target position using FABRIK algorithm.
13748
+ *
13749
+ * @param target - Target position for the end effector
13750
+ * @returns True if converged within tolerance, false otherwise
13751
+ */
13752
+ solve(target: Vector3): boolean;
13753
+ /**
13754
+ * Apply the solved joint positions to scene nodes as rotations.
13755
+ *
13756
+ * @param weight - Blend weight (0 = original, 1 = full IK, default: 1)
13757
+ */
13758
+ applyToNodes(weight?: number): void;
13759
+ /**
13760
+ * Forward pass: move from end effector toward root.
13761
+ * Each joint is pulled toward its child, maintaining bone length.
13762
+ * Constraints are applied immediately after each joint adjustment.
13763
+ *
13764
+ * @param target - Target position for end effector
13765
+ */
13766
+ private _forwardPass;
13767
+ /**
13768
+ * Backward pass: move from root toward end effector.
13769
+ * Each joint is pulled toward its parent, maintaining bone length.
13770
+ * Constraints are applied immediately after each joint adjustment.
13771
+ *
13772
+ * @param rootPos - Original root position to restore
13773
+ */
13774
+ private _backwardPass;
13775
+ /**
13776
+ * Apply constraints for a specific joint.
13777
+ * This is called during the FABRIK passes to integrate constraints into the algorithm.
13778
+ *
13779
+ * @param jointIndex - Index of the joint to apply constraints to
13780
+ */
13781
+ private _applyConstraintsForJoint;
13782
+ /**
13783
+ * Apply pole vector twist to a specific joint.
13784
+ *
13785
+ * @remarks
13786
+ * This method adjusts the joint position to align with the pole vector.
13787
+ * It uses the same algorithm as IKPoleVectorConstraint but is integrated
13788
+ * into the solver for better performance and control.
13789
+ *
13790
+ * @param jointIndex - Index of the pole joint
13791
+ * @param poleVector - Pole vector position in world space
13792
+ * @param weight - Weight of the pole vector constraint (0-1)
13793
+ */
13794
+ private _applyPoleVectorTwist;
13795
+ /**
13796
+ * Stretch the chain toward an unreachable target.
13797
+ * All joints are aligned in a straight line toward the target.
13798
+ *
13799
+ * @param target - Unreachable target position
13800
+ */
13801
+ private _stretchToward;
13802
+ }
13803
+
13804
+ /**
13805
+ * Two Bone IK solver for chains with exactly 3 joints (2 bones).
13806
+ *
13807
+ * @remarks
13808
+ * This solver uses an analytical solution specifically optimized for
13809
+ * two-bone chains like arms (shoulder-elbow-wrist) or legs (hip-knee-ankle).
13810
+ * It's faster and more stable than iterative methods like FABRIK for this case.
13811
+ *
13812
+ * The solver supports an optional pole vector to control the bending direction
13813
+ * of the middle joint (elbow/knee).
13814
+ *
13815
+ * @public
13816
+ */
13817
+ declare class TwoBoneIKSolver extends IKSolver {
13818
+ /** Optional pole vector position in world space */
13819
+ private _poleVector;
13820
+ /** Weight of the pole vector constraint (0-1) */
13821
+ private _poleWeight;
13822
+ /** Twist constraints for each joint (indexed by joint index) */
13823
+ private _twistConstraints;
13824
+ /**
13825
+ * Create a Two Bone IK solver.
13826
+ *
13827
+ * @param chain - The IK chain to solve (must have exactly 3 joints)
13828
+ * @param poleVector - Optional pole vector position in world space
13829
+ * @param poleWeight - Weight of the pole vector constraint (0-1, default: 1)
13830
+ */
13831
+ constructor(chain: IKChain, poleVector?: Vector3 | null, poleWeight?: number);
13832
+ /**
13833
+ * Set twist constraint for a specific joint.
13834
+ *
13835
+ * @param jointIndex - Index of the joint (0 = root, 1 = middle)
13836
+ * @param minTwist - Minimum twist angle in radians
13837
+ * @param maxTwist - Maximum twist angle in radians
13838
+ * @param smoothFactor - Smoothing factor [0-1] (default: 0.3)
13839
+ */
13840
+ setTwistConstraint(jointIndex: number, minTwist: number, maxTwist: number, smoothFactor?: number): void;
13841
+ /**
13842
+ * Get twist constraint for a specific joint.
13843
+ *
13844
+ * @param jointIndex - Index of the joint
13845
+ * @returns Twist constraint or undefined if not set
13846
+ */
13847
+ getTwistConstraint(jointIndex: number): TwistConstraint | undefined;
13848
+ /**
13849
+ * Remove twist constraint for a specific joint.
13850
+ *
13851
+ * @param jointIndex - Index of the joint
13852
+ * @returns True if a constraint was removed
13853
+ */
13854
+ removeTwistConstraint(jointIndex: number): boolean;
13855
+ /**
13856
+ * Clear all twist constraints.
13857
+ */
13858
+ clearTwistConstraints(): void;
13859
+ /**
13860
+ * Get the pole vector position.
13861
+ */
13862
+ get poleVector(): Vector3 | null;
13863
+ /**
13864
+ * Set the pole vector position.
13865
+ */
13866
+ set poleVector(value: Vector3 | null);
13867
+ /**
13868
+ * Get the pole vector weight.
13869
+ */
13870
+ get poleWeight(): number;
13871
+ /**
13872
+ * Set the pole vector weight (0-1).
13873
+ */
13874
+ set poleWeight(value: number);
13875
+ /**
13876
+ * Solve the IK chain to reach the target position using Two Bone IK algorithm.
13877
+ *
13878
+ * @param target - Target position for the end effector
13879
+ * @returns True if the target is reachable, false if stretched to maximum
13880
+ */
13881
+ solve(target: Vector3): boolean;
13882
+ /**
13883
+ * Apply all constraints to the joint chain.
13884
+ * After applying constraints, we need to restore bone lengths.
13885
+ */
13886
+ private _applyConstraints;
13887
+ /**
13888
+ * Restore bone lengths after constraints have been applied.
13889
+ * This ensures that the chain maintains correct bone lengths.
13890
+ */
13891
+ private _restoreBoneLengths;
13892
+ /**
13893
+ * Apply the solved joint positions to scene nodes as rotations.
13894
+ *
13895
+ * @param weight - Blend weight (0 = original, 1 = full IK, default: 1)
13896
+ */
13897
+ applyToNodes(weight?: number): void;
13898
+ /**
13899
+ * Get a default bend normal when no pole vector is specified.
13900
+ * This tries to find a reasonable perpendicular direction.
13901
+ *
13902
+ * @param rootToTarget - Direction from root to target
13903
+ * @returns A normalized perpendicular vector
13904
+ */
13905
+ private _getDefaultBendNormal;
13906
+ }
13907
+
13908
+ /**
13909
+ * CCD (Cyclic Coordinate Descent) IK solver.
13910
+ *
13911
+ * @remarks
13912
+ * CCD is an iterative IK algorithm that works by:
13913
+ * 1. Starting from the joint closest to the end effector
13914
+ * 2. Rotating each joint to point the end effector toward the target
13915
+ * 3. Moving backward through the chain to the root
13916
+ * 4. Repeating until convergence or max iterations
13917
+ *
13918
+ * CCD is generally faster than FABRIK and works well for chains of any length.
13919
+ * It's particularly good for tentacles, tails, and other flexible chains.
13920
+ *
13921
+ * Supports multiple pole vectors to control the bending direction of different joints.
13922
+ *
13923
+ * @public
13924
+ */
13925
+ declare class CCDSolver extends IKSolver {
13926
+ /** Map of joint index to pole vector configuration */
13927
+ private _poleVectors;
13928
+ /** Twist constraints for each joint (indexed by joint index) */
13929
+ private _twistConstraints;
13930
+ /**
13931
+ * Create a CCD solver.
13932
+ *
13933
+ * @param chain - The IK chain to solve
13934
+ * @param maxIterations - Maximum number of iterations (default: 10)
13935
+ * @param tolerance - Convergence tolerance in world units (default: 0.001)
13936
+ */
13937
+ constructor(chain: IKChain, maxIterations?: number, tolerance?: number);
13938
+ /**
13939
+ * Set twist constraint for a specific joint.
13940
+ *
13941
+ * @param jointIndex - Index of the joint
13942
+ * @param minTwist - Minimum twist angle in radians
13943
+ * @param maxTwist - Maximum twist angle in radians
13944
+ * @param smoothFactor - Smoothing factor [0-1] (default: 0.3)
13945
+ */
13946
+ setTwistConstraint(jointIndex: number, minTwist: number, maxTwist: number, smoothFactor?: number): void;
13947
+ /**
13948
+ * Get twist constraint for a specific joint.
13949
+ *
13950
+ * @param jointIndex - Index of the joint
13951
+ * @returns Twist constraint or undefined if not set
13952
+ */
13953
+ getTwistConstraint(jointIndex: number): TwistConstraint | undefined;
13954
+ /**
13955
+ * Remove twist constraint for a specific joint.
13956
+ *
13957
+ * @param jointIndex - Index of the joint
13958
+ * @returns True if a constraint was removed
13959
+ */
13960
+ removeTwistConstraint(jointIndex: number): boolean;
13961
+ /**
13962
+ * Clear all twist constraints.
13963
+ */
13964
+ clearTwistConstraints(): void;
13965
+ /**
13966
+ * Set pole vector for a specific joint.
13967
+ *
13968
+ * @param jointIndex - Index of the joint to apply pole vector to
13969
+ * @param poleVector - Pole vector position in world space
13970
+ * @param weight - Weight of the pole vector constraint (0-1, default: 1)
13971
+ */
13972
+ setPoleVector(jointIndex: number, poleVector: Vector3, weight?: number): void;
13973
+ /**
13974
+ * Remove pole vector for a specific joint.
13975
+ *
13976
+ * @param jointIndex - Index of the joint to remove pole vector from
13977
+ * @returns True if a pole vector was removed, false if none existed
13978
+ */
13979
+ removePoleVector(jointIndex: number): boolean;
13980
+ /**
13981
+ * Clear all pole vectors.
13982
+ */
13983
+ clearPoleVectors(): void;
13984
+ /**
13985
+ * Get pole vector configuration for a specific joint.
13986
+ *
13987
+ * @param jointIndex - Index of the joint
13988
+ * @returns Pole vector configuration or undefined if not set
13989
+ */
13990
+ getPoleVector(jointIndex: number): {
13991
+ position: Vector3;
13992
+ weight: number;
13993
+ } | undefined;
13994
+ /**
13995
+ * Check if a joint has a pole vector.
13996
+ *
13997
+ * @param jointIndex - Index of the joint
13998
+ * @returns True if the joint has a pole vector
13999
+ */
14000
+ hasPoleVector(jointIndex: number): boolean;
14001
+ /**
14002
+ * Solve the IK chain to reach the target position using CCD algorithm.
14003
+ *
14004
+ * @param target - Target position for the end effector
14005
+ * @returns True if converged within tolerance, false otherwise
14006
+ */
14007
+ solve(target: Vector3): boolean;
14008
+ /**
14009
+ * Rotate all joints from the given index to the end effector around a pivot point.
14010
+ *
14011
+ * @param startIndex - Index of the joint to start rotating from
14012
+ * @param rotation - Rotation to apply
14013
+ * @param pivot - Pivot point for rotation (position of the joint being adjusted)
14014
+ */
14015
+ private _rotateJointsFromIndex;
14016
+ /**
14017
+ * Apply all pole vector constraints.
14018
+ *
14019
+ * @remarks
14020
+ * This method applies all configured pole vectors to their respective joints.
14021
+ * Pole vectors are applied in reverse order (from end to root) to minimize
14022
+ * interference between multiple pole vectors. This ensures that pole vectors
14023
+ * closer to the end effector are not affected by pole vectors closer to the root.
14024
+ */
14025
+ private _applyAllPoleVectors;
14026
+ /**
14027
+ * Apply pole vector twist to a specific joint.
14028
+ *
14029
+ * @remarks
14030
+ * This method is called after the base CCD rotation has been applied.
14031
+ * It adds an additional twist rotation around the joint-to-end axis
14032
+ * to make the next joint (child) bend toward the pole vector.
14033
+ *
14034
+ * @param jointIndex - Index of the pole joint
14035
+ * @param poleVector - Pole vector position in world space
14036
+ * @param weight - Weight of the pole vector constraint (0-1)
14037
+ */
14038
+ private _applyPoleVectorTwist;
14039
+ /**
14040
+ * Apply constraints for a specific joint.
14041
+ *
14042
+ * @param jointIndex - Index of the joint to apply constraints to
14043
+ */
14044
+ private _applyConstraintsForJoint;
14045
+ /**
14046
+ * Apply the solved joint positions to scene nodes as rotations.
14047
+ *
14048
+ * @param weight - Blend weight (0 = original, 1 = full IK, default: 1)
14049
+ */
14050
+ applyToNodes(weight?: number): void;
14051
+ }
14052
+
14053
+ /**
14054
+ * Angle constraint for IK joints.
14055
+ *
14056
+ * Limits the angle between the bone from parent to this joint
14057
+ * and the bone from this joint to child.
14058
+ *
14059
+ * @remarks
14060
+ * This is useful for joints like elbows and knees that have
14061
+ * limited range of motion.
14062
+ *
14063
+ * @public
14064
+ */
14065
+ declare class IKAngleConstraint extends IKConstraint {
14066
+ /** Minimum angle in degrees */
14067
+ private _minAngle;
14068
+ /** Maximum angle in degrees */
14069
+ private _maxAngle;
14070
+ /**
14071
+ * Create an angle constraint.
14072
+ *
14073
+ * @param jointIndex - Index of the joint in the chain
14074
+ * @param minAngle - Minimum angle in degrees (0 = straight)
14075
+ * @param maxAngle - Maximum angle in degrees (180 = fully bent)
14076
+ */
14077
+ constructor(jointIndex: number, minAngle: number, maxAngle: number);
14078
+ /**
14079
+ * Get the minimum angle in degrees.
14080
+ */
14081
+ get minAngle(): number;
14082
+ /**
14083
+ * Set the minimum angle in degrees.
14084
+ */
14085
+ set minAngle(value: number);
14086
+ /**
14087
+ * Get the maximum angle in degrees.
14088
+ */
14089
+ get maxAngle(): number;
14090
+ /**
14091
+ * Set the maximum angle in degrees.
14092
+ */
14093
+ set maxAngle(value: number);
14094
+ /**
14095
+ * Apply the angle constraint to limit joint bending.
14096
+ */
14097
+ apply(joints: IKJoint[]): void;
14098
+ /**
14099
+ * Apply constraint to end effector joint.
14100
+ */
14101
+ private _applyEndEffectorConstraint;
14102
+ /**
14103
+ * Apply constraint to regular joint.
14104
+ */
14105
+ private _applyRegularConstraint;
14106
+ /**
14107
+ * Adjust joint angle by rotating the outgoing bone.
14108
+ */
14109
+ private _adjustJointAngle;
14110
+ }
14111
+
14112
+ /**
14113
+ * Constraint between particles in different chains
14114
+ *
14115
+ * @public
14116
+ */
14117
+ interface InterChainConstraint {
14118
+ /** Index of the first chain */
14119
+ chainAIndex: number;
14120
+ /** Index of the second chain */
14121
+ chainBIndex: number;
14122
+ /** Index of particle in chain A */
14123
+ particleAIndex: number;
14124
+ /** Index of particle in chain B */
14125
+ particleBIndex: number;
14126
+ /** Desired distance between particles */
14127
+ restLength: number;
14128
+ /** Constraint strength [0-1], used by Verlet solver */
14129
+ stiffness: number;
14130
+ /**
14131
+ * XPBD compliance (inverse stiffness) in m/N.
14132
+ * Only used when solver is 'xpbd'.
14133
+ */
14134
+ compliance: number;
14135
+ /** XPBD Lagrange multiplier accumulator, reset each time step. */
14136
+ lambda: number;
14137
+ }
14138
+ /**
14139
+ * Options for creating a MultiChainSpringSystem
14140
+ *
14141
+ * @public
14142
+ */
14143
+ interface MultiChainSpringSystemOptions {
14144
+ /** Number of constraint solver iterations (default: 5) */
14145
+ iterations?: number;
14146
+ /** Gravity force vector (default: (0, -9.8, 0)) */
14147
+ gravity?: Vector3;
14148
+ /** Wind force vector (default: (0, 0, 0)) */
14149
+ wind?: Vector3;
14150
+ /** Enable inertial forces (centrifugal/Coriolis) when root rotates (default: true) */
14151
+ enableInertialForces?: boolean;
14152
+ /** Centrifugal force multiplier (default: 1.0) */
14153
+ centrifugalScale?: number;
14154
+ /** Coriolis force multiplier (default: 1.0) */
14155
+ coriolisScale?: number;
14156
+ /**
14157
+ * Constraint solver type (default: 'verlet').
14158
+ * - 'verlet': stiffness [0-1] controls per-iteration correction strength.
14159
+ * - 'xpbd': compliance (m/N) gives physically correct, iteration-independent results.
14160
+ */
14161
+ solver?: 'verlet' | 'xpbd';
14162
+ }
14163
+ /**
14164
+ * Physics engine for multiple spring chains with inter-chain constraints
14165
+ * Suitable for cloth, skirts, capes, and other multi-chain simulations
14166
+ *
14167
+ * @public
14168
+ */
14169
+ declare class MultiChainSpringSystem {
14170
+ private _chains;
14171
+ private _interChainConstraints;
14172
+ private _iterations;
14173
+ private _gravity;
14174
+ private _wind;
14175
+ private _enableInertialForces;
14176
+ private _centrifugalScale;
14177
+ private _coriolisScale;
14178
+ private _solver;
14179
+ constructor(options?: MultiChainSpringSystemOptions);
14180
+ /**
14181
+ * Adds a spring chain to the system
14182
+ * @param chain - The chain to add
14183
+ * @returns The index of the added chain
14184
+ */
14185
+ addChain(chain: SpringChain): number;
14186
+ /**
14187
+ * Adds an inter-chain constraint
14188
+ * @param constraint - The constraint to add
14189
+ */
14190
+ addInterChainConstraint(constraint: InterChainConstraint): void;
14191
+ /**
14192
+ * Creates radial constraints between adjacent chains
14193
+ * Useful for skirts, capes, and other radial multi-chain structures
14194
+ * @param options - Configuration options
14195
+ */
14196
+ createRadialConstraints(options: {
14197
+ /** Constraint stiffness [0-1], used by Verlet solver */
14198
+ stiffness: number;
14199
+ /** Maximum distance to create constraints (particles further apart are not connected) */
14200
+ maxDistance: number;
14201
+ /** Skip first N rows of particles (e.g., anchor points at waist) */
14202
+ skipRows?: number;
14203
+ /** Connect to next N chains (default: 1, only adjacent chains) */
14204
+ connectDistance?: number;
14205
+ /** XPBD compliance in m/N (default: 0 = rigid). Only used when solver is 'xpbd'. */
14206
+ compliance?: number;
14207
+ }): void;
14208
+ /**
14209
+ * Updates the physics simulation for all chains
14210
+ * @param deltaTime - Time step in seconds
14211
+ */
14212
+ update(deltaTime: number): void;
14213
+ private updateFixedParticles;
14214
+ private calculateGlobalRotation;
14215
+ private estimateRotationCenterFromHistory;
14216
+ private calculateCircleCenter;
14217
+ private calculateInertialAcceleration;
14218
+ private solveConstraint;
14219
+ private solveInterChainConstraint;
14220
+ private solveConstraintXPBD;
14221
+ private solveInterChainConstraintXPBD;
14222
+ /**
14223
+ * Applies simulation results to scene nodes
14224
+ * @param weight - Blend weight [0-1] (default: 1.0)
14225
+ */
14226
+ applyToNodes(weight?: number): void;
14227
+ private applyChainToNodes;
14228
+ /**
14229
+ * Resets the simulation to initial state
14230
+ */
14231
+ reset(): void;
14232
+ /**
14233
+ * Gets the spring chains
14234
+ */
14235
+ get chains(): SpringChain[];
14236
+ /**
14237
+ * Gets the inter-chain constraints
14238
+ */
14239
+ get interChainConstraints(): InterChainConstraint[];
14240
+ /**
14241
+ * Gets the current gravity
14242
+ */
14243
+ get gravity(): Vector3;
14244
+ set gravity(gravity: Vector3);
14245
+ /**
14246
+ * Gets the current wind
14247
+ */
14248
+ get wind(): Vector3;
14249
+ set wind(wind: Vector3);
14250
+ /**
14251
+ * Gets the number of iterations
14252
+ */
14253
+ get iterations(): number;
14254
+ set iterations(count: number);
14255
+ /**
14256
+ * Gets whether inertial forces are enabled
14257
+ */
14258
+ get enableInertialForces(): boolean;
14259
+ set enableInertialForces(enabled: boolean);
14260
+ /**
14261
+ * Gets the centrifugal force scale
14262
+ */
14263
+ get centrifugalScale(): number;
14264
+ set centrifugalScale(scale: number);
14265
+ /**
14266
+ * Gets the Coriolis force scale
14267
+ */
14268
+ get coriolisScale(): number;
14269
+ set coriolisScale(scale: number);
14270
+ get solver(): 'verlet' | 'xpbd';
14271
+ set solver(type: 'verlet' | 'xpbd');
14272
+ }
14273
+
12878
14274
  /**
12879
14275
  * Manages serialization and deserialization of engine objects to/from JSON,
12880
14276
  * including asset resolution via a virtual file system (VFS) and asset manager.
@@ -18961,4 +20357,4 @@ declare const ATMOSPHERIC_FOG_BIT: number;
18961
20357
  */
18962
20358
  declare const HEIGHT_FOG_BIT: number;
18963
20359
 
18964
- export { AABBTree, ABufferOIT, ATMOSPHERIC_FOG_BIT, AbsNode, AbstractPostEffect, AllConditionNode, AnimationClip, AnimationSet, AnimationTrack, AnyConditionNode, type AppCreationOptions, type AppOptions, Application, ArcCosNode, ArcSinNode, ArcTan2Node, ArcTanNode, ArccosineHNode, ArcsineHNode, ArctangentHNode, type AssetAnimationData, type AssetAnimationTrack, AssetHierarchyNode, AssetManager, type AssetMaterial, type AssetMaterialClearcoat, type AssetMaterialCommon, type AssetMaterialIridescence, type AssetMaterialSheen, type AssetMaterialTransmission, type AssetMeshData, type AssetPBRMaterialCommon, type AssetPBRMaterialMR, type AssetPBRMaterialSG, type AssetRotationTrack, type AssetScaleTrack, AssetScene, type AssetSkeletalAnimationTrack, AssetSkeleton, type AssetSubMeshData, type AssetTranslationTrack, type AssetUnlitMaterial, BUILTIN_ASSET_TEST_CUBEMAP, BUILTIN_ASSET_TEXTURE_SHEEN_LUT, BaseCameraController, BaseGraphNode, BaseLight, BaseSprite, BaseTextureNode, type BatchDrawable, BatchGroup, BillboardMatrixNode, type BlendMode, BlinnMaterial, type BlitType, Blitter, Bloom, type BluePrintEditorState, type BluePrintUniformTexture, type BluePrintUniformValue, type BlueprintDAG, BoundingBox, type BoundingVolume, type BoxCreationOptions, BoxFilterBlitter, BoxFrameShape, BoxShape, type CachedBindGroup, Camera, type CameraHistoryData, CameraNearFarNode, CameraPositionNode, CeilNode, ClampNode, ClipmapTerrain, ClipmapTerrainMaterial, CompAddNode, CompComparisonNode, CompDivNode, CompMulNode, CompSubNode, type ComparisonMode, Compositor, type CompositorContext, ConstantBVec2Node, ConstantBVec3Node, ConstantBVec4Node, ConstantBooleanNode, ConstantScalarNode, ConstantTexture2DArrayNode, ConstantTexture2DNode, ConstantTextureCubeNode, ConstantVec2Node, ConstantVec3Node, ConstantVec4Node, CopyBlitter, CosHNode, CosNode, CrossProductNode, CubemapSHProjector, CullVisitor, type CylinderCreationOptions, CylinderShape, DDXNode, DDYNode, Degrees2RadiansNode, DepthPass, DirectionalLight, DistanceNode, DotProductNode, DracoMeshDecoder, type DrawContext, type Drawable, type DrawableInstanceInfo, type EditorMode, ElapsedTimeNode, type EmitterBehavior, type EmitterShape, Engine, EnvConstantAmbient, EnvHemisphericAmbient, type EnvLightType, EnvLightWrapper, EnvShIBL, Environment, EnvironmentLighting, EqualNode, Exp2Node, ExpNode, type ExtractMixinReturnType, type ExtractMixinType, FBMWaveGenerator, FFTWaveGenerator, FPSCameraController, type FPSCameraControllerOptions, FWidthNode, FXAA, FaceForwardNode, FloorNode, FmaNode, type FogType, FractNode, FunctionCallNode, FunctionInputNode, FunctionOutputNode, GaussianBlurBlitter, GenericMathNode, GerstnerWaveGenerator, GraphNode, type GraphNodeInput, type GraphNodeOutput, type GraphStructure, type GrassInstanceInfo, GrassLayer, GrassMaterial, GrassRenderer, Grayscale, HEIGHT_FOG_BIT, Hash1Node, Hash2Node, Hash3Node, type Host, type IAttachedScript, type IBaseEvent, type IControllerKeyboardEvent, type IControllerKeydownEvent, type IControllerKeypressEvent, type IControllerKeyupEvent, type IControllerMouseEvent, type IControllerPointerCancelEvent, type IControllerPointerDownEvent, type IControllerPointerMoveEvent, type IControllerPointerUpEvent, type IControllerWheelEvent, type IGraphNode, type IMixinAlbedoColor, type IMixinBlinnPhong, type IMixinFoliage, type IMixinLambert, type IMixinLight, type IMixinPBRBluePrint, type IMixinPBRCommon, type IMixinPBRMetallicRoughness, type IMixinPBRSpecularGlossiness, type IMixinVertexColor, type IModKey, type IRUniformTexture, type IRUniformValue, type IRenderHook, type IRenderable, type InputEventHandler, InputManager, InstanceBindGroupAllocator, type InstanceData, type InstanceUniformType, InvProjMatrixNode, InvSqrtNode, InvViewProjMatrixNode, LIGHT_TYPE_DIRECTIONAL, LIGHT_TYPE_NONE, LIGHT_TYPE_POINT, LIGHT_TYPE_SPOT, LambertMaterial, LengthNode, Log2Node, type LogMode, LogNode, LogicallyAndNode, LogicallyOrNode, MAX_CLUSTERED_LIGHTS, MAX_GERSTNER_WAVE_COUNT, MAX_MORPH_ATTRIBUTES, MAX_MORPH_TARGETS, MAX_TERRAIN_MIPMAP_LEVELS, MORPH_ATTRIBUTE_VECTOR_COUNT, MORPH_TARGET_COLOR, MORPH_TARGET_NORMAL, MORPH_TARGET_POSITION, MORPH_TARGET_TANGENT, MORPH_TARGET_TEX0, MORPH_TARGET_TEX1, MORPH_TARGET_TEX2, MORPH_TARGET_TEX3, MORPH_WEIGHTS_VECTOR_COUNT, MakeVectorNode, Material, MaterialBlueprintIR, type MaterialBlueprintIRBehaviors, type MaterialTextureInfo, MaterialVaryingFlags, MaxNode, Mesh, MeshMaterial, type Metadata, MinNode, MixNode, ModNode, type ModelFetchOptions, type ModelInfo, type MorphData, type MorphInfo, type MorphState, MorphTargetTrack, NamedObject, type NodeConnection, NodeEulerRotationTrack, type NodeIterateFunc, NodeRotationTrack, NodeScaleTrack, NodeTranslationTrack, NormalizeNode, NotEqualNode, type OIT, Octree, OctreeNode, OctreeNodeChunk, OctreePlacement, OrbitCameraController, type OrbitCameraControllerOptions, OrthoCamera, PBRBlockNode, PBRBluePrintMaterial, PBRMetallicRoughnessMaterial, PBRSpecularGlossinessMaterial, ParticleMaterial, ParticleSystem, PerlinNoise2DNode, PerspectiveCamera, type PickResult, type PickTarget, type PlaneCreationOptions, PlaneShape, type PlayAnimationOptions, PointLight, type PointTransform, PostEffectLayer, PowNode, Primitive, ProjectionMatrixNode, type PropEdit, type PropertyAccessor, type PropertyAccessorOptions, type PropertyToType, PropertyTrack, type PropertyType, type PropertyValue, PunctualLight, QUEUE_OPAQUE, QUEUE_TRANSPARENT, RENDER_PASS_TYPE_DEPTH, RENDER_PASS_TYPE_LIGHT, RENDER_PASS_TYPE_OBJECT_COLOR, RENDER_PASS_TYPE_SHADOWMAP, Radians2DegreesNode, ReflectNode, RefractNode, RenderContext, type RenderItemList, type RenderItemListBundle, type RenderItemListInfo, RenderPass, RenderQueue, type RenderQueueItem, type RenderQueueRef, RenderTarget, type ResolutionTransform, ResolveVertexNormalNode, ResolveVertexPositionNode, ResolveVertexTangentNode, ResourceManager, RuntimeScript, SAO, type SamplerType, SaturateNode, Scene, SceneNode, type SceneNodeVisible, ScreenAdapter, type ScreenConfig, ScreenRenderTarget, type ScreenScaleMode, ScriptRegistry, ScriptingSystem, type ScriptingSystemOptions, SelectionNode, type SerializableClass, ShaderHelper, ShadowMapPass, ShadowMapper, type ShadowMode, Shape, type ShapeCreationOptions, type ShapeOptionType, type ShapeType, SharedModel, SignNode, SimplexNoise2DNode, SinHNode, SinNode, Skeleton, type SkinnedBoundingBox, SkyEnvTextureNode, SkyRenderer, type SkyType, SmoothStepNode, type SphereCreationOptions, SphereShape, SpotLight, Sprite, SpriteBlockNode, SpriteBlueprintMaterial, SpriteMaterial, SqrtNode, StandardSpriteMaterial, StepNode, type StopAnimationOptions, SwizzleNode, TanHNode, TanNode, type TerrainDebugMode, type TetrahedronCreationOptions, TetrahedronFrameShape, TetrahedronShape, type TextureFetchOptions, type TextureMixinInstanceTypes, type TextureMixinTypes, type TextureProp, type TexturePropUniforms, TextureSampleGrad, TextureSampleNode, type ToMixedTextureType, Tonemap, type TorusCreationOptions, TorusShape, TransformNode, UnlitMaterial, VertexBinormalNode, VertexBlockNode, VertexColorNode, VertexNormalNode, VertexPositionNode, VertexTangentNode, VertexUVNode, ViewMatrixNode, ViewProjMatrixNode, type Visitor, Water, type WaveGenerator, WeightedBlendedOIT, applyMaterialMixins, decode2HalfFromRGBA, decodeFloatFromRGBA, decodeNormalizedFloatFromRGBA, decodeRGBM, defineProps, encode2HalfToRGBA, encodeFloatToRGBA, encodeNormalizedFloatToRGBA, encodeRGBM, fetchSampler, gammaToLinear, getApp, getDevice, getEngine, getInput, gradient, hash11, hash12, hash13, hash21, hash22, hash23, hash31, hash32, hash33, interleavedGradientNoise, linearToGamma, mixinAlbedoColor, mixinBlinnPhong, mixinFoliage, mixinLambert, mixinLight, mixinPBRBluePrint, mixinPBRCommon, mixinPBRMetallicRoughness, mixinPBRSpecularGlossness, mixinTextureProps, mixinVertexColor, noise3D, panoramaToCubemap, perlinNoise2D, perlinNoise3D, prefilterCubemap, smoothNoise3D, temporalResolve, tryGetApp, valueNoise, whiteNoise, worleyFBM, worleyNoise };
20360
+ export { AABBTree, ABufferOIT, ATMOSPHERIC_FOG_BIT, AbsNode, AbstractPostEffect, AllConditionNode, AnimationClip, AnimationSet, AnimationTrack, AnyConditionNode, type AppCreationOptions, type AppOptions, Application, ArcCosNode, ArcSinNode, ArcTan2Node, ArcTanNode, ArccosineHNode, ArcsineHNode, ArctangentHNode, type AssetAnimationData, type AssetAnimationTrack, AssetHierarchyNode, AssetManager, type AssetMaterial, type AssetMaterialClearcoat, type AssetMaterialCommon, type AssetMaterialIridescence, type AssetMaterialSheen, type AssetMaterialTransmission, type AssetMeshData, type AssetPBRMaterialCommon, type AssetPBRMaterialMR, type AssetPBRMaterialSG, type AssetRotationTrack, type AssetScaleTrack, AssetScene, type AssetSkeletalAnimationTrack, AssetSkeleton, type AssetSubMeshData, type AssetTranslationTrack, type AssetUnlitMaterial, BUILTIN_ASSET_TEST_CUBEMAP, BUILTIN_ASSET_TEXTURE_SHEEN_LUT, BaseCameraController, BaseGraphNode, BaseLight, BaseSprite, BaseTextureNode, type BatchDrawable, BatchGroup, BillboardMatrixNode, type BlendMode, BlinnMaterial, type BlitType, Blitter, Bloom, type BluePrintEditorState, type BluePrintUniformTexture, type BluePrintUniformValue, type BlueprintDAG, BoundingBox, type BoundingVolume, type BoxCreationOptions, BoxFilterBlitter, BoxFrameShape, BoxShape, CCDSolver, type CachedBindGroup, Camera, type CameraHistoryData, CameraNearFarNode, CameraPositionNode, type CapsuleCollider, CeilNode, ClampNode, ClipmapTerrain, ClipmapTerrainMaterial, CompAddNode, CompComparisonNode, CompDivNode, CompMulNode, CompSubNode, type ComparisonMode, Compositor, type CompositorContext, ConstantBVec2Node, ConstantBVec3Node, ConstantBVec4Node, ConstantBooleanNode, ConstantScalarNode, ConstantTexture2DArrayNode, ConstantTexture2DNode, ConstantTextureCubeNode, ConstantVec2Node, ConstantVec3Node, ConstantVec4Node, CopyBlitter, CosHNode, CosNode, CrossProductNode, CubemapSHProjector, CullVisitor, type CylinderCreationOptions, CylinderShape, DDXNode, DDYNode, Degrees2RadiansNode, DepthPass, DirectionalLight, DistanceNode, DotProductNode, DracoMeshDecoder, type DrawContext, type Drawable, type DrawableInstanceInfo, type EditorMode, ElapsedTimeNode, type EmitterBehavior, type EmitterShape, Engine, EnvConstantAmbient, EnvHemisphericAmbient, type EnvLightType, EnvLightWrapper, EnvShIBL, Environment, EnvironmentLighting, EqualNode, Exp2Node, ExpNode, type ExtractMixinReturnType, type ExtractMixinType, FABRIKSolver, FBMWaveGenerator, FFTWaveGenerator, FPSCameraController, type FPSCameraControllerOptions, FWidthNode, FXAA, FaceForwardNode, FloorNode, FmaNode, type FogType, FractNode, FunctionCallNode, FunctionInputNode, FunctionOutputNode, GaussianBlurBlitter, GenericMathNode, GerstnerWaveGenerator, GraphNode, type GraphNodeInput, type GraphNodeOutput, type GraphStructure, type GrassInstanceInfo, GrassLayer, GrassMaterial, GrassRenderer, Grayscale, HEIGHT_FOG_BIT, Hash1Node, Hash2Node, Hash3Node, type Host, type IAttachedScript, type IBaseEvent, type IControllerKeyboardEvent, type IControllerKeydownEvent, type IControllerKeypressEvent, type IControllerKeyupEvent, type IControllerMouseEvent, type IControllerPointerCancelEvent, type IControllerPointerDownEvent, type IControllerPointerMoveEvent, type IControllerPointerUpEvent, type IControllerWheelEvent, type IGraphNode, IKAngleConstraint, IKChain, IKConstraint, type IKJoint, IKModifier, IKSolver, type IMixinAlbedoColor, type IMixinBlinnPhong, type IMixinFoliage, type IMixinLambert, type IMixinLight, type IMixinPBRBluePrint, type IMixinPBRCommon, type IMixinPBRMetallicRoughness, type IMixinPBRSpecularGlossiness, type IMixinVertexColor, type IModKey, type IRUniformTexture, type IRUniformValue, type IRenderHook, type IRenderable, type InputEventHandler, InputManager, InstanceBindGroupAllocator, type InstanceData, type InstanceUniformType, type InterChainConstraint, InvProjMatrixNode, InvSqrtNode, InvViewProjMatrixNode, LIGHT_TYPE_DIRECTIONAL, LIGHT_TYPE_NONE, LIGHT_TYPE_POINT, LIGHT_TYPE_SPOT, LambertMaterial, LengthNode, Log2Node, type LogMode, LogNode, LogicallyAndNode, LogicallyOrNode, MAX_CLUSTERED_LIGHTS, MAX_GERSTNER_WAVE_COUNT, MAX_MORPH_ATTRIBUTES, MAX_MORPH_TARGETS, MAX_TERRAIN_MIPMAP_LEVELS, MORPH_ATTRIBUTE_VECTOR_COUNT, MORPH_TARGET_COLOR, MORPH_TARGET_NORMAL, MORPH_TARGET_POSITION, MORPH_TARGET_TANGENT, MORPH_TARGET_TEX0, MORPH_TARGET_TEX1, MORPH_TARGET_TEX2, MORPH_TARGET_TEX3, MORPH_WEIGHTS_VECTOR_COUNT, MakeVectorNode, Material, MaterialBlueprintIR, type MaterialBlueprintIRBehaviors, type MaterialTextureInfo, MaterialVaryingFlags, MaxNode, Mesh, MeshMaterial, type Metadata, MinNode, MixNode, ModNode, type ModelFetchOptions, type ModelInfo, type MorphData, type MorphInfo, type MorphState, MorphTargetTrack, MultiChainSpringSystem, type MultiChainSpringSystemOptions, NamedObject, type NodeConnection, NodeEulerRotationTrack, type NodeIterateFunc, NodeRotationTrack, NodeScaleTrack, NodeTranslationTrack, NormalizeNode, NotEqualNode, type OIT, Octree, OctreeNode, OctreeNodeChunk, OctreePlacement, OrbitCameraController, type OrbitCameraControllerOptions, OrthoCamera, PBRBlockNode, PBRBluePrintMaterial, PBRMetallicRoughnessMaterial, PBRSpecularGlossinessMaterial, ParticleMaterial, ParticleSystem, PerlinNoise2DNode, PerspectiveCamera, type PickResult, type PickTarget, type PlaneCollider, type PlaneCreationOptions, PlaneShape, type PlayAnimationOptions, PointLight, type PointTransform, PostEffectLayer, PowNode, Primitive, ProjectionMatrixNode, type PropEdit, type PropertyAccessor, type PropertyAccessorOptions, type PropertyToType, PropertyTrack, type PropertyType, type PropertyValue, PunctualLight, QUEUE_OPAQUE, QUEUE_TRANSPARENT, RENDER_PASS_TYPE_DEPTH, RENDER_PASS_TYPE_LIGHT, RENDER_PASS_TYPE_OBJECT_COLOR, RENDER_PASS_TYPE_SHADOWMAP, Radians2DegreesNode, ReflectNode, RefractNode, RenderContext, type RenderItemList, type RenderItemListBundle, type RenderItemListInfo, RenderPass, RenderQueue, type RenderQueueItem, type RenderQueueRef, RenderTarget, type ResolutionTransform, ResolveVertexNormalNode, ResolveVertexPositionNode, ResolveVertexTangentNode, ResourceManager, RuntimeScript, SAO, type SamplerType, SaturateNode, Scene, SceneNode, type SceneNodeVisible, ScreenAdapter, type ScreenConfig, ScreenRenderTarget, type ScreenScaleMode, ScriptRegistry, ScriptingSystem, type ScriptingSystemOptions, SelectionNode, type SerializableClass, ShaderHelper, ShadowMapPass, ShadowMapper, type ShadowMode, Shape, type ShapeCreationOptions, type ShapeOptionType, type ShapeType, SharedModel, SignNode, SimplexNoise2DNode, SinHNode, SinNode, Skeleton, SkeletonModifier, type SkinnedBoundingBox, SkyEnvTextureNode, SkyRenderer, type SkyType, SmoothStepNode, type SphereCollider, type SphereCreationOptions, SphereShape, SpotLight, SpringChain, type SpringCollider, type SpringConstraint, SpringModifier, type SpringParticle, SpringSystem, type SpringSystemOptions, Sprite, SpriteBlockNode, SpriteBlueprintMaterial, SpriteMaterial, SqrtNode, StandardSpriteMaterial, StepNode, type StopAnimationOptions, SwizzleNode, TanHNode, TanNode, type TerrainDebugMode, type TetrahedronCreationOptions, TetrahedronFrameShape, TetrahedronShape, type TextureFetchOptions, type TextureMixinInstanceTypes, type TextureMixinTypes, type TextureProp, type TexturePropUniforms, TextureSampleGrad, TextureSampleNode, type ToMixedTextureType, Tonemap, type TorusCreationOptions, TorusShape, TransformNode, type TwistConstraint, TwoBoneIKSolver, UnlitMaterial, VertexBinormalNode, VertexBlockNode, VertexColorNode, VertexNormalNode, VertexPositionNode, VertexTangentNode, VertexUVNode, ViewMatrixNode, ViewProjMatrixNode, type Visitor, Water, type WaveGenerator, WeightedBlendedOIT, applyMaterialMixins, createCapsuleCollider, createPlaneCollider, createSphereCollider, createSpringConstraint, createSpringParticle, decode2HalfFromRGBA, decodeFloatFromRGBA, decodeNormalizedFloatFromRGBA, decodeRGBM, defineProps, encode2HalfToRGBA, encodeFloatToRGBA, encodeNormalizedFloatToRGBA, encodeRGBM, fetchSampler, gammaToLinear, getApp, getDevice, getEngine, getInput, gradient, hash11, hash12, hash13, hash21, hash22, hash23, hash31, hash32, hash33, interleavedGradientNoise, linearToGamma, mixinAlbedoColor, mixinBlinnPhong, mixinFoliage, mixinLambert, mixinLight, mixinPBRBluePrint, mixinPBRCommon, mixinPBRMetallicRoughness, mixinPBRSpecularGlossness, mixinTextureProps, mixinVertexColor, noise3D, panoramaToCubemap, perlinNoise2D, perlinNoise3D, prefilterCubemap, resolveCapsuleCollision, resolvePlaneCollision, resolveSphereCollision, smoothNoise3D, temporalResolve, tryGetApp, updateColliderFromNode, valueNoise, whiteNoise, worleyFBM, worleyNoise };