@woosh/meep-engine 3.43.0 → 3.45.0
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/build/bundle-worker-terrain.js +1 -1
- package/editor/prototypeEditorShell.d.ts.map +1 -1
- package/editor/prototypeEditorShell.js +4 -2
- package/package.json +1 -1
- package/src/core/collection/array/array_sort_insertion_ascending.d.ts +19 -0
- package/src/core/collection/array/array_sort_insertion_ascending.d.ts.map +1 -0
- package/src/core/collection/array/array_sort_insertion_ascending.js +31 -0
- package/src/core/geom/3d/aabb/aabb3_array_round_outward_f32.d.ts +27 -0
- package/src/core/geom/3d/aabb/aabb3_array_round_outward_f32.d.ts.map +1 -0
- package/src/core/geom/3d/aabb/aabb3_array_round_outward_f32.js +39 -0
- package/src/core/geom/3d/aabb/aabb3_from_v3_array.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/aabb3_from_v3_array.js +4 -1
- package/src/core/geom/3d/aabb/aabb3_transform_oriented.d.ts +2 -2
- package/src/core/geom/3d/aabb/aabb3_transform_oriented.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/aabb3_transform_oriented.js +1 -1
- package/src/core/geom/3d/pose/pose3_apply_inverse_point_array.d.ts +21 -0
- package/src/core/geom/3d/pose/pose3_apply_inverse_point_array.d.ts.map +1 -0
- package/src/core/geom/3d/pose/pose3_apply_inverse_point_array.js +36 -0
- package/src/core/geom/3d/pose/pose3_apply_point_array.d.ts +25 -0
- package/src/core/geom/3d/pose/pose3_apply_point_array.d.ts.map +1 -0
- package/src/core/geom/3d/pose/pose3_apply_point_array.js +40 -0
- package/src/core/geom/3d/pose/pose3_compose_array.d.ts +28 -0
- package/src/core/geom/3d/pose/pose3_compose_array.d.ts.map +1 -0
- package/src/core/geom/3d/pose/pose3_compose_array.js +41 -0
- package/src/core/geom/3d/pose/pose3_to_local_array.d.ts +29 -0
- package/src/core/geom/3d/pose/pose3_to_local_array.d.ts.map +1 -0
- package/src/core/geom/3d/pose/pose3_to_local_array.js +42 -0
- package/src/core/geom/3d/quaternion/quat3_clamp_angle_array.d.ts +28 -0
- package/src/core/geom/3d/quaternion/quat3_clamp_angle_array.d.ts.map +1 -0
- package/src/core/geom/3d/quaternion/quat3_clamp_angle_array.js +66 -0
- package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_left_array.d.ts +22 -0
- package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_left_array.d.ts.map +1 -0
- package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_left_array.js +30 -0
- package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_right_array.d.ts +23 -0
- package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_right_array.d.ts.map +1 -0
- package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_right_array.js +31 -0
- package/src/core/geom/3d/triangle/tri3_compute_normal_area_weighted_array.d.ts +26 -0
- package/src/core/geom/3d/triangle/tri3_compute_normal_area_weighted_array.d.ts.map +1 -0
- package/src/core/geom/3d/triangle/tri3_compute_normal_area_weighted_array.js +46 -0
- package/src/core/geom/vec3/v3_distance_array.d.ts +11 -0
- package/src/core/geom/vec3/v3_distance_array.d.ts.map +1 -0
- package/src/core/geom/vec3/v3_distance_array.js +19 -0
- package/src/core/geom/vec3/v3_normalize_array_checked.d.ts +23 -0
- package/src/core/geom/vec3/v3_normalize_array_checked.d.ts.map +1 -0
- package/src/core/geom/vec3/v3_normalize_array_checked.js +49 -0
- package/src/core/geom/vec3/v3_reject_array.d.ts +15 -0
- package/src/core/geom/vec3/v3_reject_array.d.ts.map +1 -0
- package/src/core/geom/vec3/v3_reject_array.js +32 -0
- package/src/core/graph/csr/csr_build_incidence.d.ts +26 -0
- package/src/core/graph/csr/csr_build_incidence.d.ts.map +1 -0
- package/src/core/graph/csr/csr_build_incidence.js +71 -0
- package/src/core/graph/csr/csr_graph_color_greedy.d.ts +25 -0
- package/src/core/graph/csr/csr_graph_color_greedy.d.ts.map +1 -0
- package/src/core/graph/csr/csr_graph_color_greedy.js +83 -0
- package/src/core/graph/csr/csr_graph_validate_coloring.d.ts +15 -0
- package/src/core/graph/csr/csr_graph_validate_coloring.d.ts.map +1 -0
- package/src/core/graph/csr/csr_graph_validate_coloring.js +33 -0
- package/src/core/math/linalg/matrix_symmetric_3x3_solve_ldlt.d.ts +26 -0
- package/src/core/math/linalg/matrix_symmetric_3x3_solve_ldlt.d.ts.map +1 -0
- package/src/core/math/linalg/matrix_symmetric_3x3_solve_ldlt.js +71 -0
- package/src/core/math/max2_exact.d.ts +15 -0
- package/src/core/math/max2_exact.d.ts.map +1 -0
- package/src/core/math/max2_exact.js +30 -0
- package/src/core/math/min2_exact.d.ts +20 -0
- package/src/core/math/min2_exact.d.ts.map +1 -0
- package/src/core/math/min2_exact.js +35 -0
- package/src/engine/Clock.d.ts +15 -0
- package/src/engine/Clock.d.ts.map +1 -1
- package/src/engine/Clock.js +29 -5
- package/src/engine/Engine.d.ts.map +1 -1
- package/src/engine/Engine.js +11 -19
- package/src/engine/ecs/ik/IKGoalSystem.d.ts.map +1 -1
- package/src/engine/ecs/ik/IKGoalSystem.js +3 -19
- package/src/engine/ecs/parent/parent_entity_model_of.d.ts +17 -0
- package/src/engine/ecs/parent/parent_entity_model_of.d.ts.map +1 -0
- package/src/engine/ecs/parent/parent_entity_model_of.js +26 -0
- package/src/engine/ecs/transform/t64_read_pose_array.d.ts +15 -0
- package/src/engine/ecs/transform/t64_read_pose_array.d.ts.map +1 -0
- package/src/engine/ecs/transform/t64_read_pose_array.js +24 -0
- package/src/engine/graphics/ecs/mesh-v2/MeshSkin.d.ts +57 -0
- package/src/engine/graphics/ecs/mesh-v2/MeshSkin.d.ts.map +1 -0
- package/src/engine/graphics/ecs/mesh-v2/MeshSkin.js +84 -0
- package/src/engine/graphics/geometry/geometry_construct_triangle_normal_area_weighted.d.ts +2 -0
- package/src/engine/graphics/geometry/geometry_construct_triangle_normal_area_weighted.d.ts.map +1 -1
- package/src/engine/graphics/geometry/geometry_construct_triangle_normal_area_weighted.js +10 -21
- package/src/engine/graphics3/AnimationGraphSystem.d.ts +28 -13
- package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationGraphSystem.js +107 -64
- package/src/engine/graphics3/AnimationSystem.d.ts +29 -15
- package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationSystem.js +112 -61
- package/src/engine/graphics3/MeshSkinSystem.d.ts +56 -0
- package/src/engine/graphics3/MeshSkinSystem.d.ts.map +1 -0
- package/src/engine/graphics3/MeshSkinSystem.js +317 -0
- package/src/engine/graphics3/MeshSystem.d.ts +15 -35
- package/src/engine/graphics3/MeshSystem.d.ts.map +1 -1
- package/src/engine/graphics3/MeshSystem.js +21 -298
- package/src/engine/graphics3/RowChains.d.ts +76 -0
- package/src/engine/graphics3/RowChains.d.ts.map +1 -0
- package/src/engine/graphics3/RowChains.js +347 -0
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts +6 -0
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -1
- package/src/engine/graphics3/ShadedGeometrySystem.js +329 -309
- package/src/engine/graphics3/animation/AnimationClips.d.ts +56 -0
- package/src/engine/graphics3/animation/AnimationClips.d.ts.map +1 -0
- package/src/engine/graphics3/animation/AnimationClips.js +79 -0
- package/src/engine/graphics3/animation/ClipListPlayer.d.ts +13 -14
- package/src/engine/graphics3/animation/ClipListPlayer.d.ts.map +1 -1
- package/src/engine/graphics3/animation/ClipListPlayer.js +262 -263
- package/src/engine/graphics3/animation/write_clip_playback.d.ts +3 -3
- package/src/engine/graphics3/animation/write_clip_playback.js +4 -4
- package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts +5 -0
- package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts.map +1 -1
- package/src/engine/graphics3/pose/query_entity_node_world_pose.js +80 -75
- package/src/engine/graphics3/prefab/PrefabInstance.d.ts +4 -24
- package/src/engine/graphics3/prefab/PrefabInstance.d.ts.map +1 -1
- package/src/engine/graphics3/prefab/PrefabInstance.js +60 -80
- package/src/engine/graphics3/prefab/prefab_instantiate.d.ts +16 -3
- package/src/engine/graphics3/prefab/prefab_instantiate.d.ts.map +1 -1
- package/src/engine/graphics3/prefab/prefab_instantiate.js +49 -12
- package/src/engine/graphics3/prefab/prefab_place.d.ts +31 -17
- package/src/engine/graphics3/prefab/prefab_place.d.ts.map +1 -1
- package/src/engine/graphics3/prefab/prefab_place.js +175 -130
- package/src/engine/graphics3/register_clips.d.ts +93 -0
- package/src/engine/graphics3/register_clips.d.ts.map +1 -0
- package/src/engine/graphics3/register_clips.js +166 -0
- package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts +9 -0
- package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts.map +1 -1
- package/src/engine/physics/broadphase/compute_fat_world_aabb.js +3 -1
- package/src/engine/physics/cloth/MEASUREMENTS.md +795 -0
- package/src/engine/physics/cloth/PLAN.md +349 -17
- package/src/engine/physics/cloth/build/ClothProxy.d.ts +113 -61
- package/src/engine/physics/cloth/build/ClothProxy.d.ts.map +1 -1
- package/src/engine/physics/cloth/build/ClothProxy.js +142 -77
- package/src/engine/physics/cloth/build/cloth_bind_in_frame.d.ts +44 -0
- package/src/engine/physics/cloth/build/cloth_bind_in_frame.d.ts.map +1 -0
- package/src/engine/physics/cloth/build/cloth_bind_in_frame.js +107 -0
- package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts +43 -30
- package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts.map +1 -1
- package/src/engine/physics/cloth/build/cloth_proxy_from_joints.js +371 -284
- package/src/engine/physics/cloth/build/cloth_proxy_from_mesh.d.ts +62 -0
- package/src/engine/physics/cloth/build/cloth_proxy_from_mesh.d.ts.map +1 -0
- package/src/engine/physics/cloth/build/cloth_proxy_from_mesh.js +275 -0
- package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts +7 -0
- package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/ClothColliderIndex.js +85 -67
- package/src/engine/physics/cloth/collider/cloth_collider_bounds.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/cloth_collider_bounds.js +19 -101
- package/src/engine/physics/cloth/collider/cloth_collider_pack.d.ts +2 -5
- package/src/engine/physics/cloth/collider/cloth_collider_pack.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/cloth_collider_pack.js +7 -15
- package/src/engine/physics/cloth/collider/cloth_collider_sdf.d.ts +1 -1
- package/src/engine/physics/cloth/collider/cloth_collider_sdf.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/cloth_collider_sdf.js +17 -62
- package/src/engine/physics/cloth/ecs/Cloth.d.ts +17 -9
- package/src/engine/physics/cloth/ecs/Cloth.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/Cloth.js +220 -212
- package/src/engine/physics/cloth/ecs/ClothColliderFlags.d.ts +0 -1
- package/src/engine/physics/cloth/ecs/ClothColliderFlags.js +6 -19
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts +1 -2
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.js +3 -12
- package/src/engine/physics/cloth/ecs/ClothDynamicsFlags.js +6 -0
- package/src/engine/physics/cloth/ecs/ClothHold.d.ts +91 -0
- package/src/engine/physics/cloth/ecs/ClothHold.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/ClothHold.js +103 -0
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +254 -48
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothInstance.js +277 -47
- package/src/engine/physics/cloth/ecs/ClothPin.d.ts +73 -0
- package/src/engine/physics/cloth/ecs/ClothPin.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/ClothPin.js +92 -0
- package/src/engine/physics/cloth/ecs/ClothPinSerializationAdapter.d.ts +36 -0
- package/src/engine/physics/cloth/ecs/ClothPinSerializationAdapter.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/ClothPinSerializationAdapter.js +61 -0
- package/src/engine/physics/cloth/ecs/ClothRig.d.ts +23 -17
- package/src/engine/physics/cloth/ecs/ClothRig.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothRig.js +29 -27
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts +12 -14
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothSystem.js +20 -15
- package/src/engine/physics/cloth/ecs/ClothWorld.d.ts +57 -36
- package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothWorld.js +754 -207
- package/src/engine/physics/cloth/ecs/WorkerClothSystem.d.ts +12 -13
- package/src/engine/physics/cloth/ecs/WorkerClothSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/WorkerClothSystem.js +20 -14
- package/src/engine/physics/cloth/ecs/cloth_build_rows.d.ts +63 -11
- package/src/engine/physics/cloth/ecs/cloth_build_rows.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_build_rows.js +297 -101
- package/src/engine/physics/cloth/ecs/cloth_dynamics_map.d.ts +9 -7
- package/src/engine/physics/cloth/ecs/cloth_dynamics_map.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_dynamics_map.js +12 -10
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts +3 -3
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.js +60 -120
- package/src/engine/physics/cloth/ecs/cloth_geodesic.d.ts +37 -0
- package/src/engine/physics/cloth/ecs/cloth_geodesic.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/cloth_geodesic.js +135 -0
- package/src/engine/physics/cloth/ecs/cloth_holds.d.ts +97 -0
- package/src/engine/physics/cloth/ecs/cloth_holds.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/cloth_holds.js +583 -0
- package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.d.ts +2 -2
- package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.js +168 -51
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts +17 -22
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.js +55 -117
- package/src/engine/physics/cloth/ecs/cloth_seed_subtree.d.ts +21 -6
- package/src/engine/physics/cloth/ecs/cloth_seed_subtree.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_seed_subtree.js +51 -42
- package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts +5 -0
- package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_write_back.js +62 -50
- package/src/engine/physics/cloth/ecs/cloth_write_back_rig.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_write_back_rig.js +65 -58
- package/src/engine/physics/cloth/playground/cloth_playground_build.d.ts.map +1 -1
- package/src/engine/physics/cloth/playground/cloth_playground_build.js +2 -3
- package/src/engine/physics/cloth/playground/collide_main.js +3 -29
- package/src/engine/physics/cloth/playground/garment_build.d.ts.map +1 -1
- package/src/engine/physics/cloth/playground/garment_build.js +17 -5
- package/src/engine/physics/cloth/playground/garment_main.js +5 -20
- package/src/engine/physics/cloth/playground/main.js +6 -48
- package/src/engine/physics/cloth/playground/rig_build.d.ts.map +1 -1
- package/src/engine/physics/cloth/playground/rig_build.js +302 -296
- package/src/engine/physics/cloth/playground/rig_main.js +947 -955
- package/src/engine/physics/cloth/playground/wind_main.js +8 -7
- package/src/engine/physics/cloth/solver/ClothState.d.ts +45 -7
- package/src/engine/physics/cloth/solver/ClothState.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/ClothState.js +79 -83
- package/src/engine/physics/cloth/solver/cloth_color_particles.d.ts +10 -8
- package/src/engine/physics/cloth/solver/cloth_color_particles.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_color_particles.js +30 -102
- package/src/engine/physics/cloth/solver/cloth_contact_find.d.ts +6 -1
- package/src/engine/physics/cloth/solver/cloth_contact_find.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_contact_find.js +9 -3
- package/src/engine/physics/cloth/solver/cloth_hold_line.d.ts +114 -0
- package/src/engine/physics/cloth/solver/cloth_hold_line.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_hold_line.js +350 -0
- package/src/engine/physics/cloth/solver/cloth_kinetic_energy.d.ts +21 -0
- package/src/engine/physics/cloth/solver/cloth_kinetic_energy.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_kinetic_energy.js +45 -0
- package/src/engine/physics/cloth/solver/cloth_particle_coupling.d.ts +32 -0
- package/src/engine/physics/cloth/solver/cloth_particle_coupling.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_particle_coupling.js +133 -0
- package/src/engine/physics/cloth/solver/cloth_particle_of_source.d.ts +16 -0
- package/src/engine/physics/cloth/solver/cloth_particle_of_source.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_particle_of_source.js +19 -0
- package/src/engine/physics/cloth/solver/cloth_self_find.d.ts +6 -2
- package/src/engine/physics/cloth/solver/cloth_self_find.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_self_find.js +19 -68
- package/src/engine/physics/cloth/solver/cloth_solve_vertex.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_solve_vertex.js +30 -65
- package/src/engine/physics/cloth/solver/cloth_solver_constants.d.ts +24 -12
- package/src/engine/physics/cloth/solver/cloth_solver_constants.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_solver_constants.js +24 -12
- package/src/engine/physics/cloth/solver/cloth_step.d.ts +16 -0
- package/src/engine/physics/cloth/solver/cloth_step.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_step.js +189 -48
- package/src/engine/physics/cloth/solver/cloth_step_instance.d.ts +1 -0
- package/src/engine/physics/cloth/solver/cloth_step_instance.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_step_instance.js +12 -6
- package/src/engine/physics/cloth/solver/cloth_stretch_residual.d.ts +21 -0
- package/src/engine/physics/cloth/solver/cloth_stretch_residual.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_stretch_residual.js +54 -0
- package/src/engine/physics/cloth/solver/cloth_vertex_accumulator.d.ts +15 -0
- package/src/engine/physics/cloth/solver/cloth_vertex_accumulator.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_vertex_accumulator.js +28 -0
- package/src/engine/physics/cloth/solver/cloth_worst_tether_ratio.d.ts +30 -0
- package/src/engine/physics/cloth/solver/cloth_worst_tether_ratio.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_worst_tether_ratio.js +56 -0
- package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.js +3 -17
- package/src/engine/physics/cloth/solver/constraint/cloth_leash_row.d.ts +1 -1
- package/src/engine/physics/cloth/solver/constraint/cloth_leash_row.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/constraint/cloth_leash_row.js +353 -346
- package/src/engine/physics/cloth/solver/constraint/cloth_self_row.d.ts +7 -5
- package/src/engine/physics/cloth/solver/constraint/cloth_self_row.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/constraint/cloth_self_row.js +7 -5
- package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts +2 -1
- package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts.map +1 -1
- package/src/engine/physics/cloth/wind/ClothFluidWind.js +7 -25
- package/src/engine/physics/cloth/wind/cloth_sample_air.d.ts +12 -10
- package/src/engine/physics/cloth/wind/cloth_sample_air.d.ts.map +1 -1
- package/src/engine/physics/cloth/wind/cloth_sample_air.js +60 -82
- package/src/engine/physics/ecs/ContactProbeSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/ContactProbeSystem.js +2 -18
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.js +9 -50
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/engine/physics/fluid/ecs/fluid_sample_domain_bounds.d.ts +24 -0
- package/src/engine/physics/fluid/ecs/fluid_sample_domain_bounds.d.ts.map +1 -0
- package/src/engine/physics/fluid/ecs/fluid_sample_domain_bounds.js +42 -0
- package/src/engine/physics/fluid/ecs/fluid_sample_velocity_world_mps.d.ts +25 -0
- package/src/engine/physics/fluid/ecs/fluid_sample_velocity_world_mps.d.ts.map +1 -0
- package/src/engine/physics/fluid/ecs/fluid_sample_velocity_world_mps.js +40 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.d.ts.map +1 -1
- package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.js +40 -90
- package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/capsule_contacts.js +3 -5
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.js +2 -14
- package/src/engine/physics/narrowphase/hull_sphere_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/hull_sphere_contact.js +2 -5
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/narrowphase_step.js +13 -32
- package/src/engine/physics/narrowphase/sphere_box_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/sphere_box_contact.js +2 -5
- package/src/engine/simulation/Ticker.d.ts +13 -0
- package/src/engine/simulation/Ticker.d.ts.map +1 -1
- package/src/engine/simulation/Ticker.js +43 -8
- package/src/format/texture/basis/transcode/etc1s_to_astc.d.ts.map +1 -1
- package/src/format/texture/basis/transcode/etc1s_to_astc.js +2 -1
- package/src/shade/RENDERER_CONTRACT.md +8 -2
- package/src/shade/playground/image_decode_bench/main.js +2 -1
- package/src/shade/playground/mesh_row_ceiling/main.js +2 -1
- package/src/shade/playground/skinned_blas_refit/diff_traced_against_rasterized.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/diff_traced_against_rasterized.js +2 -1
- package/src/shade/playground/skinned_blas_refit/main.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/main.js +11 -19
- package/src/shade/playground/skinned_blas_refit/place_character.d.ts +6 -3
- package/src/shade/playground/skinned_blas_refit/place_character.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/place_character.js +90 -90
- package/src/shade/playground/skinned_mesh_soup/main.d.ts.map +1 -1
- package/src/shade/playground/skinned_mesh_soup/main.js +502 -509
- package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.d.ts.map +1 -1
- package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.js +2 -1
- package/src/shade/playground/ssr_variance/statistics.d.ts.map +1 -1
- package/src/shade/playground/ssr_variance/statistics.js +2 -1
- package/src/shade/playground/texture_encode/README.md +129 -109
- package/src/shade/playground/texture_encode/main.d.ts.map +1 -1
- package/src/shade/playground/texture_encode/main.js +1431 -1430
- package/src/shade/playground/volumetrics_froxel/measure.d.ts.map +1 -1
- package/src/shade/playground/volumetrics_froxel/measure.js +2 -1
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts +45 -14
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.js +316 -64
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts +5 -0
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +11 -1
- package/src/shade/renderer/buffer/table/gpu_database_check_links.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/gpu_database_check_links.js +2 -1
- package/src/shade/renderer/geometry/BoxGeometry.d.ts +1 -11
- package/src/shade/renderer/geometry/BoxGeometry.d.ts.map +1 -1
- package/src/shade/renderer/geometry/BoxGeometry.js +6 -13
- package/src/shade/renderer/geometry/CapsuleGeometry.d.ts +19 -0
- package/src/shade/renderer/geometry/CapsuleGeometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/CapsuleGeometry.js +24 -0
- package/src/shade/renderer/geometry/ConeGeometry.d.ts +20 -0
- package/src/shade/renderer/geometry/ConeGeometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/ConeGeometry.js +33 -0
- package/src/shade/renderer/geometry/CylinderGeometry.d.ts +21 -0
- package/src/shade/renderer/geometry/CylinderGeometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/CylinderGeometry.js +35 -0
- package/src/shade/renderer/geometry/PlaneGeometry.d.ts +17 -0
- package/src/shade/renderer/geometry/PlaneGeometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/PlaneGeometry.js +22 -0
- package/src/shade/renderer/geometry/TorusGeometry.d.ts +18 -0
- package/src/shade/renderer/geometry/TorusGeometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/TorusGeometry.js +23 -0
- package/src/shade/renderer/geometry/UVSphereGeometry.d.ts +21 -0
- package/src/shade/renderer/geometry/UVSphereGeometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/UVSphereGeometry.js +34 -0
- package/src/shade/renderer/geometry/primitives/make_capsule_geometry.d.ts +19 -0
- package/src/shade/renderer/geometry/primitives/make_capsule_geometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/primitives/make_capsule_geometry.js +205 -0
- package/src/shade/renderer/geometry/primitives/make_cone_geometry.d.ts +21 -0
- package/src/shade/renderer/geometry/primitives/make_cone_geometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/primitives/make_cone_geometry.js +36 -0
- package/src/shade/renderer/geometry/primitives/make_cylinder_geometry.d.ts +1 -1
- package/src/shade/renderer/geometry/primitives/make_cylinder_geometry.d.ts.map +1 -1
- package/src/shade/renderer/geometry/primitives/make_cylinder_geometry.js +44 -9
- package/src/shade/renderer/geometry/primitives/make_uv_sphere_geometry.d.ts +20 -0
- package/src/shade/renderer/geometry/primitives/make_uv_sphere_geometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/primitives/make_uv_sphere_geometry.js +190 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.js +3 -2
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.js +2 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_partition_into_groups.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_partition_into_groups.js +2 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_run_round.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_run_round.js +2 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_try_repack.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_try_repack.js +3 -2
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_graph_components.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_graph_components.js +2 -1
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.js +2 -1
- package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.js +3 -2
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js +7 -2
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.d.ts +26 -8
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.js +56 -39
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.d.ts +7 -0
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.js +46 -4
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/test_prefix_sum.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/test_prefix_sum.js +4 -2
- package/src/shade/renderer/gpu_primitive/sort/defs.d.ts +2 -2
- package/src/shade/renderer/gpu_primitive/sort/defs.js +79 -79
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts +1 -1
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.js +7 -3
- package/src/shade/renderer/particles/GPUParticleSystem.js +1 -1
- package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts +4 -3
- package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts.map +1 -1
- package/src/shade/renderer/particles/coherence/graph_particle_bucket.js +200 -194
- package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles.js +6 -2
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.js +3 -2
- package/src/shade/renderer/particles/warmup/graph_particle_warmup.d.ts.map +1 -1
- package/src/shade/renderer/particles/warmup/graph_particle_warmup.js +334 -329
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +7 -2
- package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.js +16 -4
- package/src/shade/renderer/texture/COMPRESSED_TEXTURE_PLAN_2026_09_01.md +2444 -2345
- package/src/shade/renderer/texture/encode/chunk_astc_encode_block_4x4_rgb.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/chunk_astc_encode_block_4x4_rgb.js +312 -310
- package/src/shade/renderer/texture/encode/chunk_bc1_encode_block.d.ts +3 -3
- package/src/shade/renderer/texture/encode/chunk_bc1_encode_block.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/chunk_bc1_encode_block.js +383 -375
- package/src/shade/renderer/texture/encode/chunk_bc6h_encode_block_mode11.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/chunk_bc6h_encode_block_mode11.js +349 -346
- package/src/shade/renderer/texture/encode/chunk_bc7_encode_block.d.ts +58 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_encode_block.d.ts.map +1 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_encode_block.js +536 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_encode_block_mode6.d.ts +21 -7
- package/src/shade/renderer/texture/encode/chunk_bc7_encode_block_mode6.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/chunk_bc7_encode_block_mode6.js +291 -327
- package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode1.d.ts +25 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode1.d.ts.map +1 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode1.js +99 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode6.d.ts +5 -3
- package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode6.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode6.js +47 -71
- package/src/shade/renderer/texture/encode/chunk_bc7_partition_2.d.ts +10 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_partition_2.d.ts.map +1 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_partition_2.js +50 -0
- package/src/shade/renderer/texture/encode/shader_texture_encode_bc7.d.ts +4 -5
- package/src/shade/renderer/texture/encode/shader_texture_encode_bc7.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/shader_texture_encode_bc7.js +7 -8
- package/src/shade/renderer/water/chunk_water_transport.d.ts.map +1 -1
- package/src/shade/renderer/water/chunk_water_transport.js +7 -5
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +1 -1
- package/src/shade/renderer/water/medium/GPUWaterBodies.js +8 -2
- package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.d.ts +3 -2
- package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.d.ts.map +1 -1
- package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.js +3 -2
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +3 -1
- package/src/shade/renderer/water/surface/GPUWaterSurface.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/GPUWaterSurface.js +3 -1
- package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/graph_water_tessellation.js +11 -4
- package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/particles/GPUWaterParticles.js +37 -20
- package/src/shade/wgsl/validate_wgsl_source.d.ts.map +1 -1
- package/src/shade/wgsl/validate_wgsl_source.js +74 -3
- package/src/engine/graphics3/register_instance_animation.d.ts +0 -114
- package/src/engine/graphics3/register_instance_animation.d.ts.map +0 -1
- package/src/engine/graphics3/register_instance_animation.js +0 -201
|
@@ -4,13 +4,11 @@ import { ResourceAccessSpecification } from "../../core/model/ResourceAccessSpec
|
|
|
4
4
|
import { PosePlayback } from "../../shade/renderer/animation/pose/PosePlayback.js";
|
|
5
5
|
import { Animation } from "../ecs/animation/Animation.js";
|
|
6
6
|
import { System } from "../ecs/System.js";
|
|
7
|
-
import {
|
|
7
|
+
import { AnimationClips } from "./animation/AnimationClips.js";
|
|
8
8
|
import { ClipListPlayer } from "./animation/ClipListPlayer.js";
|
|
9
9
|
import { write_clip_playback } from "./animation/write_clip_playback.js";
|
|
10
|
-
import {
|
|
11
|
-
|
|
12
|
-
unregister_instance_clips
|
|
13
|
-
} from "./register_instance_animation.js";
|
|
10
|
+
import { hold_clip_targets, register_clips, release_clip_targets, unregister_clips } from "./register_clips.js";
|
|
11
|
+
import { RowChains } from "./RowChains.js";
|
|
14
12
|
|
|
15
13
|
/**
|
|
16
14
|
* @type {ClipPlayback[]}
|
|
@@ -23,9 +21,17 @@ const NOTHING = Object.freeze([]);
|
|
|
23
21
|
*
|
|
24
22
|
* The list path is what the game uses wherever there is no state machine — buildings, critters and
|
|
25
23
|
* the strategy map's groups — and {@link ClipListPlayer} is what plays it. This is the ECS half:
|
|
26
|
-
* which entity has
|
|
24
|
+
* which clips each entity has, and when the ids the renderer issued for them stopped meaning
|
|
27
25
|
* anything.
|
|
28
26
|
*
|
|
27
|
+
* **The clips are the entity's {@link AnimationClips}.** An entity is driven while it carries both
|
|
28
|
+
* components, whoever put them there — a model `MeshSystem` loaded, or a rig built in code. New
|
|
29
|
+
* clips are a new component, which this system sees as the entity leaving and coming back.
|
|
30
|
+
*
|
|
31
|
+
* **Every node the clips key holds a row here** ({@link hold_clip_targets}), from the clips being
|
|
32
|
+
* taken up until they go. A clip binds only once all of them do, and a keyed node outside every skin
|
|
33
|
+
* with nothing drawn under it is held by no other system.
|
|
34
|
+
*
|
|
29
35
|
* **It is the CPU that plays the animation and the GPU that draws it.** Shade can advance a clip
|
|
30
36
|
* itself, and this never asks it to — `AnimationClipFlags.Playing` is left clear and every audible
|
|
31
37
|
* clip's time is written down each frame from the player's own clock. That is I-4: the pose
|
|
@@ -43,32 +49,38 @@ export class AnimationSystem extends System {
|
|
|
43
49
|
#graphics;
|
|
44
50
|
|
|
45
51
|
/**
|
|
46
|
-
* The
|
|
47
|
-
* for them.
|
|
52
|
+
* The scene whose GPU context issues the clip ids.
|
|
48
53
|
*
|
|
49
|
-
* @type {
|
|
54
|
+
* @type {Scene}
|
|
50
55
|
*/
|
|
51
|
-
#
|
|
56
|
+
#scene;
|
|
52
57
|
|
|
53
58
|
/**
|
|
54
|
-
* @type {Map<number, {player: ClipListPlayer,
|
|
59
|
+
* @type {Map<number, {player: ClipListPlayer, clips: ShadeAnimationClip[], bound: boolean, held: boolean, clip_registration: ClipRegistration|null, played_slots: Int32Array, written: Float32Array, poses: PosePlayback[]}>}
|
|
55
60
|
*/
|
|
56
61
|
#entries = new Map();
|
|
57
62
|
|
|
63
|
+
/**
|
|
64
|
+
* The chains of the nodes the clips key. Null until the system has a dataset.
|
|
65
|
+
*
|
|
66
|
+
* @type {RowChains|null}
|
|
67
|
+
*/
|
|
68
|
+
#chains = null;
|
|
69
|
+
|
|
58
70
|
/**
|
|
59
71
|
* @param {GraphicsEngine} graphics
|
|
60
|
-
* @param {
|
|
72
|
+
* @param {Scene} scene
|
|
61
73
|
*/
|
|
62
|
-
constructor(graphics,
|
|
74
|
+
constructor(graphics, scene) {
|
|
63
75
|
super();
|
|
64
76
|
|
|
65
77
|
assert.defined(graphics, 'graphics');
|
|
66
|
-
assert.
|
|
78
|
+
assert.equal(scene?.isScene, true, 'scene.isScene !== true');
|
|
67
79
|
|
|
68
80
|
this.#graphics = graphics;
|
|
69
|
-
this.#
|
|
81
|
+
this.#scene = scene;
|
|
70
82
|
|
|
71
|
-
this.dependencies = [Animation,
|
|
83
|
+
this.dependencies = [Animation, AnimationClips];
|
|
72
84
|
|
|
73
85
|
// this tick's clip times are this system's to set: whatever evaluates a pose from them
|
|
74
86
|
// (exact queries, IK's base pose) reads Animation and so runs after it
|
|
@@ -81,8 +93,7 @@ export class AnimationSystem extends System {
|
|
|
81
93
|
* What an entity is playing, and where each of them is.
|
|
82
94
|
*
|
|
83
95
|
* One entry per clip in the component's list, in the list's own order. Empty for an entity this
|
|
84
|
-
* system is not driving — one that has left, or one whose
|
|
85
|
-
* same wait the clip durations are on.
|
|
96
|
+
* system is not driving — one that has left, or one whose clips arrived since the last update.
|
|
86
97
|
*
|
|
87
98
|
* @param {number} entity
|
|
88
99
|
* @returns {ClipPlayback[]}
|
|
@@ -98,14 +109,15 @@ export class AnimationSystem extends System {
|
|
|
98
109
|
}
|
|
99
110
|
|
|
100
111
|
/**
|
|
101
|
-
* What the entity
|
|
102
|
-
*
|
|
112
|
+
* What the entity is playing, in the form the CPU pose evaluator takes: one entry per clip of its
|
|
113
|
+
* {@link AnimationClips} that the list names, at the weight and the time the renderer has been
|
|
114
|
+
* given.
|
|
103
115
|
*
|
|
104
116
|
* **Only the clips the list names are here, because they are the only ones registered** (D37).
|
|
105
117
|
* The GPU's accumulator marks a joint dirty for every bound clip that writes to it, weight and
|
|
106
118
|
* all — so a bound clip at weight zero resolves the joints only it drives to zero rather than
|
|
107
119
|
* leaving them at rest. The answer is not to hand the surplus to the evaluator so it agrees with
|
|
108
|
-
* a mistake; it is not to bind them, and then a clip
|
|
120
|
+
* a mistake; it is not to bind them, and then a clip nothing names moves nothing.
|
|
109
121
|
*
|
|
110
122
|
* The entries are this system's own and are rewritten by the next call, which is what keeps a
|
|
111
123
|
* query on a per-frame path from allocating.
|
|
@@ -113,16 +125,17 @@ export class AnimationSystem extends System {
|
|
|
113
125
|
* @param {PosePlayback[]} target appended to
|
|
114
126
|
* @param {number} entity
|
|
115
127
|
* @returns {boolean} whether this system is driving the entity — `false` for one with no
|
|
116
|
-
* {@link Animation}, and for one whose
|
|
128
|
+
* {@link Animation} or no {@link AnimationClips}, and for one whose clips arrived since the last
|
|
129
|
+
* update
|
|
117
130
|
*/
|
|
118
131
|
write_pose_playbacks(target, entity) {
|
|
119
132
|
const entry = this.#entries.get(entity);
|
|
120
133
|
|
|
121
|
-
if (entry === undefined || entry.
|
|
134
|
+
if (entry === undefined || !entry.bound) {
|
|
122
135
|
return false;
|
|
123
136
|
}
|
|
124
137
|
|
|
125
|
-
const clips = entry.
|
|
138
|
+
const clips = entry.clips;
|
|
126
139
|
const weights = entry.player.weights;
|
|
127
140
|
const poses = entry.poses;
|
|
128
141
|
const played = entry.played_slots;
|
|
@@ -155,14 +168,20 @@ export class AnimationSystem extends System {
|
|
|
155
168
|
}
|
|
156
169
|
|
|
157
170
|
/**
|
|
171
|
+
* Only noted here: the clips are taken up by the next {@link update}. A link can happen anywhere
|
|
172
|
+
* the components are added — inside a model's spawn, for one `MeshSystem` loads — and binding is
|
|
173
|
+
* this system's work, on its own tick.
|
|
174
|
+
*
|
|
158
175
|
* @param {Animation} component
|
|
159
|
-
* @param {
|
|
176
|
+
* @param {AnimationClips} clips
|
|
160
177
|
* @param {number} entity
|
|
161
178
|
*/
|
|
162
|
-
link(component,
|
|
179
|
+
link(component, clips, entity) {
|
|
163
180
|
this.#entries.set(entity, {
|
|
164
181
|
player: ClipListPlayer.from(component),
|
|
165
|
-
|
|
182
|
+
clips: clips.clips,
|
|
183
|
+
bound: false,
|
|
184
|
+
held: false,
|
|
166
185
|
clip_registration: null,
|
|
167
186
|
played_slots: new Int32Array(0),
|
|
168
187
|
written: new Float32Array(0),
|
|
@@ -172,25 +191,49 @@ export class AnimationSystem extends System {
|
|
|
172
191
|
|
|
173
192
|
/**
|
|
174
193
|
* @param {Animation} component
|
|
175
|
-
* @param {
|
|
194
|
+
* @param {AnimationClips} clips
|
|
176
195
|
* @param {number} entity
|
|
177
196
|
*/
|
|
178
|
-
unlink(component,
|
|
197
|
+
unlink(component, clips, entity) {
|
|
179
198
|
const entry = this.#entries.get(entity);
|
|
180
199
|
|
|
181
200
|
if (entry !== undefined) {
|
|
182
201
|
this.#release_clips(entry);
|
|
202
|
+
|
|
203
|
+
if (entry.held) {
|
|
204
|
+
release_clip_targets(this.#chains, entry.clips);
|
|
205
|
+
|
|
206
|
+
entry.held = false;
|
|
207
|
+
}
|
|
183
208
|
}
|
|
184
209
|
|
|
185
210
|
this.#entries.delete(entity);
|
|
186
211
|
}
|
|
187
212
|
|
|
213
|
+
async startup(entityManager) {
|
|
214
|
+
// the scene's rows are this dataset's entities; the first system to place one says so
|
|
215
|
+
const dataset = entityManager.dataset;
|
|
216
|
+
const scene = this.#scene;
|
|
217
|
+
|
|
218
|
+
assert.ok(
|
|
219
|
+
scene.dataset === null || scene.dataset === undefined || scene.dataset === dataset,
|
|
220
|
+
'the scene is bound to another dataset'
|
|
221
|
+
);
|
|
222
|
+
|
|
223
|
+
scene.dataset = dataset;
|
|
224
|
+
|
|
225
|
+
this.#chains = new RowChains(dataset);
|
|
226
|
+
}
|
|
227
|
+
|
|
188
228
|
async shutdown(entityManager) {
|
|
189
229
|
for (const entry of this.#entries.values()) {
|
|
190
230
|
this.#release_clips(entry);
|
|
191
231
|
}
|
|
192
232
|
|
|
193
233
|
this.#entries.clear();
|
|
234
|
+
|
|
235
|
+
this.#chains.destroy();
|
|
236
|
+
this.#chains = null;
|
|
194
237
|
}
|
|
195
238
|
|
|
196
239
|
/**
|
|
@@ -221,23 +264,23 @@ export class AnimationSystem extends System {
|
|
|
221
264
|
return;
|
|
222
265
|
}
|
|
223
266
|
|
|
224
|
-
if (registration.context === this.#graphics.scene_context(this.#
|
|
225
|
-
|
|
267
|
+
if (registration.context === this.#graphics.scene_context(this.#scene)) {
|
|
268
|
+
unregister_clips(registration);
|
|
226
269
|
}
|
|
227
270
|
|
|
228
271
|
entry.clip_registration = null;
|
|
229
272
|
}
|
|
230
273
|
|
|
231
274
|
/**
|
|
232
|
-
* Which of the
|
|
275
|
+
* Which of the entity's clips the list currently names, kept up to date.
|
|
233
276
|
*
|
|
234
277
|
* **The list is edited while the game runs** — `ClipListPlayer` reconciles its playbacks against
|
|
235
278
|
* it every tick, and `StopAnimationBehavior` empties it outright — so which clips are playable
|
|
236
279
|
* is not settled once at bind.
|
|
237
280
|
*
|
|
238
281
|
* Maintained here rather than alongside the registration because **the pose evaluator needs it
|
|
239
|
-
* whether or not there is a device**: `
|
|
240
|
-
*
|
|
282
|
+
* whether or not there is a device**: `collect_entity_playbacks` answers on the CPU, from the
|
|
283
|
+
* clips this driver plays, and a game with rendering disabled still asks (I-4).
|
|
241
284
|
*
|
|
242
285
|
* @param {object} entry
|
|
243
286
|
* @returns {boolean} whether the set changed
|
|
@@ -247,10 +290,9 @@ export class AnimationSystem extends System {
|
|
|
247
290
|
const played = entry.played_slots;
|
|
248
291
|
|
|
249
292
|
/*
|
|
250
|
-
The distinct slots, and distinct is the point: two entries of the list can name one clip
|
|
251
|
-
the
|
|
252
|
-
|
|
253
|
-
re-registration.
|
|
293
|
+
The distinct slots, and distinct is the point: two entries of the list can name one clip, so
|
|
294
|
+
the number of playbacks is not the number of clips. Comparing the two would report a change
|
|
295
|
+
on every frame for a list that had not moved, and a change here is a re-registration.
|
|
254
296
|
*/
|
|
255
297
|
const wanted = [];
|
|
256
298
|
|
|
@@ -289,12 +331,11 @@ export class AnimationSystem extends System {
|
|
|
289
331
|
* the joints only it drives down to zero with it.
|
|
290
332
|
*
|
|
291
333
|
* @param {object} entry
|
|
292
|
-
* @param {PrefabInstance} instance
|
|
293
334
|
* @param {GPUSceneContext} context
|
|
294
335
|
* @param {boolean} set_changed whether {@link #refresh_played_slots} just moved
|
|
295
336
|
* @returns {boolean} whether the registration was replaced
|
|
296
337
|
*/
|
|
297
|
-
#refresh_clips(entry,
|
|
338
|
+
#refresh_clips(entry, context, set_changed) {
|
|
298
339
|
const registration = entry.clip_registration;
|
|
299
340
|
|
|
300
341
|
if (!set_changed && registration !== null && registration.context === context) {
|
|
@@ -303,42 +344,52 @@ export class AnimationSystem extends System {
|
|
|
303
344
|
|
|
304
345
|
this.#release_clips_only(entry);
|
|
305
346
|
|
|
306
|
-
entry.clip_registration =
|
|
347
|
+
entry.clip_registration = register_clips(context, entry.clips, entry.played_slots);
|
|
307
348
|
|
|
308
349
|
return true;
|
|
309
350
|
}
|
|
310
351
|
|
|
352
|
+
/**
|
|
353
|
+
* Take up the entity's clips: the list is played against them from here on.
|
|
354
|
+
*
|
|
355
|
+
* @param {object} entry
|
|
356
|
+
* @param {number} entity
|
|
357
|
+
* @param {EntityComponentDataset} ecd
|
|
358
|
+
*/
|
|
359
|
+
#bind(entry, entity, ecd) {
|
|
360
|
+
const clips = entry.clips;
|
|
361
|
+
|
|
362
|
+
entry.player.bind(entity, ecd, clips);
|
|
363
|
+
|
|
364
|
+
entry.written = new Float32Array(clips.length).fill(-1);
|
|
365
|
+
entry.poses = clips.map(() => new PosePlayback());
|
|
366
|
+
|
|
367
|
+
entry.bound = true;
|
|
368
|
+
|
|
369
|
+
// before anything registers, so the clips bind in the update that registers them
|
|
370
|
+
hold_clip_targets(this.#chains, clips);
|
|
371
|
+
|
|
372
|
+
entry.held = true;
|
|
373
|
+
}
|
|
374
|
+
|
|
311
375
|
/**
|
|
312
376
|
* @param {number} time_delta_seconds
|
|
313
377
|
*/
|
|
314
378
|
update(time_delta_seconds) {
|
|
315
379
|
const ecd = this.entityManager.dataset;
|
|
316
380
|
|
|
317
|
-
const context = this.#graphics.scene_context(this.#
|
|
381
|
+
const context = this.#graphics.scene_context(this.#scene);
|
|
318
382
|
|
|
319
383
|
// No device — before the first start, and again after a stop. The clocks still run: a clip
|
|
320
384
|
// that ends while the renderer is being replaced still says so.
|
|
321
385
|
const manager = context === null ? null : context.animation_manager;
|
|
322
386
|
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
if (instance === null) {
|
|
327
|
-
// the model has not arrived, and its clips are what say how long they run
|
|
328
|
-
continue;
|
|
329
|
-
}
|
|
387
|
+
// a new context after a restart is acquired in whole; until there is one, holds are recorded
|
|
388
|
+
this.#chains.bind(context === null ? null : context.rows);
|
|
330
389
|
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
entry.player.bind(entity, ecd, instance);
|
|
335
|
-
|
|
336
|
-
entry.written = new Float32Array(instance.clips.length).fill(-1);
|
|
337
|
-
entry.poses = instance.clips.map(() => new PosePlayback());
|
|
338
|
-
|
|
339
|
-
// ids the manager issued for the model that was here before name clips this one
|
|
340
|
-
// does not have
|
|
341
|
-
this.#release_clips(entry);
|
|
390
|
+
for (const [entity, entry] of this.#entries) {
|
|
391
|
+
if (!entry.bound) {
|
|
392
|
+
this.#bind(entry, entity, ecd);
|
|
342
393
|
}
|
|
343
394
|
|
|
344
395
|
entry.player.tick(time_delta_seconds);
|
|
@@ -349,7 +400,7 @@ export class AnimationSystem extends System {
|
|
|
349
400
|
continue;
|
|
350
401
|
}
|
|
351
402
|
|
|
352
|
-
if (this.#refresh_clips(entry,
|
|
403
|
+
if (this.#refresh_clips(entry, context, set_changed)) {
|
|
353
404
|
// whatever the last registration was told is not what this one knows
|
|
354
405
|
entry.written.fill(-1);
|
|
355
406
|
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deforms every primitive that carries a {@link MeshSkin}: registers its skin with the animation
|
|
3
|
+
* manager, binds the primitive to it, and holds a row for each joint and everything above it.
|
|
4
|
+
*
|
|
5
|
+
* **It does not care where the skin came from.** `MeshSystem` puts one on each skinned primitive of
|
|
6
|
+
* a model it loads; code building a skinned mesh puts one there itself. Both are the same
|
|
7
|
+
* components on the same kinds of entities, and this is the whole of what makes them deform —
|
|
8
|
+
* `ShadedGeometrySystem` draws the clone, this binds it.
|
|
9
|
+
*
|
|
10
|
+
* **One skeleton, one registration.** A body and its hair carry a skin each, with the same joints
|
|
11
|
+
* bound the same way; the manager answers both registrations with one skin, so the skeleton's
|
|
12
|
+
* matrices are made once a frame.
|
|
13
|
+
*
|
|
14
|
+
* **Joint rows are chains** ({@link RowChains}). A joint composes on the GPU under its parent's row;
|
|
15
|
+
* under a clip-driven ancestor that is the only place its world is right, and a clip keying the
|
|
16
|
+
* ancestor binds only once the ancestor holds a row.
|
|
17
|
+
*
|
|
18
|
+
* **Registration waits for {@link update}**, never happening at link. A spawn adds components node
|
|
19
|
+
* by node, so a joint later in the file is not complete when the primitive links; and there may be
|
|
20
|
+
* no device to register with. A restart replaces the context and voids every id it issued: they are
|
|
21
|
+
* forgotten rather than handed back, and every skin registers again in the new one.
|
|
22
|
+
*/
|
|
23
|
+
export class MeshSkinSystem extends System<any> {
|
|
24
|
+
/**
|
|
25
|
+
* @param {GraphicsEngine} graphics
|
|
26
|
+
* @param {Scene} scene
|
|
27
|
+
*/
|
|
28
|
+
constructor(graphics: GraphicsEngine, scene: Scene);
|
|
29
|
+
dependencies: (typeof ShadedGeometry | typeof MeshSkin)[];
|
|
30
|
+
/**
|
|
31
|
+
* @returns {Scene}
|
|
32
|
+
*/
|
|
33
|
+
get scene(): import("../../shade/renderer/scene/Scene.js").Scene;
|
|
34
|
+
startup(entityManager: any): Promise<void>;
|
|
35
|
+
shutdown(entityManager: any): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* @param {MeshSkin} skin
|
|
38
|
+
* @param {ShadedGeometry} geometry
|
|
39
|
+
* @param {number} entity
|
|
40
|
+
*/
|
|
41
|
+
link(skin: MeshSkin, geometry: ShadedGeometry, entity: number): void;
|
|
42
|
+
/**
|
|
43
|
+
* @param {MeshSkin} skin
|
|
44
|
+
* @param {ShadedGeometry} geometry
|
|
45
|
+
* @param {number} entity
|
|
46
|
+
*/
|
|
47
|
+
unlink(skin: MeshSkin, geometry: ShadedGeometry, entity: number): void;
|
|
48
|
+
#private;
|
|
49
|
+
}
|
|
50
|
+
export type GPUSceneContext = import("../../shade/renderer/scene/GPUSceneContext.js").GPUSceneContext;
|
|
51
|
+
export type GraphicsEngine = import("./GraphicsEngine.js").GraphicsEngine;
|
|
52
|
+
export type Scene = import("../../shade/renderer/scene/Scene.js").Scene;
|
|
53
|
+
import { System } from "../ecs/System.js";
|
|
54
|
+
import { ShadedGeometry } from "../graphics/ecs/mesh-v2/ShadedGeometry.js";
|
|
55
|
+
import { MeshSkin } from "../graphics/ecs/mesh-v2/MeshSkin.js";
|
|
56
|
+
//# sourceMappingURL=MeshSkinSystem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MeshSkinSystem.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/MeshSkinSystem.js"],"names":[],"mappings":"AAmDA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH;IAsCI;;;OAGG;IACH,sBAHW,cAAc,SACd,KAAK,EAYf;IADG,0DAA8C;IAGlD;;OAEG;IACH,iEAEC;IAED,2CAeC;IAED,4CAUC;IAED;;;;OAIG;IACH,WAJW,QAAQ,YACR,cAAc,UACd,MAAM,QAehB;IAED;;;;OAIG;IACH,aAJW,QAAQ,YACR,cAAc,UACd,MAAM,QAIhB;;CA8HJ;8BApTY,OAAO,+CAA+C,EAAE,eAAe;6BACvE,OAAO,qBAAqB,EAAE,cAAc;oBAC5C,OAAO,qCAAqC,EAAE,KAAK;uBATzC,kBAAkB;+BAEV,2CAA2C;yBADjD,qCAAqC"}
|