@zephyr3d/scene 0.9.2 → 0.9.4

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 (513) hide show
  1. package/dist/animation/animationset.js +135 -135
  2. package/dist/animation/animationset.js.map +1 -1
  3. package/dist/animation/ik/ik_chain_builder.js +68 -0
  4. package/dist/animation/ik/ik_chain_builder.js.map +1 -0
  5. package/dist/animation/ik/ik_pole_constraint.js +2 -7
  6. package/dist/animation/ik/ik_pole_constraint.js.map +1 -1
  7. package/dist/animation/joint_dynamics/controller.js +146 -146
  8. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  9. package/dist/animation/joint_dynamics/math.js +16 -0
  10. package/dist/animation/joint_dynamics/math.js.map +1 -0
  11. package/dist/animation/spring/spring_system.js +75 -75
  12. package/dist/animation/spring/spring_system.js.map +1 -1
  13. package/dist/animation/spring2/constraints.js.map +1 -1
  14. package/dist/animation/spring2/controller.js +64 -64
  15. package/dist/animation/spring2/controller.js.map +1 -1
  16. package/dist/animation/spring2/math.js.map +1 -1
  17. package/dist/animation/spring2/spring_system.js +8 -8
  18. package/dist/animation/spring2/spring_system.js.map +1 -1
  19. package/dist/app/engine.js +119 -71
  20. package/dist/app/engine.js.map +1 -1
  21. package/dist/asset/assetmanager.js +296 -244
  22. package/dist/asset/assetmanager.js.map +1 -1
  23. package/dist/asset/loaders/gltf/gltf_loader.js +1 -0
  24. package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
  25. package/dist/camera/camera.js +184 -184
  26. package/dist/camera/camera.js.map +1 -1
  27. package/dist/index.d.ts +685 -38
  28. package/dist/index.js +11 -2
  29. package/dist/index.js.map +1 -1
  30. package/dist/material/material.js +290 -290
  31. package/dist/material/material.js.map +1 -1
  32. package/dist/material/msdf_text.js +180 -0
  33. package/dist/material/msdf_text.js.map +1 -0
  34. package/dist/material/msdf_text_sprite.js +64 -0
  35. package/dist/material/msdf_text_sprite.js.map +1 -0
  36. package/dist/material/pbrblueprint.js +123 -108
  37. package/dist/material/pbrblueprint.js.map +1 -1
  38. package/dist/material/shader/helper.js +6 -3
  39. package/dist/material/shader/helper.js.map +1 -1
  40. package/dist/material/sprite_sdf.js +106 -0
  41. package/dist/material/sprite_sdf.js.map +1 -0
  42. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
  43. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
  44. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
  45. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
  46. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
  47. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
  48. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
  49. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
  50. package/dist/posteffect/ssr.js +1 -0
  51. package/dist/posteffect/ssr.js.map +1 -1
  52. package/dist/render/abuffer_oit.js +1 -0
  53. package/dist/render/abuffer_oit.js.map +1 -1
  54. package/dist/render/cluster_light.js +3 -4
  55. package/dist/render/cluster_light.js.map +1 -1
  56. package/dist/render/cull_visitor.js +28 -0
  57. package/dist/render/cull_visitor.js.map +1 -1
  58. package/dist/render/drawable.js.map +1 -1
  59. package/dist/render/drawable_mixin.js +1 -0
  60. package/dist/render/drawable_mixin.js.map +1 -1
  61. package/dist/render/fbm_wavegenerator.js +1 -0
  62. package/dist/render/fbm_wavegenerator.js.map +1 -1
  63. package/dist/render/gerstner_wavegenerator.js +1 -0
  64. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  65. package/dist/render/globalbindgroup_allocator.js +1 -0
  66. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  67. package/dist/render/render_queue.js +1 -0
  68. package/dist/render/render_queue.js.map +1 -1
  69. package/dist/render/rendergraph/history_resource_manager.js +93 -93
  70. package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
  71. package/dist/render/rendergraph/history_resources.js +3 -3
  72. package/dist/render/rendergraph/history_resources.js.map +1 -1
  73. package/dist/render/rendergraph/types.js +22 -22
  74. package/dist/render/rendergraph/types.js.map +1 -1
  75. package/dist/scene/basesprite.js +1 -5
  76. package/dist/scene/basesprite.js.map +1 -1
  77. package/dist/scene/batchgroup.js +29 -17
  78. package/dist/scene/batchgroup.js.map +1 -1
  79. package/dist/scene/environment.js +1 -0
  80. package/dist/scene/environment.js.map +1 -1
  81. package/dist/scene/mesh.js +8 -9
  82. package/dist/scene/mesh.js.map +1 -1
  83. package/dist/scene/meshdrawable.js +96 -0
  84. package/dist/scene/meshdrawable.js.map +1 -0
  85. package/dist/scene/msdftext.js +341 -0
  86. package/dist/scene/msdftext.js.map +1 -0
  87. package/dist/scene/msdftextsprite.js +349 -0
  88. package/dist/scene/msdftextsprite.js.map +1 -0
  89. package/dist/scene/particlesys.js +1 -0
  90. package/dist/scene/particlesys.js.map +1 -1
  91. package/dist/scene/scene.js +1 -0
  92. package/dist/scene/scene.js.map +1 -1
  93. package/dist/scene/scene_node.js +6 -0
  94. package/dist/scene/scene_node.js.map +1 -1
  95. package/dist/scene/sdftextsprite.js +322 -0
  96. package/dist/scene/sdftextsprite.js.map +1 -0
  97. package/dist/scene/terrain-cm/grass.js +1 -0
  98. package/dist/scene/terrain-cm/grass.js.map +1 -1
  99. package/dist/scene/terrain-cm/grassmaterial.js +1 -0
  100. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  101. package/dist/scene/terrain-cm/terrain-cm.js +1 -0
  102. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  103. package/dist/scene/textsprite.js +120 -0
  104. package/dist/scene/textsprite.js.map +1 -0
  105. package/dist/scene/water.js +1 -0
  106. package/dist/scene/water.js.map +1 -1
  107. package/dist/shadow/shader.js +1 -0
  108. package/dist/shadow/shader.js.map +1 -1
  109. package/dist/shapes/torus.js +90 -59
  110. package/dist/shapes/torus.js.map +1 -1
  111. package/dist/src/animation/animation.js +127 -0
  112. package/dist/src/animation/animation.js.map +1 -0
  113. package/dist/src/animation/animationset.js +255 -0
  114. package/dist/src/animation/animationset.js.map +1 -0
  115. package/dist/src/animation/animationtrack.js +34 -0
  116. package/dist/src/animation/animationtrack.js.map +1 -0
  117. package/dist/src/animation/eulerrotationtrack.js +52 -0
  118. package/dist/src/animation/eulerrotationtrack.js.map +1 -0
  119. package/dist/src/animation/morphtarget.js +93 -0
  120. package/dist/src/animation/morphtarget.js.map +1 -0
  121. package/dist/src/animation/morphtrack.js +70 -0
  122. package/dist/src/animation/morphtrack.js.map +1 -0
  123. package/dist/src/animation/proptrack.js +161 -0
  124. package/dist/src/animation/proptrack.js.map +1 -0
  125. package/dist/src/animation/rotationtrack.js +51 -0
  126. package/dist/src/animation/rotationtrack.js.map +1 -0
  127. package/dist/src/animation/scaletrack.js +50 -0
  128. package/dist/src/animation/scaletrack.js.map +1 -0
  129. package/dist/src/animation/skeleton.js +204 -0
  130. package/dist/src/animation/skeleton.js.map +1 -0
  131. package/dist/src/animation/translationtrack.js +50 -0
  132. package/dist/src/animation/translationtrack.js.map +1 -0
  133. package/dist/src/app/app.js +129 -0
  134. package/dist/src/app/app.js.map +1 -0
  135. package/dist/src/app/inputmgr.js +267 -0
  136. package/dist/src/app/inputmgr.js.map +1 -0
  137. package/dist/src/asset/assetmanager.js +404 -0
  138. package/dist/src/asset/assetmanager.js.map +1 -0
  139. package/dist/src/asset/builtin.js +337 -0
  140. package/dist/src/asset/builtin.js.map +1 -0
  141. package/dist/src/asset/loaders/dds/dds.js +470 -0
  142. package/dist/src/asset/loaders/dds/dds.js.map +1 -0
  143. package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
  144. package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
  145. package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
  146. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
  147. package/dist/src/asset/loaders/gltf/helpers.js +327 -0
  148. package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
  149. package/dist/src/asset/loaders/hdr/hdr.js +180 -0
  150. package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
  151. package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
  152. package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
  153. package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
  154. package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
  155. package/dist/src/asset/loaders/loader.js +45 -0
  156. package/dist/src/asset/loaders/loader.js.map +1 -0
  157. package/dist/src/asset/model.js +414 -0
  158. package/dist/src/asset/model.js.map +1 -0
  159. package/dist/src/blitter/bilateralblur.js +221 -0
  160. package/dist/src/blitter/bilateralblur.js.map +1 -0
  161. package/dist/src/blitter/blitter.js +390 -0
  162. package/dist/src/blitter/blitter.js.map +1 -0
  163. package/dist/src/blitter/box.js +118 -0
  164. package/dist/src/blitter/box.js.map +1 -0
  165. package/dist/src/blitter/copy.js +22 -0
  166. package/dist/src/blitter/copy.js.map +1 -0
  167. package/dist/src/blitter/gaussianblur.js +228 -0
  168. package/dist/src/blitter/gaussianblur.js.map +1 -0
  169. package/dist/src/camera/base.js +92 -0
  170. package/dist/src/camera/base.js.map +1 -0
  171. package/dist/src/camera/camera.js +1005 -0
  172. package/dist/src/camera/camera.js.map +1 -0
  173. package/dist/src/camera/fps.js +238 -0
  174. package/dist/src/camera/fps.js.map +1 -0
  175. package/dist/src/camera/orbit.js +245 -0
  176. package/dist/src/camera/orbit.js.map +1 -0
  177. package/dist/src/camera/orthocamera.js +167 -0
  178. package/dist/src/camera/orthocamera.js.map +1 -0
  179. package/dist/src/camera/perspectivecamera.js +141 -0
  180. package/dist/src/camera/perspectivecamera.js.map +1 -0
  181. package/dist/src/index.js +120 -0
  182. package/dist/src/index.js.map +1 -0
  183. package/dist/src/material/blinn.js +81 -0
  184. package/dist/src/material/blinn.js.map +1 -0
  185. package/dist/src/material/grassmaterial.js +113 -0
  186. package/dist/src/material/grassmaterial.js.map +1 -0
  187. package/dist/src/material/lambert.js +92 -0
  188. package/dist/src/material/lambert.js.map +1 -0
  189. package/dist/src/material/material.js +301 -0
  190. package/dist/src/material/material.js.map +1 -0
  191. package/dist/src/material/meshmaterial.js +704 -0
  192. package/dist/src/material/meshmaterial.js.map +1 -0
  193. package/dist/src/material/mixins/albedocolor.js +76 -0
  194. package/dist/src/material/mixins/albedocolor.js.map +1 -0
  195. package/dist/src/material/mixins/foliage.js +47 -0
  196. package/dist/src/material/mixins/foliage.js.map +1 -0
  197. package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
  198. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
  199. package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
  200. package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
  201. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
  202. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
  203. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
  204. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
  205. package/dist/src/material/mixins/lit.js +476 -0
  206. package/dist/src/material/mixins/lit.js.map +1 -0
  207. package/dist/src/material/mixins/pbr/common.js +918 -0
  208. package/dist/src/material/mixins/pbr/common.js.map +1 -0
  209. package/dist/src/material/mixins/texture.js +172 -0
  210. package/dist/src/material/mixins/texture.js.map +1 -0
  211. package/dist/src/material/mixins/vertexcolor.js +56 -0
  212. package/dist/src/material/mixins/vertexcolor.js.map +1 -0
  213. package/dist/src/material/particle.js +178 -0
  214. package/dist/src/material/particle.js.map +1 -0
  215. package/dist/src/material/pbrmr.js +97 -0
  216. package/dist/src/material/pbrmr.js.map +1 -0
  217. package/dist/src/material/pbrsg.js +97 -0
  218. package/dist/src/material/pbrsg.js.map +1 -0
  219. package/dist/src/material/shader/helper.js +1209 -0
  220. package/dist/src/material/shader/helper.js.map +1 -0
  221. package/dist/src/material/terrain-cm.js +606 -0
  222. package/dist/src/material/terrain-cm.js.map +1 -0
  223. package/dist/src/material/terrainmaterial.js +375 -0
  224. package/dist/src/material/terrainmaterial.js.map +1 -0
  225. package/dist/src/material/unlit.js +41 -0
  226. package/dist/src/material/unlit.js.map +1 -0
  227. package/dist/src/material/water.js +417 -0
  228. package/dist/src/material/water.js.map +1 -0
  229. package/dist/src/posteffect/bloom.js +361 -0
  230. package/dist/src/posteffect/bloom.js.map +1 -0
  231. package/dist/src/posteffect/compositor.js +226 -0
  232. package/dist/src/posteffect/compositor.js.map +1 -0
  233. package/dist/src/posteffect/fxaa.js +273 -0
  234. package/dist/src/posteffect/fxaa.js.map +1 -0
  235. package/dist/src/posteffect/grayscale.js +69 -0
  236. package/dist/src/posteffect/grayscale.js.map +1 -0
  237. package/dist/src/posteffect/motionblur.js +96 -0
  238. package/dist/src/posteffect/motionblur.js.map +1 -0
  239. package/dist/src/posteffect/posteffect.js +126 -0
  240. package/dist/src/posteffect/posteffect.js.map +1 -0
  241. package/dist/src/posteffect/sao.js +324 -0
  242. package/dist/src/posteffect/sao.js.map +1 -0
  243. package/dist/src/posteffect/ssr.js +489 -0
  244. package/dist/src/posteffect/ssr.js.map +1 -0
  245. package/dist/src/posteffect/taa.js +172 -0
  246. package/dist/src/posteffect/taa.js.map +1 -0
  247. package/dist/src/posteffect/tonemap.js +94 -0
  248. package/dist/src/posteffect/tonemap.js.map +1 -0
  249. package/dist/src/render/abuffer_oit.js +361 -0
  250. package/dist/src/render/abuffer_oit.js.map +1 -0
  251. package/dist/src/render/clipmap.js +851 -0
  252. package/dist/src/render/clipmap.js.map +1 -0
  253. package/dist/src/render/cluster_light.js +333 -0
  254. package/dist/src/render/cluster_light.js.map +1 -0
  255. package/dist/src/render/cull_visitor.js +187 -0
  256. package/dist/src/render/cull_visitor.js.map +1 -0
  257. package/dist/src/render/depthpass.js +68 -0
  258. package/dist/src/render/depthpass.js.map +1 -0
  259. package/dist/src/render/drawable_mixin.js +227 -0
  260. package/dist/src/render/drawable_mixin.js.map +1 -0
  261. package/dist/src/render/envlight.js +463 -0
  262. package/dist/src/render/envlight.js.map +1 -0
  263. package/dist/src/render/fbm_wavegenerator.js +251 -0
  264. package/dist/src/render/fbm_wavegenerator.js.map +1 -0
  265. package/dist/src/render/fft_wavegenerator.js +1006 -0
  266. package/dist/src/render/fft_wavegenerator.js.map +1 -0
  267. package/dist/src/render/fullscreenquad.js +38 -0
  268. package/dist/src/render/fullscreenquad.js.map +1 -0
  269. package/dist/src/render/gerstner_wavegenerator.js +314 -0
  270. package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
  271. package/dist/src/render/globalbindgroup_allocator.js +60 -0
  272. package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
  273. package/dist/src/render/hzb.js +273 -0
  274. package/dist/src/render/hzb.js.map +1 -0
  275. package/dist/src/render/lightpass.js +172 -0
  276. package/dist/src/render/lightpass.js.map +1 -0
  277. package/dist/src/render/objectcolorpass.js +51 -0
  278. package/dist/src/render/objectcolorpass.js.map +1 -0
  279. package/dist/src/render/primitive.js +364 -0
  280. package/dist/src/render/primitive.js.map +1 -0
  281. package/dist/src/render/render_queue.js +467 -0
  282. package/dist/src/render/render_queue.js.map +1 -0
  283. package/dist/src/render/renderbundle_wrapper.js +152 -0
  284. package/dist/src/render/renderbundle_wrapper.js.map +1 -0
  285. package/dist/src/render/renderer.js +455 -0
  286. package/dist/src/render/renderer.js.map +1 -0
  287. package/dist/src/render/renderpass.js +200 -0
  288. package/dist/src/render/renderpass.js.map +1 -0
  289. package/dist/src/render/shadowmap_pass.js +56 -0
  290. package/dist/src/render/shadowmap_pass.js.map +1 -0
  291. package/dist/src/render/sky.js +1103 -0
  292. package/dist/src/render/sky.js.map +1 -0
  293. package/dist/src/render/weightedblended_oit.js +168 -0
  294. package/dist/src/render/weightedblended_oit.js.map +1 -0
  295. package/dist/src/scene/batchgroup.js +162 -0
  296. package/dist/src/scene/batchgroup.js.map +1 -0
  297. package/dist/src/scene/environment.js +209 -0
  298. package/dist/src/scene/environment.js.map +1 -0
  299. package/dist/src/scene/graph_node.js +72 -0
  300. package/dist/src/scene/graph_node.js.map +1 -0
  301. package/dist/src/scene/light.js +416 -0
  302. package/dist/src/scene/light.js.map +1 -0
  303. package/dist/src/scene/mesh.js +341 -0
  304. package/dist/src/scene/mesh.js.map +1 -0
  305. package/dist/src/scene/octree.js +649 -0
  306. package/dist/src/scene/octree.js.map +1 -0
  307. package/dist/src/scene/particlesys.js +738 -0
  308. package/dist/src/scene/particlesys.js.map +1 -0
  309. package/dist/src/scene/raycast_visitor.js +103 -0
  310. package/dist/src/scene/raycast_visitor.js.map +1 -0
  311. package/dist/src/scene/scene.js +284 -0
  312. package/dist/src/scene/scene.js.map +1 -0
  313. package/dist/src/scene/scene_node.js +732 -0
  314. package/dist/src/scene/scene_node.js.map +1 -0
  315. package/dist/src/scene/terrain/grass.js +278 -0
  316. package/dist/src/scene/terrain/grass.js.map +1 -0
  317. package/dist/src/scene/terrain/heightfield.js +475 -0
  318. package/dist/src/scene/terrain/heightfield.js.map +1 -0
  319. package/dist/src/scene/terrain/patch.js +530 -0
  320. package/dist/src/scene/terrain/patch.js.map +1 -0
  321. package/dist/src/scene/terrain/quadtree.js +461 -0
  322. package/dist/src/scene/terrain/quadtree.js.map +1 -0
  323. package/dist/src/scene/terrain/terrain.js +246 -0
  324. package/dist/src/scene/terrain/terrain.js.map +1 -0
  325. package/dist/src/scene/terrain-cm/grass.js +594 -0
  326. package/dist/src/scene/terrain-cm/grass.js.map +1 -0
  327. package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
  328. package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
  329. package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
  330. package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
  331. package/dist/src/scene/water.js +374 -0
  332. package/dist/src/scene/water.js.map +1 -0
  333. package/dist/src/shaders/atmosphere.js +957 -0
  334. package/dist/src/shaders/atmosphere.js.map +1 -0
  335. package/dist/src/shaders/fog.js +112 -0
  336. package/dist/src/shaders/fog.js.map +1 -0
  337. package/dist/src/shaders/misc.js +266 -0
  338. package/dist/src/shaders/misc.js.map +1 -0
  339. package/dist/src/shaders/noise.js +222 -0
  340. package/dist/src/shaders/noise.js.map +1 -0
  341. package/dist/src/shaders/pbr.js +51 -0
  342. package/dist/src/shaders/pbr.js.map +1 -0
  343. package/dist/src/shaders/shadow.js +636 -0
  344. package/dist/src/shaders/shadow.js.map +1 -0
  345. package/dist/src/shaders/ssr.js +490 -0
  346. package/dist/src/shaders/ssr.js.map +1 -0
  347. package/dist/src/shaders/temporal.js +215 -0
  348. package/dist/src/shaders/temporal.js.map +1 -0
  349. package/dist/src/shaders/water.js +756 -0
  350. package/dist/src/shaders/water.js.map +1 -0
  351. package/dist/src/shadow/esm.js +237 -0
  352. package/dist/src/shadow/esm.js.map +1 -0
  353. package/dist/src/shadow/pcf_opt.js +181 -0
  354. package/dist/src/shadow/pcf_opt.js.map +1 -0
  355. package/dist/src/shadow/pcf_pd.js +189 -0
  356. package/dist/src/shadow/pcf_pd.js.map +1 -0
  357. package/dist/src/shadow/shader.js +37 -0
  358. package/dist/src/shadow/shader.js.map +1 -0
  359. package/dist/src/shadow/shadow_impl.js +15 -0
  360. package/dist/src/shadow/shadow_impl.js.map +1 -0
  361. package/dist/src/shadow/shadowmapper.js +790 -0
  362. package/dist/src/shadow/shadowmapper.js.map +1 -0
  363. package/dist/src/shadow/ssm.js +159 -0
  364. package/dist/src/shadow/ssm.js.map +1 -0
  365. package/dist/src/shadow/vsm.js +297 -0
  366. package/dist/src/shadow/vsm.js.map +1 -0
  367. package/dist/src/shapes/box.js +386 -0
  368. package/dist/src/shapes/box.js.map +1 -0
  369. package/dist/src/shapes/cylinder.js +125 -0
  370. package/dist/src/shapes/cylinder.js.map +1 -0
  371. package/dist/src/shapes/plane.js +88 -0
  372. package/dist/src/shapes/plane.js.map +1 -0
  373. package/dist/src/shapes/shape.js +87 -0
  374. package/dist/src/shapes/shape.js.map +1 -0
  375. package/dist/src/shapes/sphere.js +114 -0
  376. package/dist/src/shapes/sphere.js.map +1 -0
  377. package/dist/src/shapes/tetrahedron.js +188 -0
  378. package/dist/src/shapes/tetrahedron.js.map +1 -0
  379. package/dist/src/shapes/torus.js +111 -0
  380. package/dist/src/shapes/torus.js.map +1 -0
  381. package/dist/src/utility/aabbtree.js +400 -0
  382. package/dist/src/utility/aabbtree.js.map +1 -0
  383. package/dist/src/utility/bounding_volume.js +29 -0
  384. package/dist/src/utility/bounding_volume.js.map +1 -0
  385. package/dist/src/utility/debug.js +28 -0
  386. package/dist/src/utility/debug.js.map +1 -0
  387. package/dist/src/utility/draco/decoder.js +116 -0
  388. package/dist/src/utility/draco/decoder.js.map +1 -0
  389. package/dist/src/utility/misc.js +105 -0
  390. package/dist/src/utility/misc.js.map +1 -0
  391. package/dist/src/utility/panorama.js +163 -0
  392. package/dist/src/utility/panorama.js.map +1 -0
  393. package/dist/src/utility/pmrem.js +354 -0
  394. package/dist/src/utility/pmrem.js.map +1 -0
  395. package/dist/src/utility/rendermipmap.js +115 -0
  396. package/dist/src/utility/rendermipmap.js.map +1 -0
  397. package/dist/src/utility/serialization/json.js +402 -0
  398. package/dist/src/utility/serialization/json.js.map +1 -0
  399. package/dist/src/utility/serialization/manager.js +623 -0
  400. package/dist/src/utility/serialization/manager.js.map +1 -0
  401. package/dist/src/utility/serialization/scene/animation.js +248 -0
  402. package/dist/src/utility/serialization/scene/animation.js.map +1 -0
  403. package/dist/src/utility/serialization/scene/batch.js +59 -0
  404. package/dist/src/utility/serialization/scene/batch.js.map +1 -0
  405. package/dist/src/utility/serialization/scene/camera.js +790 -0
  406. package/dist/src/utility/serialization/scene/camera.js.map +1 -0
  407. package/dist/src/utility/serialization/scene/common.js +222 -0
  408. package/dist/src/utility/serialization/scene/common.js.map +1 -0
  409. package/dist/src/utility/serialization/scene/light.js +575 -0
  410. package/dist/src/utility/serialization/scene/light.js.map +1 -0
  411. package/dist/src/utility/serialization/scene/material.js +1111 -0
  412. package/dist/src/utility/serialization/scene/material.js.map +1 -0
  413. package/dist/src/utility/serialization/scene/mesh.js +148 -0
  414. package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
  415. package/dist/src/utility/serialization/scene/misc.js +39 -0
  416. package/dist/src/utility/serialization/scene/misc.js.map +1 -0
  417. package/dist/src/utility/serialization/scene/node.js +451 -0
  418. package/dist/src/utility/serialization/scene/node.js.map +1 -0
  419. package/dist/src/utility/serialization/scene/particle.js +425 -0
  420. package/dist/src/utility/serialization/scene/particle.js.map +1 -0
  421. package/dist/src/utility/serialization/scene/primitive.js +692 -0
  422. package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
  423. package/dist/src/utility/serialization/scene/scene.js +704 -0
  424. package/dist/src/utility/serialization/scene/scene.js.map +1 -0
  425. package/dist/src/utility/serialization/scene/terrain.js +488 -0
  426. package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
  427. package/dist/src/utility/serialization/scene/water.js +465 -0
  428. package/dist/src/utility/serialization/scene/water.js.map +1 -0
  429. package/dist/src/utility/shprojector.js +297 -0
  430. package/dist/src/utility/shprojector.js.map +1 -0
  431. package/dist/src/utility/textures/ggxlut.js +213 -0
  432. package/dist/src/utility/textures/ggxlut.js.map +1 -0
  433. package/dist/src/utility/textures/gradientnoise.js +62 -0
  434. package/dist/src/utility/textures/gradientnoise.js.map +1 -0
  435. package/dist/src/utility/textures/randomnoise.js +41 -0
  436. package/dist/src/utility/textures/randomnoise.js.map +1 -0
  437. package/dist/src/values.js +162 -0
  438. package/dist/src/values.js.map +1 -0
  439. package/dist/text/font/font_asset.js +884 -0
  440. package/dist/text/font/font_asset.js.map +1 -0
  441. package/dist/text/font/sfnt_reader.js +43 -0
  442. package/dist/text/font/sfnt_reader.js.map +1 -0
  443. package/dist/text/msdf/generator.js +417 -0
  444. package/dist/text/msdf/generator.js.map +1 -0
  445. package/dist/text/msdf/shape.js +143 -0
  446. package/dist/text/msdf/shape.js.map +1 -0
  447. package/dist/text/runtime/msdf_glyph_atlas.js +146 -0
  448. package/dist/text/runtime/msdf_glyph_atlas.js.map +1 -0
  449. package/dist/text/runtime/msdf_text_atlas_manager.js +47 -0
  450. package/dist/text/runtime/msdf_text_atlas_manager.js.map +1 -0
  451. package/dist/text/runtime/text_layout.js +96 -0
  452. package/dist/text/runtime/text_layout.js.map +1 -0
  453. package/dist/utility/blueprint/material/common.js +7 -0
  454. package/dist/utility/blueprint/material/common.js.map +1 -0
  455. package/dist/utility/blueprint/material/inputs.js +1275 -1091
  456. package/dist/utility/blueprint/material/inputs.js.map +1 -1
  457. package/dist/utility/blueprint/material/ir.js +505 -490
  458. package/dist/utility/blueprint/material/ir.js.map +1 -1
  459. package/dist/utility/blueprint/material/pbr.js +32 -0
  460. package/dist/utility/blueprint/material/pbr.js.map +1 -1
  461. package/dist/utility/serialization/blueprint/constants.js +255 -0
  462. package/dist/utility/serialization/blueprint/constants.js.map +1 -0
  463. package/dist/utility/serialization/blueprint/material/constants.js +203 -0
  464. package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
  465. package/dist/utility/serialization/blueprint/material/texture.js +165 -0
  466. package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
  467. package/dist/utility/serialization/manager.js +55 -11
  468. package/dist/utility/serialization/manager.js.map +1 -1
  469. package/dist/utility/serialization/scene/animation.js +2 -0
  470. package/dist/utility/serialization/scene/animation.js.map +1 -1
  471. package/dist/utility/serialization/scene/batch.js +2 -0
  472. package/dist/utility/serialization/scene/batch.js.map +1 -1
  473. package/dist/utility/serialization/scene/camera.js +2 -0
  474. package/dist/utility/serialization/scene/camera.js.map +1 -1
  475. package/dist/utility/serialization/scene/common.js.map +1 -1
  476. package/dist/utility/serialization/scene/light.js +2 -0
  477. package/dist/utility/serialization/scene/light.js.map +1 -1
  478. package/dist/utility/serialization/scene/material.js +1 -0
  479. package/dist/utility/serialization/scene/material.js.map +1 -1
  480. package/dist/utility/serialization/scene/mesh.js +2 -0
  481. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  482. package/dist/utility/serialization/scene/node.js +2 -0
  483. package/dist/utility/serialization/scene/node.js.map +1 -1
  484. package/dist/utility/serialization/scene/particle.js +2 -0
  485. package/dist/utility/serialization/scene/particle.js.map +1 -1
  486. package/dist/utility/serialization/scene/primitive.js +1 -0
  487. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  488. package/dist/utility/serialization/scene/scene.js.map +1 -1
  489. package/dist/utility/serialization/scene/sprite.js +2 -0
  490. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  491. package/dist/utility/serialization/scene/terrain.js +2 -0
  492. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  493. package/dist/utility/serialization/scene/text.js +516 -0
  494. package/dist/utility/serialization/scene/text.js.map +1 -0
  495. package/dist/utility/serialization/scene/water.js +2 -0
  496. package/dist/utility/serialization/scene/water.js.map +1 -1
  497. package/dist/utility/serialization/types.js +4 -4
  498. package/dist/utility/serialization/types.js.map +1 -1
  499. package/dist/values.js +1 -5
  500. package/dist/values.js.map +1 -1
  501. package/package.json +3 -3
  502. package/dist/animation/joint_dynamics/vrm_spring_bone.js +0 -46
  503. package/dist/animation/joint_dynamics/vrm_spring_bone.js.map +0 -1
  504. package/dist/animation/spring/spring_bone.js +0 -240
  505. package/dist/animation/spring/spring_bone.js.map +0 -1
  506. package/dist/animation/spring/spring_bone_collider.js +0 -198
  507. package/dist/animation/spring/spring_bone_collider.js.map +0 -1
  508. package/dist/animation/spring/spring_bone_constraint.js +0 -170
  509. package/dist/animation/spring/spring_bone_constraint.js.map +0 -1
  510. package/dist/animation/spring/spring_bone_system.js +0 -328
  511. package/dist/animation/spring/spring_bone_system.js.map +0 -1
  512. package/dist/render/sky_motion_vector.js +0 -85
  513. package/dist/render/sky_motion_vector.js.map +0 -1
