@zephyr3d/scene 0.9.1 → 0.9.3

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 (522) hide show
  1. package/dist/animation/animationset.js +2 -0
  2. package/dist/animation/animationset.js.map +1 -1
  3. package/dist/animation/cloth/gpu_cloth_system.js +9 -1
  4. package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
  5. package/dist/animation/fixed_geometry_cache_track.js +5 -1
  6. package/dist/animation/fixed_geometry_cache_track.js.map +1 -1
  7. package/dist/animation/geometry_cache_utils.js +20 -4
  8. package/dist/animation/geometry_cache_utils.js.map +1 -1
  9. package/dist/animation/ik/ik_angle_constraint.js +2 -6
  10. package/dist/animation/ik/ik_angle_constraint.js.map +1 -1
  11. package/dist/animation/ik/ik_chain_builder.js +68 -0
  12. package/dist/animation/ik/ik_chain_builder.js.map +1 -0
  13. package/dist/animation/ik/ik_pole_constraint.js +2 -7
  14. package/dist/animation/ik/ik_pole_constraint.js.map +1 -1
  15. package/dist/animation/ik/two_bone_ik_solver.js +2 -6
  16. package/dist/animation/ik/two_bone_ik_solver.js.map +1 -1
  17. package/dist/animation/joint_dynamics/collision.js +60 -12
  18. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  19. package/dist/animation/joint_dynamics/constraints.js +20 -4
  20. package/dist/animation/joint_dynamics/constraints.js.map +1 -1
  21. package/dist/animation/joint_dynamics/controller.js +94 -46
  22. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  23. package/dist/animation/joint_dynamics/math.js +16 -0
  24. package/dist/animation/joint_dynamics/math.js.map +1 -0
  25. package/dist/animation/joint_dynamics/solver.js +21 -11
  26. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  27. package/dist/animation/joint_dynamics/types.js +15 -3
  28. package/dist/animation/joint_dynamics/types.js.map +1 -1
  29. package/dist/animation/pca_geometry_cache_track.js +5 -1
  30. package/dist/animation/pca_geometry_cache_track.js.map +1 -1
  31. package/dist/animation/skeleton.js +2 -2
  32. package/dist/animation/skeleton.js.map +1 -1
  33. package/dist/animation/skeleton_modifier.js +2 -6
  34. package/dist/animation/skeleton_modifier.js.map +1 -1
  35. package/dist/animation/spring/spring_particle.js +4 -4
  36. package/dist/animation/spring/spring_particle.js.map +1 -1
  37. package/dist/animation/spring/spring_system.js +13 -40
  38. package/dist/animation/spring/spring_system.js.map +1 -1
  39. package/dist/animation/spring2/constraints.js.map +1 -1
  40. package/dist/animation/spring2/controller.js +64 -64
  41. package/dist/animation/spring2/controller.js.map +1 -1
  42. package/dist/animation/spring2/math.js.map +1 -1
  43. package/dist/animation/spring2/spring_system.js +8 -8
  44. package/dist/animation/spring2/spring_system.js.map +1 -1
  45. package/dist/app/app.js.map +1 -1
  46. package/dist/app/engine.js +1 -1
  47. package/dist/app/engine.js.map +1 -1
  48. package/dist/app/screen.js +4 -4
  49. package/dist/app/screen.js.map +1 -1
  50. package/dist/app/scriptingsystem.js +24 -1
  51. package/dist/app/scriptingsystem.js.map +1 -1
  52. package/dist/app/scriptregistry.js +22 -1
  53. package/dist/app/scriptregistry.js.map +1 -1
  54. package/dist/asset/assetmanager.js +2 -2
  55. package/dist/asset/assetmanager.js.map +1 -1
  56. package/dist/asset/model.js +60 -60
  57. package/dist/asset/model.js.map +1 -1
  58. package/dist/camera/camera.js +1 -1
  59. package/dist/camera/camera.js.map +1 -1
  60. package/dist/camera/orbit.js.map +1 -1
  61. package/dist/index.d.ts +795 -266
  62. package/dist/index.js +3 -2
  63. package/dist/index.js.map +1 -1
  64. package/dist/material/material.js +3 -1
  65. package/dist/material/material.js.map +1 -1
  66. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  67. package/dist/material/shader/helper.js +281 -278
  68. package/dist/material/shader/helper.js.map +1 -1
  69. package/dist/material/sprite.js +6 -6
  70. package/dist/material/sprite.js.map +1 -1
  71. package/dist/material/terrain-cm.js +2 -2
  72. package/dist/material/terrain-cm.js.map +1 -1
  73. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
  74. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
  75. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
  76. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
  77. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
  78. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
  79. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
  80. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
  81. package/dist/posteffect/taa.js +31 -39
  82. package/dist/posteffect/taa.js.map +1 -1
  83. package/dist/render/cluster_light.js +3 -4
  84. package/dist/render/cluster_light.js.map +1 -1
  85. package/dist/render/drawable.js +5 -1
  86. package/dist/render/drawable.js.map +1 -1
  87. package/dist/render/rendergraph/device_pool_allocator.js +29 -3
  88. package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
  89. package/dist/render/rendergraph/executor.js +283 -33
  90. package/dist/render/rendergraph/executor.js.map +1 -1
  91. package/dist/render/rendergraph/forward_plus_builder.js +338 -108
  92. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  93. package/dist/render/rendergraph/history_resource_manager.js +195 -115
  94. package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
  95. package/dist/render/rendergraph/history_resources.js +10 -0
  96. package/dist/render/rendergraph/history_resources.js.map +1 -0
  97. package/dist/render/rendergraph/rendergraph.js +162 -35
  98. package/dist/render/rendergraph/rendergraph.js.map +1 -1
  99. package/dist/render/rendergraph/types.js +25 -5
  100. package/dist/render/rendergraph/types.js.map +1 -1
  101. package/dist/render/rendertarget.js +5 -1
  102. package/dist/render/rendertarget.js.map +1 -1
  103. package/dist/render/screenrendertarget.js +5 -1
  104. package/dist/render/screenrendertarget.js.map +1 -1
  105. package/dist/render/sky.js +4 -4
  106. package/dist/render/sky.js.map +1 -1
  107. package/dist/scene/basesprite.js +2 -2
  108. package/dist/scene/basesprite.js.map +1 -1
  109. package/dist/scene/graph_node.js +1 -1
  110. package/dist/scene/graph_node.js.map +1 -1
  111. package/dist/scene/mesh.js +81 -97
  112. package/dist/scene/mesh.js.map +1 -1
  113. package/dist/scene/particlesys.js +1 -1
  114. package/dist/scene/particlesys.js.map +1 -1
  115. package/dist/scene/scene_node.js +228 -228
  116. package/dist/scene/scene_node.js.map +1 -1
  117. package/dist/scene/script_attachment.js +15 -3
  118. package/dist/scene/script_attachment.js.map +1 -1
  119. package/dist/scene/terrain-cm/terrain-cm.js +3 -3
  120. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  121. package/dist/shadow/shadowmapper.js.map +1 -1
  122. package/dist/shapes/box.js +1 -1
  123. package/dist/shapes/box.js.map +1 -1
  124. package/dist/shapes/capsule.js +0 -3
  125. package/dist/shapes/capsule.js.map +1 -1
  126. package/dist/shapes/cylinder.js +0 -3
  127. package/dist/shapes/cylinder.js.map +1 -1
  128. package/dist/shapes/plane.js +0 -3
  129. package/dist/shapes/plane.js.map +1 -1
  130. package/dist/shapes/tetrahedron.js +3 -9
  131. package/dist/shapes/tetrahedron.js.map +1 -1
  132. package/dist/shapes/torus.js +94 -66
  133. package/dist/shapes/torus.js.map +1 -1
  134. package/dist/src/animation/animation.js +127 -0
  135. package/dist/src/animation/animation.js.map +1 -0
  136. package/dist/src/animation/animationset.js +255 -0
  137. package/dist/src/animation/animationset.js.map +1 -0
  138. package/dist/src/animation/animationtrack.js +34 -0
  139. package/dist/src/animation/animationtrack.js.map +1 -0
  140. package/dist/src/animation/eulerrotationtrack.js +52 -0
  141. package/dist/src/animation/eulerrotationtrack.js.map +1 -0
  142. package/dist/src/animation/morphtarget.js +93 -0
  143. package/dist/src/animation/morphtarget.js.map +1 -0
  144. package/dist/src/animation/morphtrack.js +70 -0
  145. package/dist/src/animation/morphtrack.js.map +1 -0
  146. package/dist/src/animation/proptrack.js +161 -0
  147. package/dist/src/animation/proptrack.js.map +1 -0
  148. package/dist/src/animation/rotationtrack.js +51 -0
  149. package/dist/src/animation/rotationtrack.js.map +1 -0
  150. package/dist/src/animation/scaletrack.js +50 -0
  151. package/dist/src/animation/scaletrack.js.map +1 -0
  152. package/dist/src/animation/skeleton.js +204 -0
  153. package/dist/src/animation/skeleton.js.map +1 -0
  154. package/dist/src/animation/translationtrack.js +50 -0
  155. package/dist/src/animation/translationtrack.js.map +1 -0
  156. package/dist/src/app/app.js +129 -0
  157. package/dist/src/app/app.js.map +1 -0
  158. package/dist/src/app/inputmgr.js +267 -0
  159. package/dist/src/app/inputmgr.js.map +1 -0
  160. package/dist/src/asset/assetmanager.js +404 -0
  161. package/dist/src/asset/assetmanager.js.map +1 -0
  162. package/dist/src/asset/builtin.js +337 -0
  163. package/dist/src/asset/builtin.js.map +1 -0
  164. package/dist/src/asset/loaders/dds/dds.js +470 -0
  165. package/dist/src/asset/loaders/dds/dds.js.map +1 -0
  166. package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
  167. package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
  168. package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
  169. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
  170. package/dist/src/asset/loaders/gltf/helpers.js +327 -0
  171. package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
  172. package/dist/src/asset/loaders/hdr/hdr.js +180 -0
  173. package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
  174. package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
  175. package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
  176. package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
  177. package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
  178. package/dist/src/asset/loaders/loader.js +45 -0
  179. package/dist/src/asset/loaders/loader.js.map +1 -0
  180. package/dist/src/asset/model.js +414 -0
  181. package/dist/src/asset/model.js.map +1 -0
  182. package/dist/src/blitter/bilateralblur.js +221 -0
  183. package/dist/src/blitter/bilateralblur.js.map +1 -0
  184. package/dist/src/blitter/blitter.js +390 -0
  185. package/dist/src/blitter/blitter.js.map +1 -0
  186. package/dist/src/blitter/box.js +118 -0
  187. package/dist/src/blitter/box.js.map +1 -0
  188. package/dist/src/blitter/copy.js +22 -0
  189. package/dist/src/blitter/copy.js.map +1 -0
  190. package/dist/src/blitter/gaussianblur.js +228 -0
  191. package/dist/src/blitter/gaussianblur.js.map +1 -0
  192. package/dist/src/camera/base.js +92 -0
  193. package/dist/src/camera/base.js.map +1 -0
  194. package/dist/src/camera/camera.js +1005 -0
  195. package/dist/src/camera/camera.js.map +1 -0
  196. package/dist/src/camera/fps.js +238 -0
  197. package/dist/src/camera/fps.js.map +1 -0
  198. package/dist/src/camera/orbit.js +245 -0
  199. package/dist/src/camera/orbit.js.map +1 -0
  200. package/dist/src/camera/orthocamera.js +167 -0
  201. package/dist/src/camera/orthocamera.js.map +1 -0
  202. package/dist/src/camera/perspectivecamera.js +141 -0
  203. package/dist/src/camera/perspectivecamera.js.map +1 -0
  204. package/dist/src/index.js +120 -0
  205. package/dist/src/index.js.map +1 -0
  206. package/dist/src/material/blinn.js +81 -0
  207. package/dist/src/material/blinn.js.map +1 -0
  208. package/dist/src/material/grassmaterial.js +113 -0
  209. package/dist/src/material/grassmaterial.js.map +1 -0
  210. package/dist/src/material/lambert.js +92 -0
  211. package/dist/src/material/lambert.js.map +1 -0
  212. package/dist/src/material/material.js +301 -0
  213. package/dist/src/material/material.js.map +1 -0
  214. package/dist/src/material/meshmaterial.js +704 -0
  215. package/dist/src/material/meshmaterial.js.map +1 -0
  216. package/dist/src/material/mixins/albedocolor.js +76 -0
  217. package/dist/src/material/mixins/albedocolor.js.map +1 -0
  218. package/dist/src/material/mixins/foliage.js +47 -0
  219. package/dist/src/material/mixins/foliage.js.map +1 -0
  220. package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
  221. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
  222. package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
  223. package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
  224. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
  225. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
  226. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
  227. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
  228. package/dist/src/material/mixins/lit.js +476 -0
  229. package/dist/src/material/mixins/lit.js.map +1 -0
  230. package/dist/src/material/mixins/pbr/common.js +918 -0
  231. package/dist/src/material/mixins/pbr/common.js.map +1 -0
  232. package/dist/src/material/mixins/texture.js +172 -0
  233. package/dist/src/material/mixins/texture.js.map +1 -0
  234. package/dist/src/material/mixins/vertexcolor.js +56 -0
  235. package/dist/src/material/mixins/vertexcolor.js.map +1 -0
  236. package/dist/src/material/particle.js +178 -0
  237. package/dist/src/material/particle.js.map +1 -0
  238. package/dist/src/material/pbrmr.js +97 -0
  239. package/dist/src/material/pbrmr.js.map +1 -0
  240. package/dist/src/material/pbrsg.js +97 -0
  241. package/dist/src/material/pbrsg.js.map +1 -0
  242. package/dist/src/material/shader/helper.js +1209 -0
  243. package/dist/src/material/shader/helper.js.map +1 -0
  244. package/dist/src/material/terrain-cm.js +606 -0
  245. package/dist/src/material/terrain-cm.js.map +1 -0
  246. package/dist/src/material/terrainmaterial.js +375 -0
  247. package/dist/src/material/terrainmaterial.js.map +1 -0
  248. package/dist/src/material/unlit.js +41 -0
  249. package/dist/src/material/unlit.js.map +1 -0
  250. package/dist/src/material/water.js +417 -0
  251. package/dist/src/material/water.js.map +1 -0
  252. package/dist/src/posteffect/bloom.js +361 -0
  253. package/dist/src/posteffect/bloom.js.map +1 -0
  254. package/dist/src/posteffect/compositor.js +226 -0
  255. package/dist/src/posteffect/compositor.js.map +1 -0
  256. package/dist/src/posteffect/fxaa.js +273 -0
  257. package/dist/src/posteffect/fxaa.js.map +1 -0
  258. package/dist/src/posteffect/grayscale.js +69 -0
  259. package/dist/src/posteffect/grayscale.js.map +1 -0
  260. package/dist/src/posteffect/motionblur.js +96 -0
  261. package/dist/src/posteffect/motionblur.js.map +1 -0
  262. package/dist/src/posteffect/posteffect.js +126 -0
  263. package/dist/src/posteffect/posteffect.js.map +1 -0
  264. package/dist/src/posteffect/sao.js +324 -0
  265. package/dist/src/posteffect/sao.js.map +1 -0
  266. package/dist/src/posteffect/ssr.js +489 -0
  267. package/dist/src/posteffect/ssr.js.map +1 -0
  268. package/dist/src/posteffect/taa.js +172 -0
  269. package/dist/src/posteffect/taa.js.map +1 -0
  270. package/dist/src/posteffect/tonemap.js +94 -0
  271. package/dist/src/posteffect/tonemap.js.map +1 -0
  272. package/dist/src/render/abuffer_oit.js +361 -0
  273. package/dist/src/render/abuffer_oit.js.map +1 -0
  274. package/dist/src/render/clipmap.js +851 -0
  275. package/dist/src/render/clipmap.js.map +1 -0
  276. package/dist/src/render/cluster_light.js +333 -0
  277. package/dist/src/render/cluster_light.js.map +1 -0
  278. package/dist/src/render/cull_visitor.js +187 -0
  279. package/dist/src/render/cull_visitor.js.map +1 -0
  280. package/dist/src/render/depthpass.js +68 -0
  281. package/dist/src/render/depthpass.js.map +1 -0
  282. package/dist/src/render/drawable_mixin.js +227 -0
  283. package/dist/src/render/drawable_mixin.js.map +1 -0
  284. package/dist/src/render/envlight.js +463 -0
  285. package/dist/src/render/envlight.js.map +1 -0
  286. package/dist/src/render/fbm_wavegenerator.js +251 -0
  287. package/dist/src/render/fbm_wavegenerator.js.map +1 -0
  288. package/dist/src/render/fft_wavegenerator.js +1006 -0
  289. package/dist/src/render/fft_wavegenerator.js.map +1 -0
  290. package/dist/src/render/fullscreenquad.js +38 -0
  291. package/dist/src/render/fullscreenquad.js.map +1 -0
  292. package/dist/src/render/gerstner_wavegenerator.js +314 -0
  293. package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
  294. package/dist/src/render/globalbindgroup_allocator.js +60 -0
  295. package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
  296. package/dist/src/render/hzb.js +273 -0
  297. package/dist/src/render/hzb.js.map +1 -0
  298. package/dist/src/render/lightpass.js +172 -0
  299. package/dist/src/render/lightpass.js.map +1 -0
  300. package/dist/src/render/objectcolorpass.js +51 -0
  301. package/dist/src/render/objectcolorpass.js.map +1 -0
  302. package/dist/src/render/primitive.js +364 -0
  303. package/dist/src/render/primitive.js.map +1 -0
  304. package/dist/src/render/render_queue.js +467 -0
  305. package/dist/src/render/render_queue.js.map +1 -0
  306. package/dist/src/render/renderbundle_wrapper.js +152 -0
  307. package/dist/src/render/renderbundle_wrapper.js.map +1 -0
  308. package/dist/src/render/renderer.js +455 -0
  309. package/dist/src/render/renderer.js.map +1 -0
  310. package/dist/src/render/renderpass.js +200 -0
  311. package/dist/src/render/renderpass.js.map +1 -0
  312. package/dist/src/render/shadowmap_pass.js +56 -0
  313. package/dist/src/render/shadowmap_pass.js.map +1 -0
  314. package/dist/src/render/sky.js +1103 -0
  315. package/dist/src/render/sky.js.map +1 -0
  316. package/dist/src/render/weightedblended_oit.js +168 -0
  317. package/dist/src/render/weightedblended_oit.js.map +1 -0
  318. package/dist/src/scene/batchgroup.js +162 -0
  319. package/dist/src/scene/batchgroup.js.map +1 -0
  320. package/dist/src/scene/environment.js +209 -0
  321. package/dist/src/scene/environment.js.map +1 -0
  322. package/dist/src/scene/graph_node.js +72 -0
  323. package/dist/src/scene/graph_node.js.map +1 -0
  324. package/dist/src/scene/light.js +416 -0
  325. package/dist/src/scene/light.js.map +1 -0
  326. package/dist/src/scene/mesh.js +341 -0
  327. package/dist/src/scene/mesh.js.map +1 -0
  328. package/dist/src/scene/octree.js +649 -0
  329. package/dist/src/scene/octree.js.map +1 -0
  330. package/dist/src/scene/particlesys.js +738 -0
  331. package/dist/src/scene/particlesys.js.map +1 -0
  332. package/dist/src/scene/raycast_visitor.js +103 -0
  333. package/dist/src/scene/raycast_visitor.js.map +1 -0
  334. package/dist/src/scene/scene.js +284 -0
  335. package/dist/src/scene/scene.js.map +1 -0
  336. package/dist/src/scene/scene_node.js +732 -0
  337. package/dist/src/scene/scene_node.js.map +1 -0
  338. package/dist/src/scene/terrain/grass.js +278 -0
  339. package/dist/src/scene/terrain/grass.js.map +1 -0
  340. package/dist/src/scene/terrain/heightfield.js +475 -0
  341. package/dist/src/scene/terrain/heightfield.js.map +1 -0
  342. package/dist/src/scene/terrain/patch.js +530 -0
  343. package/dist/src/scene/terrain/patch.js.map +1 -0
  344. package/dist/src/scene/terrain/quadtree.js +461 -0
  345. package/dist/src/scene/terrain/quadtree.js.map +1 -0
  346. package/dist/src/scene/terrain/terrain.js +246 -0
  347. package/dist/src/scene/terrain/terrain.js.map +1 -0
  348. package/dist/src/scene/terrain-cm/grass.js +594 -0
  349. package/dist/src/scene/terrain-cm/grass.js.map +1 -0
  350. package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
  351. package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
  352. package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
  353. package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
  354. package/dist/src/scene/water.js +374 -0
  355. package/dist/src/scene/water.js.map +1 -0
  356. package/dist/src/shaders/atmosphere.js +957 -0
  357. package/dist/src/shaders/atmosphere.js.map +1 -0
  358. package/dist/src/shaders/fog.js +112 -0
  359. package/dist/src/shaders/fog.js.map +1 -0
  360. package/dist/src/shaders/misc.js +266 -0
  361. package/dist/src/shaders/misc.js.map +1 -0
  362. package/dist/src/shaders/noise.js +222 -0
  363. package/dist/src/shaders/noise.js.map +1 -0
  364. package/dist/src/shaders/pbr.js +51 -0
  365. package/dist/src/shaders/pbr.js.map +1 -0
  366. package/dist/src/shaders/shadow.js +636 -0
  367. package/dist/src/shaders/shadow.js.map +1 -0
  368. package/dist/src/shaders/ssr.js +490 -0
  369. package/dist/src/shaders/ssr.js.map +1 -0
  370. package/dist/src/shaders/temporal.js +215 -0
  371. package/dist/src/shaders/temporal.js.map +1 -0
  372. package/dist/src/shaders/water.js +756 -0
  373. package/dist/src/shaders/water.js.map +1 -0
  374. package/dist/src/shadow/esm.js +237 -0
  375. package/dist/src/shadow/esm.js.map +1 -0
  376. package/dist/src/shadow/pcf_opt.js +181 -0
  377. package/dist/src/shadow/pcf_opt.js.map +1 -0
  378. package/dist/src/shadow/pcf_pd.js +189 -0
  379. package/dist/src/shadow/pcf_pd.js.map +1 -0
  380. package/dist/src/shadow/shader.js +37 -0
  381. package/dist/src/shadow/shader.js.map +1 -0
  382. package/dist/src/shadow/shadow_impl.js +15 -0
  383. package/dist/src/shadow/shadow_impl.js.map +1 -0
  384. package/dist/src/shadow/shadowmapper.js +790 -0
  385. package/dist/src/shadow/shadowmapper.js.map +1 -0
  386. package/dist/src/shadow/ssm.js +159 -0
  387. package/dist/src/shadow/ssm.js.map +1 -0
  388. package/dist/src/shadow/vsm.js +297 -0
  389. package/dist/src/shadow/vsm.js.map +1 -0
  390. package/dist/src/shapes/box.js +386 -0
  391. package/dist/src/shapes/box.js.map +1 -0
  392. package/dist/src/shapes/cylinder.js +125 -0
  393. package/dist/src/shapes/cylinder.js.map +1 -0
  394. package/dist/src/shapes/plane.js +88 -0
  395. package/dist/src/shapes/plane.js.map +1 -0
  396. package/dist/src/shapes/shape.js +87 -0
  397. package/dist/src/shapes/shape.js.map +1 -0
  398. package/dist/src/shapes/sphere.js +114 -0
  399. package/dist/src/shapes/sphere.js.map +1 -0
  400. package/dist/src/shapes/tetrahedron.js +188 -0
  401. package/dist/src/shapes/tetrahedron.js.map +1 -0
  402. package/dist/src/shapes/torus.js +111 -0
  403. package/dist/src/shapes/torus.js.map +1 -0
  404. package/dist/src/utility/aabbtree.js +400 -0
  405. package/dist/src/utility/aabbtree.js.map +1 -0
  406. package/dist/src/utility/bounding_volume.js +29 -0
  407. package/dist/src/utility/bounding_volume.js.map +1 -0
  408. package/dist/src/utility/debug.js +28 -0
  409. package/dist/src/utility/debug.js.map +1 -0
  410. package/dist/src/utility/draco/decoder.js +116 -0
  411. package/dist/src/utility/draco/decoder.js.map +1 -0
  412. package/dist/src/utility/misc.js +105 -0
  413. package/dist/src/utility/misc.js.map +1 -0
  414. package/dist/src/utility/panorama.js +163 -0
  415. package/dist/src/utility/panorama.js.map +1 -0
  416. package/dist/src/utility/pmrem.js +354 -0
  417. package/dist/src/utility/pmrem.js.map +1 -0
  418. package/dist/src/utility/rendermipmap.js +115 -0
  419. package/dist/src/utility/rendermipmap.js.map +1 -0
  420. package/dist/src/utility/serialization/json.js +402 -0
  421. package/dist/src/utility/serialization/json.js.map +1 -0
  422. package/dist/src/utility/serialization/manager.js +623 -0
  423. package/dist/src/utility/serialization/manager.js.map +1 -0
  424. package/dist/src/utility/serialization/scene/animation.js +248 -0
  425. package/dist/src/utility/serialization/scene/animation.js.map +1 -0
  426. package/dist/src/utility/serialization/scene/batch.js +59 -0
  427. package/dist/src/utility/serialization/scene/batch.js.map +1 -0
  428. package/dist/src/utility/serialization/scene/camera.js +790 -0
  429. package/dist/src/utility/serialization/scene/camera.js.map +1 -0
  430. package/dist/src/utility/serialization/scene/common.js +222 -0
  431. package/dist/src/utility/serialization/scene/common.js.map +1 -0
  432. package/dist/src/utility/serialization/scene/light.js +575 -0
  433. package/dist/src/utility/serialization/scene/light.js.map +1 -0
  434. package/dist/src/utility/serialization/scene/material.js +1111 -0
  435. package/dist/src/utility/serialization/scene/material.js.map +1 -0
  436. package/dist/src/utility/serialization/scene/mesh.js +148 -0
  437. package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
  438. package/dist/src/utility/serialization/scene/misc.js +39 -0
  439. package/dist/src/utility/serialization/scene/misc.js.map +1 -0
  440. package/dist/src/utility/serialization/scene/node.js +451 -0
  441. package/dist/src/utility/serialization/scene/node.js.map +1 -0
  442. package/dist/src/utility/serialization/scene/particle.js +425 -0
  443. package/dist/src/utility/serialization/scene/particle.js.map +1 -0
  444. package/dist/src/utility/serialization/scene/primitive.js +692 -0
  445. package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
  446. package/dist/src/utility/serialization/scene/scene.js +704 -0
  447. package/dist/src/utility/serialization/scene/scene.js.map +1 -0
  448. package/dist/src/utility/serialization/scene/terrain.js +488 -0
  449. package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
  450. package/dist/src/utility/serialization/scene/water.js +465 -0
  451. package/dist/src/utility/serialization/scene/water.js.map +1 -0
  452. package/dist/src/utility/shprojector.js +297 -0
  453. package/dist/src/utility/shprojector.js.map +1 -0
  454. package/dist/src/utility/textures/ggxlut.js +213 -0
  455. package/dist/src/utility/textures/ggxlut.js.map +1 -0
  456. package/dist/src/utility/textures/gradientnoise.js +62 -0
  457. package/dist/src/utility/textures/gradientnoise.js.map +1 -0
  458. package/dist/src/utility/textures/randomnoise.js +41 -0
  459. package/dist/src/utility/textures/randomnoise.js.map +1 -0
  460. package/dist/src/values.js +162 -0
  461. package/dist/src/values.js.map +1 -0
  462. package/dist/utility/blueprint/material/common.js +7 -0
  463. package/dist/utility/blueprint/material/common.js.map +1 -0
  464. package/dist/utility/blueprint/material/inputs.js +3 -3
  465. package/dist/utility/blueprint/material/inputs.js.map +1 -1
  466. package/dist/utility/blueprint/material/ir.js +4 -4
  467. package/dist/utility/blueprint/material/ir.js.map +1 -1
  468. package/dist/utility/serialization/blueprint/constants.js +255 -0
  469. package/dist/utility/serialization/blueprint/constants.js.map +1 -0
  470. package/dist/utility/serialization/blueprint/material/constants.js +203 -0
  471. package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
  472. package/dist/utility/serialization/blueprint/material/texture.js +165 -0
  473. package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
  474. package/dist/utility/serialization/manager.js +299 -268
  475. package/dist/utility/serialization/manager.js.map +1 -1
  476. package/dist/utility/serialization/scene/animation.js +45 -0
  477. package/dist/utility/serialization/scene/animation.js.map +1 -1
  478. package/dist/utility/serialization/scene/camera.js +53 -0
  479. package/dist/utility/serialization/scene/camera.js.map +1 -1
  480. package/dist/utility/serialization/scene/common.js +10 -0
  481. package/dist/utility/serialization/scene/common.js.map +1 -1
  482. package/dist/utility/serialization/scene/light.js +30 -0
  483. package/dist/utility/serialization/scene/light.js.map +1 -1
  484. package/dist/utility/serialization/scene/material.js +63 -0
  485. package/dist/utility/serialization/scene/material.js.map +1 -1
  486. package/dist/utility/serialization/scene/mesh.js +11 -0
  487. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  488. package/dist/utility/serialization/scene/misc.js +2 -0
  489. package/dist/utility/serialization/scene/misc.js.map +1 -1
  490. package/dist/utility/serialization/scene/node.js +19 -0
  491. package/dist/utility/serialization/scene/node.js.map +1 -1
  492. package/dist/utility/serialization/scene/particle.js +22 -0
  493. package/dist/utility/serialization/scene/particle.js.map +1 -1
  494. package/dist/utility/serialization/scene/primitive.js +33 -0
  495. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  496. package/dist/utility/serialization/scene/scene.js +39 -0
  497. package/dist/utility/serialization/scene/scene.js.map +1 -1
  498. package/dist/utility/serialization/scene/script.js +2 -0
  499. package/dist/utility/serialization/scene/script.js.map +1 -1
  500. package/dist/utility/serialization/scene/sprite.js +6 -0
  501. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  502. package/dist/utility/serialization/scene/terrain.js +9 -0
  503. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  504. package/dist/utility/serialization/scene/water.js +21 -0
  505. package/dist/utility/serialization/scene/water.js.map +1 -1
  506. package/dist/utility/serialization/types.js +5 -1
  507. package/dist/utility/serialization/types.js.map +1 -1
  508. package/dist/values.js +49 -53
  509. package/dist/values.js.map +1 -1
  510. package/package.json +2 -2
  511. package/dist/animation/joint_dynamics/vrm_spring_bone.js +0 -46
  512. package/dist/animation/joint_dynamics/vrm_spring_bone.js.map +0 -1
  513. package/dist/animation/spring/spring_bone.js +0 -240
  514. package/dist/animation/spring/spring_bone.js.map +0 -1
  515. package/dist/animation/spring/spring_bone_collider.js +0 -198
  516. package/dist/animation/spring/spring_bone_collider.js.map +0 -1
  517. package/dist/animation/spring/spring_bone_constraint.js +0 -170
  518. package/dist/animation/spring/spring_bone_constraint.js.map +0 -1
  519. package/dist/animation/spring/spring_bone_system.js +0 -328
  520. package/dist/animation/spring/spring_bone_system.js.map +0 -1
  521. package/dist/render/sky_motion_vector.js +0 -85
  522. package/dist/render/sky_motion_vector.js.map +0 -1
