@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
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { assert } from "../../core/assert.js";
|
|
2
2
|
import Signal from "../../core/events/signal/Signal.js";
|
|
3
|
+
import { current_time_in_seconds } from "../../core/time/current_time_in_seconds.js";
|
|
3
4
|
import Clock from '../Clock.js';
|
|
4
5
|
|
|
5
6
|
/**
|
|
@@ -7,6 +8,10 @@ import Clock from '../Clock.js';
|
|
|
7
8
|
* Dispatches "tick" every animation frame or "maxDelay" time, whichever happens to be soonest
|
|
8
9
|
* This is essentially the timing bus that all the simulation systems subscribe to for their step advancement
|
|
9
10
|
*
|
|
11
|
+
* A tick taken in an animation frame runs inside that frame and is measured to the frame's timestamp,
|
|
12
|
+
* and {@link Ticker#onFrame} follows it, so whatever draws from `onFrame` draws the simulation as of
|
|
13
|
+
* that frame.
|
|
14
|
+
*
|
|
10
15
|
*
|
|
11
16
|
* @example
|
|
12
17
|
* ticker.onTick.add(delta_s => {
|
|
@@ -78,6 +83,15 @@ class Ticker {
|
|
|
78
83
|
*/
|
|
79
84
|
onTick = new Signal();
|
|
80
85
|
|
|
86
|
+
/**
|
|
87
|
+
* Dispatched once per animation frame, after that frame's tick - or with none, while paused or
|
|
88
|
+
* suspended. The place to draw: the simulation is at the frame's timestamp here.
|
|
89
|
+
* Not dispatched for the {@link start}'s `maxTimeout` fallback ticks, which are not frames.
|
|
90
|
+
* @readonly
|
|
91
|
+
* @type {Signal}
|
|
92
|
+
*/
|
|
93
|
+
onFrame = new Signal();
|
|
94
|
+
|
|
81
95
|
constructor() {
|
|
82
96
|
this.clock.pause();
|
|
83
97
|
}
|
|
@@ -242,12 +256,15 @@ class Ticker {
|
|
|
242
256
|
const generation = this.#generation;
|
|
243
257
|
const is_current = () => this.#generation === generation;
|
|
244
258
|
|
|
245
|
-
|
|
259
|
+
/**
|
|
260
|
+
* @param {number} time in seconds, on the {@link current_time_in_seconds} timeline
|
|
261
|
+
*/
|
|
262
|
+
const update = (time) => {
|
|
246
263
|
if (!this.#isRunning || this.#isSuspended) {
|
|
247
264
|
return;
|
|
248
265
|
}
|
|
249
266
|
|
|
250
|
-
const delta = this.clock.
|
|
267
|
+
const delta = this.clock.getDeltaAt(time);
|
|
251
268
|
|
|
252
269
|
this.#last_tick_delta_s = delta;
|
|
253
270
|
|
|
@@ -261,28 +278,46 @@ class Ticker {
|
|
|
261
278
|
return;
|
|
262
279
|
}
|
|
263
280
|
|
|
264
|
-
animate();
|
|
281
|
+
animate(current_time_in_seconds());
|
|
265
282
|
}
|
|
266
283
|
|
|
267
|
-
|
|
284
|
+
/**
|
|
285
|
+
* @param {number} timestamp the frame's, in milliseconds
|
|
286
|
+
*/
|
|
287
|
+
const animationFrameCallback = (timestamp) => {
|
|
268
288
|
clearTimeout(this.#timeoutHandle);
|
|
269
289
|
|
|
270
290
|
if (!is_current()) {
|
|
271
291
|
return;
|
|
272
292
|
}
|
|
273
293
|
|
|
274
|
-
|
|
275
|
-
|
|
294
|
+
/*
|
|
295
|
+
Ticked here, on the frame's own timestamp, and before the frame is announced. This used to
|
|
296
|
+
be pushed to a setTimeout(0) "allowing draw to happen" first, which made every frame draw
|
|
297
|
+
the simulation as of the previous frame's timeout - and that fired whenever the previous
|
|
298
|
+
draw finished, so a steady motion was drawn at a different speed every frame.
|
|
299
|
+
*/
|
|
300
|
+
animate(timestamp * 1e-3);
|
|
301
|
+
|
|
302
|
+
//a tick listener is allowed to stop us
|
|
303
|
+
if (!is_current()) {
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
this.onFrame.send0();
|
|
276
308
|
}
|
|
277
309
|
|
|
278
|
-
|
|
310
|
+
/**
|
|
311
|
+
* @param {number} time in seconds, on the {@link current_time_in_seconds} timeline
|
|
312
|
+
*/
|
|
313
|
+
const animate = (time) => {
|
|
279
314
|
if (!is_current()) {
|
|
280
315
|
return;
|
|
281
316
|
}
|
|
282
317
|
|
|
283
318
|
this.#animationFrameHandle = requestAnimationFrame(animationFrameCallback);
|
|
284
319
|
|
|
285
|
-
update();
|
|
320
|
+
update(time);
|
|
286
321
|
|
|
287
322
|
//update() dispatches onTick, and a listener is allowed to stop us from inside it
|
|
288
323
|
if (!is_current()) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"etc1s_to_astc.d.ts","sourceRoot":"","sources":["../../../../../../src/format/texture/basis/transcode/etc1s_to_astc.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"etc1s_to_astc.d.ts","sourceRoot":"","sources":["../../../../../../src/format/texture/basis/transcode/etc1s_to_astc.js"],"names":[],"mappings":"AA6BA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,+DARW,aAAW,SAAS,uEAGlB,UAAU,CA6BtB"}
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
astc_write_block
|
|
7
7
|
} from "../astc_block.js";
|
|
8
8
|
import { etc1s_block_colors } from "../etc1s/etc1s_block_colors.js";
|
|
9
|
+
import { number_compare_ascending } from "../../../../core/primitives/numbers/number_compare_ascending.js";
|
|
9
10
|
|
|
10
11
|
/**
|
|
11
12
|
* Bits a weight takes in the blocks this writes, and the levels that follow from it.
|
|
@@ -142,7 +143,7 @@ function fit_block(endpoints_out, weights_out, palette, selector_values, selecto
|
|
|
142
143
|
}
|
|
143
144
|
}
|
|
144
145
|
|
|
145
|
-
used.sort(
|
|
146
|
+
used.sort(number_compare_ascending);
|
|
146
147
|
|
|
147
148
|
let best_error = Infinity;
|
|
148
149
|
|
|
@@ -258,9 +258,10 @@ geometry.getAttribute(StandardAttributes.Position).data // Float32Array
|
|
|
258
258
|
geometry.index.data // Uint32Array
|
|
259
259
|
```
|
|
260
260
|
|
|
261
|
-
|
|
261
|
+
Ten generators ship, all returning a `Geometry`, in `renderer/geometry/primitives/`:
|
|
262
262
|
`make_box_geometry`, `make_plane_geometry`, `make_polyhedron_geometry`, `make_octahedron_geometry`,
|
|
263
|
-
`
|
|
263
|
+
`make_uv_sphere_geometry`, `make_capsule_geometry`, `make_cylinder_geometry`, `make_cone_geometry`,
|
|
264
|
+
`make_torus_geometry`, `make_torus_knot_geometry`.
|
|
264
265
|
|
|
265
266
|
**`MeshletGeometry`** is the GPU form: triangles clustered into meshlets, attributes encoded, and a
|
|
266
267
|
BVH over the clusters. This is what a mesh row names, and it is what buys cluster culling and a
|
|
@@ -273,6 +274,11 @@ const meshlets = meshlet_geometry_build_from_geometry(geometry);
|
|
|
273
274
|
**That build is a precompute.** Do it once, when the content is created or loaded. If your vertices
|
|
274
275
|
change every frame, you are on the wrong path — see §8.
|
|
275
276
|
|
|
277
|
+
Seven of the primitives also come ready built, as `MeshletGeometry` subclasses one per module in
|
|
278
|
+
`renderer/geometry/`: `BoxGeometry`, `PlaneGeometry`, `UVSphereGeometry`, `CapsuleGeometry`,
|
|
279
|
+
`CylinderGeometry`, `ConeGeometry` and `TorusGeometry`. Each constructor runs its generator and then
|
|
280
|
+
this build, so constructing one is the same precompute.
|
|
281
|
+
|
|
276
282
|
### Materials
|
|
277
283
|
|
|
278
284
|
`ShadeMaterial` is the base: `transparency_mode`, `draw_mode` and `draw_side`.
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { jpeg_decode } from "../../../format/image/jpeg/jpeg_decode.js";
|
|
2
|
+
import { number_compare_ascending } from "../../../core/primitives/numbers/number_compare_ascending.js";
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* Measures the trade `ImageRGBADataLoader`'s codec chain makes for a JPEG.
|
|
@@ -37,7 +38,7 @@ const table = document.getElementById("results");
|
|
|
37
38
|
* @returns {number} the median, which a single GC pause cannot move
|
|
38
39
|
*/
|
|
39
40
|
function median(values) {
|
|
40
|
-
const sorted = [...values].sort(
|
|
41
|
+
const sorted = [...values].sort(number_compare_ascending);
|
|
41
42
|
return sorted[sorted.length >> 1];
|
|
42
43
|
}
|
|
43
44
|
|
|
@@ -3,7 +3,8 @@ import { EntityComponentDataset } from "../../../engine/ecs/EntityComponentDatas
|
|
|
3
3
|
import { Transform64 } from "../../../engine/ecs/transform/Transform64.js";
|
|
4
4
|
import { OrbitalCameraController } from "../../renderer/camera/OrbitalCameraController.js";
|
|
5
5
|
import { PerspectiveCamera } from "../../renderer/camera/PerspectiveCamera.js";
|
|
6
|
-
import { BoxGeometry
|
|
6
|
+
import { BoxGeometry } from "../../renderer/geometry/BoxGeometry.js";
|
|
7
|
+
import { PlaneGeometry } from "../../renderer/geometry/PlaneGeometry.js";
|
|
7
8
|
import { make_sunlight } from "../../renderer/light/make_sunlight.js";
|
|
8
9
|
import { place_light } from "../../renderer/light/place_light.js";
|
|
9
10
|
import { StandardShadeMaterial } from "../../renderer/material/StandardShadeMaterial.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff_traced_against_rasterized.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/skinned_blas_refit/diff_traced_against_rasterized.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"diff_traced_against_rasterized.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/skinned_blas_refit/diff_traced_against_rasterized.js"],"names":[],"mappings":"AAuaA;;GAEG;AACH,2CAEC;AAoED;;;;;;;;;;;;;;;GAeG;AACH;IAT6B,QAAQ;IACC,MAAM;IAClB,KAAK;IACc,OAAO,UAAhC,OAAO,KAAG,IAAI;IAEN,OAAO,GAAxB,MAAM;IAEJ,QAAQ,MAAM,CAAC,CA2O3B"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { use_flat_environment } from "./flat_environment.js";
|
|
2
|
+
import { number_compare_descending } from "../../../core/primitives/numbers/number_compare_descending.js";
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* Render the current view both ways and show, pixel by pixel, where they disagree.
|
|
@@ -415,7 +416,7 @@ function component_sizes(mask, width, height) {
|
|
|
415
416
|
sizes.push(size);
|
|
416
417
|
}
|
|
417
418
|
|
|
418
|
-
sizes.sort(
|
|
419
|
+
sizes.sort(number_compare_descending);
|
|
419
420
|
|
|
420
421
|
return sizes;
|
|
421
422
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/skinned_blas_refit/main.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/skinned_blas_refit/main.js"],"names":[],"mappings":"AAgQA;;;;;GAKG;AACH,yBAFa,QAAQ,IAAI,CAAC,CAoiBzB"}
|
|
@@ -11,6 +11,8 @@ import { create_frame_loop } from "../../renderer/create_frame_loop.js";
|
|
|
11
11
|
import { make_sunlight } from "../../renderer/light/make_sunlight.js";
|
|
12
12
|
import { place_light } from "../../renderer/light/place_light.js";
|
|
13
13
|
import { EntityComponentDataset } from "../../../engine/ecs/EntityComponentDataset.js";
|
|
14
|
+
import { MeshSkin } from "../../../engine/graphics/ecs/mesh-v2/MeshSkin.js";
|
|
15
|
+
import { AnimationClips } from "../../../engine/graphics3/animation/AnimationClips.js";
|
|
14
16
|
import { prefab_compile } from "../../../engine/graphics3/prefab/prefab_compile.js";
|
|
15
17
|
import { load_gltf } from "../../renderer/loader/gltf/load_gltf.js";
|
|
16
18
|
import { row_of_entity } from "../../renderer/scene/rows/GPUSceneRows.js";
|
|
@@ -161,25 +163,15 @@ class FrameTimer {
|
|
|
161
163
|
}
|
|
162
164
|
|
|
163
165
|
/**
|
|
164
|
-
* Every
|
|
165
|
-
*
|
|
166
|
-
* Off the skins rather than by walking the entities: a skin already lists exactly the meshes that
|
|
167
|
-
* bind to it, which is what `register_skin` uses, so this cannot disagree with what actually gets
|
|
168
|
-
* deformed.
|
|
166
|
+
* Every mesh entity of an instance that a skin deforms: the ones carrying a `MeshSkin`, which is
|
|
167
|
+
* exactly what gets registered and bound.
|
|
169
168
|
*
|
|
169
|
+
* @param {EntityComponentDataset} dataset
|
|
170
170
|
* @param {PrefabInstance} instance
|
|
171
171
|
* @returns {number[]}
|
|
172
172
|
*/
|
|
173
|
-
function skinned_meshes_of(instance) {
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
for (const skin of instance.skins) {
|
|
177
|
-
for (const mesh of skin.meshes) {
|
|
178
|
-
meshes.add(mesh);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
return [...meshes];
|
|
173
|
+
function skinned_meshes_of(dataset, instance) {
|
|
174
|
+
return Array.from(instance.mesh_entities).filter(entity => dataset.getComponent(entity, MeshSkin) !== undefined);
|
|
183
175
|
}
|
|
184
176
|
|
|
185
177
|
/**
|
|
@@ -201,9 +193,9 @@ function add_dancer(scene_context, dataset, prefab, index, count) {
|
|
|
201
193
|
// what has to move. See `place_character`.
|
|
202
194
|
const { x, z } = grid_position(index, count, SPACING);
|
|
203
195
|
|
|
204
|
-
const { instance } = place_character(scene_context, dataset, prefab, x, z);
|
|
196
|
+
const { root, instance } = place_character(scene_context, dataset, prefab, x, z);
|
|
205
197
|
|
|
206
|
-
const meshes = skinned_meshes_of(instance);
|
|
198
|
+
const meshes = skinned_meshes_of(dataset, instance);
|
|
207
199
|
|
|
208
200
|
if (meshes.length === 0) {
|
|
209
201
|
throw new Error(`${CHARACTER_URL} has no skinned mesh — nothing here has a BLAS to refit`);
|
|
@@ -214,8 +206,8 @@ function add_dancer(scene_context, dataset, prefab, index, count) {
|
|
|
214
206
|
// One clip, looping, at full weight. The pose accumulator sums every *bound* clip whatever its
|
|
215
207
|
// weight, so binding the T-pose alongside the dance would blend the two rather than leave the
|
|
216
208
|
// dance alone — only what should play is registered.
|
|
217
|
-
const
|
|
218
|
-
|
|
209
|
+
const clips = dataset.getComponent(root, AnimationClips).clips;
|
|
210
|
+
const clip = clips.find(candidate => /samba|dance/i.test(candidate.name ?? '')) ?? clips[0];
|
|
219
211
|
|
|
220
212
|
if (clip !== undefined) {
|
|
221
213
|
const clip_id = animations.register_clip(clip);
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* primitives hold a row of the `meshes` table too, over a clone of their geometry when the mesh is
|
|
20
20
|
* skinned, which is the region the skinning pass deforms and the BLAS refit follows.
|
|
21
21
|
*
|
|
22
|
-
* This is what `MeshSystem` and `
|
|
22
|
+
* This is what `MeshSystem`, `ShadedGeometrySystem` and `MeshSkinSystem` do between them for a game; a playground
|
|
23
23
|
* has no systems, so `prefab_place` does the same by hand and in one place — this is it, at a
|
|
24
24
|
* grid position.
|
|
25
25
|
*
|
|
@@ -31,14 +31,17 @@
|
|
|
31
31
|
* @param {object} [options]
|
|
32
32
|
* @param {boolean} [options.register_animation] whether the instance's skins are registered; off
|
|
33
33
|
* leaves a skinned mesh's clone undeformed, which is a question of its own
|
|
34
|
-
* @returns {{root: number, instance: PrefabInstance,
|
|
34
|
+
* @returns {{root: number, instance: PrefabInstance, skins: Array<{entity: number, skin_id: number}>|null}}
|
|
35
35
|
*/
|
|
36
36
|
export function place_character(scene_context: GPUSceneContext, dataset: EntityComponentDataset, prefab: Prefab, x: number, z: number, { register_animation }?: {
|
|
37
37
|
register_animation?: boolean;
|
|
38
38
|
}): {
|
|
39
39
|
root: number;
|
|
40
40
|
instance: PrefabInstance;
|
|
41
|
-
|
|
41
|
+
skins: Array<{
|
|
42
|
+
entity: number;
|
|
43
|
+
skin_id: number;
|
|
44
|
+
}> | null;
|
|
42
45
|
};
|
|
43
46
|
/**
|
|
44
47
|
* The source geometry a mesh entity draws — for a skinned one, what its clone is a clone of.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"place_character.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/skinned_blas_refit/place_character.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,oHAPW,MAAM,KACN,MAAM;IAEY,kBAAkB,GAApC,OAAO;IAEL;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,iBAAiB;IAAC,
|
|
1
|
+
{"version":3,"file":"place_character.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/skinned_blas_refit/place_character.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,oHAPW,MAAM,KACN,MAAM;IAEY,kBAAkB,GAApC,OAAO;IAEL;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,iBAAiB;IAAC,KAAK,EAAE,MAAM;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAC,CAAC,GAAC,IAAI,CAAA;CAAC,CAa1G;AAED;;;;;;GAMG;AACH,qEAHW,MAAM,mBAShB;AAED;;;;;;;;;;;;GAYG;AACH,qCALW,MAAM,SACN,MAAM,WACN,MAAM,GACJ;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAC,CAUlC"}
|
|
@@ -1,90 +1,90 @@
|
|
|
1
|
-
import { assert } from "../../../core/assert.js";
|
|
2
|
-
import { Transform64 } from "../../../engine/ecs/transform/Transform64.js";
|
|
3
|
-
import { ShadedGeometry } from "../../../engine/graphics/ecs/mesh-v2/ShadedGeometry.js";
|
|
4
|
-
import { prefab_place } from "../../../engine/graphics3/prefab/prefab_place.js";
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Stand one character on the floor at `(x, 0, z)`, the way the engine stands one: as entities.
|
|
8
|
-
*
|
|
9
|
-
* ## What a placed character is
|
|
10
|
-
*
|
|
11
|
-
* A prefab instance under a placement entity. The placement's `Transform64` is the offset and
|
|
12
|
-
* nothing else; every node the file had is an entity below it, holding its own offset from its
|
|
13
|
-
* parent in a `TransformAttachment`, and the file's own transform — the centimetre scale and the
|
|
14
|
-
* up-axis rotation an FBX-derived glTF carries on its root — stays where the prefab put it, on the
|
|
15
|
-
* entity that stands for that root. "Compose, do not replace": a `Transform64` composes as
|
|
16
|
-
* `T · R · S`, so a translation written into the file's root would not be the world offset but one
|
|
17
|
-
* the rotation and scale then act on.
|
|
18
|
-
*
|
|
19
|
-
* ## Where the GPU reads it
|
|
20
|
-
*
|
|
21
|
-
* Every entity of the instance holds a row of the `transforms` table, at `entity + 1`, and the
|
|
22
|
-
* hierarchy pass composes each row's `global` from its offset and its parent's row — so the joints
|
|
23
|
-
* the pose accumulator drives are carried by the placement without anyone writing to them. The
|
|
24
|
-
* primitives hold a row of the `meshes` table too, over a clone of their geometry when the mesh is
|
|
25
|
-
* skinned, which is the region the skinning pass deforms and the BLAS refit follows.
|
|
26
|
-
*
|
|
27
|
-
* This is what `MeshSystem` and `
|
|
28
|
-
* has no systems, so `prefab_place` does the same by hand and in one place — this is it, at a
|
|
29
|
-
* grid position.
|
|
30
|
-
*
|
|
31
|
-
* @param {GPUSceneContext} scene_context the scene's context — its rows are where the instance goes
|
|
32
|
-
* @param {EntityComponentDataset} dataset the dataset the scene is bound to
|
|
33
|
-
* @param {Prefab} prefab the character, compiled once
|
|
34
|
-
* @param {number} x
|
|
35
|
-
* @param {number} z
|
|
36
|
-
* @param {object} [options]
|
|
37
|
-
* @param {boolean} [options.register_animation] whether the instance's skins are registered; off
|
|
38
|
-
* leaves a skinned mesh's clone undeformed, which is a question of its own
|
|
39
|
-
* @returns {{root: number, instance: PrefabInstance,
|
|
40
|
-
*/
|
|
41
|
-
export function place_character(scene_context, dataset, prefab, x, z, { register_animation = true } = {}) {
|
|
42
|
-
const placement = new Transform64();
|
|
43
|
-
|
|
44
|
-
// `Transform64` keeps its matrix by hand: setting a component leaves the matrix holding what it
|
|
45
|
-
// held before, so the write is only real after `updateMatrix`.
|
|
46
|
-
placement.setTranslation(x, 0, z);
|
|
47
|
-
placement.updateMatrix();
|
|
48
|
-
|
|
49
|
-
const { root, instance,
|
|
50
|
-
|
|
51
|
-
return { root, instance,
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* The source geometry a mesh entity draws — for a skinned one, what its clone is a clone of.
|
|
56
|
-
*
|
|
57
|
-
* @param {EntityComponentDataset} dataset
|
|
58
|
-
* @param {number} entity
|
|
59
|
-
* @returns {MeshletGeometry}
|
|
60
|
-
*/
|
|
61
|
-
export function geometry_of(dataset, entity) {
|
|
62
|
-
const geometry = dataset.getComponent(entity, ShadedGeometry);
|
|
63
|
-
|
|
64
|
-
assert.defined(geometry, `entity ${entity} carries no ShadedGeometry`);
|
|
65
|
-
|
|
66
|
-
return geometry.geometry;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Where the `index`-th of `count` characters stands: a square-ish grid centred on the origin, laid
|
|
71
|
-
* out in rows along +x.
|
|
72
|
-
*
|
|
73
|
-
* Centred rather than growing from the origin so that `?count=N` frames the same way for every N —
|
|
74
|
-
* the camera is aimed at the union of the cast, and a grid that walks away from the origin as it
|
|
75
|
-
* grows pushes that union off with it.
|
|
76
|
-
*
|
|
77
|
-
* @param {number} index
|
|
78
|
-
* @param {number} count
|
|
79
|
-
* @param {number} spacing distance between neighbours
|
|
80
|
-
* @returns {{x: number, z: number}}
|
|
81
|
-
*/
|
|
82
|
-
export function grid_position(index, count, spacing) {
|
|
83
|
-
const columns = Math.ceil(Math.sqrt(count));
|
|
84
|
-
const rows = Math.ceil(count / columns);
|
|
85
|
-
|
|
86
|
-
return {
|
|
87
|
-
x: ((index % columns) - (columns - 1) / 2) * spacing,
|
|
88
|
-
z: (Math.floor(index / columns) - (rows - 1) / 2) * spacing,
|
|
89
|
-
};
|
|
90
|
-
}
|
|
1
|
+
import { assert } from "../../../core/assert.js";
|
|
2
|
+
import { Transform64 } from "../../../engine/ecs/transform/Transform64.js";
|
|
3
|
+
import { ShadedGeometry } from "../../../engine/graphics/ecs/mesh-v2/ShadedGeometry.js";
|
|
4
|
+
import { prefab_place } from "../../../engine/graphics3/prefab/prefab_place.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Stand one character on the floor at `(x, 0, z)`, the way the engine stands one: as entities.
|
|
8
|
+
*
|
|
9
|
+
* ## What a placed character is
|
|
10
|
+
*
|
|
11
|
+
* A prefab instance under a placement entity. The placement's `Transform64` is the offset and
|
|
12
|
+
* nothing else; every node the file had is an entity below it, holding its own offset from its
|
|
13
|
+
* parent in a `TransformAttachment`, and the file's own transform — the centimetre scale and the
|
|
14
|
+
* up-axis rotation an FBX-derived glTF carries on its root — stays where the prefab put it, on the
|
|
15
|
+
* entity that stands for that root. "Compose, do not replace": a `Transform64` composes as
|
|
16
|
+
* `T · R · S`, so a translation written into the file's root would not be the world offset but one
|
|
17
|
+
* the rotation and scale then act on.
|
|
18
|
+
*
|
|
19
|
+
* ## Where the GPU reads it
|
|
20
|
+
*
|
|
21
|
+
* Every entity of the instance holds a row of the `transforms` table, at `entity + 1`, and the
|
|
22
|
+
* hierarchy pass composes each row's `global` from its offset and its parent's row — so the joints
|
|
23
|
+
* the pose accumulator drives are carried by the placement without anyone writing to them. The
|
|
24
|
+
* primitives hold a row of the `meshes` table too, over a clone of their geometry when the mesh is
|
|
25
|
+
* skinned, which is the region the skinning pass deforms and the BLAS refit follows.
|
|
26
|
+
*
|
|
27
|
+
* This is what `MeshSystem`, `ShadedGeometrySystem` and `MeshSkinSystem` do between them for a game; a playground
|
|
28
|
+
* has no systems, so `prefab_place` does the same by hand and in one place — this is it, at a
|
|
29
|
+
* grid position.
|
|
30
|
+
*
|
|
31
|
+
* @param {GPUSceneContext} scene_context the scene's context — its rows are where the instance goes
|
|
32
|
+
* @param {EntityComponentDataset} dataset the dataset the scene is bound to
|
|
33
|
+
* @param {Prefab} prefab the character, compiled once
|
|
34
|
+
* @param {number} x
|
|
35
|
+
* @param {number} z
|
|
36
|
+
* @param {object} [options]
|
|
37
|
+
* @param {boolean} [options.register_animation] whether the instance's skins are registered; off
|
|
38
|
+
* leaves a skinned mesh's clone undeformed, which is a question of its own
|
|
39
|
+
* @returns {{root: number, instance: PrefabInstance, skins: Array<{entity: number, skin_id: number}>|null}}
|
|
40
|
+
*/
|
|
41
|
+
export function place_character(scene_context, dataset, prefab, x, z, { register_animation = true } = {}) {
|
|
42
|
+
const placement = new Transform64();
|
|
43
|
+
|
|
44
|
+
// `Transform64` keeps its matrix by hand: setting a component leaves the matrix holding what it
|
|
45
|
+
// held before, so the write is only real after `updateMatrix`.
|
|
46
|
+
placement.setTranslation(x, 0, z);
|
|
47
|
+
placement.updateMatrix();
|
|
48
|
+
|
|
49
|
+
const { root, instance, skins } = prefab_place(scene_context, dataset, prefab, placement, { register_animation });
|
|
50
|
+
|
|
51
|
+
return { root, instance, skins };
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* The source geometry a mesh entity draws — for a skinned one, what its clone is a clone of.
|
|
56
|
+
*
|
|
57
|
+
* @param {EntityComponentDataset} dataset
|
|
58
|
+
* @param {number} entity
|
|
59
|
+
* @returns {MeshletGeometry}
|
|
60
|
+
*/
|
|
61
|
+
export function geometry_of(dataset, entity) {
|
|
62
|
+
const geometry = dataset.getComponent(entity, ShadedGeometry);
|
|
63
|
+
|
|
64
|
+
assert.defined(geometry, `entity ${entity} carries no ShadedGeometry`);
|
|
65
|
+
|
|
66
|
+
return geometry.geometry;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Where the `index`-th of `count` characters stands: a square-ish grid centred on the origin, laid
|
|
71
|
+
* out in rows along +x.
|
|
72
|
+
*
|
|
73
|
+
* Centred rather than growing from the origin so that `?count=N` frames the same way for every N —
|
|
74
|
+
* the camera is aimed at the union of the cast, and a grid that walks away from the origin as it
|
|
75
|
+
* grows pushes that union off with it.
|
|
76
|
+
*
|
|
77
|
+
* @param {number} index
|
|
78
|
+
* @param {number} count
|
|
79
|
+
* @param {number} spacing distance between neighbours
|
|
80
|
+
* @returns {{x: number, z: number}}
|
|
81
|
+
*/
|
|
82
|
+
export function grid_position(index, count, spacing) {
|
|
83
|
+
const columns = Math.ceil(Math.sqrt(count));
|
|
84
|
+
const rows = Math.ceil(count / columns);
|
|
85
|
+
|
|
86
|
+
return {
|
|
87
|
+
x: ((index % columns) - (columns - 1) / 2) * spacing,
|
|
88
|
+
z: (Math.floor(index / columns) - (rows - 1) / 2) * spacing,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/skinned_mesh_soup/main.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/skinned_mesh_soup/main.js"],"names":[],"mappings":"AA+LA;;;;GAIG;AACH,yBAFa,QAAQ,IAAI,CAAC,CAmTzB"}
|