@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,198 +0,0 @@
|
|
|
1
|
-
import { Vector3 } from '@zephyr3d/base';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Base class for spring bone colliders.
|
|
5
|
-
*
|
|
6
|
-
* @public
|
|
7
|
-
*/ class SpringBoneCollider {
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Sphere collider for spring bones.
|
|
11
|
-
*
|
|
12
|
-
* @public
|
|
13
|
-
*/ class SphereCollider extends SpringBoneCollider {
|
|
14
|
-
/** Center position in world space */ _center;
|
|
15
|
-
/** Sphere radius */ _radius;
|
|
16
|
-
/** Optional bone node to follow */ _bone;
|
|
17
|
-
/** Local offset from bone (if bone is set) */ _localOffset;
|
|
18
|
-
/**
|
|
19
|
-
* Create a sphere collider.
|
|
20
|
-
*
|
|
21
|
-
* @param center - Center position in world space (or local offset if bone is provided)
|
|
22
|
-
* @param radius - Sphere radius
|
|
23
|
-
* @param bone - Optional bone node to follow
|
|
24
|
-
*/ constructor(center, radius, bone = null){
|
|
25
|
-
super();
|
|
26
|
-
this._center = center.clone();
|
|
27
|
-
this._radius = Math.max(0, radius);
|
|
28
|
-
this._bone = bone;
|
|
29
|
-
this._localOffset = bone ? center.clone() : new Vector3();
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Get/set center position.
|
|
33
|
-
*/ get center() {
|
|
34
|
-
if (this._bone) {
|
|
35
|
-
// Calculate world position from bone
|
|
36
|
-
const worldPos = new Vector3();
|
|
37
|
-
const matrix = this._bone.worldMatrix;
|
|
38
|
-
const offset = this._localOffset;
|
|
39
|
-
worldPos.x = matrix.m00 * offset.x + matrix.m01 * offset.y + matrix.m02 * offset.z + matrix.m03;
|
|
40
|
-
worldPos.y = matrix.m10 * offset.x + matrix.m11 * offset.y + matrix.m12 * offset.z + matrix.m13;
|
|
41
|
-
worldPos.z = matrix.m20 * offset.x + matrix.m21 * offset.y + matrix.m22 * offset.z + matrix.m23;
|
|
42
|
-
return worldPos;
|
|
43
|
-
}
|
|
44
|
-
return this._center;
|
|
45
|
-
}
|
|
46
|
-
set center(value) {
|
|
47
|
-
if (this._bone) {
|
|
48
|
-
this._localOffset.set(value);
|
|
49
|
-
} else {
|
|
50
|
-
this._center.set(value);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Get/set radius.
|
|
55
|
-
*/ get radius() {
|
|
56
|
-
return this._radius;
|
|
57
|
-
}
|
|
58
|
-
set radius(value) {
|
|
59
|
-
this._radius = Math.max(0, value);
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Get/set bone node.
|
|
63
|
-
*/ get bone() {
|
|
64
|
-
return this._bone;
|
|
65
|
-
}
|
|
66
|
-
set bone(value) {
|
|
67
|
-
this._bone = value;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Test collision with a point and resolve it.
|
|
71
|
-
*/ collide(position, radius) {
|
|
72
|
-
const center = this.center;
|
|
73
|
-
const direction = Vector3.sub(position, center, new Vector3());
|
|
74
|
-
const distance = direction.magnitude;
|
|
75
|
-
const minDistance = this._radius + radius;
|
|
76
|
-
if (distance < minDistance && distance > 0.000001) {
|
|
77
|
-
// Collision detected, push the point out
|
|
78
|
-
direction.scaleBy(1 / distance);
|
|
79
|
-
const penetration = minDistance - distance;
|
|
80
|
-
position.addBy(Vector3.scale(direction, penetration, new Vector3()));
|
|
81
|
-
return true;
|
|
82
|
-
}
|
|
83
|
-
return false;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Capsule collider for spring bones.
|
|
88
|
-
*
|
|
89
|
-
* @remarks
|
|
90
|
-
* A capsule is defined by two sphere centers and a radius.
|
|
91
|
-
* Useful for limbs like arms and legs.
|
|
92
|
-
*
|
|
93
|
-
* @public
|
|
94
|
-
*/ class CapsuleCollider extends SpringBoneCollider {
|
|
95
|
-
/** Start point in world space */ _start;
|
|
96
|
-
/** End point in world space */ _end;
|
|
97
|
-
/** Capsule radius */ _radius;
|
|
98
|
-
/** Optional bone node for start point */ _startBone;
|
|
99
|
-
/** Optional bone node for end point */ _endBone;
|
|
100
|
-
/** Local offset for start point */ _startOffset;
|
|
101
|
-
/** Local offset for end point */ _endOffset;
|
|
102
|
-
/**
|
|
103
|
-
* Create a capsule collider.
|
|
104
|
-
*
|
|
105
|
-
* @param start - Start point in world space (or local offset if startBone is provided)
|
|
106
|
-
* @param end - End point in world space (or local offset if endBone is provided)
|
|
107
|
-
* @param radius - Capsule radius
|
|
108
|
-
* @param startBone - Optional bone node for start point
|
|
109
|
-
* @param endBone - Optional bone node for end point
|
|
110
|
-
*/ constructor(start, end, radius, startBone = null, endBone = null){
|
|
111
|
-
super();
|
|
112
|
-
this._start = start.clone();
|
|
113
|
-
this._end = end.clone();
|
|
114
|
-
this._radius = Math.max(0, radius);
|
|
115
|
-
this._startBone = startBone;
|
|
116
|
-
this._endBone = endBone;
|
|
117
|
-
this._startOffset = startBone ? start.clone() : new Vector3();
|
|
118
|
-
this._endOffset = endBone ? end.clone() : new Vector3();
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Get start point in world space.
|
|
122
|
-
*/ get start() {
|
|
123
|
-
if (this._startBone) {
|
|
124
|
-
const worldPos = new Vector3();
|
|
125
|
-
const matrix = this._startBone.worldMatrix;
|
|
126
|
-
const offset = this._startOffset;
|
|
127
|
-
worldPos.x = matrix.m00 * offset.x + matrix.m01 * offset.y + matrix.m02 * offset.z + matrix.m03;
|
|
128
|
-
worldPos.y = matrix.m10 * offset.x + matrix.m11 * offset.y + matrix.m12 * offset.z + matrix.m13;
|
|
129
|
-
worldPos.z = matrix.m20 * offset.x + matrix.m21 * offset.y + matrix.m22 * offset.z + matrix.m23;
|
|
130
|
-
return worldPos;
|
|
131
|
-
}
|
|
132
|
-
return this._start;
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Get end point in world space.
|
|
136
|
-
*/ get end() {
|
|
137
|
-
if (this._endBone) {
|
|
138
|
-
const worldPos = new Vector3();
|
|
139
|
-
const matrix = this._endBone.worldMatrix;
|
|
140
|
-
const offset = this._endOffset;
|
|
141
|
-
worldPos.x = matrix.m00 * offset.x + matrix.m01 * offset.y + matrix.m02 * offset.z + matrix.m03;
|
|
142
|
-
worldPos.y = matrix.m10 * offset.x + matrix.m11 * offset.y + matrix.m12 * offset.z + matrix.m13;
|
|
143
|
-
worldPos.z = matrix.m20 * offset.x + matrix.m21 * offset.y + matrix.m22 * offset.z + matrix.m23;
|
|
144
|
-
return worldPos;
|
|
145
|
-
}
|
|
146
|
-
return this._end;
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Get/set radius.
|
|
150
|
-
*/ get radius() {
|
|
151
|
-
return this._radius;
|
|
152
|
-
}
|
|
153
|
-
set radius(value) {
|
|
154
|
-
this._radius = Math.max(0, value);
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Test collision with a point and resolve it.
|
|
158
|
-
*/ collide(position, radius) {
|
|
159
|
-
const start = this.start;
|
|
160
|
-
const end = this.end;
|
|
161
|
-
// Calculate closest point on capsule line segment
|
|
162
|
-
const line = Vector3.sub(end, start, new Vector3());
|
|
163
|
-
const lineLength = line.magnitude;
|
|
164
|
-
if (lineLength < 0.000001) {
|
|
165
|
-
// Degenerate capsule, treat as sphere
|
|
166
|
-
const direction = Vector3.sub(position, start, new Vector3());
|
|
167
|
-
const distance = direction.magnitude;
|
|
168
|
-
const minDistance = this._radius + radius;
|
|
169
|
-
if (distance < minDistance && distance > 0.000001) {
|
|
170
|
-
direction.scaleBy(1 / distance);
|
|
171
|
-
const penetration = minDistance - distance;
|
|
172
|
-
position.addBy(Vector3.scale(direction, penetration, new Vector3()));
|
|
173
|
-
return true;
|
|
174
|
-
}
|
|
175
|
-
return false;
|
|
176
|
-
}
|
|
177
|
-
const lineDir = Vector3.scale(line, 1 / lineLength, new Vector3());
|
|
178
|
-
const toPoint = Vector3.sub(position, start, new Vector3());
|
|
179
|
-
const t = Math.max(0, Math.min(lineLength, Vector3.dot(toPoint, lineDir)));
|
|
180
|
-
// Closest point on line segment
|
|
181
|
-
const closestPoint = Vector3.add(start, Vector3.scale(lineDir, t, new Vector3()), new Vector3());
|
|
182
|
-
// Check distance from closest point
|
|
183
|
-
const direction = Vector3.sub(position, closestPoint, new Vector3());
|
|
184
|
-
const distance = direction.magnitude;
|
|
185
|
-
const minDistance = this._radius + radius;
|
|
186
|
-
if (distance < minDistance && distance > 0.000001) {
|
|
187
|
-
// Collision detected, push the point out
|
|
188
|
-
direction.scaleBy(1 / distance);
|
|
189
|
-
const penetration = minDistance - distance;
|
|
190
|
-
position.addBy(Vector3.scale(direction, penetration, new Vector3()));
|
|
191
|
-
return true;
|
|
192
|
-
}
|
|
193
|
-
return false;
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
export { CapsuleCollider, SphereCollider, SpringBoneCollider };
|
|
198
|
-
//# sourceMappingURL=spring_bone_collider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"spring_bone_collider.js","sources":["../../../src/animation/spring/spring_bone_collider.ts"],"sourcesContent":["import { Vector3 } from '@zephyr3d/base';\r\nimport type { SceneNode } from '../../scene/scene_node';\r\n\r\n/**\r\n * Base class for spring bone colliders.\r\n *\r\n * @public\r\n */\r\nexport abstract class SpringBoneCollider {\r\n /**\r\n * Test collision with a point and resolve it.\r\n *\r\n * @param position - Point position in world space\r\n * @param radius - Point radius\r\n * @returns True if collision occurred and was resolved\r\n */\r\n abstract collide(position: Vector3, radius: number): boolean;\r\n}\r\n\r\n/**\r\n * Sphere collider for spring bones.\r\n *\r\n * @public\r\n */\r\nexport class SphereCollider extends SpringBoneCollider {\r\n /** Center position in world space */\r\n private _center: Vector3;\r\n /** Sphere radius */\r\n private _radius: number;\r\n /** Optional bone node to follow */\r\n private _bone: SceneNode | null;\r\n /** Local offset from bone (if bone is set) */\r\n private _localOffset: Vector3;\r\n\r\n /**\r\n * Create a sphere collider.\r\n *\r\n * @param center - Center position in world space (or local offset if bone is provided)\r\n * @param radius - Sphere radius\r\n * @param bone - Optional bone node to follow\r\n */\r\n constructor(center: Vector3, radius: number, bone: SceneNode | null = null) {\r\n super();\r\n this._center = center.clone();\r\n this._radius = Math.max(0, radius);\r\n this._bone = bone;\r\n this._localOffset = bone ? center.clone() : new Vector3();\r\n }\r\n\r\n /**\r\n * Get/set center position.\r\n */\r\n get center(): Vector3 {\r\n if (this._bone) {\r\n // Calculate world position from bone\r\n const worldPos = new Vector3();\r\n const matrix = this._bone.worldMatrix;\r\n const offset = this._localOffset;\r\n worldPos.x = matrix.m00 * offset.x + matrix.m01 * offset.y + matrix.m02 * offset.z + matrix.m03;\r\n worldPos.y = matrix.m10 * offset.x + matrix.m11 * offset.y + matrix.m12 * offset.z + matrix.m13;\r\n worldPos.z = matrix.m20 * offset.x + matrix.m21 * offset.y + matrix.m22 * offset.z + matrix.m23;\r\n return worldPos;\r\n }\r\n return this._center;\r\n }\r\n\r\n set center(value: Vector3) {\r\n if (this._bone) {\r\n this._localOffset.set(value);\r\n } else {\r\n this._center.set(value);\r\n }\r\n }\r\n\r\n /**\r\n * Get/set radius.\r\n */\r\n get radius(): number {\r\n return this._radius;\r\n }\r\n\r\n set radius(value: number) {\r\n this._radius = Math.max(0, value);\r\n }\r\n\r\n /**\r\n * Get/set bone node.\r\n */\r\n get bone(): SceneNode | null {\r\n return this._bone;\r\n }\r\n\r\n set bone(value: SceneNode | null) {\r\n this._bone = value;\r\n }\r\n\r\n /**\r\n * Test collision with a point and resolve it.\r\n */\r\n collide(position: Vector3, radius: number): boolean {\r\n const center = this.center;\r\n const direction = Vector3.sub(position, center, new Vector3());\r\n const distance = direction.magnitude;\r\n const minDistance = this._radius + radius;\r\n\r\n if (distance < minDistance && distance > 0.000001) {\r\n // Collision detected, push the point out\r\n direction.scaleBy(1 / distance);\r\n const penetration = minDistance - distance;\r\n position.addBy(Vector3.scale(direction, penetration, new Vector3()));\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Capsule collider for spring bones.\r\n *\r\n * @remarks\r\n * A capsule is defined by two sphere centers and a radius.\r\n * Useful for limbs like arms and legs.\r\n *\r\n * @public\r\n */\r\nexport class CapsuleCollider extends SpringBoneCollider {\r\n /** Start point in world space */\r\n private _start: Vector3;\r\n /** End point in world space */\r\n private _end: Vector3;\r\n /** Capsule radius */\r\n private _radius: number;\r\n /** Optional bone node for start point */\r\n private _startBone: SceneNode | null;\r\n /** Optional bone node for end point */\r\n private _endBone: SceneNode | null;\r\n /** Local offset for start point */\r\n private _startOffset: Vector3;\r\n /** Local offset for end point */\r\n private _endOffset: Vector3;\r\n\r\n /**\r\n * Create a capsule collider.\r\n *\r\n * @param start - Start point in world space (or local offset if startBone is provided)\r\n * @param end - End point in world space (or local offset if endBone is provided)\r\n * @param radius - Capsule radius\r\n * @param startBone - Optional bone node for start point\r\n * @param endBone - Optional bone node for end point\r\n */\r\n constructor(\r\n start: Vector3,\r\n end: Vector3,\r\n radius: number,\r\n startBone: SceneNode | null = null,\r\n endBone: SceneNode | null = null\r\n ) {\r\n super();\r\n this._start = start.clone();\r\n this._end = end.clone();\r\n this._radius = Math.max(0, radius);\r\n this._startBone = startBone;\r\n this._endBone = endBone;\r\n this._startOffset = startBone ? start.clone() : new Vector3();\r\n this._endOffset = endBone ? end.clone() : new Vector3();\r\n }\r\n\r\n /**\r\n * Get start point in world space.\r\n */\r\n get start(): Vector3 {\r\n if (this._startBone) {\r\n const worldPos = new Vector3();\r\n const matrix = this._startBone.worldMatrix;\r\n const offset = this._startOffset;\r\n worldPos.x = matrix.m00 * offset.x + matrix.m01 * offset.y + matrix.m02 * offset.z + matrix.m03;\r\n worldPos.y = matrix.m10 * offset.x + matrix.m11 * offset.y + matrix.m12 * offset.z + matrix.m13;\r\n worldPos.z = matrix.m20 * offset.x + matrix.m21 * offset.y + matrix.m22 * offset.z + matrix.m23;\r\n return worldPos;\r\n }\r\n return this._start;\r\n }\r\n\r\n /**\r\n * Get end point in world space.\r\n */\r\n get end(): Vector3 {\r\n if (this._endBone) {\r\n const worldPos = new Vector3();\r\n const matrix = this._endBone.worldMatrix;\r\n const offset = this._endOffset;\r\n worldPos.x = matrix.m00 * offset.x + matrix.m01 * offset.y + matrix.m02 * offset.z + matrix.m03;\r\n worldPos.y = matrix.m10 * offset.x + matrix.m11 * offset.y + matrix.m12 * offset.z + matrix.m13;\r\n worldPos.z = matrix.m20 * offset.x + matrix.m21 * offset.y + matrix.m22 * offset.z + matrix.m23;\r\n return worldPos;\r\n }\r\n return this._end;\r\n }\r\n\r\n /**\r\n * Get/set radius.\r\n */\r\n get radius(): number {\r\n return this._radius;\r\n }\r\n\r\n set radius(value: number) {\r\n this._radius = Math.max(0, value);\r\n }\r\n\r\n /**\r\n * Test collision with a point and resolve it.\r\n */\r\n collide(position: Vector3, radius: number): boolean {\r\n const start = this.start;\r\n const end = this.end;\r\n\r\n // Calculate closest point on capsule line segment\r\n const line = Vector3.sub(end, start, new Vector3());\r\n const lineLength = line.magnitude;\r\n\r\n if (lineLength < 0.000001) {\r\n // Degenerate capsule, treat as sphere\r\n const direction = Vector3.sub(position, start, new Vector3());\r\n const distance = direction.magnitude;\r\n const minDistance = this._radius + radius;\r\n\r\n if (distance < minDistance && distance > 0.000001) {\r\n direction.scaleBy(1 / distance);\r\n const penetration = minDistance - distance;\r\n position.addBy(Vector3.scale(direction, penetration, new Vector3()));\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n const lineDir = Vector3.scale(line, 1 / lineLength, new Vector3());\r\n const toPoint = Vector3.sub(position, start, new Vector3());\r\n const t = Math.max(0, Math.min(lineLength, Vector3.dot(toPoint, lineDir)));\r\n\r\n // Closest point on line segment\r\n const closestPoint = Vector3.add(start, Vector3.scale(lineDir, t, new Vector3()), new Vector3());\r\n\r\n // Check distance from closest point\r\n const direction = Vector3.sub(position, closestPoint, new Vector3());\r\n const distance = direction.magnitude;\r\n const minDistance = this._radius + radius;\r\n\r\n if (distance < minDistance && distance > 0.000001) {\r\n // Collision detected, push the point out\r\n direction.scaleBy(1 / distance);\r\n const penetration = minDistance - distance;\r\n position.addBy(Vector3.scale(direction, penetration, new Vector3()));\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n"],"names":["SpringBoneCollider","SphereCollider","center","radius","bone","_center","clone","_radius","Math","max","_bone","_localOffset","Vector3","worldPos","matrix","worldMatrix","offset","x","m00","m01","y","m02","z","m03","m10","m11","m12","m13","m20","m21","m22","m23","value","set","collide","position","direction","sub","distance","magnitude","minDistance","scaleBy","penetration","addBy","scale","CapsuleCollider","start","end","startBone","endBone","_start","_end","_startBone","_endBone","_startOffset","_endOffset","line","lineLength","lineDir","toPoint","t","min","dot","closestPoint","add"],"mappings":"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"}
|
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
import { Vector3 } from '@zephyr3d/base';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Base class for spring bone constraints.
|
|
5
|
-
*
|
|
6
|
-
* @remarks
|
|
7
|
-
* Constraints are applied after physics simulation to enforce
|
|
8
|
-
* additional rules between spring bones.
|
|
9
|
-
*
|
|
10
|
-
* @public
|
|
11
|
-
*/ class SpringBoneConstraint {
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Distance constraint between two spring bones.
|
|
15
|
-
*
|
|
16
|
-
* @remarks
|
|
17
|
-
* Maintains a distance range between two spring bones.
|
|
18
|
-
* Useful for preventing penetration and excessive stretching between
|
|
19
|
-
* adjacent chains (e.g., skirt panels).
|
|
20
|
-
*
|
|
21
|
-
* @public
|
|
22
|
-
*/ class DistanceConstraint extends SpringBoneConstraint {
|
|
23
|
-
/** First spring bone */ _bone1;
|
|
24
|
-
/** Second spring bone */ _bone2;
|
|
25
|
-
/** Minimum distance (prevents penetration) */ _minDistance;
|
|
26
|
-
/** Maximum distance (prevents excessive stretching) */ _maxDistance;
|
|
27
|
-
/** Constraint stiffness (0-1, how strongly to enforce) */ _stiffness;
|
|
28
|
-
/**
|
|
29
|
-
* Create a distance constraint.
|
|
30
|
-
*
|
|
31
|
-
* @param bone1 - First spring bone
|
|
32
|
-
* @param bone2 - Second spring bone
|
|
33
|
-
* @param minDistance - Minimum distance (default: 0.01)
|
|
34
|
-
* @param maxDistance - Maximum distance (default: 0.2)
|
|
35
|
-
* @param stiffness - Constraint stiffness (0-1, default: 0.5)
|
|
36
|
-
*/ constructor(bone1, bone2, minDistance = 0.01, maxDistance = 0.2, stiffness = 0.5){
|
|
37
|
-
super();
|
|
38
|
-
this._bone1 = bone1;
|
|
39
|
-
this._bone2 = bone2;
|
|
40
|
-
this._minDistance = Math.max(0, minDistance);
|
|
41
|
-
this._maxDistance = Math.max(this._minDistance, maxDistance);
|
|
42
|
-
this._stiffness = Math.max(0, Math.min(1, stiffness));
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Get/set minimum distance.
|
|
46
|
-
*/ get minDistance() {
|
|
47
|
-
return this._minDistance;
|
|
48
|
-
}
|
|
49
|
-
set minDistance(value) {
|
|
50
|
-
this._minDistance = Math.max(0, value);
|
|
51
|
-
this._maxDistance = Math.max(this._minDistance, this._maxDistance);
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Get/set maximum distance.
|
|
55
|
-
*/ get maxDistance() {
|
|
56
|
-
return this._maxDistance;
|
|
57
|
-
}
|
|
58
|
-
set maxDistance(value) {
|
|
59
|
-
this._maxDistance = Math.max(this._minDistance, value);
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Get/set stiffness.
|
|
63
|
-
*/ get stiffness() {
|
|
64
|
-
return this._stiffness;
|
|
65
|
-
}
|
|
66
|
-
set stiffness(value) {
|
|
67
|
-
this._stiffness = Math.max(0, Math.min(1, value));
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Apply the distance constraint.
|
|
71
|
-
*/ apply() {
|
|
72
|
-
const pos1 = this._bone1.currentPosition;
|
|
73
|
-
const pos2 = this._bone2.currentPosition;
|
|
74
|
-
// Calculate current distance
|
|
75
|
-
const direction = Vector3.sub(pos2, pos1, new Vector3());
|
|
76
|
-
const distance = direction.magnitude;
|
|
77
|
-
if (distance < 0.000001) {
|
|
78
|
-
return; // Bones are at same position
|
|
79
|
-
}
|
|
80
|
-
const directionNorm = Vector3.scale(direction, 1 / distance, new Vector3());
|
|
81
|
-
let correction = 0;
|
|
82
|
-
if (distance < this._minDistance) {
|
|
83
|
-
// Too close, push apart
|
|
84
|
-
correction = (this._minDistance - distance) * 0.5 * this._stiffness;
|
|
85
|
-
} else if (distance > this._maxDistance) {
|
|
86
|
-
// Too far, pull together
|
|
87
|
-
correction = (this._maxDistance - distance) * 0.5 * this._stiffness;
|
|
88
|
-
} else {
|
|
89
|
-
// Within range, no correction needed
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
// Apply correction to both bones (equal and opposite)
|
|
93
|
-
const offset = Vector3.scale(directionNorm, correction, new Vector3());
|
|
94
|
-
pos1.addBy(Vector3.scale(offset, -1, new Vector3()));
|
|
95
|
-
pos2.addBy(offset);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Circular constraint for skirt-like structures.
|
|
100
|
-
*
|
|
101
|
-
* @remarks
|
|
102
|
-
* Maintains distance constraints between adjacent bones in a circular arrangement.
|
|
103
|
-
* Automatically creates distance constraints between neighboring chains.
|
|
104
|
-
*
|
|
105
|
-
* @public
|
|
106
|
-
*/ class CircularConstraint extends SpringBoneConstraint {
|
|
107
|
-
/** Array of spring bone chains arranged in a circle */ _chains;
|
|
108
|
-
/** Distance constraints between adjacent chains */ _constraints;
|
|
109
|
-
/** Minimum distance between adjacent bones */ _minDistance;
|
|
110
|
-
/** Maximum distance between adjacent bones */ _maxDistance;
|
|
111
|
-
/** Constraint stiffness */ _stiffness;
|
|
112
|
-
/**
|
|
113
|
-
* Create a circular constraint.
|
|
114
|
-
*
|
|
115
|
-
* @param chains - Array of spring bone chains arranged in a circle
|
|
116
|
-
* @param minDistance - Minimum distance between adjacent bones (default: 0.05)
|
|
117
|
-
* @param maxDistance - Maximum distance between adjacent bones (default: 0.15)
|
|
118
|
-
* @param stiffness - Constraint stiffness (0-1, default: 0.5)
|
|
119
|
-
*/ constructor(chains, minDistance = 0.05, maxDistance = 0.15, stiffness = 0.5){
|
|
120
|
-
super();
|
|
121
|
-
this._chains = chains;
|
|
122
|
-
this._minDistance = minDistance;
|
|
123
|
-
this._maxDistance = maxDistance;
|
|
124
|
-
this._stiffness = stiffness;
|
|
125
|
-
this._constraints = [];
|
|
126
|
-
this._buildConstraints();
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Build distance constraints between adjacent chains.
|
|
130
|
-
*/ _buildConstraints() {
|
|
131
|
-
this._constraints = [];
|
|
132
|
-
if (this._chains.length < 2) {
|
|
133
|
-
return; // Need at least 2 chains
|
|
134
|
-
}
|
|
135
|
-
// For each level (depth in the chain)
|
|
136
|
-
const maxDepth = Math.min(...this._chains.map((chain)=>chain.length));
|
|
137
|
-
for(let depth = 0; depth < maxDepth; depth++){
|
|
138
|
-
// Connect adjacent chains
|
|
139
|
-
for(let i = 0; i < this._chains.length; i++){
|
|
140
|
-
const nextIndex = (i + 1) % this._chains.length; // Wrap around
|
|
141
|
-
const bone1 = this._chains[i][depth];
|
|
142
|
-
const bone2 = this._chains[nextIndex][depth];
|
|
143
|
-
if (bone1 && bone2) {
|
|
144
|
-
const constraint = new DistanceConstraint(bone1, bone2, this._minDistance, this._maxDistance, this._stiffness);
|
|
145
|
-
this._constraints.push(constraint);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* Rebuild constraints (call after modifying chains).
|
|
152
|
-
*/ rebuild() {
|
|
153
|
-
this._buildConstraints();
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* Apply all distance constraints.
|
|
157
|
-
*/ apply() {
|
|
158
|
-
for (const constraint of this._constraints){
|
|
159
|
-
constraint.apply();
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* Get all distance constraints.
|
|
164
|
-
*/ get constraints() {
|
|
165
|
-
return this._constraints;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
export { CircularConstraint, DistanceConstraint, SpringBoneConstraint };
|
|
170
|
-
//# sourceMappingURL=spring_bone_constraint.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"spring_bone_constraint.js","sources":["../../../src/animation/spring/spring_bone_constraint.ts"],"sourcesContent":["import { Vector3 } from '@zephyr3d/base';\r\nimport type { SpringBone } from './spring_bone';\r\n\r\n/**\r\n * Base class for spring bone constraints.\r\n *\r\n * @remarks\r\n * Constraints are applied after physics simulation to enforce\r\n * additional rules between spring bones.\r\n *\r\n * @public\r\n */\r\nexport abstract class SpringBoneConstraint {\r\n /**\r\n * Apply the constraint.\r\n *\r\n * @remarks\r\n * This method modifies the positions of spring bones to satisfy the constraint.\r\n */\r\n abstract apply(): void;\r\n}\r\n\r\n/**\r\n * Distance constraint between two spring bones.\r\n *\r\n * @remarks\r\n * Maintains a distance range between two spring bones.\r\n * Useful for preventing penetration and excessive stretching between\r\n * adjacent chains (e.g., skirt panels).\r\n *\r\n * @public\r\n */\r\nexport class DistanceConstraint extends SpringBoneConstraint {\r\n /** First spring bone */\r\n private _bone1: SpringBone;\r\n /** Second spring bone */\r\n private _bone2: SpringBone;\r\n /** Minimum distance (prevents penetration) */\r\n private _minDistance: number;\r\n /** Maximum distance (prevents excessive stretching) */\r\n private _maxDistance: number;\r\n /** Constraint stiffness (0-1, how strongly to enforce) */\r\n private _stiffness: number;\r\n\r\n /**\r\n * Create a distance constraint.\r\n *\r\n * @param bone1 - First spring bone\r\n * @param bone2 - Second spring bone\r\n * @param minDistance - Minimum distance (default: 0.01)\r\n * @param maxDistance - Maximum distance (default: 0.2)\r\n * @param stiffness - Constraint stiffness (0-1, default: 0.5)\r\n */\r\n constructor(\r\n bone1: SpringBone,\r\n bone2: SpringBone,\r\n minDistance = 0.01,\r\n maxDistance = 0.2,\r\n stiffness = 0.5\r\n ) {\r\n super();\r\n this._bone1 = bone1;\r\n this._bone2 = bone2;\r\n this._minDistance = Math.max(0, minDistance);\r\n this._maxDistance = Math.max(this._minDistance, maxDistance);\r\n this._stiffness = Math.max(0, Math.min(1, stiffness));\r\n }\r\n\r\n /**\r\n * Get/set minimum distance.\r\n */\r\n get minDistance(): number {\r\n return this._minDistance;\r\n }\r\n\r\n set minDistance(value: number) {\r\n this._minDistance = Math.max(0, value);\r\n this._maxDistance = Math.max(this._minDistance, this._maxDistance);\r\n }\r\n\r\n /**\r\n * Get/set maximum distance.\r\n */\r\n get maxDistance(): number {\r\n return this._maxDistance;\r\n }\r\n\r\n set maxDistance(value: number) {\r\n this._maxDistance = Math.max(this._minDistance, value);\r\n }\r\n\r\n /**\r\n * Get/set stiffness.\r\n */\r\n get stiffness(): number {\r\n return this._stiffness;\r\n }\r\n\r\n set stiffness(value: number) {\r\n this._stiffness = Math.max(0, Math.min(1, value));\r\n }\r\n\r\n /**\r\n * Apply the distance constraint.\r\n */\r\n apply(): void {\r\n const pos1 = this._bone1.currentPosition;\r\n const pos2 = this._bone2.currentPosition;\r\n\r\n // Calculate current distance\r\n const direction = Vector3.sub(pos2, pos1, new Vector3());\r\n const distance = direction.magnitude;\r\n\r\n if (distance < 0.000001) {\r\n return; // Bones are at same position\r\n }\r\n\r\n const directionNorm = Vector3.scale(direction, 1 / distance, new Vector3());\r\n\r\n let correction = 0;\r\n\r\n if (distance < this._minDistance) {\r\n // Too close, push apart\r\n correction = (this._minDistance - distance) * 0.5 * this._stiffness;\r\n } else if (distance > this._maxDistance) {\r\n // Too far, pull together\r\n correction = (this._maxDistance - distance) * 0.5 * this._stiffness;\r\n } else {\r\n // Within range, no correction needed\r\n return;\r\n }\r\n\r\n // Apply correction to both bones (equal and opposite)\r\n const offset = Vector3.scale(directionNorm, correction, new Vector3());\r\n pos1.addBy(Vector3.scale(offset, -1, new Vector3()));\r\n pos2.addBy(offset);\r\n }\r\n}\r\n\r\n/**\r\n * Circular constraint for skirt-like structures.\r\n *\r\n * @remarks\r\n * Maintains distance constraints between adjacent bones in a circular arrangement.\r\n * Automatically creates distance constraints between neighboring chains.\r\n *\r\n * @public\r\n */\r\nexport class CircularConstraint extends SpringBoneConstraint {\r\n /** Array of spring bone chains arranged in a circle */\r\n private _chains: SpringBone[][];\r\n /** Distance constraints between adjacent chains */\r\n private _constraints: DistanceConstraint[];\r\n /** Minimum distance between adjacent bones */\r\n private _minDistance: number;\r\n /** Maximum distance between adjacent bones */\r\n private _maxDistance: number;\r\n /** Constraint stiffness */\r\n private _stiffness: number;\r\n\r\n /**\r\n * Create a circular constraint.\r\n *\r\n * @param chains - Array of spring bone chains arranged in a circle\r\n * @param minDistance - Minimum distance between adjacent bones (default: 0.05)\r\n * @param maxDistance - Maximum distance between adjacent bones (default: 0.15)\r\n * @param stiffness - Constraint stiffness (0-1, default: 0.5)\r\n */\r\n constructor(\r\n chains: SpringBone[][],\r\n minDistance = 0.05,\r\n maxDistance = 0.15,\r\n stiffness = 0.5\r\n ) {\r\n super();\r\n this._chains = chains;\r\n this._minDistance = minDistance;\r\n this._maxDistance = maxDistance;\r\n this._stiffness = stiffness;\r\n this._constraints = [];\r\n\r\n this._buildConstraints();\r\n }\r\n\r\n /**\r\n * Build distance constraints between adjacent chains.\r\n */\r\n private _buildConstraints(): void {\r\n this._constraints = [];\r\n\r\n if (this._chains.length < 2) {\r\n return; // Need at least 2 chains\r\n }\r\n\r\n // For each level (depth in the chain)\r\n const maxDepth = Math.min(...this._chains.map(chain => chain.length));\r\n\r\n for (let depth = 0; depth < maxDepth; depth++) {\r\n // Connect adjacent chains\r\n for (let i = 0; i < this._chains.length; i++) {\r\n const nextIndex = (i + 1) % this._chains.length; // Wrap around\r\n\r\n const bone1 = this._chains[i][depth];\r\n const bone2 = this._chains[nextIndex][depth];\r\n\r\n if (bone1 && bone2) {\r\n const constraint = new DistanceConstraint(\r\n bone1,\r\n bone2,\r\n this._minDistance,\r\n this._maxDistance,\r\n this._stiffness\r\n );\r\n this._constraints.push(constraint);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Rebuild constraints (call after modifying chains).\r\n */\r\n rebuild(): void {\r\n this._buildConstraints();\r\n }\r\n\r\n /**\r\n * Apply all distance constraints.\r\n */\r\n apply(): void {\r\n for (const constraint of this._constraints) {\r\n constraint.apply();\r\n }\r\n }\r\n\r\n /**\r\n * Get all distance constraints.\r\n */\r\n get constraints(): readonly DistanceConstraint[] {\r\n return this._constraints;\r\n }\r\n}\r\n"],"names":["SpringBoneConstraint","DistanceConstraint","bone1","bone2","minDistance","maxDistance","stiffness","_bone1","_bone2","_minDistance","Math","max","_maxDistance","_stiffness","min","value","apply","pos1","currentPosition","pos2","direction","Vector3","sub","distance","magnitude","directionNorm","scale","correction","offset","addBy","CircularConstraint","chains","_chains","_constraints","_buildConstraints","length","maxDepth","map","chain","depth","i","nextIndex","constraint","push","rebuild","constraints"],"mappings":"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"}
|