@@ -1,198 +0,0 @@
1
- import { Vector3 } from '@zephyr3d/base';
2
-
3
- /**
4
- * Base class for spring bone colliders.
5
- *
6
- * @public
7
- */ class SpringBoneCollider {
8
- }
9
- /**
10
- * Sphere collider for spring bones.
11
- *
12
- * @public
13
- */ class SphereCollider extends SpringBoneCollider {
14
- /** Center position in world space */ _center;
15
- /** Sphere radius */ _radius;
16
- /** Optional bone node to follow */ _bone;
17
- /** Local offset from bone (if bone is set) */ _localOffset;
18
- /**
19
- * Create a sphere collider.
20
- *
21
- * @param center - Center position in world space (or local offset if bone is provided)
22
- * @param radius - Sphere radius
23
- * @param bone - Optional bone node to follow
24
- */ constructor(center, radius, bone = null){
25
- super();
26
- this._center = center.clone();
27
- this._radius = Math.max(0, radius);
28
- this._bone = bone;
29
- this._localOffset = bone ? center.clone() : new Vector3();
30
- }
31
- /**
32
- * Get/set center position.
33
- */ get center() {
34
- if (this._bone) {
35
- // Calculate world position from bone
36
- const worldPos = new Vector3();
37
- const matrix = this._bone.worldMatrix;
38
- const offset = this._localOffset;
39
- worldPos.x = matrix.m00 * offset.x + matrix.m01 * offset.y + matrix.m02 * offset.z + matrix.m03;
40
- worldPos.y = matrix.m10 * offset.x + matrix.m11 * offset.y + matrix.m12 * offset.z + matrix.m13;
41
- worldPos.z = matrix.m20 * offset.x + matrix.m21 * offset.y + matrix.m22 * offset.z + matrix.m23;
42
- return worldPos;
43
- }
44
- return this._center;
45
- }
46
- set center(value) {
47
- if (this._bone) {
48
- this._localOffset.set(value);
49
- } else {
50
- this._center.set(value);
51
- }
52
- }
53
- /**
54
- * Get/set radius.
55
- */ get radius() {
56
- return this._radius;
57
- }
58
- set radius(value) {
59
- this._radius = Math.max(0, value);
60
- }
61
- /**
62
- * Get/set bone node.
63
- */ get bone() {
64
- return this._bone;
65
- }
66
- set bone(value) {
67
- this._bone = value;
68
- }
69
- /**
70
- * Test collision with a point and resolve it.
71
- */ collide(position, radius) {
72
- const center = this.center;
73
- const direction = Vector3.sub(position, center, new Vector3());
74
- const distance = direction.magnitude;
75
- const minDistance = this._radius + radius;
76
- if (distance < minDistance && distance > 0.000001) {
77
- // Collision detected, push the point out
78
- direction.scaleBy(1 / distance);
79
- const penetration = minDistance - distance;
80
- position.addBy(Vector3.scale(direction, penetration, new Vector3()));
81
- return true;
82
- }
83
- return false;
84
- }
85
- }
86
- /**
87
- * Capsule collider for spring bones.
88
- *
89
- * @remarks
90
- * A capsule is defined by two sphere centers and a radius.
91
- * Useful for limbs like arms and legs.
92
- *
93
- * @public
94
- */ class CapsuleCollider extends SpringBoneCollider {
95
- /** Start point in world space */ _start;
96
- /** End point in world space */ _end;
97
- /** Capsule radius */ _radius;
98
- /** Optional bone node for start point */ _startBone;
99
- /** Optional bone node for end point */ _endBone;
100
- /** Local offset for start point */ _startOffset;
101
- /** Local offset for end point */ _endOffset;
102
- /**
103
- * Create a capsule collider.
104
- *
105
- * @param start - Start point in world space (or local offset if startBone is provided)
106
- * @param end - End point in world space (or local offset if endBone is provided)
107
- * @param radius - Capsule radius
108
- * @param startBone - Optional bone node for start point
109
- * @param endBone - Optional bone node for end point
110
- */ constructor(start, end, radius, startBone = null, endBone = null){
111
- super();
112
- this._start = start.clone();
113
- this._end = end.clone();
114
- this._radius = Math.max(0, radius);
115
- this._startBone = startBone;
116
- this._endBone = endBone;
117
- this._startOffset = startBone ? start.clone() : new Vector3();
118
- this._endOffset = endBone ? end.clone() : new Vector3();
119
- }
120
- /**
121
- * Get start point in world space.
122
- */ get start() {
123
- if (this._startBone) {
124
- const worldPos = new Vector3();
125
- const matrix = this._startBone.worldMatrix;
126
- const offset = this._startOffset;
127
- worldPos.x = matrix.m00 * offset.x + matrix.m01 * offset.y + matrix.m02 * offset.z + matrix.m03;
128
- worldPos.y = matrix.m10 * offset.x + matrix.m11 * offset.y + matrix.m12 * offset.z + matrix.m13;
129
- worldPos.z = matrix.m20 * offset.x + matrix.m21 * offset.y + matrix.m22 * offset.z + matrix.m23;
130
- return worldPos;
131
- }
132
- return this._start;
133
- }
134
- /**
135
- * Get end point in world space.
136
- */ get end() {
137
- if (this._endBone) {
138
- const worldPos = new Vector3();
139
- const matrix = this._endBone.worldMatrix;
140
- const offset = this._endOffset;
141
- worldPos.x = matrix.m00 * offset.x + matrix.m01 * offset.y + matrix.m02 * offset.z + matrix.m03;
142
- worldPos.y = matrix.m10 * offset.x + matrix.m11 * offset.y + matrix.m12 * offset.z + matrix.m13;
143
- worldPos.z = matrix.m20 * offset.x + matrix.m21 * offset.y + matrix.m22 * offset.z + matrix.m23;
144
- return worldPos;
145
- }
146
- return this._end;
147
- }
148
- /**
149
- * Get/set radius.
150
- */ get radius() {
151
- return this._radius;
152
- }
153
- set radius(value) {
154
- this._radius = Math.max(0, value);
155
- }
156
- /**
157
- * Test collision with a point and resolve it.
158
- */ collide(position, radius) {
159
- const start = this.start;
160
- const end = this.end;
161
- // Calculate closest point on capsule line segment
162
- const line = Vector3.sub(end, start, new Vector3());
163
- const lineLength = line.magnitude;
164
- if (lineLength < 0.000001) {
165
- // Degenerate capsule, treat as sphere
166
- const direction = Vector3.sub(position, start, new Vector3());
167
- const distance = direction.magnitude;
168
- const minDistance = this._radius + radius;
169
- if (distance < minDistance && distance > 0.000001) {
170
- direction.scaleBy(1 / distance);
171
- const penetration = minDistance - distance;
172
- position.addBy(Vector3.scale(direction, penetration, new Vector3()));
173
- return true;
174
- }
175
- return false;
176
- }
177
- const lineDir = Vector3.scale(line, 1 / lineLength, new Vector3());
178
- const toPoint = Vector3.sub(position, start, new Vector3());
179
- const t = Math.max(0, Math.min(lineLength, Vector3.dot(toPoint, lineDir)));
180
- // Closest point on line segment
181
- const closestPoint = Vector3.add(start, Vector3.scale(lineDir, t, new Vector3()), new Vector3());
182
- // Check distance from closest point
183
- const direction = Vector3.sub(position, closestPoint, new Vector3());
184
- const distance = direction.magnitude;
185
- const minDistance = this._radius + radius;
186
- if (distance < minDistance && distance > 0.000001) {
187
- // Collision detected, push the point out
188
- direction.scaleBy(1 / distance);
189
- const penetration = minDistance - distance;
190
- position.addBy(Vector3.scale(direction, penetration, new Vector3()));
191
- return true;
192
- }
193
- return false;
194
- }
195
- }
196
-
197
- export { CapsuleCollider, SphereCollider, SpringBoneCollider };
198
- //# sourceMappingURL=spring_bone_collider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spring_bone_collider.js","sources":["../../../src/animation/spring/spring_bone_collider.ts"],"sourcesContent":["import { Vector3 } from '@zephyr3d/base';\r\nimport type { SceneNode } from '../../scene/scene_node';\r\n\r\n/**\r\n * Base class for spring bone colliders.\r\n *\r\n * @public\r\n */\r\nexport abstract class SpringBoneCollider {\r\n /**\r\n * Test collision with a point and resolve it.\r\n *\r\n * @param position - Point position in world space\r\n * @param radius - Point radius\r\n * @returns True if collision occurred and was resolved\r\n */\r\n abstract collide(position: Vector3, radius: number): boolean;\r\n}\r\n\r\n/**\r\n * Sphere collider for spring bones.\r\n *\r\n * @public\r\n */\r\nexport class SphereCollider extends SpringBoneCollider {\r\n /** Center position in world space */\r\n private _center: Vector3;\r\n /** Sphere radius */\r\n private _radius: number;\r\n /** Optional bone node to follow */\r\n private _bone: SceneNode | null;\r\n /** Local offset from bone (if bone is set) */\r\n private _localOffset: Vector3;\r\n\r\n /**\r\n * Create a sphere collider.\r\n *\r\n * @param center - Center position in world space (or local offset if bone is provided)\r\n * @param radius - Sphere radius\r\n * @param bone - Optional bone node to follow\r\n */\r\n constructor(center: Vector3, radius: number, bone: SceneNode | null = null) {\r\n super();\r\n this._center = center.clone();\r\n this._radius = Math.max(0, radius);\r\n this._bone = bone;\r\n this._localOffset = bone ? center.clone() : new Vector3();\r\n }\r\n\r\n /**\r\n * Get/set center position.\r\n */\r\n get center(): Vector3 {\r\n if (this._bone) {\r\n // Calculate world position from bone\r\n const worldPos = new Vector3();\r\n const matrix = this._bone.worldMatrix;\r\n const offset = this._localOffset;\r\n worldPos.x = matrix.m00 * offset.x + matrix.m01 * offset.y + matrix.m02 * offset.z + matrix.m03;\r\n worldPos.y = matrix.m10 * offset.x + matrix.m11 * offset.y + matrix.m12 * offset.z + matrix.m13;\r\n worldPos.z = matrix.m20 * offset.x + matrix.m21 * offset.y + matrix.m22 * offset.z + matrix.m23;\r\n return worldPos;\r\n }\r\n return this._center;\r\n }\r\n\r\n set center(value: Vector3) {\r\n if (this._bone) {\r\n this._localOffset.set(value);\r\n } else {\r\n this._center.set(value);\r\n }\r\n }\r\n\r\n /**\r\n * Get/set radius.\r\n */\r\n get radius(): number {\r\n return this._radius;\r\n }\r\n\r\n set radius(value: number) {\r\n this._radius = Math.max(0, value);\r\n }\r\n\r\n /**\r\n * Get/set bone node.\r\n */\r\n get bone(): SceneNode | null {\r\n return this._bone;\r\n }\r\n\r\n set bone(value: SceneNode | null) {\r\n this._bone = value;\r\n }\r\n\r\n /**\r\n * Test collision with a point and resolve it.\r\n */\r\n collide(position: Vector3, radius: number): boolean {\r\n const center = this.center;\r\n const direction = Vector3.sub(position, center, new Vector3());\r\n const distance = direction.magnitude;\r\n const minDistance = this._radius + radius;\r\n\r\n if (distance < minDistance && distance > 0.000001) {\r\n // Collision detected, push the point out\r\n direction.scaleBy(1 / distance);\r\n const penetration = minDistance - distance;\r\n position.addBy(Vector3.scale(direction, penetration, new Vector3()));\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Capsule collider for spring bones.\r\n *\r\n * @remarks\r\n * A capsule is defined by two sphere centers and a radius.\r\n * Useful for limbs like arms and legs.\r\n *\r\n * @public\r\n */\r\nexport class CapsuleCollider extends SpringBoneCollider {\r\n /** Start point in world space */\r\n private _start: Vector3;\r\n /** End point in world space */\r\n private _end: Vector3;\r\n /** Capsule radius */\r\n private _radius: number;\r\n /** Optional bone node for start point */\r\n private _startBone: SceneNode | null;\r\n /** Optional bone node for end point */\r\n private _endBone: SceneNode | null;\r\n /** Local offset for start point */\r\n private _startOffset: Vector3;\r\n /** Local offset for end point */\r\n private _endOffset: Vector3;\r\n\r\n /**\r\n * Create a capsule collider.\r\n *\r\n * @param start - Start point in world space (or local offset if startBone is provided)\r\n * @param end - End point in world space (or local offset if endBone is provided)\r\n * @param radius - Capsule radius\r\n * @param startBone - Optional bone node for start point\r\n * @param endBone - Optional bone node for end point\r\n */\r\n constructor(\r\n start: Vector3,\r\n end: Vector3,\r\n radius: number,\r\n startBone: SceneNode | null = null,\r\n endBone: SceneNode | null = null\r\n ) {\r\n super();\r\n this._start = start.clone();\r\n this._end = end.clone();\r\n this._radius = Math.max(0, radius);\r\n this._startBone = startBone;\r\n this._endBone = endBone;\r\n this._startOffset = startBone ? start.clone() : new Vector3();\r\n this._endOffset = endBone ? end.clone() : new Vector3();\r\n }\r\n\r\n /**\r\n * Get start point in world space.\r\n */\r\n get start(): Vector3 {\r\n if (this._startBone) {\r\n const worldPos = new Vector3();\r\n const matrix = this._startBone.worldMatrix;\r\n const offset = this._startOffset;\r\n worldPos.x = matrix.m00 * offset.x + matrix.m01 * offset.y + matrix.m02 * offset.z + matrix.m03;\r\n worldPos.y = matrix.m10 * offset.x + matrix.m11 * offset.y + matrix.m12 * offset.z + matrix.m13;\r\n worldPos.z = matrix.m20 * offset.x + matrix.m21 * offset.y + matrix.m22 * offset.z + matrix.m23;\r\n return worldPos;\r\n }\r\n return this._start;\r\n }\r\n\r\n /**\r\n * Get end point in world space.\r\n */\r\n get end(): Vector3 {\r\n if (this._endBone) {\r\n const worldPos = new Vector3();\r\n const matrix = this._endBone.worldMatrix;\r\n const offset = this._endOffset;\r\n worldPos.x = matrix.m00 * offset.x + matrix.m01 * offset.y + matrix.m02 * offset.z + matrix.m03;\r\n worldPos.y = matrix.m10 * offset.x + matrix.m11 * offset.y + matrix.m12 * offset.z + matrix.m13;\r\n worldPos.z = matrix.m20 * offset.x + matrix.m21 * offset.y + matrix.m22 * offset.z + matrix.m23;\r\n return worldPos;\r\n }\r\n return this._end;\r\n }\r\n\r\n /**\r\n * Get/set radius.\r\n */\r\n get radius(): number {\r\n return this._radius;\r\n }\r\n\r\n set radius(value: number) {\r\n this._radius = Math.max(0, value);\r\n }\r\n\r\n /**\r\n * Test collision with a point and resolve it.\r\n */\r\n collide(position: Vector3, radius: number): boolean {\r\n const start = this.start;\r\n const end = this.end;\r\n\r\n // Calculate closest point on capsule line segment\r\n const line = Vector3.sub(end, start, new Vector3());\r\n const lineLength = line.magnitude;\r\n\r\n if (lineLength < 0.000001) {\r\n // Degenerate capsule, treat as sphere\r\n const direction = Vector3.sub(position, start, new Vector3());\r\n const distance = direction.magnitude;\r\n const minDistance = this._radius + radius;\r\n\r\n if (distance < minDistance && distance > 0.000001) {\r\n direction.scaleBy(1 / distance);\r\n const penetration = minDistance - distance;\r\n position.addBy(Vector3.scale(direction, penetration, new Vector3()));\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n const lineDir = Vector3.scale(line, 1 / lineLength, new Vector3());\r\n const toPoint = Vector3.sub(position, start, new Vector3());\r\n const t = Math.max(0, Math.min(lineLength, Vector3.dot(toPoint, lineDir)));\r\n\r\n // Closest point on line segment\r\n const closestPoint = Vector3.add(start, Vector3.scale(lineDir, t, new Vector3()), new Vector3());\r\n\r\n // Check distance from closest point\r\n const direction = Vector3.sub(position, closestPoint, new Vector3());\r\n const distance = direction.magnitude;\r\n const minDistance = this._radius + radius;\r\n\r\n if (distance < minDistance && distance > 0.000001) {\r\n // Collision detected, push the point out\r\n direction.scaleBy(1 / distance);\r\n const penetration = minDistance - distance;\r\n position.addBy(Vector3.scale(direction, penetration, new Vector3()));\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n"],"names":["SpringBoneCollider","SphereCollider","center","radius","bone","_center","clone","_radius","Math","max","_bone","_localOffset","Vector3","worldPos","matrix","worldMatrix","offset","x","m00","m01","y","m02","z","m03","m10","m11","m12","m13","m20","m21","m22","m23","value","set","collide","position","direction","sub","distance","magnitude","minDistance","scaleBy","penetration","addBy","scale","CapsuleCollider","start","end","startBone","endBone","_start","_end","_startBone","_endBone","_startOffset","_endOffset","line","lineLength","lineDir","toPoint","t","min","dot","closestPoint","add"],"mappings":"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"}
@@ -1,170 +0,0 @@
1
- import { Vector3 } from '@zephyr3d/base';
2
-
3
- /**
4
- * Base class for spring bone constraints.
5
- *
6
- * @remarks
7
- * Constraints are applied after physics simulation to enforce
8
- * additional rules between spring bones.
9
- *
10
- * @public
11
- */ class SpringBoneConstraint {
12
- }
13
- /**
14
- * Distance constraint between two spring bones.
15
- *
16
- * @remarks
17
- * Maintains a distance range between two spring bones.
18
- * Useful for preventing penetration and excessive stretching between
19
- * adjacent chains (e.g., skirt panels).
20
- *
21
- * @public
22
- */ class DistanceConstraint extends SpringBoneConstraint {
23
- /** First spring bone */ _bone1;
24
- /** Second spring bone */ _bone2;
25
- /** Minimum distance (prevents penetration) */ _minDistance;
26
- /** Maximum distance (prevents excessive stretching) */ _maxDistance;
27
- /** Constraint stiffness (0-1, how strongly to enforce) */ _stiffness;
28
- /**
29
- * Create a distance constraint.
30
- *
31
- * @param bone1 - First spring bone
32
- * @param bone2 - Second spring bone
33
- * @param minDistance - Minimum distance (default: 0.01)
34
- * @param maxDistance - Maximum distance (default: 0.2)
35
- * @param stiffness - Constraint stiffness (0-1, default: 0.5)
36
- */ constructor(bone1, bone2, minDistance = 0.01, maxDistance = 0.2, stiffness = 0.5){
37
- super();
38
- this._bone1 = bone1;
39
- this._bone2 = bone2;
40
- this._minDistance = Math.max(0, minDistance);
41
- this._maxDistance = Math.max(this._minDistance, maxDistance);
42
- this._stiffness = Math.max(0, Math.min(1, stiffness));
43
- }
44
- /**
45
- * Get/set minimum distance.
46
- */ get minDistance() {
47
- return this._minDistance;
48
- }
49
- set minDistance(value) {
50
- this._minDistance = Math.max(0, value);
51
- this._maxDistance = Math.max(this._minDistance, this._maxDistance);
52
- }
53
- /**
54
- * Get/set maximum distance.
55
- */ get maxDistance() {
56
- return this._maxDistance;
57
- }
58
- set maxDistance(value) {
59
- this._maxDistance = Math.max(this._minDistance, value);
60
- }
61
- /**
62
- * Get/set stiffness.
63
- */ get stiffness() {
64
- return this._stiffness;
65
- }
66
- set stiffness(value) {
67
- this._stiffness = Math.max(0, Math.min(1, value));
68
- }
69
- /**
70
- * Apply the distance constraint.
71
- */ apply() {
72
- const pos1 = this._bone1.currentPosition;
73
- const pos2 = this._bone2.currentPosition;
74
- // Calculate current distance
75
- const direction = Vector3.sub(pos2, pos1, new Vector3());
76
- const distance = direction.magnitude;
77
- if (distance < 0.000001) {
78
- return; // Bones are at same position
79
- }
80
- const directionNorm = Vector3.scale(direction, 1 / distance, new Vector3());
81
- let correction = 0;
82
- if (distance < this._minDistance) {
83
- // Too close, push apart
84
- correction = (this._minDistance - distance) * 0.5 * this._stiffness;
85
- } else if (distance > this._maxDistance) {
86
- // Too far, pull together
87
- correction = (this._maxDistance - distance) * 0.5 * this._stiffness;
88
- } else {
89
- // Within range, no correction needed
90
- return;
91
- }
92
- // Apply correction to both bones (equal and opposite)
93
- const offset = Vector3.scale(directionNorm, correction, new Vector3());
94
- pos1.addBy(Vector3.scale(offset, -1, new Vector3()));
95
- pos2.addBy(offset);
96
- }
97
- }
98
- /**
99
- * Circular constraint for skirt-like structures.
100
- *
101
- * @remarks
102
- * Maintains distance constraints between adjacent bones in a circular arrangement.
103
- * Automatically creates distance constraints between neighboring chains.
104
- *
105
- * @public
106
- */ class CircularConstraint extends SpringBoneConstraint {
107
- /** Array of spring bone chains arranged in a circle */ _chains;
108
- /** Distance constraints between adjacent chains */ _constraints;
109
- /** Minimum distance between adjacent bones */ _minDistance;
110
- /** Maximum distance between adjacent bones */ _maxDistance;
111
- /** Constraint stiffness */ _stiffness;
112
- /**
113
- * Create a circular constraint.
114
- *
115
- * @param chains - Array of spring bone chains arranged in a circle
116
- * @param minDistance - Minimum distance between adjacent bones (default: 0.05)
117
- * @param maxDistance - Maximum distance between adjacent bones (default: 0.15)
118
- * @param stiffness - Constraint stiffness (0-1, default: 0.5)
119
- */ constructor(chains, minDistance = 0.05, maxDistance = 0.15, stiffness = 0.5){
120
- super();
121
- this._chains = chains;
122
- this._minDistance = minDistance;
123
- this._maxDistance = maxDistance;
124
- this._stiffness = stiffness;
125
- this._constraints = [];
126
- this._buildConstraints();
127
- }
128
- /**
129
- * Build distance constraints between adjacent chains.
130
- */ _buildConstraints() {
131
- this._constraints = [];
132
- if (this._chains.length < 2) {
133
- return; // Need at least 2 chains
134
- }
135
- // For each level (depth in the chain)
136
- const maxDepth = Math.min(...this._chains.map((chain)=>chain.length));
137
- for(let depth = 0; depth < maxDepth; depth++){
138
- // Connect adjacent chains
139
- for(let i = 0; i < this._chains.length; i++){
140
- const nextIndex = (i + 1) % this._chains.length; // Wrap around
141
- const bone1 = this._chains[i][depth];
142
- const bone2 = this._chains[nextIndex][depth];
143
- if (bone1 && bone2) {
144
- const constraint = new DistanceConstraint(bone1, bone2, this._minDistance, this._maxDistance, this._stiffness);
145
- this._constraints.push(constraint);
146
- }
147
- }
148
- }
149
- }
150
- /**
151
- * Rebuild constraints (call after modifying chains).
152
- */ rebuild() {
153
- this._buildConstraints();
154
- }
155
- /**
156
- * Apply all distance constraints.
157
- */ apply() {
158
- for (const constraint of this._constraints){
159
- constraint.apply();
160
- }
161
- }
162
- /**
163
- * Get all distance constraints.
164
- */ get constraints() {
165
- return this._constraints;
166
- }
167
- }
168
-
169
- export { CircularConstraint, DistanceConstraint, SpringBoneConstraint };
170
- //# sourceMappingURL=spring_bone_constraint.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spring_bone_constraint.js","sources":["../../../src/animation/spring/spring_bone_constraint.ts"],"sourcesContent":["import { Vector3 } from '@zephyr3d/base';\r\nimport type { SpringBone } from './spring_bone';\r\n\r\n/**\r\n * Base class for spring bone constraints.\r\n *\r\n * @remarks\r\n * Constraints are applied after physics simulation to enforce\r\n * additional rules between spring bones.\r\n *\r\n * @public\r\n */\r\nexport abstract class SpringBoneConstraint {\r\n /**\r\n * Apply the constraint.\r\n *\r\n * @remarks\r\n * This method modifies the positions of spring bones to satisfy the constraint.\r\n */\r\n abstract apply(): void;\r\n}\r\n\r\n/**\r\n * Distance constraint between two spring bones.\r\n *\r\n * @remarks\r\n * Maintains a distance range between two spring bones.\r\n * Useful for preventing penetration and excessive stretching between\r\n * adjacent chains (e.g., skirt panels).\r\n *\r\n * @public\r\n */\r\nexport class DistanceConstraint extends SpringBoneConstraint {\r\n /** First spring bone */\r\n private _bone1: SpringBone;\r\n /** Second spring bone */\r\n private _bone2: SpringBone;\r\n /** Minimum distance (prevents penetration) */\r\n private _minDistance: number;\r\n /** Maximum distance (prevents excessive stretching) */\r\n private _maxDistance: number;\r\n /** Constraint stiffness (0-1, how strongly to enforce) */\r\n private _stiffness: number;\r\n\r\n /**\r\n * Create a distance constraint.\r\n *\r\n * @param bone1 - First spring bone\r\n * @param bone2 - Second spring bone\r\n * @param minDistance - Minimum distance (default: 0.01)\r\n * @param maxDistance - Maximum distance (default: 0.2)\r\n * @param stiffness - Constraint stiffness (0-1, default: 0.5)\r\n */\r\n constructor(\r\n bone1: SpringBone,\r\n bone2: SpringBone,\r\n minDistance = 0.01,\r\n maxDistance = 0.2,\r\n stiffness = 0.5\r\n ) {\r\n super();\r\n this._bone1 = bone1;\r\n this._bone2 = bone2;\r\n this._minDistance = Math.max(0, minDistance);\r\n this._maxDistance = Math.max(this._minDistance, maxDistance);\r\n this._stiffness = Math.max(0, Math.min(1, stiffness));\r\n }\r\n\r\n /**\r\n * Get/set minimum distance.\r\n */\r\n get minDistance(): number {\r\n return this._minDistance;\r\n }\r\n\r\n set minDistance(value: number) {\r\n this._minDistance = Math.max(0, value);\r\n this._maxDistance = Math.max(this._minDistance, this._maxDistance);\r\n }\r\n\r\n /**\r\n * Get/set maximum distance.\r\n */\r\n get maxDistance(): number {\r\n return this._maxDistance;\r\n }\r\n\r\n set maxDistance(value: number) {\r\n this._maxDistance = Math.max(this._minDistance, value);\r\n }\r\n\r\n /**\r\n * Get/set stiffness.\r\n */\r\n get stiffness(): number {\r\n return this._stiffness;\r\n }\r\n\r\n set stiffness(value: number) {\r\n this._stiffness = Math.max(0, Math.min(1, value));\r\n }\r\n\r\n /**\r\n * Apply the distance constraint.\r\n */\r\n apply(): void {\r\n const pos1 = this._bone1.currentPosition;\r\n const pos2 = this._bone2.currentPosition;\r\n\r\n // Calculate current distance\r\n const direction = Vector3.sub(pos2, pos1, new Vector3());\r\n const distance = direction.magnitude;\r\n\r\n if (distance < 0.000001) {\r\n return; // Bones are at same position\r\n }\r\n\r\n const directionNorm = Vector3.scale(direction, 1 / distance, new Vector3());\r\n\r\n let correction = 0;\r\n\r\n if (distance < this._minDistance) {\r\n // Too close, push apart\r\n correction = (this._minDistance - distance) * 0.5 * this._stiffness;\r\n } else if (distance > this._maxDistance) {\r\n // Too far, pull together\r\n correction = (this._maxDistance - distance) * 0.5 * this._stiffness;\r\n } else {\r\n // Within range, no correction needed\r\n return;\r\n }\r\n\r\n // Apply correction to both bones (equal and opposite)\r\n const offset = Vector3.scale(directionNorm, correction, new Vector3());\r\n pos1.addBy(Vector3.scale(offset, -1, new Vector3()));\r\n pos2.addBy(offset);\r\n }\r\n}\r\n\r\n/**\r\n * Circular constraint for skirt-like structures.\r\n *\r\n * @remarks\r\n * Maintains distance constraints between adjacent bones in a circular arrangement.\r\n * Automatically creates distance constraints between neighboring chains.\r\n *\r\n * @public\r\n */\r\nexport class CircularConstraint extends SpringBoneConstraint {\r\n /** Array of spring bone chains arranged in a circle */\r\n private _chains: SpringBone[][];\r\n /** Distance constraints between adjacent chains */\r\n private _constraints: DistanceConstraint[];\r\n /** Minimum distance between adjacent bones */\r\n private _minDistance: number;\r\n /** Maximum distance between adjacent bones */\r\n private _maxDistance: number;\r\n /** Constraint stiffness */\r\n private _stiffness: number;\r\n\r\n /**\r\n * Create a circular constraint.\r\n *\r\n * @param chains - Array of spring bone chains arranged in a circle\r\n * @param minDistance - Minimum distance between adjacent bones (default: 0.05)\r\n * @param maxDistance - Maximum distance between adjacent bones (default: 0.15)\r\n * @param stiffness - Constraint stiffness (0-1, default: 0.5)\r\n */\r\n constructor(\r\n chains: SpringBone[][],\r\n minDistance = 0.05,\r\n maxDistance = 0.15,\r\n stiffness = 0.5\r\n ) {\r\n super();\r\n this._chains = chains;\r\n this._minDistance = minDistance;\r\n this._maxDistance = maxDistance;\r\n this._stiffness = stiffness;\r\n this._constraints = [];\r\n\r\n this._buildConstraints();\r\n }\r\n\r\n /**\r\n * Build distance constraints between adjacent chains.\r\n */\r\n private _buildConstraints(): void {\r\n this._constraints = [];\r\n\r\n if (this._chains.length < 2) {\r\n return; // Need at least 2 chains\r\n }\r\n\r\n // For each level (depth in the chain)\r\n const maxDepth = Math.min(...this._chains.map(chain => chain.length));\r\n\r\n for (let depth = 0; depth < maxDepth; depth++) {\r\n // Connect adjacent chains\r\n for (let i = 0; i < this._chains.length; i++) {\r\n const nextIndex = (i + 1) % this._chains.length; // Wrap around\r\n\r\n const bone1 = this._chains[i][depth];\r\n const bone2 = this._chains[nextIndex][depth];\r\n\r\n if (bone1 && bone2) {\r\n const constraint = new DistanceConstraint(\r\n bone1,\r\n bone2,\r\n this._minDistance,\r\n this._maxDistance,\r\n this._stiffness\r\n );\r\n this._constraints.push(constraint);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Rebuild constraints (call after modifying chains).\r\n */\r\n rebuild(): void {\r\n this._buildConstraints();\r\n }\r\n\r\n /**\r\n * Apply all distance constraints.\r\n */\r\n apply(): void {\r\n for (const constraint of this._constraints) {\r\n constraint.apply();\r\n }\r\n }\r\n\r\n /**\r\n * Get all distance constraints.\r\n */\r\n get constraints(): readonly DistanceConstraint[] {\r\n return this._constraints;\r\n }\r\n}\r\n"],"names":["SpringBoneConstraint","DistanceConstraint","bone1","bone2","minDistance","maxDistance","stiffness","_bone1","_bone2","_minDistance","Math","max","_maxDistance","_stiffness","min","value","apply","pos1","currentPosition","pos2","direction","Vector3","sub","distance","magnitude","directionNorm","scale","correction","offset","addBy","CircularConstraint","chains","_chains","_constraints","_buildConstraints","length","maxDepth","map","chain","depth","i","nextIndex","constraint","push","rebuild","constraints"],"mappings":"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"}