@@ -1,328 +0,0 @@
1
- import { Vector3, Quaternion } from '@zephyr3d/base';
2
- import { SpringBone } from './spring_bone.js';
3
- import { CircularConstraint } from './spring_bone_constraint.js';
4
-
5
- /**
6
- * Spring bone system manager.
7
- *
8
- * @remarks
9
- * Manages multiple spring bones, colliders, and constraints.
10
- * Updates physics simulation and applies results to bone nodes.
11
- *
12
- * @public
13
- */ class SpringBoneSystem {
14
- /** All spring bones in the system */ _springBones;
15
- /** All colliders in the system */ _colliders;
16
- /** All constraints in the system */ _constraints;
17
- /** Gravity vector in world space */ _gravity;
18
- /** Wind force vector in world space */ _windForce;
19
- /** Enable/disable the system */ _enabled;
20
- /** Number of constraint iterations per update */ _constraintIterations;
21
- /** Whether deltaTime is in milliseconds (true) or seconds (false) */ _deltaTimeInMilliseconds;
22
- /**
23
- * Create a spring bone system.
24
- *
25
- * @param deltaTimeInMilliseconds - Whether deltaTime is in milliseconds (default: false)
26
- */ constructor(deltaTimeInMilliseconds = false){
27
- this._springBones = [];
28
- this._colliders = [];
29
- this._constraints = [];
30
- this._gravity = new Vector3(0, -9.8, 0);
31
- this._windForce = new Vector3(0, 0, 0);
32
- this._enabled = true;
33
- this._constraintIterations = 2;
34
- this._deltaTimeInMilliseconds = deltaTimeInMilliseconds;
35
- }
36
- /**
37
- * Get/set gravity vector.
38
- */ get gravity() {
39
- return this._gravity;
40
- }
41
- set gravity(value) {
42
- this._gravity.set(value);
43
- }
44
- /**
45
- * Get/set wind force vector.
46
- */ get windForce() {
47
- return this._windForce;
48
- }
49
- set windForce(value) {
50
- this._windForce.set(value);
51
- }
52
- /**
53
- * Get/set enabled state.
54
- */ get enabled() {
55
- return this._enabled;
56
- }
57
- set enabled(value) {
58
- this._enabled = value;
59
- }
60
- /**
61
- * Add a spring bone to the system.
62
- *
63
- * @param bone - The bone node to control
64
- * @param stiffness - Spring stiffness (0-1, default: 0.1)
65
- * @param damping - Damping factor (0-1, default: 0.5)
66
- * @param mass - Mass of the bone (default: 1)
67
- * @param gravityScale - Gravity scale (default: 1)
68
- * @param radius - Collision radius (default: 0.05)
69
- * @returns The created spring bone
70
- */ addSpringBone(bone, stiffness = 0.1, damping = 0.5, mass = 1, gravityScale = 1, radius = 0.05) {
71
- const springBone = new SpringBone(bone, stiffness, damping, mass, gravityScale, radius);
72
- this._springBones.push(springBone);
73
- return springBone;
74
- }
75
- /**
76
- * Add a spring bone chain to the system.
77
- *
78
- * @remarks
79
- * Adds multiple bones in a chain with the same parameters.
80
- * The first bone (root) is typically fixed and not simulated.
81
- *
82
- * @param bones - Array of bone nodes from root to tip
83
- * @param stiffness - Spring stiffness (0-1, default: 0.1)
84
- * @param damping - Damping factor (0-1, default: 0.5)
85
- * @param mass - Mass of each bone (default: 1)
86
- * @param gravityScale - Gravity scale (default: 1)
87
- * @param radius - Collision radius (default: 0.05)
88
- * @param skipRoot - Skip the first bone (root) (default: true)
89
- * @returns Array of created spring bones
90
- */ addSpringChain(bones, stiffness = 0.1, damping = 0.5, mass = 1, gravityScale = 1, radius = 0.05, skipRoot = true) {
91
- const springBones = [];
92
- const startIndex = skipRoot ? 1 : 0;
93
- for(let i = startIndex; i < bones.length; i++){
94
- const springBone = this.addSpringBone(bones[i], stiffness, damping, mass, gravityScale, radius);
95
- springBones.push(springBone);
96
- }
97
- return springBones;
98
- }
99
- /**
100
- * Remove a spring bone from the system.
101
- *
102
- * @param springBone - The spring bone to remove
103
- * @returns True if removed, false if not found
104
- */ removeSpringBone(springBone) {
105
- const index = this._springBones.indexOf(springBone);
106
- if (index >= 0) {
107
- this._springBones.splice(index, 1);
108
- return true;
109
- }
110
- return false;
111
- }
112
- /**
113
- * Clear all spring bones.
114
- */ clearSpringBones() {
115
- this._springBones = [];
116
- }
117
- /**
118
- * Add a collider to the system.
119
- *
120
- * @param collider - The collider to add
121
- */ addCollider(collider) {
122
- this._colliders.push(collider);
123
- }
124
- /**
125
- * Remove a collider from the system.
126
- *
127
- * @param collider - The collider to remove
128
- * @returns True if removed, false if not found
129
- */ removeCollider(collider) {
130
- const index = this._colliders.indexOf(collider);
131
- if (index >= 0) {
132
- this._colliders.splice(index, 1);
133
- return true;
134
- }
135
- return false;
136
- }
137
- /**
138
- * Clear all colliders.
139
- */ clearColliders() {
140
- this._colliders = [];
141
- }
142
- /**
143
- * Add a constraint to the system.
144
- *
145
- * @param constraint - The constraint to add
146
- */ addConstraint(constraint) {
147
- this._constraints.push(constraint);
148
- }
149
- /**
150
- * Remove a constraint from the system.
151
- *
152
- * @param constraint - The constraint to remove
153
- * @returns True if removed, false if not found
154
- */ removeConstraint(constraint) {
155
- const index = this._constraints.indexOf(constraint);
156
- if (index >= 0) {
157
- this._constraints.splice(index, 1);
158
- return true;
159
- }
160
- return false;
161
- }
162
- /**
163
- * Clear all constraints.
164
- */ clearConstraints() {
165
- this._constraints = [];
166
- }
167
- /**
168
- * Create circular constraints for skirt-like structures.
169
- *
170
- * @remarks
171
- * This is a convenience method for creating distance constraints
172
- * between adjacent chains arranged in a circle (e.g., skirt panels).
173
- *
174
- * @param chains - Array of spring bone chains arranged in a circle
175
- * @param minDistance - Minimum distance between adjacent bones (default: 0.05)
176
- * @param maxDistance - Maximum distance between adjacent bones (default: 0.15)
177
- * @param stiffness - Constraint stiffness (0-1, default: 0.5)
178
- * @returns The created circular constraint
179
- */ createCircularConstraints(chains, minDistance = 0.05, maxDistance = 0.15, stiffness = 0.5) {
180
- const constraint = new CircularConstraint(chains, minDistance, maxDistance, stiffness);
181
- this.addConstraint(constraint);
182
- return constraint;
183
- }
184
- /**
185
- * Get/set number of constraint iterations.
186
- *
187
- * @remarks
188
- * Higher values give more accurate constraint solving but cost more performance.
189
- * Typical values: 1-5
190
- */ get constraintIterations() {
191
- return this._constraintIterations;
192
- }
193
- set constraintIterations(value) {
194
- this._constraintIterations = Math.max(1, Math.floor(value));
195
- }
196
- /**
197
- * Reset all spring bones to their initial state.
198
- */ reset() {
199
- for (const springBone of this._springBones){
200
- springBone.reset();
201
- }
202
- }
203
- /**
204
- * Update parent bone rotation if parent is not in the spring system.
205
- *
206
- * @remarks
207
- * When skipRoot=true, the parent bone is not in the spring system,
208
- * but its rotation still needs to be updated to point toward the
209
- * spring bone's simulated position.
210
- *
211
- * @param springBone - The spring bone whose parent should be updated
212
- */ _updateParentRotation(springBone) {
213
- const bone = springBone.bone;
214
- const parent = bone.parent;
215
- if (!parent) {
216
- return; // No parent to update
217
- }
218
- // Check if parent is in the spring system
219
- const parentIsSpringBone = this._springBones.some((sb)=>sb.bone === parent);
220
- if (parentIsSpringBone) {
221
- return; // Parent is already being updated by the spring system
222
- }
223
- // Parent is not in the spring system, so we need to update its rotation
224
- // to point toward the spring bone's simulated position
225
- // Get parent's world position
226
- const parentWorldPos = new Vector3();
227
- parent.worldMatrix.decompose(null, null, parentWorldPos);
228
- // Get simulated position
229
- const simulatedPos = springBone.currentPosition;
230
- // Calculate direction from parent to simulated position (in world space)
231
- const currentDir = Vector3.sub(simulatedPos, parentWorldPos, new Vector3());
232
- const currentLength = currentDir.magnitude;
233
- if (currentLength < 0.000001) {
234
- return; // Too close to parent
235
- }
236
- currentDir.scaleBy(1 / currentLength);
237
- // Get grandparent (parent's parent) if it exists
238
- const grandparent = parent.parent;
239
- let grandparentWorldRot = new Quaternion().identity();
240
- if (grandparent) {
241
- grandparent.worldMatrix.decompose(null, grandparentWorldRot, null);
242
- }
243
- // Transform current direction to grandparent's local space
244
- const grandparentInvRot = Quaternion.conjugate(grandparentWorldRot, new Quaternion());
245
- const currentDirLocal = grandparentInvRot.transform(currentDir, new Vector3());
246
- // Original direction in local space (normalized)
247
- const originalDirLocal = Vector3.normalize(springBone.initialLocalPosition, new Vector3());
248
- // Calculate local rotation from original to current
249
- const localRotation = new Quaternion();
250
- this._fromToRotation(originalDirLocal, currentDirLocal, localRotation);
251
- // Apply to parent bone
252
- parent.rotation = localRotation;
253
- }
254
- /**
255
- * Calculate rotation from one direction to another.
256
- */ _fromToRotation(from, to, result) {
257
- const dot = Vector3.dot(from, to);
258
- if (dot >= 0.999999) {
259
- return result.identity();
260
- }
261
- if (dot <= -0.999999) {
262
- let axis = Vector3.cross(Vector3.axisPX(), from, new Vector3());
263
- const lenSq = axis.x * axis.x + axis.y * axis.y + axis.z * axis.z;
264
- if (lenSq < 0.000001) {
265
- axis = Vector3.cross(Vector3.axisPY(), from, new Vector3());
266
- }
267
- axis.inplaceNormalize();
268
- return result.fromAxisAngle(axis, Math.PI);
269
- }
270
- const axis = Vector3.cross(from, to).inplaceNormalize();
271
- const angle = Math.acos(dot);
272
- return result.fromAxisAngle(axis, angle);
273
- }
274
- /**
275
- * Update the spring bone system.
276
- *
277
- * @param deltaTime - Time step (in seconds or milliseconds, depending on constructor parameter)
278
- */ update(deltaTime) {
279
- if (!this._enabled || deltaTime <= 0) {
280
- return;
281
- }
282
- // Convert to seconds if needed
283
- const deltaTimeSeconds = this._deltaTimeInMilliseconds ? deltaTime / 1000 : deltaTime;
284
- // Clamp delta time to avoid instability
285
- const clampedDeltaTime = Math.min(deltaTimeSeconds, 0.1);
286
- // Update spring bones one by one (not in parallel)
287
- // This ensures parent bones are updated before child bones
288
- for (const springBone of this._springBones){
289
- // Update physics
290
- springBone.update(clampedDeltaTime, this._gravity, this._windForce);
291
- // Apply collisions
292
- const position = springBone.currentPosition;
293
- const radius = springBone.radius;
294
- for (const collider of this._colliders){
295
- collider.collide(position, radius);
296
- }
297
- // Update parent bone rotation if parent is not in the spring system
298
- this._updateParentRotation(springBone);
299
- // Apply to bone node
300
- springBone.applyToNode();
301
- // Force update the bone's world matrix
302
- // This ensures child bones see the updated parent transform
303
- const bone = springBone.bone;
304
- if (typeof bone.updateWorldMatrix === 'function') {
305
- bone.updateWorldMatrix(true, false);
306
- }
307
- }
308
- // Apply constraints (multiple iterations for better convergence)
309
- for(let i = 0; i < this._constraintIterations; i++){
310
- for (const constraint of this._constraints){
311
- constraint.apply();
312
- }
313
- }
314
- }
315
- /**
316
- * Get all spring bones.
317
- */ get springBones() {
318
- return this._springBones;
319
- }
320
- /**
321
- * Get all colliders.
322
- */ get colliders() {
323
- return this._colliders;
324
- }
325
- }
326
-
327
- export { SpringBoneSystem };
328
- //# sourceMappingURL=spring_bone_system.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spring_bone_system.js","sources":["../../../src/animation/spring/spring_bone_system.ts"],"sourcesContent":["import { Vector3, Quaternion } from '@zephyr3d/base';\r\nimport { SpringBone } from './spring_bone';\r\nimport type { SpringBoneCollider } from './spring_bone_collider';\r\nimport type { SpringBoneConstraint } from './spring_bone_constraint';\r\nimport { CircularConstraint } from './spring_bone_constraint';\r\nimport type { SceneNode } from '../../scene/scene_node';\r\n\r\n/**\r\n * Spring bone system manager.\r\n *\r\n * @remarks\r\n * Manages multiple spring bones, colliders, and constraints.\r\n * Updates physics simulation and applies results to bone nodes.\r\n *\r\n * @public\r\n */\r\nexport class SpringBoneSystem {\r\n /** All spring bones in the system */\r\n private _springBones: SpringBone[];\r\n /** All colliders in the system */\r\n private _colliders: SpringBoneCollider[];\r\n /** All constraints in the system */\r\n private _constraints: SpringBoneConstraint[];\r\n /** Gravity vector in world space */\r\n private _gravity: Vector3;\r\n /** Wind force vector in world space */\r\n private _windForce: Vector3;\r\n /** Enable/disable the system */\r\n private _enabled: boolean;\r\n /** Number of constraint iterations per update */\r\n private _constraintIterations: number;\r\n /** Whether deltaTime is in milliseconds (true) or seconds (false) */\r\n private _deltaTimeInMilliseconds: boolean;\r\n\r\n /**\r\n * Create a spring bone system.\r\n *\r\n * @param deltaTimeInMilliseconds - Whether deltaTime is in milliseconds (default: false)\r\n */\r\n constructor(deltaTimeInMilliseconds = false) {\r\n this._springBones = [];\r\n this._colliders = [];\r\n this._constraints = [];\r\n this._gravity = new Vector3(0, -9.8, 0);\r\n this._windForce = new Vector3(0, 0, 0);\r\n this._enabled = true;\r\n this._constraintIterations = 2;\r\n this._deltaTimeInMilliseconds = deltaTimeInMilliseconds;\r\n }\r\n\r\n /**\r\n * Get/set gravity vector.\r\n */\r\n get gravity(): Vector3 {\r\n return this._gravity;\r\n }\r\n\r\n set gravity(value: Vector3) {\r\n this._gravity.set(value);\r\n }\r\n\r\n /**\r\n * Get/set wind force vector.\r\n */\r\n get windForce(): Vector3 {\r\n return this._windForce;\r\n }\r\n\r\n set windForce(value: Vector3) {\r\n this._windForce.set(value);\r\n }\r\n\r\n /**\r\n * Get/set enabled state.\r\n */\r\n get enabled(): boolean {\r\n return this._enabled;\r\n }\r\n\r\n set enabled(value: boolean) {\r\n this._enabled = value;\r\n }\r\n\r\n /**\r\n * Add a spring bone to the system.\r\n *\r\n * @param bone - The bone node to control\r\n * @param stiffness - Spring stiffness (0-1, default: 0.1)\r\n * @param damping - Damping factor (0-1, default: 0.5)\r\n * @param mass - Mass of the bone (default: 1)\r\n * @param gravityScale - Gravity scale (default: 1)\r\n * @param radius - Collision radius (default: 0.05)\r\n * @returns The created spring bone\r\n */\r\n addSpringBone(\r\n bone: SceneNode,\r\n stiffness = 0.1,\r\n damping = 0.5,\r\n mass = 1,\r\n gravityScale = 1,\r\n radius = 0.05\r\n ): SpringBone {\r\n const springBone = new SpringBone(bone, stiffness, damping, mass, gravityScale, radius);\r\n this._springBones.push(springBone);\r\n return springBone;\r\n }\r\n\r\n /**\r\n * Add a spring bone chain to the system.\r\n *\r\n * @remarks\r\n * Adds multiple bones in a chain with the same parameters.\r\n * The first bone (root) is typically fixed and not simulated.\r\n *\r\n * @param bones - Array of bone nodes from root to tip\r\n * @param stiffness - Spring stiffness (0-1, default: 0.1)\r\n * @param damping - Damping factor (0-1, default: 0.5)\r\n * @param mass - Mass of each bone (default: 1)\r\n * @param gravityScale - Gravity scale (default: 1)\r\n * @param radius - Collision radius (default: 0.05)\r\n * @param skipRoot - Skip the first bone (root) (default: true)\r\n * @returns Array of created spring bones\r\n */\r\n addSpringChain(\r\n bones: SceneNode[],\r\n stiffness = 0.1,\r\n damping = 0.5,\r\n mass = 1,\r\n gravityScale = 1,\r\n radius = 0.05,\r\n skipRoot = true\r\n ): SpringBone[] {\r\n const springBones: SpringBone[] = [];\r\n const startIndex = skipRoot ? 1 : 0;\r\n\r\n for (let i = startIndex; i < bones.length; i++) {\r\n const springBone = this.addSpringBone(bones[i], stiffness, damping, mass, gravityScale, radius);\r\n springBones.push(springBone);\r\n }\r\n\r\n return springBones;\r\n }\r\n\r\n /**\r\n * Remove a spring bone from the system.\r\n *\r\n * @param springBone - The spring bone to remove\r\n * @returns True if removed, false if not found\r\n */\r\n removeSpringBone(springBone: SpringBone): boolean {\r\n const index = this._springBones.indexOf(springBone);\r\n if (index >= 0) {\r\n this._springBones.splice(index, 1);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Clear all spring bones.\r\n */\r\n clearSpringBones(): void {\r\n this._springBones = [];\r\n }\r\n\r\n /**\r\n * Add a collider to the system.\r\n *\r\n * @param collider - The collider to add\r\n */\r\n addCollider(collider: SpringBoneCollider): void {\r\n this._colliders.push(collider);\r\n }\r\n\r\n /**\r\n * Remove a collider from the system.\r\n *\r\n * @param collider - The collider to remove\r\n * @returns True if removed, false if not found\r\n */\r\n removeCollider(collider: SpringBoneCollider): boolean {\r\n const index = this._colliders.indexOf(collider);\r\n if (index >= 0) {\r\n this._colliders.splice(index, 1);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Clear all colliders.\r\n */\r\n clearColliders(): void {\r\n this._colliders = [];\r\n }\r\n\r\n /**\r\n * Add a constraint to the system.\r\n *\r\n * @param constraint - The constraint to add\r\n */\r\n addConstraint(constraint: SpringBoneConstraint): void {\r\n this._constraints.push(constraint);\r\n }\r\n\r\n /**\r\n * Remove a constraint from the system.\r\n *\r\n * @param constraint - The constraint to remove\r\n * @returns True if removed, false if not found\r\n */\r\n removeConstraint(constraint: SpringBoneConstraint): boolean {\r\n const index = this._constraints.indexOf(constraint);\r\n if (index >= 0) {\r\n this._constraints.splice(index, 1);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Clear all constraints.\r\n */\r\n clearConstraints(): void {\r\n this._constraints = [];\r\n }\r\n\r\n /**\r\n * Create circular constraints for skirt-like structures.\r\n *\r\n * @remarks\r\n * This is a convenience method for creating distance constraints\r\n * between adjacent chains arranged in a circle (e.g., skirt panels).\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 * @returns The created circular constraint\r\n */\r\n createCircularConstraints(\r\n chains: SpringBone[][],\r\n minDistance = 0.05,\r\n maxDistance = 0.15,\r\n stiffness = 0.5\r\n ): CircularConstraint {\r\n const constraint = new CircularConstraint(chains, minDistance, maxDistance, stiffness);\r\n this.addConstraint(constraint);\r\n return constraint;\r\n }\r\n\r\n /**\r\n * Get/set number of constraint iterations.\r\n *\r\n * @remarks\r\n * Higher values give more accurate constraint solving but cost more performance.\r\n * Typical values: 1-5\r\n */\r\n get constraintIterations(): number {\r\n return this._constraintIterations;\r\n }\r\n\r\n set constraintIterations(value: number) {\r\n this._constraintIterations = Math.max(1, Math.floor(value));\r\n }\r\n\r\n /**\r\n * Reset all spring bones to their initial state.\r\n */\r\n reset(): void {\r\n for (const springBone of this._springBones) {\r\n springBone.reset();\r\n }\r\n }\r\n\r\n /**\r\n * Update parent bone rotation if parent is not in the spring system.\r\n *\r\n * @remarks\r\n * When skipRoot=true, the parent bone is not in the spring system,\r\n * but its rotation still needs to be updated to point toward the\r\n * spring bone's simulated position.\r\n *\r\n * @param springBone - The spring bone whose parent should be updated\r\n */\r\n private _updateParentRotation(springBone: SpringBone): void {\r\n const bone = springBone.bone;\r\n const parent = bone.parent;\r\n\r\n if (!parent) {\r\n return; // No parent to update\r\n }\r\n\r\n // Check if parent is in the spring system\r\n const parentIsSpringBone = this._springBones.some((sb) => sb.bone === parent);\r\n if (parentIsSpringBone) {\r\n return; // Parent is already being updated by the spring system\r\n }\r\n\r\n // Parent is not in the spring system, so we need to update its rotation\r\n // to point toward the spring bone's simulated position\r\n\r\n // Get parent's world position\r\n const parentWorldPos = new Vector3();\r\n parent.worldMatrix.decompose(null, null, parentWorldPos);\r\n\r\n // Get simulated position\r\n const simulatedPos = springBone.currentPosition;\r\n\r\n // Calculate direction from parent to simulated position (in world space)\r\n const currentDir = Vector3.sub(simulatedPos, parentWorldPos, new Vector3());\r\n const currentLength = currentDir.magnitude;\r\n\r\n if (currentLength < 0.000001) {\r\n return; // Too close to parent\r\n }\r\n\r\n currentDir.scaleBy(1 / currentLength);\r\n\r\n // Get grandparent (parent's parent) if it exists\r\n const grandparent = parent.parent;\r\n let grandparentWorldRot = new Quaternion().identity();\r\n\r\n if (grandparent) {\r\n grandparent.worldMatrix.decompose(null, grandparentWorldRot, null);\r\n }\r\n\r\n // Transform current direction to grandparent's local space\r\n const grandparentInvRot = Quaternion.conjugate(grandparentWorldRot, new Quaternion());\r\n const currentDirLocal = grandparentInvRot.transform(currentDir, new Vector3());\r\n\r\n // Original direction in local space (normalized)\r\n const originalDirLocal = Vector3.normalize(springBone.initialLocalPosition, new Vector3());\r\n\r\n // Calculate local rotation from original to current\r\n const localRotation = new Quaternion();\r\n this._fromToRotation(originalDirLocal, currentDirLocal, localRotation);\r\n\r\n // Apply to parent bone\r\n parent.rotation = localRotation;\r\n }\r\n\r\n /**\r\n * Calculate rotation from one direction to another.\r\n */\r\n private _fromToRotation(from: Vector3, to: Vector3, result: Quaternion): Quaternion {\r\n const dot = Vector3.dot(from, to);\r\n\r\n if (dot >= 0.999999) {\r\n return result.identity();\r\n }\r\n\r\n if (dot <= -0.999999) {\r\n let axis = Vector3.cross(Vector3.axisPX(), from, new Vector3());\r\n const lenSq = axis.x * axis.x + axis.y * axis.y + axis.z * axis.z;\r\n if (lenSq < 0.000001) {\r\n axis = Vector3.cross(Vector3.axisPY(), from, new Vector3());\r\n }\r\n axis.inplaceNormalize();\r\n return result.fromAxisAngle(axis, Math.PI);\r\n }\r\n\r\n const axis = Vector3.cross(from, to).inplaceNormalize();\r\n const angle = Math.acos(dot);\r\n return result.fromAxisAngle(axis, angle);\r\n }\r\n\r\n /**\r\n * Update the spring bone system.\r\n *\r\n * @param deltaTime - Time step (in seconds or milliseconds, depending on constructor parameter)\r\n */\r\n update(deltaTime: number): void {\r\n if (!this._enabled || deltaTime <= 0) {\r\n return;\r\n }\r\n\r\n // Convert to seconds if needed\r\n const deltaTimeSeconds = this._deltaTimeInMilliseconds ? deltaTime / 1000 : deltaTime;\r\n\r\n // Clamp delta time to avoid instability\r\n const clampedDeltaTime = Math.min(deltaTimeSeconds, 0.1);\r\n\r\n // Update spring bones one by one (not in parallel)\r\n // This ensures parent bones are updated before child bones\r\n for (const springBone of this._springBones) {\r\n // Update physics\r\n springBone.update(clampedDeltaTime, this._gravity, this._windForce);\r\n\r\n // Apply collisions\r\n const position = springBone.currentPosition;\r\n const radius = springBone.radius;\r\n\r\n for (const collider of this._colliders) {\r\n collider.collide(position, radius);\r\n }\r\n\r\n // Update parent bone rotation if parent is not in the spring system\r\n this._updateParentRotation(springBone);\r\n\r\n // Apply to bone node\r\n springBone.applyToNode();\r\n\r\n // Force update the bone's world matrix\r\n // This ensures child bones see the updated parent transform\r\n const bone = springBone.bone;\r\n if (typeof (bone as any).updateWorldMatrix === 'function') {\r\n (bone as any).updateWorldMatrix(true, false);\r\n }\r\n }\r\n\r\n // Apply constraints (multiple iterations for better convergence)\r\n for (let i = 0; i < this._constraintIterations; i++) {\r\n for (const constraint of this._constraints) {\r\n constraint.apply();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Get all spring bones.\r\n */\r\n get springBones(): readonly SpringBone[] {\r\n return this._springBones;\r\n }\r\n\r\n /**\r\n * Get all colliders.\r\n */\r\n get colliders(): readonly SpringBoneCollider[] {\r\n return this._colliders;\r\n }\r\n}\r\n"],"names":["SpringBoneSystem","deltaTimeInMilliseconds","_springBones","_colliders","_constraints","_gravity","Vector3","_windForce","_enabled","_constraintIterations","_deltaTimeInMilliseconds","gravity","value","set","windForce","enabled","addSpringBone","bone","stiffness","damping","mass","gravityScale","radius","springBone","SpringBone","push","addSpringChain","bones","skipRoot","springBones","startIndex","i","length","removeSpringBone","index","indexOf","splice","clearSpringBones","addCollider","collider","removeCollider","clearColliders","addConstraint","constraint","removeConstraint","clearConstraints","createCircularConstraints","chains","minDistance","maxDistance","CircularConstraint","constraintIterations","Math","max","floor","reset","_updateParentRotation","parent","parentIsSpringBone","some","sb","parentWorldPos","worldMatrix","decompose","simulatedPos","currentPosition","currentDir","sub","currentLength","magnitude","scaleBy","grandparent","grandparentWorldRot","Quaternion","identity","grandparentInvRot","conjugate","currentDirLocal","transform","originalDirLocal","normalize","initialLocalPosition","localRotation","_fromToRotation","rotation","from","to","result","dot","axis","cross","axisPX","lenSq","x","y","z","axisPY","inplaceNormalize","fromAxisAngle","PI","angle","acos","update","deltaTime","deltaTimeSeconds","clampedDeltaTime","min","position","collide","applyToNode","updateWorldMatrix","apply","colliders"],"mappings":"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"}
@@ -1,85 +0,0 @@
1
- import { AbstractPostEffect } from '../posteffect/posteffect.js';
2
- import '@zephyr3d/base';
3
- import './primitive.js';
4
- import { BoxShape } from '../shapes/box.js';
5
- import '../shapes/cylinder.js';
6
- import '../shapes/torus.js';
7
- import '../shapes/plane.js';
8
- import '../shapes/sphere.js';
9
- import '../shapes/tetrahedron.js';
10
-
11
- let _skyMotionVectorProgram = null;
12
- let _skyMotionVectorBindGroup = null;
13
- let _box = null;
14
- function getSkyMotionVectorProgram(ctx) {
15
- if (!_skyMotionVectorProgram) {
16
- _skyMotionVectorProgram = ctx.device.buildRenderProgram({
17
- vertex (pb) {
18
- this.$inputs.pos = pb.vec3().attrib('position');
19
- this.VPMatrix = pb.mat4().uniform(0);
20
- this.prevVPMatrix = pb.mat4().uniform(0);
21
- this.cameraPos = pb.vec3().uniform(0);
22
- this.prevCameraPos = pb.vec3().uniform(0);
23
- pb.main(function() {
24
- this.$l.worldPos = pb.add(this.$inputs.pos, this.cameraPos);
25
- this.$l.prevWorldPos = pb.add(this.$inputs.pos, this.prevCameraPos);
26
- this.$l.clipPos = pb.mul(this.VPMatrix, pb.vec4(this.worldPos, 1));
27
- this.$l.prevClipPos = pb.mul(this.prevVPMatrix, pb.vec4(this.prevWorldPos, 1));
28
- this.clipPos.z = this.clipPos.w;
29
- this.$builtins.position = this.clipPos;
30
- this.$outputs.currentPos = this.clipPos;
31
- this.$outputs.prevPos = this.prevClipPos;
32
- });
33
- },
34
- fragment (pb) {
35
- this.$outputs.color = pb.vec4();
36
- pb.main(function() {
37
- this.$l.motionVector = pb.mul(pb.sub(pb.div(this.$inputs.currentPos.xy, this.$inputs.currentPos.w), pb.div(this.$inputs.prevPos.xy, this.$inputs.prevPos.w)), 0.5);
38
- this.$outputs.color = pb.vec4(this.motionVector, 0, 1);
39
- });
40
- }
41
- });
42
- _skyMotionVectorProgram.name = '@TAA_SkyMotionVector';
43
- }
44
- return _skyMotionVectorProgram;
45
- }
46
- function getBox() {
47
- if (!_box) {
48
- _box = new BoxShape({
49
- size: 2,
50
- needNormal: false,
51
- needUV: false
52
- });
53
- }
54
- return _box;
55
- }
56
- /**
57
- * Renders sky motion vectors into ctx.motionVectorTexture.
58
- * Must be called after opaque pass with ctx.motionVectorTexture set.
59
- * @internal
60
- */ function renderSkyMotionVectors(ctx) {
61
- if (!ctx.motionVectorTexture) {
62
- return;
63
- }
64
- const fb = ctx.device.pool.fetchTemporalFramebuffer(false, 0, 0, ctx.motionVectorTexture, ctx.depthTexture);
65
- const program = getSkyMotionVectorProgram(ctx);
66
- if (!_skyMotionVectorBindGroup) {
67
- _skyMotionVectorBindGroup = ctx.device.createBindGroup(program.bindGroupLayouts[0]);
68
- }
69
- const box = getBox();
70
- _skyMotionVectorBindGroup.setValue('VPMatrix', ctx.camera.viewProjectionMatrix);
71
- _skyMotionVectorBindGroup.setValue('prevVPMatrix', ctx.camera.prevVPMatrix);
72
- _skyMotionVectorBindGroup.setValue('cameraPos', ctx.camera.getWorldPosition());
73
- _skyMotionVectorBindGroup.setValue('prevCameraPos', ctx.camera.prevPosition);
74
- ctx.device.pushDeviceStates();
75
- ctx.device.setProgram(program);
76
- ctx.device.setBindGroup(0, _skyMotionVectorBindGroup);
77
- ctx.device.setRenderStates(AbstractPostEffect.getDefaultRenderState(ctx, 'le'));
78
- ctx.device.setFramebuffer(fb);
79
- box.draw();
80
- ctx.device.popDeviceStates();
81
- ctx.device.pool.releaseFrameBuffer(fb);
82
- }
83
-
84
- export { renderSkyMotionVectors };
85
- //# sourceMappingURL=sky_motion_vector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sky_motion_vector.js","sources":["../../src/render/sky_motion_vector.ts"],"sourcesContent":["import type { BindGroup, GPUProgram } from '@zephyr3d/device';\nimport type { Nullable } from '@zephyr3d/base';\nimport { AbstractPostEffect } from '../posteffect/posteffect';\nimport { BoxShape } from '../shapes';\nimport type { DrawContext } from './drawable';\nimport type { Primitive } from '.';\n\nlet _skyMotionVectorProgram: Nullable<GPUProgram> = null;\nlet _skyMotionVectorBindGroup: Nullable<BindGroup> = null;\nlet _box: Nullable<Primitive> = null;\n\nfunction getSkyMotionVectorProgram(ctx: DrawContext): GPUProgram {\n if (!_skyMotionVectorProgram) {\n _skyMotionVectorProgram = ctx.device.buildRenderProgram({\n vertex(pb) {\n this.$inputs.pos = pb.vec3().attrib('position');\n this.VPMatrix = pb.mat4().uniform(0);\n this.prevVPMatrix = pb.mat4().uniform(0);\n this.cameraPos = pb.vec3().uniform(0);\n this.prevCameraPos = pb.vec3().uniform(0);\n pb.main(function () {\n this.$l.worldPos = pb.add(this.$inputs.pos, this.cameraPos);\n this.$l.prevWorldPos = pb.add(this.$inputs.pos, this.prevCameraPos);\n this.$l.clipPos = pb.mul(this.VPMatrix, pb.vec4(this.worldPos, 1));\n this.$l.prevClipPos = pb.mul(this.prevVPMatrix, pb.vec4(this.prevWorldPos, 1));\n this.clipPos.z = this.clipPos.w;\n this.$builtins.position = this.clipPos;\n this.$outputs.currentPos = this.clipPos;\n this.$outputs.prevPos = this.prevClipPos;\n });\n },\n fragment(pb) {\n this.$outputs.color = pb.vec4();\n pb.main(function () {\n this.$l.motionVector = pb.mul(\n pb.sub(\n pb.div(this.$inputs.currentPos.xy, this.$inputs.currentPos.w),\n pb.div(this.$inputs.prevPos.xy, this.$inputs.prevPos.w)\n ),\n 0.5\n );\n this.$outputs.color = pb.vec4(this.motionVector, 0, 1);\n });\n }\n })!;\n _skyMotionVectorProgram.name = '@TAA_SkyMotionVector';\n }\n return _skyMotionVectorProgram;\n}\n\nfunction getBox(): Primitive {\n if (!_box) {\n _box = new BoxShape({ size: 2, needNormal: false, needUV: false });\n }\n return _box;\n}\n\n/**\n * Renders sky motion vectors into ctx.motionVectorTexture.\n * Must be called after opaque pass with ctx.motionVectorTexture set.\n * @internal\n */\nexport function renderSkyMotionVectors(ctx: DrawContext): void {\n if (!ctx.motionVectorTexture) {\n return;\n }\n const fb = ctx.device.pool.fetchTemporalFramebuffer(false, 0, 0, ctx.motionVectorTexture, ctx.depthTexture);\n const program = getSkyMotionVectorProgram(ctx);\n if (!_skyMotionVectorBindGroup) {\n _skyMotionVectorBindGroup = ctx.device.createBindGroup(program.bindGroupLayouts[0]);\n }\n const box = getBox();\n _skyMotionVectorBindGroup.setValue('VPMatrix', ctx.camera.viewProjectionMatrix);\n _skyMotionVectorBindGroup.setValue('prevVPMatrix', ctx.camera.prevVPMatrix!);\n _skyMotionVectorBindGroup.setValue('cameraPos', ctx.camera.getWorldPosition());\n _skyMotionVectorBindGroup.setValue('prevCameraPos', ctx.camera.prevPosition!);\n ctx.device.pushDeviceStates();\n ctx.device.setProgram(program);\n ctx.device.setBindGroup(0, _skyMotionVectorBindGroup);\n ctx.device.setRenderStates(AbstractPostEffect.getDefaultRenderState(ctx, 'le'));\n ctx.device.setFramebuffer(fb);\n box.draw();\n ctx.device.popDeviceStates();\n ctx.device.pool.releaseFrameBuffer(fb);\n}\n"],"names":["_skyMotionVectorProgram","_skyMotionVectorBindGroup","_box","getSkyMotionVectorProgram","ctx","device","buildRenderProgram","vertex","pb","$inputs","pos","vec3","attrib","VPMatrix","mat4","uniform","prevVPMatrix","cameraPos","prevCameraPos","main","$l","worldPos","add","prevWorldPos","clipPos","mul","vec4","prevClipPos","z","w","$builtins","position","$outputs","currentPos","prevPos","fragment","color","motionVector","sub","div","xy","name","getBox","BoxShape","size","needNormal","needUV","renderSkyMotionVectors","motionVectorTexture","fb","pool","fetchTemporalFramebuffer","depthTexture","program","createBindGroup","bindGroupLayouts","box","setValue","camera","viewProjectionMatrix","getWorldPosition","prevPosition","pushDeviceStates","setProgram","setBindGroup","setRenderStates","AbstractPostEffect","getDefaultRenderState","setFramebuffer","draw","popDeviceStates","releaseFrameBuffer"],"mappings":"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"}