@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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk_astc_encode_block_4x4_rgb.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/texture/encode/chunk_astc_encode_block_4x4_rgb.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,8CAFU,SAAS,
|
|
1
|
+
{"version":3,"file":"chunk_astc_encode_block_4x4_rgb.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/texture/encode/chunk_astc_encode_block_4x4_rgb.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,8CAFU,SAAS,CAwRZ;0BAvTmB,oCAAoC"}
|
|
@@ -1,310 +1,312 @@
|
|
|
1
|
-
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
2
|
-
import { chunk_astc_pack_4x4_rgb } from "./chunk_astc_pack_4x4_rgb.js";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Encode sixteen RGB texels as one ASTC 4x4 block: one partition, eight-bit endpoints, three-bit
|
|
6
|
-
* weights.
|
|
7
|
-
*
|
|
8
|
-
* **The one corner of ASTC this tree can already read.** Step 9f derived this block's layout from
|
|
9
|
-
* the specification and beat the reference encoder with it; step 9h inverted the packings. What is
|
|
10
|
-
* ported here is the encoder's part: the same RGB line as BC1's, fitted under ASTC's own
|
|
11
|
-
* arithmetic, which is not BC1's in two places that each cost a level if ignored:
|
|
12
|
-
*
|
|
13
|
-
* 1. **The interpolation.** ASTC widens each eight-bit endpoint to sixteen by replication,
|
|
14
|
-
* interpolates there with a `+32` round, and takes the top eight bits. Against the direct form
|
|
15
|
-
* that disagrees on one texel in twenty, always by a level, so every score here is the
|
|
16
|
-
* specification's form — `astc_interpolate` in `astc_block.js`, in WGSL.
|
|
17
|
-
* 2. **The endpoint order.** Colour endpoint mode 8 compares the two ends by the sum of their
|
|
18
|
-
* channels and, when the second's is below the first's, *swaps them and blue-contracts both* —
|
|
19
|
-
* a different picture, not a mirrored one, recorded by no bit. So a fitted pair whose sums come
|
|
20
|
-
* out the wrong way round is written the other way up with its weights inverted, which decodes
|
|
21
|
-
* identically; that is `astc_order_endpoints`, in WGSL.
|
|
22
|
-
*
|
|
23
|
-
* Eight weight levels, unevenly spaced — `0, 9, 18, 27, 37, 46, 55, 64` of 64 — over eight-bit
|
|
24
|
-
* ends: between BC1 and BC7 mode 6 in what it can hold, at BC7's eight bits a texel. The fit is
|
|
25
|
-
* the principal axis, the extreme projections, two rounds of least squares with those weights, and
|
|
26
|
-
* one round of coordinate descent over the six stored bytes against the decoder's palette. Alpha
|
|
27
|
-
* is not read: mode 8 carries none, and a cut-out wants the RGBA mode, which is a later chunk.
|
|
28
|
-
*
|
|
29
|
-
* This is the only target here that no device in reach can sample, so it rests on the CPU decoder
|
|
30
|
-
* alone — the decoder that §9.17 held against the reference encoder's blocks before trusting it.
|
|
31
|
-
*
|
|
32
|
-
* @type {CodeChunk}
|
|
33
|
-
*/
|
|
34
|
-
export const chunk_astc_encode_block_4x4_rgb = CodeChunk.from(
|
|
35
|
-
//language=WGSL
|
|
36
|
-
`
|
|
37
|
-
// what a three-bit weight unquantizes to, out of 64: replicated up to six bits and nudged so the
|
|
38
|
-
// top of the range is exactly 64
|
|
39
|
-
fn astc_weight3(index: u32) -> f32 {
|
|
40
|
-
var weights = array<f32, 8>(0.0, 9.0, 18.0, 27.0, 37.0, 46.0, 55.0, 64.0);
|
|
41
|
-
|
|
42
|
-
return weights[index];
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
// one channel decoded as the format decodes it: sixteen-bit replicated ends, a rounded weighted
|
|
46
|
-
// sum, the top eight bits
|
|
47
|
-
fn astc_interpolate(c0: f32, c1: f32, weight: f32) -> f32 {
|
|
48
|
-
let wide0 = c0 * 257.0;
|
|
49
|
-
let wide1 = c1 * 257.0;
|
|
50
|
-
|
|
51
|
-
return floor(floor((wide0 * (64.0 - weight) + wide1 * weight + 32.0) / 64.0) / 256.0);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
fn astc_palette_entry(e0: vec3<f32>, e1: vec3<f32>, index: u32) -> vec3<f32> {
|
|
55
|
-
let w = astc_weight3(index);
|
|
56
|
-
|
|
57
|
-
return vec3<f32>(
|
|
58
|
-
astc_interpolate(e0.x, e1.x, w),
|
|
59
|
-
astc_interpolate(e0.y, e1.y, w),
|
|
60
|
-
astc_interpolate(e0.z, e1.z, w)
|
|
61
|
-
);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
// the weight whose palette entry is nearest a texel, and the squared distance
|
|
65
|
-
fn astc_nearest(e0: vec3<f32>, e1: vec3<f32>, texel: vec3<f32>) -> vec2<f32> {
|
|
66
|
-
let direction = e1 - e0;
|
|
67
|
-
let span = dot(direction, direction);
|
|
68
|
-
|
|
69
|
-
var estimate = 0.0;
|
|
70
|
-
|
|
71
|
-
if (span > 0.0) {
|
|
72
|
-
estimate = clamp(round(dot(texel - e0, direction) / span * 7.0), 0.0, 7.0);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
var best = estimate;
|
|
76
|
-
var best_distance = 1e30;
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
let
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
var
|
|
110
|
-
var
|
|
111
|
-
var
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
let
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
select(v.
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
var
|
|
175
|
-
|
|
176
|
-
var
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
cov[
|
|
203
|
-
cov[
|
|
204
|
-
cov[
|
|
205
|
-
cov[
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
cov[
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
var
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
endpoints
|
|
300
|
-
|
|
301
|
-
endpoints[
|
|
302
|
-
endpoints[
|
|
303
|
-
endpoints[
|
|
304
|
-
endpoints[
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
1
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
2
|
+
import { chunk_astc_pack_4x4_rgb } from "./chunk_astc_pack_4x4_rgb.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Encode sixteen RGB texels as one ASTC 4x4 block: one partition, eight-bit endpoints, three-bit
|
|
6
|
+
* weights.
|
|
7
|
+
*
|
|
8
|
+
* **The one corner of ASTC this tree can already read.** Step 9f derived this block's layout from
|
|
9
|
+
* the specification and beat the reference encoder with it; step 9h inverted the packings. What is
|
|
10
|
+
* ported here is the encoder's part: the same RGB line as BC1's, fitted under ASTC's own
|
|
11
|
+
* arithmetic, which is not BC1's in two places that each cost a level if ignored:
|
|
12
|
+
*
|
|
13
|
+
* 1. **The interpolation.** ASTC widens each eight-bit endpoint to sixteen by replication,
|
|
14
|
+
* interpolates there with a `+32` round, and takes the top eight bits. Against the direct form
|
|
15
|
+
* that disagrees on one texel in twenty, always by a level, so every score here is the
|
|
16
|
+
* specification's form — `astc_interpolate` in `astc_block.js`, in WGSL.
|
|
17
|
+
* 2. **The endpoint order.** Colour endpoint mode 8 compares the two ends by the sum of their
|
|
18
|
+
* channels and, when the second's is below the first's, *swaps them and blue-contracts both* —
|
|
19
|
+
* a different picture, not a mirrored one, recorded by no bit. So a fitted pair whose sums come
|
|
20
|
+
* out the wrong way round is written the other way up with its weights inverted, which decodes
|
|
21
|
+
* identically; that is `astc_order_endpoints`, in WGSL.
|
|
22
|
+
*
|
|
23
|
+
* Eight weight levels, unevenly spaced — `0, 9, 18, 27, 37, 46, 55, 64` of 64 — over eight-bit
|
|
24
|
+
* ends: between BC1 and BC7 mode 6 in what it can hold, at BC7's eight bits a texel. The fit is
|
|
25
|
+
* the principal axis, the extreme projections, two rounds of least squares with those weights, and
|
|
26
|
+
* one round of coordinate descent over the six stored bytes against the decoder's palette. Alpha
|
|
27
|
+
* is not read: mode 8 carries none, and a cut-out wants the RGBA mode, which is a later chunk.
|
|
28
|
+
*
|
|
29
|
+
* This is the only target here that no device in reach can sample, so it rests on the CPU decoder
|
|
30
|
+
* alone — the decoder that §9.17 held against the reference encoder's blocks before trusting it.
|
|
31
|
+
*
|
|
32
|
+
* @type {CodeChunk}
|
|
33
|
+
*/
|
|
34
|
+
export const chunk_astc_encode_block_4x4_rgb = CodeChunk.from(
|
|
35
|
+
//language=WGSL
|
|
36
|
+
`
|
|
37
|
+
// what a three-bit weight unquantizes to, out of 64: replicated up to six bits and nudged so the
|
|
38
|
+
// top of the range is exactly 64
|
|
39
|
+
fn astc_weight3(index: u32) -> f32 {
|
|
40
|
+
var weights = array<f32, 8>(0.0, 9.0, 18.0, 27.0, 37.0, 46.0, 55.0, 64.0);
|
|
41
|
+
|
|
42
|
+
return weights[index];
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// one channel decoded as the format decodes it: sixteen-bit replicated ends, a rounded weighted
|
|
46
|
+
// sum, the top eight bits
|
|
47
|
+
fn astc_interpolate(c0: f32, c1: f32, weight: f32) -> f32 {
|
|
48
|
+
let wide0 = c0 * 257.0;
|
|
49
|
+
let wide1 = c1 * 257.0;
|
|
50
|
+
|
|
51
|
+
return floor(floor((wide0 * (64.0 - weight) + wide1 * weight + 32.0) / 64.0) / 256.0);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
fn astc_palette_entry(e0: vec3<f32>, e1: vec3<f32>, index: u32) -> vec3<f32> {
|
|
55
|
+
let w = astc_weight3(index);
|
|
56
|
+
|
|
57
|
+
return vec3<f32>(
|
|
58
|
+
astc_interpolate(e0.x, e1.x, w),
|
|
59
|
+
astc_interpolate(e0.y, e1.y, w),
|
|
60
|
+
astc_interpolate(e0.z, e1.z, w)
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// the weight whose palette entry is nearest a texel, and the squared distance
|
|
65
|
+
fn astc_nearest(e0: vec3<f32>, e1: vec3<f32>, texel: vec3<f32>) -> vec2<f32> {
|
|
66
|
+
let direction = e1 - e0;
|
|
67
|
+
let span = dot(direction, direction);
|
|
68
|
+
|
|
69
|
+
var estimate = 0.0;
|
|
70
|
+
|
|
71
|
+
if (span > 0.0) {
|
|
72
|
+
estimate = clamp(round(dot(texel - e0, direction) / span * 7.0), 0.0, 7.0);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
var best = estimate;
|
|
76
|
+
var best_distance = 1e30;
|
|
77
|
+
|
|
78
|
+
// counted in integers: counted in floats, the same loops made the whole encoder a seventh slower on
|
|
79
|
+
// an RTX 4090, the bytes identical
|
|
80
|
+
for (var offset = -1; offset <= 1; offset++) {
|
|
81
|
+
let candidate = clamp(estimate + f32(offset), 0.0, 7.0);
|
|
82
|
+
|
|
83
|
+
let delta = astc_palette_entry(e0, e1, u32(candidate)) - texel;
|
|
84
|
+
let distance = dot(delta, delta);
|
|
85
|
+
|
|
86
|
+
if (distance < best_distance) {
|
|
87
|
+
best_distance = distance;
|
|
88
|
+
best = candidate;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return vec2<f32>(best, best_distance);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
fn astc_score(texels: array<vec3<f32>, 16>, e0: vec3<f32>, e1: vec3<f32>) -> f32 {
|
|
96
|
+
var error = 0.0;
|
|
97
|
+
|
|
98
|
+
for (var i = 0u; i < 16u; i++) {
|
|
99
|
+
error += astc_nearest(e0, e1, texels[i]).y;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return error;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
fn astc_refine(texels: array<vec3<f32>, 16>, e0: vec3<f32>, e1: vec3<f32>) -> array<vec3<f32>, 2> {
|
|
106
|
+
let direction = e1 - e0;
|
|
107
|
+
let span = dot(direction, direction);
|
|
108
|
+
|
|
109
|
+
var aa = 0.0;
|
|
110
|
+
var ab = 0.0;
|
|
111
|
+
var bb = 0.0;
|
|
112
|
+
var ap = vec3<f32>(0.0);
|
|
113
|
+
var bp = vec3<f32>(0.0);
|
|
114
|
+
|
|
115
|
+
for (var i = 0u; i < 16u; i++) {
|
|
116
|
+
var estimate = 0.0;
|
|
117
|
+
|
|
118
|
+
if (span > 0.0) {
|
|
119
|
+
estimate = clamp(round(dot(texels[i] - e0, direction) / span * 7.0), 0.0, 7.0);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
var best_weight = 0.0;
|
|
123
|
+
var best_distance = 1e30;
|
|
124
|
+
|
|
125
|
+
for (var offset = -1; offset <= 1; offset++) {
|
|
126
|
+
let candidate = clamp(estimate + f32(offset), 0.0, 7.0);
|
|
127
|
+
let weight = astc_weight3(u32(candidate)) / 64.0;
|
|
128
|
+
|
|
129
|
+
let delta = mix(e0, e1, weight) - texels[i];
|
|
130
|
+
let distance = dot(delta, delta);
|
|
131
|
+
|
|
132
|
+
if (distance < best_distance) {
|
|
133
|
+
best_distance = distance;
|
|
134
|
+
best_weight = weight;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
let b = best_weight;
|
|
139
|
+
let a = 1.0 - b;
|
|
140
|
+
|
|
141
|
+
aa += a * a;
|
|
142
|
+
ab += a * b;
|
|
143
|
+
bb += b * b;
|
|
144
|
+
ap += a * texels[i];
|
|
145
|
+
bp += b * texels[i];
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
let determinant = aa * bb - ab * ab;
|
|
149
|
+
|
|
150
|
+
var out: array<vec3<f32>, 2>;
|
|
151
|
+
|
|
152
|
+
if (abs(determinant) < 1e-6) {
|
|
153
|
+
out[0] = e0;
|
|
154
|
+
out[1] = e1;
|
|
155
|
+
|
|
156
|
+
return out;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
out[0] = (bb * ap - ab * bp) / determinant;
|
|
160
|
+
out[1] = (aa * bp - ab * ap) / determinant;
|
|
161
|
+
|
|
162
|
+
return out;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
fn astc_with_component(v: vec3<f32>, channel: u32, value: f32) -> vec3<f32> {
|
|
166
|
+
return vec3<f32>(
|
|
167
|
+
select(v.x, value, channel == 0u),
|
|
168
|
+
select(v.y, value, channel == 1u),
|
|
169
|
+
select(v.z, value, channel == 2u)
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
fn astc_encode_block_4x4_rgb(texels: array<vec3<f32>, 16>) -> vec4<u32> {
|
|
174
|
+
var scaled: array<vec3<f32>, 16>;
|
|
175
|
+
|
|
176
|
+
var low = vec3<f32>(255.0);
|
|
177
|
+
var high = vec3<f32>(0.0);
|
|
178
|
+
var mean = vec3<f32>(0.0);
|
|
179
|
+
|
|
180
|
+
for (var i = 0u; i < 16u; i++) {
|
|
181
|
+
let v = clamp(texels[i], vec3<f32>(0.0), vec3<f32>(1.0)) * 255.0;
|
|
182
|
+
|
|
183
|
+
scaled[i] = v;
|
|
184
|
+
low = min(low, v);
|
|
185
|
+
high = max(high, v);
|
|
186
|
+
mean += v;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
mean = mean / 16.0;
|
|
190
|
+
|
|
191
|
+
let extent = high - low;
|
|
192
|
+
|
|
193
|
+
var e0 = mean;
|
|
194
|
+
var e1 = mean;
|
|
195
|
+
|
|
196
|
+
if (max(extent.x, max(extent.y, extent.z)) >= 0.5) {
|
|
197
|
+
var cov = array<f32, 6>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
|
|
198
|
+
|
|
199
|
+
for (var i = 0u; i < 16u; i++) {
|
|
200
|
+
let d = scaled[i] - mean;
|
|
201
|
+
|
|
202
|
+
cov[0] += d.x * d.x;
|
|
203
|
+
cov[1] += d.x * d.y;
|
|
204
|
+
cov[2] += d.x * d.z;
|
|
205
|
+
cov[3] += d.y * d.y;
|
|
206
|
+
cov[4] += d.y * d.z;
|
|
207
|
+
cov[5] += d.z * d.z;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
var axis = extent;
|
|
211
|
+
|
|
212
|
+
for (var iteration = 0u; iteration < 4u; iteration++) {
|
|
213
|
+
let next = vec3<f32>(
|
|
214
|
+
cov[0] * axis.x + cov[1] * axis.y + cov[2] * axis.z,
|
|
215
|
+
cov[1] * axis.x + cov[3] * axis.y + cov[4] * axis.z,
|
|
216
|
+
cov[2] * axis.x + cov[4] * axis.y + cov[5] * axis.z
|
|
217
|
+
);
|
|
218
|
+
|
|
219
|
+
let magnitude = length(next);
|
|
220
|
+
|
|
221
|
+
if (magnitude < 1e-3) {
|
|
222
|
+
break;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
axis = next / magnitude;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
axis = normalize(axis);
|
|
229
|
+
|
|
230
|
+
var t_min = 1e30;
|
|
231
|
+
var t_max = -1e30;
|
|
232
|
+
|
|
233
|
+
for (var i = 0u; i < 16u; i++) {
|
|
234
|
+
let t = dot(scaled[i] - mean, axis);
|
|
235
|
+
|
|
236
|
+
t_min = min(t_min, t);
|
|
237
|
+
t_max = max(t_max, t);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
e0 = mean + axis * t_min;
|
|
241
|
+
e1 = mean + axis * t_max;
|
|
242
|
+
|
|
243
|
+
for (var round = 0u; round < 2u; round++) {
|
|
244
|
+
let refined = astc_refine(scaled, e0, e1);
|
|
245
|
+
|
|
246
|
+
e0 = clamp(refined[0], vec3<f32>(0.0), vec3<f32>(255.0));
|
|
247
|
+
e1 = clamp(refined[1], vec3<f32>(0.0), vec3<f32>(255.0));
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
var q0 = round(e0);
|
|
252
|
+
var q1 = round(e1);
|
|
253
|
+
|
|
254
|
+
var best = astc_score(scaled, q0, q1);
|
|
255
|
+
|
|
256
|
+
// coordinate descent over the six stored bytes, one round
|
|
257
|
+
for (var component = 0u; component < 6u; component++) {
|
|
258
|
+
let channel = component % 3u;
|
|
259
|
+
|
|
260
|
+
for (var direction = -1; direction <= 1; direction += 2) {
|
|
261
|
+
var c0 = q0;
|
|
262
|
+
var c1 = q1;
|
|
263
|
+
|
|
264
|
+
if (component < 3u) {
|
|
265
|
+
c0 = astc_with_component(q0, channel, clamp(q0[channel] + f32(direction), 0.0, 255.0));
|
|
266
|
+
} else {
|
|
267
|
+
c1 = astc_with_component(q1, channel, clamp(q1[channel] + f32(direction), 0.0, 255.0));
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
let error = astc_score(scaled, c0, c1);
|
|
271
|
+
|
|
272
|
+
if (error < best) {
|
|
273
|
+
best = error;
|
|
274
|
+
q0 = c0;
|
|
275
|
+
q1 = c1;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
var weights: array<u32, 16>;
|
|
281
|
+
|
|
282
|
+
for (var i = 0u; i < 16u; i++) {
|
|
283
|
+
weights[i] = u32(astc_nearest(q0, q1, scaled[i]).x);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
// mode 8's rule: with the second end's channel sum below the first's, a decoder swaps and
|
|
287
|
+
// blue-contracts, so such a pair is written the other way up with its weights inverted
|
|
288
|
+
if (q1.x + q1.y + q1.z < q0.x + q0.y + q0.z) {
|
|
289
|
+
let swap = q0;
|
|
290
|
+
|
|
291
|
+
q0 = q1;
|
|
292
|
+
q1 = swap;
|
|
293
|
+
|
|
294
|
+
for (var i = 0u; i < 16u; i++) {
|
|
295
|
+
weights[i] = 7u - weights[i];
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
var endpoints: array<u32, 6>;
|
|
300
|
+
|
|
301
|
+
endpoints[0] = u32(q0.x);
|
|
302
|
+
endpoints[1] = u32(q1.x);
|
|
303
|
+
endpoints[2] = u32(q0.y);
|
|
304
|
+
endpoints[3] = u32(q1.y);
|
|
305
|
+
endpoints[4] = u32(q0.z);
|
|
306
|
+
endpoints[5] = u32(q1.z);
|
|
307
|
+
|
|
308
|
+
return astc_pack_4x4_rgb(endpoints, weights);
|
|
309
|
+
}
|
|
310
|
+
`, [
|
|
311
|
+
chunk_astc_pack_4x4_rgb,
|
|
312
|
+
]);
|
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
* 3. **Quantisation, then a search in 5:6:5.** The rounded pair is a starting point and not an
|
|
19
19
|
* answer, because five- and six-bit ends are coarse enough that the best representable pair is
|
|
20
20
|
* not the rounding of the best real one — §9.11 measured that at up to 1.3 dB for the transcoder.
|
|
21
|
-
* So each of the six stored components is stepped up and down in turn,
|
|
22
|
-
*
|
|
23
|
-
* scores
|
|
21
|
+
* So each of the six stored components is stepped up and down in turn, keeping any step that
|
|
22
|
+
* lowers the block's error against the decoder's palette: one round of coordinate descent,
|
|
23
|
+
* twelve scores, no branch that depends on the content for how long it runs.
|
|
24
24
|
*
|
|
25
25
|
* A **flat block** is the case every table-driven encoder special-cases, because a single colour
|
|
26
26
|
* rounds to 5:6:5 with an error of up to four levels while a pair of ends whose one-third mix lands
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk_bc1_encode_block.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/texture/encode/chunk_bc1_encode_block.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,qCAFU,SAAS,
|
|
1
|
+
{"version":3,"file":"chunk_bc1_encode_block.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/texture/encode/chunk_bc1_encode_block.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,qCAFU,SAAS,CAsVZ;0BA9XmB,oCAAoC"}
|