@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.
- package/dist/animation/animationset.js +2 -0
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/cloth/gpu_cloth_system.js +9 -1
- package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
- package/dist/animation/fixed_geometry_cache_track.js +5 -1
- package/dist/animation/fixed_geometry_cache_track.js.map +1 -1
- package/dist/animation/geometry_cache_utils.js +20 -4
- package/dist/animation/geometry_cache_utils.js.map +1 -1
- package/dist/animation/ik/ik_angle_constraint.js +2 -6
- package/dist/animation/ik/ik_angle_constraint.js.map +1 -1
- package/dist/animation/ik/ik_chain_builder.js +68 -0
- package/dist/animation/ik/ik_chain_builder.js.map +1 -0
- package/dist/animation/ik/ik_pole_constraint.js +2 -7
- package/dist/animation/ik/ik_pole_constraint.js.map +1 -1
- package/dist/animation/ik/two_bone_ik_solver.js +2 -6
- package/dist/animation/ik/two_bone_ik_solver.js.map +1 -1
- package/dist/animation/joint_dynamics/collision.js +60 -12
- package/dist/animation/joint_dynamics/collision.js.map +1 -1
- package/dist/animation/joint_dynamics/constraints.js +20 -4
- package/dist/animation/joint_dynamics/constraints.js.map +1 -1
- package/dist/animation/joint_dynamics/controller.js +94 -46
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/math.js +16 -0
- package/dist/animation/joint_dynamics/math.js.map +1 -0
- package/dist/animation/joint_dynamics/solver.js +21 -11
- package/dist/animation/joint_dynamics/solver.js.map +1 -1
- package/dist/animation/joint_dynamics/types.js +15 -3
- package/dist/animation/joint_dynamics/types.js.map +1 -1
- package/dist/animation/pca_geometry_cache_track.js +5 -1
- package/dist/animation/pca_geometry_cache_track.js.map +1 -1
- package/dist/animation/skeleton.js +2 -2
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/skeleton_modifier.js +2 -6
- package/dist/animation/skeleton_modifier.js.map +1 -1
- package/dist/animation/spring/spring_particle.js +4 -4
- package/dist/animation/spring/spring_particle.js.map +1 -1
- package/dist/animation/spring/spring_system.js +13 -40
- package/dist/animation/spring/spring_system.js.map +1 -1
- package/dist/animation/spring2/constraints.js.map +1 -1
- package/dist/animation/spring2/controller.js +64 -64
- package/dist/animation/spring2/controller.js.map +1 -1
- package/dist/animation/spring2/math.js.map +1 -1
- package/dist/animation/spring2/spring_system.js +8 -8
- package/dist/animation/spring2/spring_system.js.map +1 -1
- package/dist/app/app.js.map +1 -1
- package/dist/app/engine.js +1 -1
- package/dist/app/engine.js.map +1 -1
- package/dist/app/screen.js +4 -4
- package/dist/app/screen.js.map +1 -1
- package/dist/app/scriptingsystem.js +24 -1
- package/dist/app/scriptingsystem.js.map +1 -1
- package/dist/app/scriptregistry.js +22 -1
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +2 -2
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/model.js +60 -60
- package/dist/asset/model.js.map +1 -1
- package/dist/camera/camera.js +1 -1
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/orbit.js.map +1 -1
- package/dist/index.d.ts +795 -266
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/material/material.js +3 -1
- package/dist/material/material.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/shader/helper.js +281 -278
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/sprite.js +6 -6
- package/dist/material/sprite.js.map +1 -1
- package/dist/material/terrain-cm.js +2 -2
- package/dist/material/terrain-cm.js.map +1 -1
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
- package/dist/posteffect/taa.js +31 -39
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/render/cluster_light.js +3 -4
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/drawable.js +5 -1
- package/dist/render/drawable.js.map +1 -1
- package/dist/render/rendergraph/device_pool_allocator.js +29 -3
- package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
- package/dist/render/rendergraph/executor.js +283 -33
- package/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +338 -108
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/history_resource_manager.js +195 -115
- package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
- package/dist/render/rendergraph/history_resources.js +10 -0
- package/dist/render/rendergraph/history_resources.js.map +1 -0
- package/dist/render/rendergraph/rendergraph.js +162 -35
- package/dist/render/rendergraph/rendergraph.js.map +1 -1
- package/dist/render/rendergraph/types.js +25 -5
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/rendertarget.js +5 -1
- package/dist/render/rendertarget.js.map +1 -1
- package/dist/render/screenrendertarget.js +5 -1
- package/dist/render/screenrendertarget.js.map +1 -1
- package/dist/render/sky.js +4 -4
- package/dist/render/sky.js.map +1 -1
- package/dist/scene/basesprite.js +2 -2
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/graph_node.js +1 -1
- package/dist/scene/graph_node.js.map +1 -1
- package/dist/scene/mesh.js +81 -97
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/particlesys.js +1 -1
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/scene_node.js +228 -228
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/script_attachment.js +15 -3
- package/dist/scene/script_attachment.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +3 -3
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shapes/box.js +1 -1
- package/dist/shapes/box.js.map +1 -1
- package/dist/shapes/capsule.js +0 -3
- package/dist/shapes/capsule.js.map +1 -1
- package/dist/shapes/cylinder.js +0 -3
- package/dist/shapes/cylinder.js.map +1 -1
- package/dist/shapes/plane.js +0 -3
- package/dist/shapes/plane.js.map +1 -1
- package/dist/shapes/tetrahedron.js +3 -9
- package/dist/shapes/tetrahedron.js.map +1 -1
- package/dist/shapes/torus.js +94 -66
- package/dist/shapes/torus.js.map +1 -1
- package/dist/src/animation/animation.js +127 -0
- package/dist/src/animation/animation.js.map +1 -0
- package/dist/src/animation/animationset.js +255 -0
- package/dist/src/animation/animationset.js.map +1 -0
- package/dist/src/animation/animationtrack.js +34 -0
- package/dist/src/animation/animationtrack.js.map +1 -0
- package/dist/src/animation/eulerrotationtrack.js +52 -0
- package/dist/src/animation/eulerrotationtrack.js.map +1 -0
- package/dist/src/animation/morphtarget.js +93 -0
- package/dist/src/animation/morphtarget.js.map +1 -0
- package/dist/src/animation/morphtrack.js +70 -0
- package/dist/src/animation/morphtrack.js.map +1 -0
- package/dist/src/animation/proptrack.js +161 -0
- package/dist/src/animation/proptrack.js.map +1 -0
- package/dist/src/animation/rotationtrack.js +51 -0
- package/dist/src/animation/rotationtrack.js.map +1 -0
- package/dist/src/animation/scaletrack.js +50 -0
- package/dist/src/animation/scaletrack.js.map +1 -0
- package/dist/src/animation/skeleton.js +204 -0
- package/dist/src/animation/skeleton.js.map +1 -0
- package/dist/src/animation/translationtrack.js +50 -0
- package/dist/src/animation/translationtrack.js.map +1 -0
- package/dist/src/app/app.js +129 -0
- package/dist/src/app/app.js.map +1 -0
- package/dist/src/app/inputmgr.js +267 -0
- package/dist/src/app/inputmgr.js.map +1 -0
- package/dist/src/asset/assetmanager.js +404 -0
- package/dist/src/asset/assetmanager.js.map +1 -0
- package/dist/src/asset/builtin.js +337 -0
- package/dist/src/asset/builtin.js.map +1 -0
- package/dist/src/asset/loaders/dds/dds.js +470 -0
- package/dist/src/asset/loaders/dds/dds.js.map +1 -0
- package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
- package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
- package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
- package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
- package/dist/src/asset/loaders/gltf/helpers.js +327 -0
- package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
- package/dist/src/asset/loaders/hdr/hdr.js +180 -0
- package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
- package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
- package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
- package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
- package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
- package/dist/src/asset/loaders/loader.js +45 -0
- package/dist/src/asset/loaders/loader.js.map +1 -0
- package/dist/src/asset/model.js +414 -0
- package/dist/src/asset/model.js.map +1 -0
- package/dist/src/blitter/bilateralblur.js +221 -0
- package/dist/src/blitter/bilateralblur.js.map +1 -0
- package/dist/src/blitter/blitter.js +390 -0
- package/dist/src/blitter/blitter.js.map +1 -0
- package/dist/src/blitter/box.js +118 -0
- package/dist/src/blitter/box.js.map +1 -0
- package/dist/src/blitter/copy.js +22 -0
- package/dist/src/blitter/copy.js.map +1 -0
- package/dist/src/blitter/gaussianblur.js +228 -0
- package/dist/src/blitter/gaussianblur.js.map +1 -0
- package/dist/src/camera/base.js +92 -0
- package/dist/src/camera/base.js.map +1 -0
- package/dist/src/camera/camera.js +1005 -0
- package/dist/src/camera/camera.js.map +1 -0
- package/dist/src/camera/fps.js +238 -0
- package/dist/src/camera/fps.js.map +1 -0
- package/dist/src/camera/orbit.js +245 -0
- package/dist/src/camera/orbit.js.map +1 -0
- package/dist/src/camera/orthocamera.js +167 -0
- package/dist/src/camera/orthocamera.js.map +1 -0
- package/dist/src/camera/perspectivecamera.js +141 -0
- package/dist/src/camera/perspectivecamera.js.map +1 -0
- package/dist/src/index.js +120 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/material/blinn.js +81 -0
- package/dist/src/material/blinn.js.map +1 -0
- package/dist/src/material/grassmaterial.js +113 -0
- package/dist/src/material/grassmaterial.js.map +1 -0
- package/dist/src/material/lambert.js +92 -0
- package/dist/src/material/lambert.js.map +1 -0
- package/dist/src/material/material.js +301 -0
- package/dist/src/material/material.js.map +1 -0
- package/dist/src/material/meshmaterial.js +704 -0
- package/dist/src/material/meshmaterial.js.map +1 -0
- package/dist/src/material/mixins/albedocolor.js +76 -0
- package/dist/src/material/mixins/albedocolor.js.map +1 -0
- package/dist/src/material/mixins/foliage.js +47 -0
- package/dist/src/material/mixins/foliage.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
- package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
- package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
- package/dist/src/material/mixins/lit.js +476 -0
- package/dist/src/material/mixins/lit.js.map +1 -0
- package/dist/src/material/mixins/pbr/common.js +918 -0
- package/dist/src/material/mixins/pbr/common.js.map +1 -0
- package/dist/src/material/mixins/texture.js +172 -0
- package/dist/src/material/mixins/texture.js.map +1 -0
- package/dist/src/material/mixins/vertexcolor.js +56 -0
- package/dist/src/material/mixins/vertexcolor.js.map +1 -0
- package/dist/src/material/particle.js +178 -0
- package/dist/src/material/particle.js.map +1 -0
- package/dist/src/material/pbrmr.js +97 -0
- package/dist/src/material/pbrmr.js.map +1 -0
- package/dist/src/material/pbrsg.js +97 -0
- package/dist/src/material/pbrsg.js.map +1 -0
- package/dist/src/material/shader/helper.js +1209 -0
- package/dist/src/material/shader/helper.js.map +1 -0
- package/dist/src/material/terrain-cm.js +606 -0
- package/dist/src/material/terrain-cm.js.map +1 -0
- package/dist/src/material/terrainmaterial.js +375 -0
- package/dist/src/material/terrainmaterial.js.map +1 -0
- package/dist/src/material/unlit.js +41 -0
- package/dist/src/material/unlit.js.map +1 -0
- package/dist/src/material/water.js +417 -0
- package/dist/src/material/water.js.map +1 -0
- package/dist/src/posteffect/bloom.js +361 -0
- package/dist/src/posteffect/bloom.js.map +1 -0
- package/dist/src/posteffect/compositor.js +226 -0
- package/dist/src/posteffect/compositor.js.map +1 -0
- package/dist/src/posteffect/fxaa.js +273 -0
- package/dist/src/posteffect/fxaa.js.map +1 -0
- package/dist/src/posteffect/grayscale.js +69 -0
- package/dist/src/posteffect/grayscale.js.map +1 -0
- package/dist/src/posteffect/motionblur.js +96 -0
- package/dist/src/posteffect/motionblur.js.map +1 -0
- package/dist/src/posteffect/posteffect.js +126 -0
- package/dist/src/posteffect/posteffect.js.map +1 -0
- package/dist/src/posteffect/sao.js +324 -0
- package/dist/src/posteffect/sao.js.map +1 -0
- package/dist/src/posteffect/ssr.js +489 -0
- package/dist/src/posteffect/ssr.js.map +1 -0
- package/dist/src/posteffect/taa.js +172 -0
- package/dist/src/posteffect/taa.js.map +1 -0
- package/dist/src/posteffect/tonemap.js +94 -0
- package/dist/src/posteffect/tonemap.js.map +1 -0
- package/dist/src/render/abuffer_oit.js +361 -0
- package/dist/src/render/abuffer_oit.js.map +1 -0
- package/dist/src/render/clipmap.js +851 -0
- package/dist/src/render/clipmap.js.map +1 -0
- package/dist/src/render/cluster_light.js +333 -0
- package/dist/src/render/cluster_light.js.map +1 -0
- package/dist/src/render/cull_visitor.js +187 -0
- package/dist/src/render/cull_visitor.js.map +1 -0
- package/dist/src/render/depthpass.js +68 -0
- package/dist/src/render/depthpass.js.map +1 -0
- package/dist/src/render/drawable_mixin.js +227 -0
- package/dist/src/render/drawable_mixin.js.map +1 -0
- package/dist/src/render/envlight.js +463 -0
- package/dist/src/render/envlight.js.map +1 -0
- package/dist/src/render/fbm_wavegenerator.js +251 -0
- package/dist/src/render/fbm_wavegenerator.js.map +1 -0
- package/dist/src/render/fft_wavegenerator.js +1006 -0
- package/dist/src/render/fft_wavegenerator.js.map +1 -0
- package/dist/src/render/fullscreenquad.js +38 -0
- package/dist/src/render/fullscreenquad.js.map +1 -0
- package/dist/src/render/gerstner_wavegenerator.js +314 -0
- package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
- package/dist/src/render/globalbindgroup_allocator.js +60 -0
- package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
- package/dist/src/render/hzb.js +273 -0
- package/dist/src/render/hzb.js.map +1 -0
- package/dist/src/render/lightpass.js +172 -0
- package/dist/src/render/lightpass.js.map +1 -0
- package/dist/src/render/objectcolorpass.js +51 -0
- package/dist/src/render/objectcolorpass.js.map +1 -0
- package/dist/src/render/primitive.js +364 -0
- package/dist/src/render/primitive.js.map +1 -0
- package/dist/src/render/render_queue.js +467 -0
- package/dist/src/render/render_queue.js.map +1 -0
- package/dist/src/render/renderbundle_wrapper.js +152 -0
- package/dist/src/render/renderbundle_wrapper.js.map +1 -0
- package/dist/src/render/renderer.js +455 -0
- package/dist/src/render/renderer.js.map +1 -0
- package/dist/src/render/renderpass.js +200 -0
- package/dist/src/render/renderpass.js.map +1 -0
- package/dist/src/render/shadowmap_pass.js +56 -0
- package/dist/src/render/shadowmap_pass.js.map +1 -0
- package/dist/src/render/sky.js +1103 -0
- package/dist/src/render/sky.js.map +1 -0
- package/dist/src/render/weightedblended_oit.js +168 -0
- package/dist/src/render/weightedblended_oit.js.map +1 -0
- package/dist/src/scene/batchgroup.js +162 -0
- package/dist/src/scene/batchgroup.js.map +1 -0
- package/dist/src/scene/environment.js +209 -0
- package/dist/src/scene/environment.js.map +1 -0
- package/dist/src/scene/graph_node.js +72 -0
- package/dist/src/scene/graph_node.js.map +1 -0
- package/dist/src/scene/light.js +416 -0
- package/dist/src/scene/light.js.map +1 -0
- package/dist/src/scene/mesh.js +341 -0
- package/dist/src/scene/mesh.js.map +1 -0
- package/dist/src/scene/octree.js +649 -0
- package/dist/src/scene/octree.js.map +1 -0
- package/dist/src/scene/particlesys.js +738 -0
- package/dist/src/scene/particlesys.js.map +1 -0
- package/dist/src/scene/raycast_visitor.js +103 -0
- package/dist/src/scene/raycast_visitor.js.map +1 -0
- package/dist/src/scene/scene.js +284 -0
- package/dist/src/scene/scene.js.map +1 -0
- package/dist/src/scene/scene_node.js +732 -0
- package/dist/src/scene/scene_node.js.map +1 -0
- package/dist/src/scene/terrain/grass.js +278 -0
- package/dist/src/scene/terrain/grass.js.map +1 -0
- package/dist/src/scene/terrain/heightfield.js +475 -0
- package/dist/src/scene/terrain/heightfield.js.map +1 -0
- package/dist/src/scene/terrain/patch.js +530 -0
- package/dist/src/scene/terrain/patch.js.map +1 -0
- package/dist/src/scene/terrain/quadtree.js +461 -0
- package/dist/src/scene/terrain/quadtree.js.map +1 -0
- package/dist/src/scene/terrain/terrain.js +246 -0
- package/dist/src/scene/terrain/terrain.js.map +1 -0
- package/dist/src/scene/terrain-cm/grass.js +594 -0
- package/dist/src/scene/terrain-cm/grass.js.map +1 -0
- package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
- package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
- package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
- package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
- package/dist/src/scene/water.js +374 -0
- package/dist/src/scene/water.js.map +1 -0
- package/dist/src/shaders/atmosphere.js +957 -0
- package/dist/src/shaders/atmosphere.js.map +1 -0
- package/dist/src/shaders/fog.js +112 -0
- package/dist/src/shaders/fog.js.map +1 -0
- package/dist/src/shaders/misc.js +266 -0
- package/dist/src/shaders/misc.js.map +1 -0
- package/dist/src/shaders/noise.js +222 -0
- package/dist/src/shaders/noise.js.map +1 -0
- package/dist/src/shaders/pbr.js +51 -0
- package/dist/src/shaders/pbr.js.map +1 -0
- package/dist/src/shaders/shadow.js +636 -0
- package/dist/src/shaders/shadow.js.map +1 -0
- package/dist/src/shaders/ssr.js +490 -0
- package/dist/src/shaders/ssr.js.map +1 -0
- package/dist/src/shaders/temporal.js +215 -0
- package/dist/src/shaders/temporal.js.map +1 -0
- package/dist/src/shaders/water.js +756 -0
- package/dist/src/shaders/water.js.map +1 -0
- package/dist/src/shadow/esm.js +237 -0
- package/dist/src/shadow/esm.js.map +1 -0
- package/dist/src/shadow/pcf_opt.js +181 -0
- package/dist/src/shadow/pcf_opt.js.map +1 -0
- package/dist/src/shadow/pcf_pd.js +189 -0
- package/dist/src/shadow/pcf_pd.js.map +1 -0
- package/dist/src/shadow/shader.js +37 -0
- package/dist/src/shadow/shader.js.map +1 -0
- package/dist/src/shadow/shadow_impl.js +15 -0
- package/dist/src/shadow/shadow_impl.js.map +1 -0
- package/dist/src/shadow/shadowmapper.js +790 -0
- package/dist/src/shadow/shadowmapper.js.map +1 -0
- package/dist/src/shadow/ssm.js +159 -0
- package/dist/src/shadow/ssm.js.map +1 -0
- package/dist/src/shadow/vsm.js +297 -0
- package/dist/src/shadow/vsm.js.map +1 -0
- package/dist/src/shapes/box.js +386 -0
- package/dist/src/shapes/box.js.map +1 -0
- package/dist/src/shapes/cylinder.js +125 -0
- package/dist/src/shapes/cylinder.js.map +1 -0
- package/dist/src/shapes/plane.js +88 -0
- package/dist/src/shapes/plane.js.map +1 -0
- package/dist/src/shapes/shape.js +87 -0
- package/dist/src/shapes/shape.js.map +1 -0
- package/dist/src/shapes/sphere.js +114 -0
- package/dist/src/shapes/sphere.js.map +1 -0
- package/dist/src/shapes/tetrahedron.js +188 -0
- package/dist/src/shapes/tetrahedron.js.map +1 -0
- package/dist/src/shapes/torus.js +111 -0
- package/dist/src/shapes/torus.js.map +1 -0
- package/dist/src/utility/aabbtree.js +400 -0
- package/dist/src/utility/aabbtree.js.map +1 -0
- package/dist/src/utility/bounding_volume.js +29 -0
- package/dist/src/utility/bounding_volume.js.map +1 -0
- package/dist/src/utility/debug.js +28 -0
- package/dist/src/utility/debug.js.map +1 -0
- package/dist/src/utility/draco/decoder.js +116 -0
- package/dist/src/utility/draco/decoder.js.map +1 -0
- package/dist/src/utility/misc.js +105 -0
- package/dist/src/utility/misc.js.map +1 -0
- package/dist/src/utility/panorama.js +163 -0
- package/dist/src/utility/panorama.js.map +1 -0
- package/dist/src/utility/pmrem.js +354 -0
- package/dist/src/utility/pmrem.js.map +1 -0
- package/dist/src/utility/rendermipmap.js +115 -0
- package/dist/src/utility/rendermipmap.js.map +1 -0
- package/dist/src/utility/serialization/json.js +402 -0
- package/dist/src/utility/serialization/json.js.map +1 -0
- package/dist/src/utility/serialization/manager.js +623 -0
- package/dist/src/utility/serialization/manager.js.map +1 -0
- package/dist/src/utility/serialization/scene/animation.js +248 -0
- package/dist/src/utility/serialization/scene/animation.js.map +1 -0
- package/dist/src/utility/serialization/scene/batch.js +59 -0
- package/dist/src/utility/serialization/scene/batch.js.map +1 -0
- package/dist/src/utility/serialization/scene/camera.js +790 -0
- package/dist/src/utility/serialization/scene/camera.js.map +1 -0
- package/dist/src/utility/serialization/scene/common.js +222 -0
- package/dist/src/utility/serialization/scene/common.js.map +1 -0
- package/dist/src/utility/serialization/scene/light.js +575 -0
- package/dist/src/utility/serialization/scene/light.js.map +1 -0
- package/dist/src/utility/serialization/scene/material.js +1111 -0
- package/dist/src/utility/serialization/scene/material.js.map +1 -0
- package/dist/src/utility/serialization/scene/mesh.js +148 -0
- package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
- package/dist/src/utility/serialization/scene/misc.js +39 -0
- package/dist/src/utility/serialization/scene/misc.js.map +1 -0
- package/dist/src/utility/serialization/scene/node.js +451 -0
- package/dist/src/utility/serialization/scene/node.js.map +1 -0
- package/dist/src/utility/serialization/scene/particle.js +425 -0
- package/dist/src/utility/serialization/scene/particle.js.map +1 -0
- package/dist/src/utility/serialization/scene/primitive.js +692 -0
- package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
- package/dist/src/utility/serialization/scene/scene.js +704 -0
- package/dist/src/utility/serialization/scene/scene.js.map +1 -0
- package/dist/src/utility/serialization/scene/terrain.js +488 -0
- package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
- package/dist/src/utility/serialization/scene/water.js +465 -0
- package/dist/src/utility/serialization/scene/water.js.map +1 -0
- package/dist/src/utility/shprojector.js +297 -0
- package/dist/src/utility/shprojector.js.map +1 -0
- package/dist/src/utility/textures/ggxlut.js +213 -0
- package/dist/src/utility/textures/ggxlut.js.map +1 -0
- package/dist/src/utility/textures/gradientnoise.js +62 -0
- package/dist/src/utility/textures/gradientnoise.js.map +1 -0
- package/dist/src/utility/textures/randomnoise.js +41 -0
- package/dist/src/utility/textures/randomnoise.js.map +1 -0
- package/dist/src/values.js +162 -0
- package/dist/src/values.js.map +1 -0
- package/dist/utility/blueprint/material/common.js +7 -0
- package/dist/utility/blueprint/material/common.js.map +1 -0
- package/dist/utility/blueprint/material/inputs.js +3 -3
- package/dist/utility/blueprint/material/inputs.js.map +1 -1
- package/dist/utility/blueprint/material/ir.js +4 -4
- package/dist/utility/blueprint/material/ir.js.map +1 -1
- package/dist/utility/serialization/blueprint/constants.js +255 -0
- package/dist/utility/serialization/blueprint/constants.js.map +1 -0
- package/dist/utility/serialization/blueprint/material/constants.js +203 -0
- package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
- package/dist/utility/serialization/blueprint/material/texture.js +165 -0
- package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
- package/dist/utility/serialization/manager.js +299 -268
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +45 -0
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +53 -0
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/common.js +10 -0
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +30 -0
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +63 -0
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +11 -0
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/misc.js +2 -0
- package/dist/utility/serialization/scene/misc.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +19 -0
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +22 -0
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +33 -0
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +39 -0
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/script.js +2 -0
- package/dist/utility/serialization/scene/script.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +6 -0
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +9 -0
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +21 -0
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js +5 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/values.js +49 -53
- package/dist/values.js.map +1 -1
- package/package.json +2 -2
- package/dist/animation/joint_dynamics/vrm_spring_bone.js +0 -46
- package/dist/animation/joint_dynamics/vrm_spring_bone.js.map +0 -1
- package/dist/animation/spring/spring_bone.js +0 -240
- package/dist/animation/spring/spring_bone.js.map +0 -1
- package/dist/animation/spring/spring_bone_collider.js +0 -198
- package/dist/animation/spring/spring_bone_collider.js.map +0 -1
- package/dist/animation/spring/spring_bone_constraint.js +0 -170
- package/dist/animation/spring/spring_bone_constraint.js.map +0 -1
- package/dist/animation/spring/spring_bone_system.js +0 -328
- package/dist/animation/spring/spring_bone_system.js.map +0 -1
- package/dist/render/sky_motion_vector.js +0 -85
- package/dist/render/sky_motion_vector.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constraints.js","sources":["../../../src/animation/joint_dynamics/constraints.ts"],"sourcesContent":["// Constraint creation utilities — port of SPCRJointDynamicsController constraint building\r\n\r\nimport { Vector3 } from '@zephyr3d/base';\r\nimport { ConstraintType, type Constraint, type BoneNode } from './types';\r\n\r\n/** Options for constraint generation from bone hierarchy */\r\nexport interface ConstraintBuildOptions {\r\n /** Generate parent→child vertical constraints */\r\n structuralVertical: boolean;\r\n /** Generate same-depth horizontal constraints across chains */\r\n structuralHorizontal: boolean;\r\n /** Generate diagonal cross-bracing constraints */\r\n shear: boolean;\r\n /** Generate skip-one vertical bending constraints */\r\n bendingVertical: boolean;\r\n /** Generate skip-one horizontal bending constraints */\r\n bendingHorizontal: boolean;\r\n /** Connect last root point back to first (for cylindrical topology like skirts) */\r\n isLoop: boolean;\r\n /** Enable per-constraint collision detection on structural vertical pairs */\r\n collideStructuralVertical: boolean;\r\n /** Enable per-constraint collision detection on structural horizontal pairs */\r\n collideStructuralHorizontal: boolean;\r\n /** Enable per-constraint collision detection on shear pairs */\r\n collideShear: boolean;\r\n /** Enable surface/triangle collision (overrides per-type collision flags) */\r\n enableSurfaceCollision: boolean;\r\n}\r\n\r\ninterface RawConstraint {\r\n type: ConstraintType;\r\n indexA: number;\r\n indexB: number;\r\n length: number;\r\n}\r\n\r\nfunction getFirstChild(node: BoneNode): BoneNode | null {\r\n return node.children.length > 0 ? node.children[0] : null;\r\n}\r\n\r\nfunction constraintLength(a: BoneNode, b: BoneNode): number {\r\n return Vector3.distance(a.position, b.position);\r\n}\r\n\r\n// ── Structural Vertical: parent→child chains ──\r\n\r\nfunction createStructuralVertical(node: BoneNode, out: RawConstraint[]) {\r\n for (const child of node.children) {\r\n out.push({\r\n type: ConstraintType.Structural_Vertical,\r\n indexA: node.index,\r\n indexB: child.index,\r\n length: constraintLength(node, child)\r\n });\r\n createStructuralVertical(child, out);\r\n }\r\n}\r\n\r\n// ── Structural Horizontal: same-depth siblings across chains ──\r\n\r\nfunction createHorizontal(\r\n a: BoneNode | null,\r\n b: BoneNode | null,\r\n type: ConstraintType,\r\n out: RawConstraint[]\r\n) {\r\n if (!a || !b || a === b) {\r\n return;\r\n }\r\n const childA = getFirstChild(a);\r\n const childB = getFirstChild(b);\r\n\r\n if (childA && childB) {\r\n out.push({\r\n type,\r\n indexA: childA.index,\r\n indexB: childB.index,\r\n length: constraintLength(childA, childB)\r\n });\r\n createHorizontal(childA, childB, type, out);\r\n } else if (childA && !childB) {\r\n out.push({\r\n type,\r\n indexA: childA.index,\r\n indexB: b.index,\r\n length: constraintLength(childA, b)\r\n });\r\n } else if (!childA && childB) {\r\n out.push({\r\n type,\r\n indexA: a.index,\r\n indexB: childB.index,\r\n length: constraintLength(a, childB)\r\n });\r\n }\r\n}\r\n\r\n// ── Shear: diagonal cross-bracing ──\r\n\r\nfunction createShear(a: BoneNode | null, b: BoneNode | null, out: RawConstraint[]) {\r\n if (!a || !b || a === b) {\r\n return;\r\n }\r\n const cA = getFirstChild(a);\r\n const cB = getFirstChild(b);\r\n const cA2 = cA ? getFirstChild(cA) : null;\r\n const cB2 = cB ? getFirstChild(cB) : null;\r\n const cA3 = cA2 ? getFirstChild(cA2) : null;\r\n const cB3 = cB2 ? getFirstChild(cB2) : null;\r\n\r\n const target1 = cA ?? cA2 ?? cA3;\r\n if (target1) {\r\n out.push({\r\n type: ConstraintType.Shear,\r\n indexA: target1.index,\r\n indexB: b.index,\r\n length: constraintLength(target1, b)\r\n });\r\n }\r\n\r\n const target2 = cB ?? cB2 ?? cB3;\r\n if (target2) {\r\n out.push({\r\n type: ConstraintType.Shear,\r\n indexA: a.index,\r\n indexB: target2.index,\r\n length: constraintLength(a, target2)\r\n });\r\n }\r\n\r\n createShear(cA, cB, out);\r\n}\r\n\r\n// ── Bending Vertical: skip-one (grandparent→grandchild) ──\r\n\r\nfunction createBendingVertical(node: BoneNode, out: RawConstraint[]) {\r\n if (node.children.length !== 1) {\r\n return;\r\n }\r\n const childA = node.children[0];\r\n if (childA.children.length !== 1) {\r\n return;\r\n }\r\n const childB = childA.children[0];\r\n\r\n out.push({\r\n type: ConstraintType.Bending_Vertical,\r\n indexA: node.index,\r\n indexB: childB.index,\r\n length: constraintLength(node, childB)\r\n });\r\n createBendingVertical(childA, out);\r\n}\r\n\r\n// ── Constraint grouping (no shared point indices per group) ──\r\n\r\nfunction findSameIndex(group: Constraint[], c: Constraint): boolean {\r\n for (const g of group) {\r\n if (g.indexA === c.indexA || g.indexA === c.indexB || g.indexB === c.indexA || g.indexB === c.indexB) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction pushToGroups(groups: Constraint[][], c: Constraint) {\r\n for (const g of groups) {\r\n if (!findSameIndex(g, c)) {\r\n g.push(c);\r\n return;\r\n }\r\n }\r\n groups.push([c]);\r\n}\r\n\r\n// ── Surface faces (quads → 2 triangles of 3 indices) ──\r\n\r\nfunction createSurfaceFaces(a: BoneNode | null, b: BoneNode | null, out: number[]) {\r\n if (!a || !b || a === b) {\r\n return;\r\n }\r\n const cA = getFirstChild(a);\r\n const cB = getFirstChild(b);\r\n if (cA && cB) {\r\n if (\r\n a.useForSurfaceCollision !== false &&\r\n b.useForSurfaceCollision !== false &&\r\n cA.useForSurfaceCollision !== false &&\r\n cB.useForSurfaceCollision !== false\r\n ) {\r\n // Quad ABCD → triangles ABC, CDA\r\n out.push(a.index, b.index, cB.index, cB.index, cA.index, a.index);\r\n }\r\n createSurfaceFaces(cA, cB, out);\r\n }\r\n}\r\n\r\n// ── Public API ──\r\n\r\nexport function buildConstraints(rootPoints: BoneNode[], options: ConstraintBuildOptions): Constraint[] {\r\n const n = rootPoints.length;\r\n const groups: Constraint[][] = [];\r\n\r\n const addRaw = (raws: RawConstraint[], collide: boolean) => {\r\n for (const r of raws) {\r\n const bothFixed = isBoneFixed(rootPoints, r.indexA) && isBoneFixed(rootPoints, r.indexB);\r\n pushToGroups(groups, {\r\n type: r.type,\r\n indexA: r.indexA,\r\n indexB: r.indexB,\r\n length: r.length,\r\n isCollision: !bothFixed && collide ? 1 : 0\r\n });\r\n }\r\n };\r\n\r\n // Bending Horizontal\r\n if (options.bendingHorizontal) {\r\n const raw: RawConstraint[] = [];\r\n const pairs = options.isLoop\r\n ? Array.from({ length: n }, (_, i) => [i, (i + 2) % n])\r\n : Array.from({ length: Math.max(0, n - 2) }, (_, i) => [i, i + 2]);\r\n for (const [a, b] of pairs) {\r\n createHorizontal(rootPoints[a], rootPoints[b], ConstraintType.Bending_Horizontal, raw);\r\n }\r\n addRaw(raw, false);\r\n }\r\n\r\n // Bending Vertical\r\n if (options.bendingVertical) {\r\n const raw: RawConstraint[] = [];\r\n for (const root of rootPoints) {\r\n createBendingVertical(root, raw);\r\n }\r\n addRaw(raw, false);\r\n }\r\n\r\n // Shear\r\n if (options.shear) {\r\n const raw: RawConstraint[] = [];\r\n const pairs = options.isLoop\r\n ? Array.from({ length: n }, (_, i) => [i, (i + 1) % n])\r\n : Array.from({ length: Math.max(0, n - 1) }, (_, i) => [i, i + 1]);\r\n for (const [a, b] of pairs) {\r\n createShear(rootPoints[a], rootPoints[b], raw);\r\n }\r\n addRaw(raw, options.enableSurfaceCollision || options.collideShear);\r\n }\r\n\r\n // Structural Horizontal\r\n if (options.structuralHorizontal) {\r\n const raw: RawConstraint[] = [];\r\n const pairs = options.isLoop\r\n ? Array.from({ length: n }, (_, i) => [i, (i + 1) % n])\r\n : Array.from({ length: Math.max(0, n - 1) }, (_, i) => [i, i + 1]);\r\n for (const [a, b] of pairs) {\r\n createHorizontal(rootPoints[a], rootPoints[b], ConstraintType.Structural_Horizontal, raw);\r\n }\r\n addRaw(raw, options.enableSurfaceCollision || options.collideStructuralHorizontal);\r\n }\r\n\r\n // Structural Vertical\r\n if (options.structuralVertical) {\r\n const raw: RawConstraint[] = [];\r\n for (const root of rootPoints) {\r\n createStructuralVertical(root, raw);\r\n }\r\n addRaw(raw, options.enableSurfaceCollision || options.collideStructuralVertical);\r\n }\r\n\r\n // Flatten groups into single array\r\n return groups.flat();\r\n}\r\n\r\nexport function buildSurfaceFaces(rootPoints: BoneNode[], isLoop: boolean): number[] {\r\n const out: number[] = [];\r\n const n = rootPoints.length;\r\n for (let i = 0; i < n - 1; i++) {\r\n createSurfaceFaces(rootPoints[i], rootPoints[i + 1], out);\r\n }\r\n if (isLoop && n > 1) {\r\n createSurfaceFaces(rootPoints[n - 1], rootPoints[0], out);\r\n }\r\n return out;\r\n}\r\n\r\nexport function computeMaxDepth(rootPoints: BoneNode[]): number {\r\n let max = 0;\r\n function walk(node: BoneNode) {\r\n if (node.depth > max) {\r\n max = node.depth;\r\n }\r\n for (const c of node.children) {\r\n walk(c);\r\n }\r\n }\r\n for (const r of rootPoints) {\r\n walk(r);\r\n }\r\n return max;\r\n}\r\n\r\nexport function sortRootPointsByProximity(\r\n roots: BoneNode[],\r\n ignoreY: boolean,\r\n fixedBeginEnd: boolean\r\n): BoneNode[] {\r\n if (roots.length <= 2) {\r\n return [...roots];\r\n }\r\n const sorted: BoneNode[] = [];\r\n const remaining = [...roots];\r\n\r\n if (fixedBeginEnd) {\r\n sorted.push(remaining.shift()!);\r\n const last = remaining.pop()!;\r\n while (remaining.length > 0) {\r\n const cur = sorted[sorted.length - 1];\r\n let bestIdx = 0,\r\n bestDist = Infinity;\r\n for (let i = 0; i < remaining.length; i++) {\r\n const d = distXYZ(cur.position, remaining[i].position, ignoreY);\r\n if (d < bestDist) {\r\n bestDist = d;\r\n bestIdx = i;\r\n }\r\n }\r\n sorted.push(remaining.splice(bestIdx, 1)[0]);\r\n }\r\n sorted.push(last);\r\n } else {\r\n sorted.push(remaining.shift()!);\r\n while (remaining.length > 0) {\r\n const cur = sorted[sorted.length - 1];\r\n let bestIdx = 0,\r\n bestDist = Infinity;\r\n for (let i = 0; i < remaining.length; i++) {\r\n const d = distXYZ(cur.position, remaining[i].position, ignoreY);\r\n if (d < bestDist) {\r\n bestDist = d;\r\n bestIdx = i;\r\n }\r\n }\r\n sorted.push(remaining.splice(bestIdx, 1)[0]);\r\n }\r\n }\r\n return sorted;\r\n}\r\n\r\n// ── Helpers ──\r\n\r\nfunction distXYZ(a: Vector3, b: Vector3, ignoreY: boolean): number {\r\n const dx = a.x - b.x,\r\n dz = a.z - b.z;\r\n const dy = ignoreY ? 0 : a.y - b.y;\r\n return dx * dx + dy * dy + dz * dz;\r\n}\r\n\r\n// Walk all nodes to find if a given index is fixed\r\nfunction isBoneFixed(roots: BoneNode[], index: number): boolean {\r\n function find(node: BoneNode): boolean {\r\n if (node.index === index) {\r\n return node.isFixed;\r\n }\r\n for (const c of node.children) {\r\n const r = find(c);\r\n if (r !== undefined) {\r\n return r;\r\n }\r\n }\r\n return false;\r\n }\r\n for (const r of roots) {\r\n const res = find(r);\r\n if (res) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n"],"names":["getFirstChild","node","children","length","constraintLength","a","b","Vector3","distance","position","createStructuralVertical","out","child","push","type","ConstraintType","Structural_Vertical","indexA","index","indexB","createHorizontal","childA","childB","createShear","cA","cB","cA2","cB2","cA3","cB3","target1","Shear","target2","createBendingVertical","Bending_Vertical","findSameIndex","group","c","g","pushToGroups","groups","createSurfaceFaces","useForSurfaceCollision","buildConstraints","rootPoints","options","n","addRaw","raws","collide","r","bothFixed","isBoneFixed","isCollision","bendingHorizontal","raw","pairs","isLoop","Array","from","_","i","Math","max","Bending_Horizontal","bendingVertical","root","shear","enableSurfaceCollision","collideShear","structuralHorizontal","Structural_Horizontal","collideStructuralHorizontal","structuralVertical","collideStructuralVertical","flat","buildSurfaceFaces","computeMaxDepth","walk","depth","sortRootPointsByProximity","roots","ignoreY","fixedBeginEnd","sorted","remaining","shift","last","pop","cur","bestIdx","bestDist","Infinity","d","distXYZ","splice","dx","x","dz","z","dy","y","find","isFixed","undefined","res"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"constraints.js","sources":["../../../src/animation/joint_dynamics/constraints.ts"],"sourcesContent":["// Constraint creation utilities — port of SPCRJointDynamicsController constraint building\r\n\r\nimport { Vector3 } from '@zephyr3d/base';\r\nimport { ConstraintType, type Constraint, type BoneNode } from './types';\r\n\r\n/**\r\n * Options for constraint generation from a bone hierarchy.\r\n *\r\n * @public\r\n */\r\nexport interface ConstraintBuildOptions {\r\n /** Generate parent→child vertical constraints */\r\n structuralVertical: boolean;\r\n /** Generate same-depth horizontal constraints across chains */\r\n structuralHorizontal: boolean;\r\n /** Generate diagonal cross-bracing constraints */\r\n shear: boolean;\r\n /** Generate skip-one vertical bending constraints */\r\n bendingVertical: boolean;\r\n /** Generate skip-one horizontal bending constraints */\r\n bendingHorizontal: boolean;\r\n /** Connect last root point back to first (for cylindrical topology like skirts) */\r\n isLoop: boolean;\r\n /** Enable per-constraint collision detection on structural vertical pairs */\r\n collideStructuralVertical: boolean;\r\n /** Enable per-constraint collision detection on structural horizontal pairs */\r\n collideStructuralHorizontal: boolean;\r\n /** Enable per-constraint collision detection on shear pairs */\r\n collideShear: boolean;\r\n /** Enable surface/triangle collision (overrides per-type collision flags) */\r\n enableSurfaceCollision: boolean;\r\n}\r\n\r\ninterface RawConstraint {\r\n type: ConstraintType;\r\n indexA: number;\r\n indexB: number;\r\n length: number;\r\n}\r\n\r\nfunction getFirstChild(node: BoneNode): BoneNode | null {\r\n return node.children.length > 0 ? node.children[0] : null;\r\n}\r\n\r\nfunction constraintLength(a: BoneNode, b: BoneNode): number {\r\n return Vector3.distance(a.position, b.position);\r\n}\r\n\r\n// ── Structural Vertical: parent→child chains ──\r\n\r\nfunction createStructuralVertical(node: BoneNode, out: RawConstraint[]) {\r\n for (const child of node.children) {\r\n out.push({\r\n type: ConstraintType.Structural_Vertical,\r\n indexA: node.index,\r\n indexB: child.index,\r\n length: constraintLength(node, child)\r\n });\r\n createStructuralVertical(child, out);\r\n }\r\n}\r\n\r\n// ── Structural Horizontal: same-depth siblings across chains ──\r\n\r\nfunction createHorizontal(\r\n a: BoneNode | null,\r\n b: BoneNode | null,\r\n type: ConstraintType,\r\n out: RawConstraint[]\r\n) {\r\n if (!a || !b || a === b) {\r\n return;\r\n }\r\n const childA = getFirstChild(a);\r\n const childB = getFirstChild(b);\r\n\r\n if (childA && childB) {\r\n out.push({\r\n type,\r\n indexA: childA.index,\r\n indexB: childB.index,\r\n length: constraintLength(childA, childB)\r\n });\r\n createHorizontal(childA, childB, type, out);\r\n } else if (childA && !childB) {\r\n out.push({\r\n type,\r\n indexA: childA.index,\r\n indexB: b.index,\r\n length: constraintLength(childA, b)\r\n });\r\n } else if (!childA && childB) {\r\n out.push({\r\n type,\r\n indexA: a.index,\r\n indexB: childB.index,\r\n length: constraintLength(a, childB)\r\n });\r\n }\r\n}\r\n\r\n// ── Shear: diagonal cross-bracing ──\r\n\r\nfunction createShear(a: BoneNode | null, b: BoneNode | null, out: RawConstraint[]) {\r\n if (!a || !b || a === b) {\r\n return;\r\n }\r\n const cA = getFirstChild(a);\r\n const cB = getFirstChild(b);\r\n const cA2 = cA ? getFirstChild(cA) : null;\r\n const cB2 = cB ? getFirstChild(cB) : null;\r\n const cA3 = cA2 ? getFirstChild(cA2) : null;\r\n const cB3 = cB2 ? getFirstChild(cB2) : null;\r\n\r\n const target1 = cA ?? cA2 ?? cA3;\r\n if (target1) {\r\n out.push({\r\n type: ConstraintType.Shear,\r\n indexA: target1.index,\r\n indexB: b.index,\r\n length: constraintLength(target1, b)\r\n });\r\n }\r\n\r\n const target2 = cB ?? cB2 ?? cB3;\r\n if (target2) {\r\n out.push({\r\n type: ConstraintType.Shear,\r\n indexA: a.index,\r\n indexB: target2.index,\r\n length: constraintLength(a, target2)\r\n });\r\n }\r\n\r\n createShear(cA, cB, out);\r\n}\r\n\r\n// ── Bending Vertical: skip-one (grandparent→grandchild) ──\r\n\r\nfunction createBendingVertical(node: BoneNode, out: RawConstraint[]) {\r\n if (node.children.length !== 1) {\r\n return;\r\n }\r\n const childA = node.children[0];\r\n if (childA.children.length !== 1) {\r\n return;\r\n }\r\n const childB = childA.children[0];\r\n\r\n out.push({\r\n type: ConstraintType.Bending_Vertical,\r\n indexA: node.index,\r\n indexB: childB.index,\r\n length: constraintLength(node, childB)\r\n });\r\n createBendingVertical(childA, out);\r\n}\r\n\r\n// ── Constraint grouping (no shared point indices per group) ──\r\n\r\nfunction findSameIndex(group: Constraint[], c: Constraint): boolean {\r\n for (const g of group) {\r\n if (g.indexA === c.indexA || g.indexA === c.indexB || g.indexB === c.indexA || g.indexB === c.indexB) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction pushToGroups(groups: Constraint[][], c: Constraint) {\r\n for (const g of groups) {\r\n if (!findSameIndex(g, c)) {\r\n g.push(c);\r\n return;\r\n }\r\n }\r\n groups.push([c]);\r\n}\r\n\r\n// ── Surface faces (quads → 2 triangles of 3 indices) ──\r\n\r\nfunction createSurfaceFaces(a: BoneNode | null, b: BoneNode | null, out: number[]) {\r\n if (!a || !b || a === b) {\r\n return;\r\n }\r\n const cA = getFirstChild(a);\r\n const cB = getFirstChild(b);\r\n if (cA && cB) {\r\n if (\r\n a.useForSurfaceCollision !== false &&\r\n b.useForSurfaceCollision !== false &&\r\n cA.useForSurfaceCollision !== false &&\r\n cB.useForSurfaceCollision !== false\r\n ) {\r\n // Quad ABCD → triangles ABC, CDA\r\n out.push(a.index, b.index, cB.index, cB.index, cA.index, a.index);\r\n }\r\n createSurfaceFaces(cA, cB, out);\r\n }\r\n}\r\n\r\n// ── Public API ──\r\n\r\n/**\r\n * Builds solver constraints from the supplied root chains.\r\n *\r\n * @public\r\n */\r\nexport function buildConstraints(rootPoints: BoneNode[], options: ConstraintBuildOptions): Constraint[] {\r\n const n = rootPoints.length;\r\n const groups: Constraint[][] = [];\r\n\r\n const addRaw = (raws: RawConstraint[], collide: boolean) => {\r\n for (const r of raws) {\r\n const bothFixed = isBoneFixed(rootPoints, r.indexA) && isBoneFixed(rootPoints, r.indexB);\r\n pushToGroups(groups, {\r\n type: r.type,\r\n indexA: r.indexA,\r\n indexB: r.indexB,\r\n length: r.length,\r\n isCollision: !bothFixed && collide ? 1 : 0\r\n });\r\n }\r\n };\r\n\r\n // Bending Horizontal\r\n if (options.bendingHorizontal) {\r\n const raw: RawConstraint[] = [];\r\n const pairs = options.isLoop\r\n ? Array.from({ length: n }, (_, i) => [i, (i + 2) % n])\r\n : Array.from({ length: Math.max(0, n - 2) }, (_, i) => [i, i + 2]);\r\n for (const [a, b] of pairs) {\r\n createHorizontal(rootPoints[a], rootPoints[b], ConstraintType.Bending_Horizontal, raw);\r\n }\r\n addRaw(raw, false);\r\n }\r\n\r\n // Bending Vertical\r\n if (options.bendingVertical) {\r\n const raw: RawConstraint[] = [];\r\n for (const root of rootPoints) {\r\n createBendingVertical(root, raw);\r\n }\r\n addRaw(raw, false);\r\n }\r\n\r\n // Shear\r\n if (options.shear) {\r\n const raw: RawConstraint[] = [];\r\n const pairs = options.isLoop\r\n ? Array.from({ length: n }, (_, i) => [i, (i + 1) % n])\r\n : Array.from({ length: Math.max(0, n - 1) }, (_, i) => [i, i + 1]);\r\n for (const [a, b] of pairs) {\r\n createShear(rootPoints[a], rootPoints[b], raw);\r\n }\r\n addRaw(raw, options.enableSurfaceCollision || options.collideShear);\r\n }\r\n\r\n // Structural Horizontal\r\n if (options.structuralHorizontal) {\r\n const raw: RawConstraint[] = [];\r\n const pairs = options.isLoop\r\n ? Array.from({ length: n }, (_, i) => [i, (i + 1) % n])\r\n : Array.from({ length: Math.max(0, n - 1) }, (_, i) => [i, i + 1]);\r\n for (const [a, b] of pairs) {\r\n createHorizontal(rootPoints[a], rootPoints[b], ConstraintType.Structural_Horizontal, raw);\r\n }\r\n addRaw(raw, options.enableSurfaceCollision || options.collideStructuralHorizontal);\r\n }\r\n\r\n // Structural Vertical\r\n if (options.structuralVertical) {\r\n const raw: RawConstraint[] = [];\r\n for (const root of rootPoints) {\r\n createStructuralVertical(root, raw);\r\n }\r\n addRaw(raw, options.enableSurfaceCollision || options.collideStructuralVertical);\r\n }\r\n\r\n // Flatten groups into single array\r\n return groups.flat();\r\n}\r\n\r\n/**\r\n * Builds triangle indices used for surface collision.\r\n *\r\n * @public\r\n */\r\nexport function buildSurfaceFaces(rootPoints: BoneNode[], isLoop: boolean): number[] {\r\n const out: number[] = [];\r\n const n = rootPoints.length;\r\n for (let i = 0; i < n - 1; i++) {\r\n createSurfaceFaces(rootPoints[i], rootPoints[i + 1], out);\r\n }\r\n if (isLoop && n > 1) {\r\n createSurfaceFaces(rootPoints[n - 1], rootPoints[0], out);\r\n }\r\n return out;\r\n}\r\n\r\n/**\r\n * Computes the maximum chain depth among all root points.\r\n *\r\n * @public\r\n */\r\nexport function computeMaxDepth(rootPoints: BoneNode[]): number {\r\n let max = 0;\r\n function walk(node: BoneNode) {\r\n if (node.depth > max) {\r\n max = node.depth;\r\n }\r\n for (const c of node.children) {\r\n walk(c);\r\n }\r\n }\r\n for (const r of rootPoints) {\r\n walk(r);\r\n }\r\n return max;\r\n}\r\n\r\n/**\r\n * Sorts root points by proximity to the supplied reference position.\r\n *\r\n * @public\r\n */\r\nexport function sortRootPointsByProximity(\r\n roots: BoneNode[],\r\n ignoreY: boolean,\r\n fixedBeginEnd: boolean\r\n): BoneNode[] {\r\n if (roots.length <= 2) {\r\n return [...roots];\r\n }\r\n const sorted: BoneNode[] = [];\r\n const remaining = [...roots];\r\n\r\n if (fixedBeginEnd) {\r\n sorted.push(remaining.shift()!);\r\n const last = remaining.pop()!;\r\n while (remaining.length > 0) {\r\n const cur = sorted[sorted.length - 1];\r\n let bestIdx = 0,\r\n bestDist = Infinity;\r\n for (let i = 0; i < remaining.length; i++) {\r\n const d = distXYZ(cur.position, remaining[i].position, ignoreY);\r\n if (d < bestDist) {\r\n bestDist = d;\r\n bestIdx = i;\r\n }\r\n }\r\n sorted.push(remaining.splice(bestIdx, 1)[0]);\r\n }\r\n sorted.push(last);\r\n } else {\r\n sorted.push(remaining.shift()!);\r\n while (remaining.length > 0) {\r\n const cur = sorted[sorted.length - 1];\r\n let bestIdx = 0,\r\n bestDist = Infinity;\r\n for (let i = 0; i < remaining.length; i++) {\r\n const d = distXYZ(cur.position, remaining[i].position, ignoreY);\r\n if (d < bestDist) {\r\n bestDist = d;\r\n bestIdx = i;\r\n }\r\n }\r\n sorted.push(remaining.splice(bestIdx, 1)[0]);\r\n }\r\n }\r\n return sorted;\r\n}\r\n\r\n// ── Helpers ──\r\n\r\nfunction distXYZ(a: Vector3, b: Vector3, ignoreY: boolean): number {\r\n const dx = a.x - b.x,\r\n dz = a.z - b.z;\r\n const dy = ignoreY ? 0 : a.y - b.y;\r\n return dx * dx + dy * dy + dz * dz;\r\n}\r\n\r\n// Walk all nodes to find if a given index is fixed\r\nfunction isBoneFixed(roots: BoneNode[], index: number): boolean {\r\n function find(node: BoneNode): boolean {\r\n if (node.index === index) {\r\n return node.isFixed;\r\n }\r\n for (const c of node.children) {\r\n const r = find(c);\r\n if (r !== undefined) {\r\n return r;\r\n }\r\n }\r\n return false;\r\n }\r\n for (const r of roots) {\r\n const res = find(r);\r\n if (res) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n"],"names":["getFirstChild","node","children","length","constraintLength","a","b","Vector3","distance","position","createStructuralVertical","out","child","push","type","ConstraintType","Structural_Vertical","indexA","index","indexB","createHorizontal","childA","childB","createShear","cA","cB","cA2","cB2","cA3","cB3","target1","Shear","target2","createBendingVertical","Bending_Vertical","findSameIndex","group","c","g","pushToGroups","groups","createSurfaceFaces","useForSurfaceCollision","buildConstraints","rootPoints","options","n","addRaw","raws","collide","r","bothFixed","isBoneFixed","isCollision","bendingHorizontal","raw","pairs","isLoop","Array","from","_","i","Math","max","Bending_Horizontal","bendingVertical","root","shear","enableSurfaceCollision","collideShear","structuralHorizontal","Structural_Horizontal","collideStructuralHorizontal","structuralVertical","collideStructuralVertical","flat","buildSurfaceFaces","computeMaxDepth","walk","depth","sortRootPointsByProximity","roots","ignoreY","fixedBeginEnd","sorted","remaining","shift","last","pop","cur","bestIdx","bestDist","Infinity","d","distXYZ","splice","dx","x","dz","z","dy","y","find","isFixed","undefined","res"],"mappings":"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"}
|
|
@@ -3,8 +3,18 @@ import { buildConstraints, buildSurfaceFaces } from './constraints.js';
|
|
|
3
3
|
import { simulate, applyAngleLimits, applyResult } from './solver.js';
|
|
4
4
|
import { Vector3, Quaternion, Matrix4x4, clamp01 } from '@zephyr3d/base';
|
|
5
5
|
|
|
6
|
-
// High-level orchestrator
|
|
7
|
-
|
|
6
|
+
// High-level orchestrator - SPCRJointDynamicsController API
|
|
7
|
+
/**
|
|
8
|
+
* High-level controller for joint dynamics simulation.
|
|
9
|
+
*
|
|
10
|
+
* This class manages the physics simulation for a hierarchy of bones, including constraints,
|
|
11
|
+
* colliders, and grabbers. It provides an API for initializing the system with bone data and
|
|
12
|
+
* transforms, stepping the simulation each frame, and modifying colliders and grabbers at runtime.
|
|
13
|
+
* The controller handles the internal state and logic for blending between animation and physics,
|
|
14
|
+
* applying forces, and enforcing constraints.
|
|
15
|
+
*
|
|
16
|
+
* @public
|
|
17
|
+
*/ class JointDynamicsSystemController {
|
|
8
18
|
_config;
|
|
9
19
|
_pointsR = [];
|
|
10
20
|
_pointsRW = [];
|
|
@@ -44,13 +54,13 @@ class JointDynamicsSystemController {
|
|
|
44
54
|
this._config = config;
|
|
45
55
|
}
|
|
46
56
|
/**
|
|
47
|
-
*
|
|
48
|
-
* @param rootTransform
|
|
49
|
-
* @param rootPoints
|
|
50
|
-
* @param pointTransforms
|
|
51
|
-
* @param colliders
|
|
52
|
-
* @param grabbers
|
|
53
|
-
* @param flatPlanes
|
|
57
|
+
* Initializes the physics system.
|
|
58
|
+
* @param rootTransform - Root bone transform used to detect root motion.
|
|
59
|
+
* @param rootPoints - Root nodes of the bone hierarchy. Multiple roots are allowed.
|
|
60
|
+
* @param pointTransforms - Transform array for all physics points. Order must match `BoneNode.index`.
|
|
61
|
+
* @param colliders - Collider array (spheres/capsules).
|
|
62
|
+
* @param grabbers - Grabber array used for interactions such as mouse dragging.
|
|
63
|
+
* @param flatPlanes - Plane limiters such as the floor to prevent penetration.
|
|
54
64
|
*/ initialize(rootTransform, rootPoints, pointTransforms, colliders, grabbers, flatPlanes) {
|
|
55
65
|
this._rootTransform = rootTransform;
|
|
56
66
|
this._pointTransforms = pointTransforms;
|
|
@@ -61,7 +71,7 @@ class JointDynamicsSystemController {
|
|
|
61
71
|
this._surfaceConstraints = buildSurfaceFaces(rootPoints, this._config.constraintOptions.isLoop);
|
|
62
72
|
// Flatten bone hierarchy to point list, build parent map
|
|
63
73
|
const allPoints = [];
|
|
64
|
-
const parentMap = new Map(); // child index
|
|
74
|
+
const parentMap = new Map(); // child index -> parent index
|
|
65
75
|
function walk(node) {
|
|
66
76
|
allPoints.push(node);
|
|
67
77
|
for (const c of node.children){
|
|
@@ -141,9 +151,10 @@ class JointDynamicsSystemController {
|
|
|
141
151
|
this._initialized = true;
|
|
142
152
|
}
|
|
143
153
|
/**
|
|
144
|
-
*
|
|
145
|
-
*
|
|
146
|
-
*
|
|
154
|
+
* Advances the simulation by one frame.
|
|
155
|
+
* Internal flow: read current transforms, run Verlet integration and constraint solving,
|
|
156
|
+
* then write the result back to the transforms.
|
|
157
|
+
* @param deltaTime - Frame delta time in seconds. Internally subdivided by `subSteps`.
|
|
147
158
|
*/ step(deltaTime) {
|
|
148
159
|
if (!this._initialized || !this._rootTransform) {
|
|
149
160
|
return;
|
|
@@ -219,9 +230,9 @@ class JointDynamicsSystemController {
|
|
|
219
230
|
this._previousRootRotation = rootRot;
|
|
220
231
|
}
|
|
221
232
|
/**
|
|
222
|
-
*
|
|
223
|
-
*
|
|
224
|
-
*
|
|
233
|
+
* Returns the simulated results for all points as world-space positions and rotations.
|
|
234
|
+
* Usually this does not need to be called manually because `step()` already writes the
|
|
235
|
+
* output back to the transforms.
|
|
225
236
|
*/ getResults() {
|
|
226
237
|
const transformRots = this._pointTransforms.map((t)=>t.getWorldRotation());
|
|
227
238
|
const transformLocalRots = this._pointTransforms.map((t)=>t.getLocalRotation());
|
|
@@ -232,9 +243,9 @@ class JointDynamicsSystemController {
|
|
|
232
243
|
}));
|
|
233
244
|
}
|
|
234
245
|
/**
|
|
235
|
-
*
|
|
236
|
-
*
|
|
237
|
-
*
|
|
246
|
+
* Compensates for teleportation by resetting the previous root transform to the current one.
|
|
247
|
+
* Call this after a character warp or teleport to avoid a large root-motion impulse on the
|
|
248
|
+
* next simulation step.
|
|
238
249
|
*/ warp() {
|
|
239
250
|
if (!this._rootTransform) {
|
|
240
251
|
return;
|
|
@@ -243,9 +254,9 @@ class JointDynamicsSystemController {
|
|
|
243
254
|
this._previousRootRotation = this._rootTransform.getWorldRotation();
|
|
244
255
|
}
|
|
245
256
|
/**
|
|
246
|
-
*
|
|
247
|
-
*
|
|
248
|
-
*
|
|
257
|
+
* Resets all physics state.
|
|
258
|
+
* Each simulated point is snapped back to the current transform position and grab state
|
|
259
|
+
* is cleared.
|
|
249
260
|
*/ reset() {
|
|
250
261
|
for(let i = 0; i < this._pointsRW.length; i++){
|
|
251
262
|
const pos = this._pointTransforms[i].getWorldPosition();
|
|
@@ -256,9 +267,9 @@ class JointDynamicsSystemController {
|
|
|
256
267
|
this._fakeWaveCounter = 0;
|
|
257
268
|
}
|
|
258
269
|
/**
|
|
259
|
-
*
|
|
260
|
-
*
|
|
261
|
-
* @param index
|
|
270
|
+
* Releases a fixed point so it becomes dynamic, for example when cloth is detached.
|
|
271
|
+
* The point state is reset to avoid a sudden impulse.
|
|
272
|
+
* @param index - Point index.
|
|
262
273
|
*/ releasePoint(index) {
|
|
263
274
|
if (index < 0 || index >= this._pointsR.length) {
|
|
264
275
|
return;
|
|
@@ -270,9 +281,9 @@ class JointDynamicsSystemController {
|
|
|
270
281
|
this._pointsRW[index].grabberIndex = -1;
|
|
271
282
|
}
|
|
272
283
|
/**
|
|
273
|
-
*
|
|
274
|
-
*
|
|
275
|
-
* @param index
|
|
284
|
+
* Fixes a dynamic point back to the animation pose, for example when an item is reattached.
|
|
285
|
+
* The point grab state is cleared.
|
|
286
|
+
* @param index - Point index.
|
|
276
287
|
*/ fixPoint(index) {
|
|
277
288
|
if (index < 0 || index >= this._pointsR.length) {
|
|
278
289
|
return;
|
|
@@ -281,43 +292,46 @@ class JointDynamicsSystemController {
|
|
|
281
292
|
this._pointsRW[index].grabberIndex = -1;
|
|
282
293
|
}
|
|
283
294
|
/**
|
|
284
|
-
*
|
|
285
|
-
* @param index
|
|
295
|
+
* Returns whether a point is fixed to animation (`weight = 0`).
|
|
296
|
+
* @param index - Point index.
|
|
286
297
|
*/ isPointFixed(index) {
|
|
287
298
|
if (index < 0 || index >= this._pointsR.length) {
|
|
288
299
|
return false;
|
|
289
300
|
}
|
|
290
301
|
return this._pointsR[index].weight <= EPSILON;
|
|
291
302
|
}
|
|
292
|
-
/**
|
|
303
|
+
/** Gets the total number of physics points. */ get pointCount() {
|
|
293
304
|
return this._pointsR.length;
|
|
294
305
|
}
|
|
295
306
|
/**
|
|
296
|
-
*
|
|
297
|
-
* blendRatio
|
|
298
|
-
* @param seconds
|
|
307
|
+
* Fades physics in by blending from animation pose to simulation.
|
|
308
|
+
* `blendRatio` moves from `1` (animation only) to `0` (physics only).
|
|
309
|
+
* @param seconds - Transition duration in seconds.
|
|
299
310
|
*/ fadeIn(seconds) {
|
|
300
311
|
this._fadeState = 'in';
|
|
301
312
|
this._fadeTimer = 0;
|
|
302
313
|
this._fadeDuration = seconds;
|
|
303
314
|
}
|
|
304
315
|
/**
|
|
305
|
-
*
|
|
306
|
-
* blendRatio
|
|
307
|
-
* @param seconds
|
|
316
|
+
* Fades physics out by blending from simulation back to animation pose.
|
|
317
|
+
* `blendRatio` moves from `0` (physics only) to `1` (animation only).
|
|
318
|
+
* @param seconds - Transition duration in seconds.
|
|
308
319
|
*/ fadeOut(seconds) {
|
|
309
320
|
this._fadeState = 'out';
|
|
310
321
|
this._fadeTimer = 0;
|
|
311
322
|
this._fadeDuration = seconds;
|
|
312
323
|
}
|
|
313
324
|
/**
|
|
314
|
-
*
|
|
315
|
-
*
|
|
316
|
-
* @param wind
|
|
325
|
+
* Sets the global wind force vector.
|
|
326
|
+
* The final wind contribution is still scaled per point by `windForceScale` and mass.
|
|
327
|
+
* @param wind - Wind vector in world space.
|
|
317
328
|
*/ setWindForce(wind) {
|
|
318
329
|
this._config.windForce = wind;
|
|
319
330
|
}
|
|
320
|
-
/**
|
|
331
|
+
/**
|
|
332
|
+
* Enable/disable broad-phase pruning for runtime performance comparison
|
|
333
|
+
* @param enabled - `true` to enable broad-phase, `false` to disable.
|
|
334
|
+
*/ setBroadPhaseEnabled(enabled) {
|
|
321
335
|
this._config.enableBroadPhase = enabled;
|
|
322
336
|
}
|
|
323
337
|
/** The blend ratio for the physics simulation */ get blendRatio() {
|
|
@@ -327,9 +341,10 @@ class JointDynamicsSystemController {
|
|
|
327
341
|
this._config.blendRatio = clamp01(value);
|
|
328
342
|
}
|
|
329
343
|
/**
|
|
330
|
-
*
|
|
331
|
-
*
|
|
332
|
-
*
|
|
344
|
+
* Pauses or resumes the physics simulation.
|
|
345
|
+
* While paused, the system still follows root motion but skips force integration and
|
|
346
|
+
* constraint solving.
|
|
347
|
+
* @param paused - `true` to pause, `false` to resume.
|
|
333
348
|
*/ setPaused(paused) {
|
|
334
349
|
this._isPaused = paused;
|
|
335
350
|
}
|
|
@@ -337,6 +352,11 @@ class JointDynamicsSystemController {
|
|
|
337
352
|
* Enable or disable a collider by current array index.
|
|
338
353
|
* Transform state is still read from the collider's TransformAccess each frame.
|
|
339
354
|
* Prefer setColliderEnabled(handle, enabled) for runtime-owned colliders.
|
|
355
|
+
*
|
|
356
|
+
* @param index - Collider index in the current array. Note that this may change when colliders are added or removed.
|
|
357
|
+
* @param enabled - `true` to enable the collider, `false` to disable it.
|
|
358
|
+
*
|
|
359
|
+
* @returns `true` if the index is valid and the collider was updated, `false` if the index is out of range.
|
|
340
360
|
*/ setColliderEnabledAt(index, enabled) {
|
|
341
361
|
if (index >= 0 && index < this._collidersRW.length) {
|
|
342
362
|
this._collidersRW[index].enabled = enabled ? 1 : 0;
|
|
@@ -346,6 +366,9 @@ class JointDynamicsSystemController {
|
|
|
346
366
|
}
|
|
347
367
|
/**
|
|
348
368
|
* Enable or disable a runtime collider by stable handle.
|
|
369
|
+
*
|
|
370
|
+
* @param handle - Stable handle for the collider to enable or disable.
|
|
371
|
+
* @param enabled - `true` to enable the collider, `false` to disable it.
|
|
349
372
|
* @returns true if the handle is still valid.
|
|
350
373
|
*/ setColliderEnabled(handle, enabled) {
|
|
351
374
|
const index = this._getColliderIndex(handle);
|
|
@@ -356,6 +379,8 @@ class JointDynamicsSystemController {
|
|
|
356
379
|
}
|
|
357
380
|
/**
|
|
358
381
|
* Add a collider at runtime.
|
|
382
|
+
* @param r - Read-only collider data such as shape and size.
|
|
383
|
+
* @param transform - TransformAccess that provides the collider's position and rotation each frame.
|
|
359
384
|
* @returns A stable handle that remains valid until this collider is removed.
|
|
360
385
|
*/ addCollider(r, transform) {
|
|
361
386
|
const id = this._nextColliderHandleId++;
|
|
@@ -371,6 +396,7 @@ class JointDynamicsSystemController {
|
|
|
371
396
|
}
|
|
372
397
|
/**
|
|
373
398
|
* Remove a collider by stable handle.
|
|
399
|
+
* @param handle - Stable handle for the collider to remove.
|
|
374
400
|
* @returns true if the collider existed and was removed.
|
|
375
401
|
*/ removeCollider(handle) {
|
|
376
402
|
const index = this._getColliderIndex(handle);
|
|
@@ -381,6 +407,7 @@ class JointDynamicsSystemController {
|
|
|
381
407
|
}
|
|
382
408
|
/**
|
|
383
409
|
* Remove a collider by current array index.
|
|
410
|
+
* @param index - Collider index in the current array. Note that this may change when colliders are added or removed.
|
|
384
411
|
* Prefer removeCollider(handle) for runtime-owned colliders.
|
|
385
412
|
*/ removeColliderAt(index) {
|
|
386
413
|
if (index < 0 || index >= this._collidersR.length) {
|
|
@@ -395,7 +422,9 @@ class JointDynamicsSystemController {
|
|
|
395
422
|
}
|
|
396
423
|
/**
|
|
397
424
|
* Enable or disable a flat plane by current array index.
|
|
398
|
-
*
|
|
425
|
+
* @param index - Flat plane index in the current array. Note that this may change when flat planes are added or removed.
|
|
426
|
+
* @param enabled - `true` to enable the flat plane, `false` to disable it.
|
|
427
|
+
* @returns `true` if the index is valid and the flat plane was updated, `false` if the index is out of range.
|
|
399
428
|
*/ setFlatPlaneEnabledAt(index, enabled) {
|
|
400
429
|
if (index < 0 || index >= this._flatPlaneAll.length) {
|
|
401
430
|
return false;
|
|
@@ -406,6 +435,8 @@ class JointDynamicsSystemController {
|
|
|
406
435
|
}
|
|
407
436
|
/**
|
|
408
437
|
* Enable or disable a runtime flat plane by stable handle.
|
|
438
|
+
* @param handle - Stable handle for the flat plane to enable or disable.
|
|
439
|
+
* @param enabled - `true` to enable the flat plane, `false` to disable it.
|
|
409
440
|
* @returns true if the handle is still valid.
|
|
410
441
|
*/ setFlatPlaneEnabled(handle, enabled) {
|
|
411
442
|
const index = this._getFlatPlaneIndex(handle);
|
|
@@ -416,6 +447,8 @@ class JointDynamicsSystemController {
|
|
|
416
447
|
}
|
|
417
448
|
/**
|
|
418
449
|
* Add a flat plane at runtime.
|
|
450
|
+
* @param up - Up direction of the plane. The normal is computed as `Vector3.normalize(up)`.
|
|
451
|
+
* @param position - A point on the plane. The distance is computed as `-Vector3.dot(normal, position)`.
|
|
419
452
|
* @returns A stable handle that remains valid until this flat plane is removed.
|
|
420
453
|
*/ addFlatPlane(up, position) {
|
|
421
454
|
const id = this._nextFlatPlaneHandleId++;
|
|
@@ -435,6 +468,7 @@ class JointDynamicsSystemController {
|
|
|
435
468
|
}
|
|
436
469
|
/**
|
|
437
470
|
* Remove a flat plane by stable handle.
|
|
471
|
+
* @param handle - Stable handle for the flat plane to remove.
|
|
438
472
|
* @returns true if the flat plane existed and was removed.
|
|
439
473
|
*/ removeFlatPlane(handle) {
|
|
440
474
|
const index = this._getFlatPlaneIndex(handle);
|
|
@@ -445,7 +479,8 @@ class JointDynamicsSystemController {
|
|
|
445
479
|
}
|
|
446
480
|
/**
|
|
447
481
|
* Remove a flat plane by current array index.
|
|
448
|
-
*
|
|
482
|
+
* @param index - Flat plane index in the current array. Note that this may change when flat planes are added or removed.
|
|
483
|
+
* @returns true if the index was valid and the flat plane was removed, false if the index was out of range.
|
|
449
484
|
*/ removeFlatPlaneAt(index) {
|
|
450
485
|
if (index < 0 || index >= this._flatPlaneAll.length) {
|
|
451
486
|
return false;
|
|
@@ -461,6 +496,10 @@ class JointDynamicsSystemController {
|
|
|
461
496
|
* Enable or disable a grabber by current array index.
|
|
462
497
|
* Transform state is still read from the grabber's TransformAccess each frame.
|
|
463
498
|
* Prefer setGrabberEnabled(handle, enabled) for runtime-owned grabbers.
|
|
499
|
+
*
|
|
500
|
+
* @param index - Grabber index in the current array. Note that this may change when grabbers are added or removed.
|
|
501
|
+
* @param enabled - `true` to enable the grabber, `false` to disable it.
|
|
502
|
+
* @returns `true` if the index is valid and the grabber was updated, `false` if the index is out of range.
|
|
464
503
|
*/ setGrabberEnabledAt(index, enabled) {
|
|
465
504
|
if (index >= 0 && index < this._grabbersRW.length) {
|
|
466
505
|
this._grabbersRW[index].enabled = enabled ? 1 : 0;
|
|
@@ -473,6 +512,8 @@ class JointDynamicsSystemController {
|
|
|
473
512
|
}
|
|
474
513
|
/**
|
|
475
514
|
* Enable or disable a runtime grabber by stable handle.
|
|
515
|
+
* @param handle - Stable handle for the grabber to enable or disable.
|
|
516
|
+
* @param enabled - `true` to enable the grabber, `false` to disable it.
|
|
476
517
|
* @returns true if the handle is still valid.
|
|
477
518
|
*/ setGrabberEnabled(handle, enabled) {
|
|
478
519
|
const index = this._getGrabberIndex(handle);
|
|
@@ -483,6 +524,9 @@ class JointDynamicsSystemController {
|
|
|
483
524
|
}
|
|
484
525
|
/**
|
|
485
526
|
* Add a grabber at runtime.
|
|
527
|
+
* @param r - Read-only grabber data such as interaction radius.
|
|
528
|
+
* @param transform - TransformAccess that provides the grabber's position each frame.
|
|
529
|
+
* @param enabled - Whether the grabber starts enabled. The grabber can still be moved by its transform while disabled, but it won't affect any points until enabled.
|
|
486
530
|
* @returns A stable handle that remains valid until this grabber is removed.
|
|
487
531
|
*/ addGrabber(r, transform, enabled = false) {
|
|
488
532
|
const id = this._nextGrabberHandleId++;
|
|
@@ -501,6 +545,7 @@ class JointDynamicsSystemController {
|
|
|
501
545
|
}
|
|
502
546
|
/**
|
|
503
547
|
* Remove a grabber by stable handle.
|
|
548
|
+
* @param handle - Stable handle for the grabber to remove.
|
|
504
549
|
* @returns true if the grabber existed and was removed.
|
|
505
550
|
*/ removeGrabber(handle) {
|
|
506
551
|
const index = this._getGrabberIndex(handle);
|
|
@@ -512,6 +557,9 @@ class JointDynamicsSystemController {
|
|
|
512
557
|
/**
|
|
513
558
|
* Remove a grabber by current array index.
|
|
514
559
|
* Prefer removeGrabber(handle) for runtime-owned grabbers.
|
|
560
|
+
*
|
|
561
|
+
* @param index - Grabber index in the current array. Note that this may change when grabbers are added or removed.
|
|
562
|
+
* @returns true if the index was valid and the grabber was removed, false if the index was out of range.
|
|
515
563
|
*/ removeGrabberAt(index) {
|
|
516
564
|
if (index < 0 || index >= this._grabbersR.length) {
|
|
517
565
|
return false;
|