@woosh/meep-engine 3.39.0 → 3.41.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/package.json +1 -1
- package/src/core/geom/3d/quaternion/swing_twist_clamp.d.ts +24 -0
- package/src/core/geom/3d/quaternion/swing_twist_clamp.d.ts.map +1 -0
- package/src/core/geom/3d/quaternion/swing_twist_clamp.js +62 -0
- package/src/core/geom/3d/quaternion/swing_twist_compose.d.ts +15 -0
- package/src/core/geom/3d/quaternion/swing_twist_compose.d.ts.map +1 -0
- package/src/core/geom/3d/quaternion/swing_twist_compose.js +36 -0
- package/src/core/geom/3d/quaternion/swing_twist_error.d.ts +39 -0
- package/src/core/geom/3d/quaternion/swing_twist_error.d.ts.map +1 -0
- package/src/core/geom/3d/quaternion/swing_twist_error.js +85 -0
- package/src/core/geom/vec3/v3_rigid_align_paired_unit_vectors.d.ts +11 -6
- package/src/core/geom/vec3/v3_rigid_align_paired_unit_vectors.d.ts.map +1 -1
- package/src/core/geom/vec3/v3_rigid_align_paired_unit_vectors.js +27 -13
- package/src/core/math/linalg/eigen/matrix_symmetric_4x4_eigen.d.ts +25 -0
- package/src/core/math/linalg/eigen/matrix_symmetric_4x4_eigen.d.ts.map +1 -0
- package/src/core/math/linalg/eigen/matrix_symmetric_4x4_eigen.js +166 -0
- package/src/core/math/linalg/eigen/matrix_top_eigenvector_power_iteration.d.ts +5 -3
- package/src/core/math/linalg/eigen/matrix_top_eigenvector_power_iteration.d.ts.map +1 -1
- package/src/core/math/linalg/eigen/matrix_top_eigenvector_power_iteration.js +5 -3
- package/src/engine/EngineHarness.d.ts.map +1 -1
- package/src/engine/EngineHarness.js +17 -4
- package/src/engine/animation/curve/AnimationCurve.d.ts +3 -0
- package/src/engine/animation/curve/AnimationCurve.d.ts.map +1 -1
- package/src/engine/animation/curve/AnimationCurve.js +6 -1
- package/src/engine/asset/loaders/image/avif/threaded_image_encoder.js +1 -1
- package/src/engine/ecs/EntityManager.d.ts +9 -1
- package/src/engine/ecs/EntityManager.d.ts.map +1 -1
- package/src/engine/ecs/EntityManager.js +26 -27
- package/src/engine/ecs/gpu/GPUStateAuthority.d.ts +20 -0
- package/src/engine/ecs/gpu/GPUStateAuthority.d.ts.map +1 -1
- package/src/engine/ecs/gpu/GPUStateAuthority.js +21 -0
- package/src/engine/ecs/gpu/GPU_AUTHORITY_EVENT_HOLD_CHANGE.d.ts +13 -0
- package/src/engine/ecs/gpu/GPU_AUTHORITY_EVENT_HOLD_CHANGE.d.ts.map +1 -0
- package/src/engine/ecs/gpu/GPU_AUTHORITY_EVENT_HOLD_CHANGE.js +12 -0
- package/src/engine/ecs/gpu/gpu_authority_grant.d.ts +6 -0
- package/src/engine/ecs/gpu/gpu_authority_grant.d.ts.map +1 -1
- package/src/engine/ecs/gpu/gpu_authority_grant.js +7 -1
- package/src/engine/ecs/gpu/gpu_authority_held.d.ts +14 -0
- package/src/engine/ecs/gpu/gpu_authority_held.d.ts.map +1 -0
- package/src/engine/ecs/gpu/gpu_authority_held.js +23 -0
- package/src/engine/ecs/gpu/gpu_authority_hold.d.ts +23 -0
- package/src/engine/ecs/gpu/gpu_authority_hold.d.ts.map +1 -0
- package/src/engine/ecs/gpu/gpu_authority_hold.js +41 -0
- package/src/engine/ecs/gpu/gpu_authority_unhold.d.ts +14 -0
- package/src/engine/ecs/gpu/gpu_authority_unhold.d.ts.map +1 -0
- package/src/engine/ecs/gpu/gpu_authority_unhold.js +32 -0
- package/src/engine/ecs/ik/IKGoal.d.ts +59 -0
- package/src/engine/ecs/ik/IKGoal.d.ts.map +1 -0
- package/src/engine/ecs/ik/IKGoal.js +83 -0
- package/src/engine/ecs/ik/IKGoalSystem.d.ts +75 -0
- package/src/engine/ecs/ik/IKGoalSystem.d.ts.map +1 -0
- package/src/engine/ecs/ik/IKGoalSystem.js +1456 -0
- package/src/engine/ecs/ik/PLAN.md +179 -0
- package/src/engine/ecs/speaker/VoiceSystem.d.ts +2 -2
- package/src/engine/ecs/speaker/VoiceSystem.d.ts.map +1 -1
- package/src/engine/ecs/storage/BinaryBufferSerializer.d.ts.map +1 -1
- package/src/engine/ecs/storage/BinaryBufferSerializer.js +4 -5
- package/src/engine/ecs/storage/binary/SERIALIZATION_COVERAGE.md +7 -3
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +5 -2
- package/src/engine/ecs/system/orderSystemsByDeclaredAccess.d.ts +33 -0
- package/src/engine/ecs/system/orderSystemsByDeclaredAccess.d.ts.map +1 -0
- package/src/engine/ecs/system/orderSystemsByDeclaredAccess.js +282 -0
- package/src/engine/ecs/transform/T64WorldCache.js +139 -139
- package/src/engine/ecs/transform/t64_evaluate_local.d.ts +25 -0
- package/src/engine/ecs/transform/t64_evaluate_local.d.ts.map +1 -0
- package/src/engine/ecs/transform/t64_evaluate_local.js +35 -0
- package/src/engine/ecs/transform/t64_evaluate_world.d.ts +5 -3
- package/src/engine/ecs/transform/t64_evaluate_world.d.ts.map +1 -1
- package/src/engine/ecs/transform/t64_evaluate_world.js +128 -126
- package/src/engine/graphics/ecs/water/Water.d.ts +14 -17
- package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/Water.js +100 -110
- package/src/engine/graphics/ecs/water/WaterSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/WaterSerializationAdapter.js +36 -38
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_3_4.d.ts +6 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_3_4.d.ts.map +1 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_3_4.js +10 -0
- package/src/engine/graphics/ecs/water/WaterWaves.d.ts +3 -3
- package/src/engine/graphics/ecs/water/WaterWaves.js +46 -46
- package/src/engine/graphics/texture/sampler/sampler2d_to_avif.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/sampler2d_to_avif.js +8 -5
- package/src/engine/graphics3/AnimationGraphSystem.d.ts +2 -0
- package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationGraphSystem.js +337 -329
- package/src/engine/graphics3/AnimationSystem.d.ts +2 -0
- package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationSystem.js +360 -352
- package/src/engine/graphics3/WaterSystem.d.ts +21 -74
- package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/WaterSystem.js +174 -367
- package/src/engine/physics/cloth/MEASUREMENTS.md +130 -0
- package/src/engine/physics/cloth/PLAN.md +16 -1
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts +5 -6
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.js +5 -6
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +4 -7
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothInstance.js +4 -7
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts +4 -3
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothSystem.js +4 -3
- package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothWorld.js +10 -0
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts +24 -24
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.js +46 -43
- package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts +1 -1
- package/src/engine/physics/cloth/ecs/cloth_write_back.js +1 -1
- package/src/engine/physics/constraint/solve_constraints.d.ts +0 -35
- package/src/engine/physics/constraint/solve_constraints.d.ts.map +1 -1
- package/src/engine/physics/constraint/solve_constraints.js +1 -83
- package/src/engine/physics/ecs/ContactProbe.d.ts +73 -0
- package/src/engine/physics/ecs/ContactProbe.d.ts.map +1 -0
- package/src/engine/physics/ecs/ContactProbe.js +103 -0
- package/src/engine/physics/ecs/ContactProbeSystem.d.ts +44 -0
- package/src/engine/physics/ecs/ContactProbeSystem.d.ts.map +1 -0
- package/src/engine/physics/ecs/ContactProbeSystem.js +397 -0
- package/src/engine/physics/fluid/ecs/FluidComponent.d.ts +1 -1
- package/src/engine/physics/fluid/ecs/FluidComponent.js +1 -1
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/engine/physics/inverse_kinematics/frame_fabrik/FrameFabrikProblem.d.ts +205 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/FrameFabrikProblem.d.ts.map +1 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/FrameFabrikProblem.js +245 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_limit_from_joint.d.ts +21 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_limit_from_joint.d.ts.map +1 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_limit_from_joint.js +63 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.d.ts +33 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.d.ts.map +1 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.js +874 -0
- package/src/engine/physics/inverse_kinematics/joint_hinge_mid_axis.d.ts +27 -0
- package/src/engine/physics/inverse_kinematics/joint_hinge_mid_axis.d.ts.map +1 -0
- package/src/engine/physics/inverse_kinematics/joint_hinge_mid_axis.js +77 -0
- package/src/engine/physics/inverse_kinematics/two_bone_path_solve.d.ts +36 -0
- package/src/engine/physics/inverse_kinematics/two_bone_path_solve.d.ts.map +1 -0
- package/src/engine/physics/inverse_kinematics/two_bone_path_solve.js +97 -0
- package/src/engine/physics/inverse_kinematics/two_joint_ik.d.ts +33 -11
- package/src/engine/physics/inverse_kinematics/two_joint_ik.d.ts.map +1 -1
- package/src/engine/physics/inverse_kinematics/two_joint_ik.js +158 -67
- package/src/format/image/avif/api/convert_to_rgba.d.ts +2 -2
- package/src/format/image/avif/api/convert_to_rgba.d.ts.map +1 -1
- package/src/format/image/avif/api/convert_to_rgba.js +10 -9
- package/src/format/image/avif/api/decode_avif.d.ts +2 -2
- package/src/format/image/avif/api/decode_avif.d.ts.map +1 -1
- package/src/format/image/avif/api/decode_avif.js +1 -1
- package/src/shade/playground/ssr_reprojection/README.md +111 -103
- package/src/shade/playground/ssr_reprojection/SpatialFilterProbe.js +68 -68
- package/src/shade/playground/ssr_reprojection/index.html +80 -79
- package/src/shade/playground/ssr_reprojection/main.js +256 -247
- package/src/shade/playground/ssr_variance/capture.js +96 -96
- package/src/shade/playground/ssr_variance/reference.js +78 -78
- package/src/shade/playground/vsm/README.md +96 -0
- package/src/shade/playground/vsm/VSMDebugOverlay.d.ts +49 -0
- package/src/shade/playground/vsm/VSMDebugOverlay.d.ts.map +1 -0
- package/src/shade/playground/vsm/VSMDebugOverlay.js +351 -0
- package/src/shade/playground/vsm/clipmap_panel.d.ts +8 -0
- package/src/shade/playground/vsm/clipmap_panel.d.ts.map +1 -0
- package/src/shade/playground/vsm/clipmap_panel.js +138 -0
- package/src/shade/playground/vsm/index.html +170 -0
- package/src/shade/playground/vsm/main.d.ts +2 -0
- package/src/shade/playground/vsm/main.d.ts.map +1 -0
- package/src/shade/playground/vsm/main.js +389 -0
- package/src/shade/playground/vsm/scenes.d.ts +52 -0
- package/src/shade/playground/vsm/scenes.d.ts.map +1 -0
- package/src/shade/playground/vsm/scenes.js +320 -0
- package/src/shade/playground/vsm/verify_vsm.d.ts +38 -0
- package/src/shade/playground/vsm/verify_vsm.d.ts.map +1 -0
- package/src/shade/playground/vsm/verify_vsm.js +305 -0
- package/src/shade/playground/water_refraction/README.md +57 -9
- package/src/shade/playground/water_refraction/main.js +12 -3
- package/src/shade/playground/water_refraction/world.d.ts +1 -0
- package/src/shade/playground/water_refraction/world.d.ts.map +1 -1
- package/src/shade/playground/water_refraction/world.js +15 -5
- package/src/shade/renderer/Renderer.d.ts +19 -0
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +72 -1
- package/src/shade/renderer/animation/ANIMATION_TRACK_BINDING_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/animation/ANIMATION_TRACK_BINDING_STRUCT.js +10 -1
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts +18 -4
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.js +269 -23
- package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts +12 -4
- package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts.map +1 -1
- package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.js +12 -4
- package/src/shade/renderer/animation/chunk_pose_accumulator.d.ts.map +1 -1
- package/src/shade/renderer/animation/chunk_pose_accumulator.js +14 -1
- package/src/shade/renderer/animation/pose/PoseChannelIndex.d.ts +78 -0
- package/src/shade/renderer/animation/pose/PoseChannelIndex.d.ts.map +1 -0
- package/src/shade/renderer/animation/pose/PoseChannelIndex.js +274 -0
- package/src/shade/renderer/animation/pose/PosePlayback.d.ts +40 -3
- package/src/shade/renderer/animation/pose/PosePlayback.d.ts.map +1 -1
- package/src/shade/renderer/animation/pose/PosePlayback.js +77 -3
- package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts +21 -3
- package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts.map +1 -1
- package/src/shade/renderer/animation/pose/pose_evaluate_local.js +79 -11
- package/src/shade/renderer/animation/shader_animation_apply.js +1 -1
- package/src/shade/renderer/animation/shader_animation_pose_resolve.d.ts +3 -2
- package/src/shade/renderer/animation/shader_animation_pose_resolve.d.ts.map +1 -1
- package/src/shade/renderer/animation/shader_animation_pose_resolve.js +187 -176
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts +7 -0
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +11 -0
- package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.d.ts +3 -1
- package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.js +10 -1
- package/src/shade/renderer/buffer/table/serde/table_wgsl_gen_read_code.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/serde/table_wgsl_gen_read_code.js +28 -0
- package/src/shade/renderer/buffer/table/serde/table_wgsl_gen_write_code.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/serde/table_wgsl_gen_write_code.js +31 -1
- package/src/shade/renderer/geometry/MeshletGeometry.d.ts +3 -0
- package/src/shade/renderer/geometry/MeshletGeometry.d.ts.map +1 -1
- package/src/shade/renderer/geometry/MeshletGeometry.js +1 -0
- package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.d.ts.map +1 -1
- package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.js +62 -4
- package/src/shade/renderer/light/environment/rgbe/parse_rgbe.d.ts +1 -1
- package/src/shade/renderer/light/environment/rgbe/parse_rgbe.js +2 -2
- package/src/shade/renderer/light/environment/rgbe/rgbe_byte_to_rgb_half.d.ts +2 -2
- package/src/shade/renderer/light/environment/rgbe/rgbe_byte_to_rgb_half.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/rgbe/rgbe_byte_to_rgb_half.js +6 -14
- package/src/shade/renderer/light/environment/sh_exponential/chunk_sh_exp_workgroup_sum.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/sh_exponential/chunk_sh_exp_workgroup_sum.js +5 -1
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/medium/ParticipatingMedium.d.ts +3 -0
- package/src/shade/renderer/medium/ParticipatingMedium.d.ts.map +1 -1
- package/src/shade/renderer/medium/ParticipatingMedium.js +7 -0
- package/src/shade/renderer/object_property/chunk_write_object_property.d.ts +3 -1
- package/src/shade/renderer/object_property/chunk_write_object_property.d.ts.map +1 -1
- package/src/shade/renderer/object_property/chunk_write_object_property.js +5 -2
- package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts +4 -0
- package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts.map +1 -1
- package/src/shade/renderer/object_property/chunk_write_object_property_node3d.js +6 -1
- package/src/shade/renderer/postprocess/eye/shader_autoexposure_build_histogram.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/eye/shader_autoexposure_build_histogram.js +5 -35
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/postprocess/ssr/SSR.d.ts +12 -4
- package/src/shade/renderer/postprocess/ssr/SSR.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/SSR.js +36 -8
- package/src/shade/renderer/postprocess/ssr/SSR_DENOISE_TILE_SIZE.d.ts +3 -0
- package/src/shade/renderer/postprocess/ssr/SSR_DENOISE_TILE_SIZE.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/ssr/SSR_DENOISE_TILE_SIZE.js +2 -0
- package/src/shade/renderer/postprocess/ssr/chunk_ssr_denoise_tile_active.d.ts +8 -0
- package/src/shade/renderer/postprocess/ssr/chunk_ssr_denoise_tile_active.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/ssr/chunk_ssr_denoise_tile_active.js +40 -0
- package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.js +150 -137
- package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_classify.d.ts +3 -0
- package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_classify.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_classify.js +44 -0
- package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_dilate.d.ts +5 -0
- package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_dilate.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_dilate.js +35 -0
- package/src/shade/renderer/postprocess/ssr/ssr_graph_denoise_tiles.d.ts +26 -0
- package/src/shade/renderer/postprocess/ssr/ssr_graph_denoise_tiles.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/ssr/ssr_graph_denoise_tiles.js +42 -0
- package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.d.ts +1 -0
- package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.js +113 -105
- package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts +2 -0
- package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.js +177 -167
- package/src/shade/renderer/rasterize/DEPTH_STENCIL_STATE_SHADOW.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/DEPTH_STENCIL_STATE_SHADOW.js +10 -0
- package/src/shade/renderer/rasterize/RasterizationJob.d.ts +1 -2
- package/src/shade/renderer/rasterize/RasterizationJob.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/RasterizationJob.js +1 -2
- package/src/shade/renderer/rasterize/bucket/construct_primitive_state.d.ts +5 -6
- package/src/shade/renderer/rasterize/bucket/construct_primitive_state.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/construct_primitive_state.js +5 -6
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +2 -2
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +1 -1
- package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.d.ts.map +1 -1
- package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.js +11 -0
- package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.d.ts +1 -1
- package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.js +135 -73
- package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.d.ts +7 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.js +29 -1
- package/src/shade/renderer/scene/optimization/geometry/internal/face_neighbourhood_hash.d.ts +19 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/face_neighbourhood_hash.d.ts.map +1 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/face_neighbourhood_hash.js +167 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/neighbourhood_anchor_index.d.ts +25 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/neighbourhood_anchor_index.d.ts.map +1 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/neighbourhood_anchor_index.js +124 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/seed_correspondence_from_face_pair.d.ts +19 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/seed_correspondence_from_face_pair.d.ts.map +1 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/seed_correspondence_from_face_pair.js +48 -0
- package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts +17 -1
- package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -1
- package/src/shade/renderer/scene/rows/GPUSceneRows.js +29 -3
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/build_lut_fog_parameters_jendersie_deon.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/build_lut_fog_parameters_jendersie_deon.js +4 -5
- package/src/shade/renderer/shader/chunk/brdf/dfg/generate_dfg_texture.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/brdf/dfg/generate_dfg_texture.js +1 -5
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_importance.d.ts +30 -0
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_importance.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_importance.js +54 -0
- package/src/shade/renderer/shader/type/serde/read_gpu_typed_buffer.d.ts.map +1 -1
- package/src/shade/renderer/shader/type/serde/read_gpu_typed_buffer.js +3 -2
- package/src/shade/renderer/shadow/map/DIRECTIONAL_SHADOWMAP_STRUCT.d.ts +19 -0
- package/src/shade/renderer/shadow/map/DIRECTIONAL_SHADOWMAP_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/DIRECTIONAL_SHADOWMAP_STRUCT.js +27 -0
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts +1 -0
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.js +4 -0
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +54 -0
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +502 -10
- package/src/shade/renderer/shadow/map/Shadowmap.d.ts +3 -2
- package/src/shade/renderer/shadow/map/Shadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/Shadowmap.js +3 -2
- package/src/shade/renderer/shadow/map/shader/chunk_sample_shadowmap_atlas_for_light.d.ts +8 -0
- package/src/shade/renderer/shadow/map/shader/chunk_sample_shadowmap_atlas_for_light.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/shader/chunk_sample_shadowmap_atlas_for_light.js +34 -3
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.d.ts +3 -2
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.js +17 -2
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_point2.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_point2.js +137 -133
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_FIRST_TEXEL_SIZE.d.ts +15 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_FIRST_TEXEL_SIZE.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_FIRST_TEXEL_SIZE.js +14 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_PAGE_BUDGET.d.ts +16 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_PAGE_BUDGET.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_PAGE_BUDGET.js +15 -0
- package/src/shade/renderer/shadow/vsm/PLAN.md +440 -0
- package/src/shade/renderer/shadow/vsm/REVIEW_LEDGER.md +43 -0
- package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts +42 -0
- package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSMMoverTracker.js +153 -0
- package/src/shade/renderer/shadow/vsm/VSMPageManager.d.ts +327 -0
- package/src/shade/renderer/shadow/vsm/VSMPageManager.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSMPageManager.js +1408 -0
- package/src/shade/renderer/shadow/vsm/VSM_COVER_LEVEL_STEP.d.ts +14 -0
- package/src/shade/renderer/shadow/vsm/VSM_COVER_LEVEL_STEP.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSM_COVER_LEVEL_STEP.js +13 -0
- package/src/shade/renderer/shadow/vsm/VSM_FEEDBACK_LAYOUT.d.ts +63 -0
- package/src/shade/renderer/shadow/vsm/VSM_FEEDBACK_LAYOUT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSM_FEEDBACK_LAYOUT.js +70 -0
- package/src/shade/renderer/shadow/vsm/VSM_LEVEL_LIMIT.d.ts +11 -0
- package/src/shade/renderer/shadow/vsm/VSM_LEVEL_LIMIT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSM_LEVEL_LIMIT.js +10 -0
- package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts +54 -0
- package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.js +75 -0
- package/src/shade/renderer/shadow/vsm/VSM_RECORD_STRUCT.d.ts +23 -0
- package/src/shade/renderer/shadow/vsm/VSM_RECORD_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSM_RECORD_STRUCT.js +85 -0
- package/src/shade/renderer/shadow/vsm/VSM_SLOT_STRUCT.d.ts +16 -0
- package/src/shade/renderer/shadow/vsm/VSM_SLOT_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSM_SLOT_STRUCT.js +29 -0
- package/src/shade/renderer/shadow/vsm/VirtualShadowMap.d.ts +136 -25
- package/src/shade/renderer/shadow/vsm/VirtualShadowMap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/VirtualShadowMap.js +282 -116
- package/src/shade/renderer/shadow/vsm/graph_vsm_feedback.d.ts +39 -0
- package/src/shade/renderer/shadow/vsm/graph_vsm_feedback.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/graph_vsm_feedback.js +289 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_virtual.d.ts +18 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_virtual.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_virtual.js +65 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_addressing.d.ts +17 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_addressing.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_addressing.js +75 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts +14 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.js +45 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_find_page.d.ts +17 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_find_page.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_find_page.js +100 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_page_view_projection.d.ts +15 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_page_view_projection.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_page_view_projection.js +47 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_demand.d.ts +26 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_demand.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_demand.js +156 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_gather_counts.d.ts +13 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_gather_counts.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_gather_counts.js +65 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts +30 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.js +184 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts +23 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.js +109 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_stale.d.ts +56 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_stale.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_stale.js +211 -0
- package/src/shade/renderer/texture/format/decode_typed_gpu_data.d.ts +1 -1
- package/src/shade/renderer/texture/format/decode_typed_gpu_data.d.ts.map +1 -1
- package/src/shade/renderer/texture/format/decode_typed_gpu_data.js +3 -13
- package/src/shade/renderer/texture/format/infer_format_from_parameters.d.ts.map +1 -1
- package/src/shade/renderer/texture/format/infer_format_from_parameters.js +2 -3
- package/src/shade/renderer/texture/texture_write_to_gpu.d.ts.map +1 -1
- package/src/shade/renderer/texture/texture_write_to_gpu.js +16 -16
- package/src/shade/renderer/texture/virtual/VTPhysicalCache.d.ts +4 -90
- package/src/shade/renderer/texture/virtual/VTPhysicalCache.d.ts.map +1 -1
- package/src/shade/renderer/texture/virtual/VTPhysicalCache.js +6 -210
- package/src/shade/renderer/texture/virtual/VTPhysicalSlots.d.ts +119 -0
- package/src/shade/renderer/texture/virtual/VTPhysicalSlots.d.ts.map +1 -0
- package/src/shade/renderer/texture/virtual/VTPhysicalSlots.js +245 -0
- package/src/shade/renderer/texture/virtual/build_chunk_vt_lookup.d.ts +1 -1
- package/src/shade/renderer/texture/virtual/build_chunk_vt_lookup.d.ts.map +1 -1
- package/src/shade/renderer/texture/virtual/build_chunk_vt_lookup.js +3 -19
- package/src/shade/renderer/texture/virtual/chunk_vt_page_table_entry.d.ts +13 -0
- package/src/shade/renderer/texture/virtual/chunk_vt_page_table_entry.d.ts.map +1 -0
- package/src/shade/renderer/texture/virtual/chunk_vt_page_table_entry.js +34 -0
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts +7 -2
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +49 -49
- package/src/shade/renderer/water/chunk_water_transport.js +3 -3
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts +11 -25
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +1 -1
- package/src/shade/renderer/water/medium/GPUWaterBodies.js +64 -116
- package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.d.ts +1 -20
- package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.js +10 -42
- package/src/shade/renderer/water/medium/chunk_water_bodies.d.ts +3 -0
- package/src/shade/renderer/water/medium/chunk_water_bodies.d.ts.map +1 -0
- package/src/shade/renderer/water/medium/chunk_water_bodies.js +3 -0
- package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts +1 -5
- package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts.map +1 -1
- package/src/shade/renderer/water/medium/shader_water_bodies_derive.js +32 -30
- package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts +4 -0
- package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts.map +1 -0
- package/src/shade/renderer/water/medium/shader_water_meshlets.js +69 -0
- package/src/shade/renderer/water/optics/chunk_water_inscatter.d.ts.map +1 -1
- package/src/shade/renderer/water/optics/chunk_water_inscatter.js +124 -123
- 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 +75 -74
- package/src/shade/renderer/water/shader_water.d.ts +1 -1
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +490 -406
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts +12 -85
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.js +128 -408
- package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts +6 -0
- package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.js +23 -0
- package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts +9 -0
- package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/chunk_water_tessellation.js +144 -0
- package/src/shade/renderer/water/surface/chunk_water_wave.d.ts +3 -5
- package/src/shade/renderer/water/surface/chunk_water_wave.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/chunk_water_wave.js +40 -48
- package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts +14 -0
- package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/graph_water_tessellation.js +34 -0
- package/src/shade/renderer/water/surface/shader_water_tiles.d.ts +4 -0
- package/src/shade/renderer/water/surface/shader_water_tiles.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/shader_water_tiles.js +123 -0
- package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts +6 -0
- package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/shader_water_wave_batch.js +85 -0
- package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts +6 -0
- package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/shader_water_wave_domain.js +83 -0
- package/src/shade/renderer/water/water_height_texture_from_sampler.d.ts.map +1 -1
- package/src/shade/renderer/water/water_height_texture_from_sampler.js +4 -3
- package/src/engine/ecs/ik/IKConstraint.d.ts +0 -52
- package/src/engine/ecs/ik/IKConstraint.d.ts.map +0 -1
- package/src/engine/ecs/ik/IKConstraint.js +0 -95
- package/src/engine/ecs/ik/IKProblem.d.ts +0 -45
- package/src/engine/ecs/ik/IKProblem.d.ts.map +0 -1
- package/src/engine/ecs/ik/IKProblem.js +0 -58
- package/src/engine/ecs/ik/IKSolver.d.ts +0 -8
- package/src/engine/ecs/ik/IKSolver.d.ts.map +0 -1
- package/src/engine/ecs/ik/IKSolver.js +0 -9
- package/src/engine/ecs/ik/InverseKinematics.d.ts +0 -48
- package/src/engine/ecs/ik/InverseKinematics.d.ts.map +0 -1
- package/src/engine/ecs/ik/InverseKinematics.js +0 -119
- package/src/engine/ecs/ik/InverseKinematicsSerializationAdapter.d.ts +0 -19
- package/src/engine/ecs/ik/InverseKinematicsSerializationAdapter.d.ts.map +0 -1
- package/src/engine/ecs/ik/InverseKinematicsSerializationAdapter.js +0 -72
- package/src/engine/ecs/ik/InverseKinematicsSystem.d.ts +0 -54
- package/src/engine/ecs/ik/InverseKinematicsSystem.d.ts.map +0 -1
- package/src/engine/ecs/ik/InverseKinematicsSystem.js +0 -212
- package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.d.ts +0 -8
- package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.d.ts.map +0 -1
- package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.js +0 -153
- package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.d.ts +0 -5
- package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.d.ts.map +0 -1
- package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.js +0 -120
- package/src/engine/ecs/ik/ik_bone_chain.d.ts +0 -64
- package/src/engine/ecs/ik/ik_bone_chain.d.ts.map +0 -1
- package/src/engine/ecs/ik/ik_bone_chain.js +0 -142
- package/src/engine/ecs/ik/ik_probe_terrain_contact.d.ts +0 -42
- package/src/engine/ecs/ik/ik_probe_terrain_contact.d.ts.map +0 -1
- package/src/engine/ecs/ik/ik_probe_terrain_contact.js +0 -123
- package/src/engine/ecs/ik/ik_write_local_rotation.d.ts +0 -18
- package/src/engine/ecs/ik/ik_write_local_rotation.d.ts.map +0 -1
- package/src/engine/ecs/ik/ik_write_local_rotation.js +0 -32
- package/src/engine/graphics/ecs/water/WATER_SIZE.d.ts +0 -2
- package/src/engine/graphics/ecs/water/WATER_SIZE.d.ts.map +0 -1
- package/src/engine/graphics/ecs/water/WATER_SIZE.js +0 -1
- package/src/shade/renderer/light/GPUViewLightContext.d.ts +0 -22
- package/src/shade/renderer/light/GPUViewLightContext.d.ts.map +0 -1
- package/src/shade/renderer/light/GPUViewLightContext.js +0 -62
- package/src/shade/renderer/shadow/map/csm/CSM_SHADOWMAP_STRUCT.d.ts +0 -14
- package/src/shade/renderer/shadow/map/csm/CSM_SHADOWMAP_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/shadow/map/csm/CSM_SHADOWMAP_STRUCT.js +0 -20
- package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.d.ts +0 -27
- package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.js +0 -147
- package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.d.ts +0 -7
- package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.js +0 -10
- package/src/shade/renderer/shadow/vsm/VSM_RESIDENCE_WORKGROUP_TILE_RESOLUTION.d.ts +0 -2
- package/src/shade/renderer/shadow/vsm/VSM_RESIDENCE_WORKGROUP_TILE_RESOLUTION.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/VSM_RESIDENCE_WORKGROUP_TILE_RESOLUTION.js +0 -1
- package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.d.ts +0 -3
- package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.js +0 -8
- package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.d.ts +0 -27
- package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.js +0 -102
- package/src/shade/renderer/shadow/vsm/debug_inspect_coarse_bounds_buffer.d.ts +0 -8
- package/src/shade/renderer/shadow/vsm/debug_inspect_coarse_bounds_buffer.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/debug_inspect_coarse_bounds_buffer.js +0 -34
- package/src/shade/renderer/shadow/vsm/debug_inspect_residence_buffer.d.ts +0 -10
- package/src/shade/renderer/shadow/vsm/debug_inspect_residence_buffer.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/debug_inspect_residence_buffer.js +0 -64
- package/src/shade/renderer/shadow/vsm/decode_tile_address.d.ts +0 -11
- package/src/shade/renderer/shadow/vsm/decode_tile_address.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/decode_tile_address.js +0 -26
- package/src/shade/renderer/shadow/vsm/render/vms_render_tiles.d.ts +0 -2
- package/src/shade/renderer/shadow/vsm/render/vms_render_tiles.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/render/vms_render_tiles.js +0 -11
- package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.d.ts +0 -20
- package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.js +0 -184
- package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.d.ts +0 -25
- package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.js +0 -230
- package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.d.ts +0 -19
- package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.js +0 -127
- package/src/shade/renderer/texture/encode/ENCODE_NOTES_2026_09_02.md +0 -462
- package/src/shade/renderer/water/optics/chunk_water_light_transmittance.d.ts +0 -23
- package/src/shade/renderer/water/optics/chunk_water_light_transmittance.d.ts.map +0 -1
- package/src/shade/renderer/water/optics/chunk_water_light_transmittance_dry.d.ts +0 -18
- package/src/shade/renderer/water/optics/chunk_water_light_transmittance_dry.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/WATER_SURFACE_VERTEX_STRUCT.d.ts +0 -12
- package/src/shade/renderer/water/surface/WATER_SURFACE_VERTEX_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/WATER_SURFACE_VERTEX_STRUCT.js +0 -27
- package/src/shade/renderer/water/surface/WATER_WAVE_PARAMETERS_STRUCT.d.ts +0 -14
- package/src/shade/renderer/water/surface/WATER_WAVE_PARAMETERS_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/WATER_WAVE_PARAMETERS_STRUCT.js +0 -49
- package/src/shade/renderer/water/surface/chunk_water_wave_grid.d.ts +0 -9
- package/src/shade/renderer/water/surface/chunk_water_wave_grid.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/chunk_water_wave_grid.js +0 -47
- package/src/shade/renderer/water/surface/shader_water_surface_write.d.ts +0 -10
- package/src/shade/renderer/water/surface/shader_water_surface_write.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/shader_water_surface_write.js +0 -51
- package/src/shade/renderer/water/surface/shader_water_wave_step.d.ts +0 -12
- package/src/shade/renderer/water/surface/shader_water_wave_step.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/shader_water_wave_step.js +0 -54
- package/src/shade/renderer/water/surface/water_surface_grid_indices.d.ts +0 -13
- package/src/shade/renderer/water/surface/water_surface_grid_indices.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/water_surface_grid_indices.js +0 -39
package/package.json
CHANGED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project a rotation into a box of swing-twist limits: the twist about X and the swing over Y and Z,
|
|
3
|
+
* as {@link swing_twist_error_array} measures them, each clamped to its own `[lower, upper]`.
|
|
4
|
+
*
|
|
5
|
+
* This is the box a physics `Joint` with `swingTwist` on allows: the joint solver limits each of
|
|
6
|
+
* the three positions separately, so Y and Z swing are a box and not a cone. A rotation already
|
|
7
|
+
* inside is written back unchanged, bit for bit; one outside is composed again from the clamped
|
|
8
|
+
* positions ({@link swing_twist_compose_array}).
|
|
9
|
+
*
|
|
10
|
+
* An axis that is not limited takes `-Infinity` / `Infinity`; a locked one takes `0` / `0`.
|
|
11
|
+
*
|
|
12
|
+
* `out` may be `q`.
|
|
13
|
+
*
|
|
14
|
+
* @param {Float64Array} out
|
|
15
|
+
* @param {number} out_offset receives `[x, y, z, w]`
|
|
16
|
+
* @param {Float64Array} q
|
|
17
|
+
* @param {number} q_offset `[x, y, z, w]`, unit
|
|
18
|
+
* @param {Float64Array} lower
|
|
19
|
+
* @param {Float64Array} upper
|
|
20
|
+
* @param {number} limit_offset `[twist, swing y, swing z]` in `lower` and `upper`, radians
|
|
21
|
+
* @returns {boolean} whether any position was outside its limits
|
|
22
|
+
*/
|
|
23
|
+
export function swing_twist_clamp_array(out: Float64Array, out_offset: number, q: Float64Array, q_offset: number, lower: Float64Array, upper: Float64Array, limit_offset: number): boolean;
|
|
24
|
+
//# sourceMappingURL=swing_twist_clamp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swing_twist_clamp.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/quaternion/swing_twist_clamp.js"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,6CATW,YAAY,cACZ,MAAM,KACN,YAAY,YACZ,MAAM,SACN,YAAY,SACZ,YAAY,gBACZ,MAAM,GACJ,OAAO,CAgCnB"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { swing_twist_compose_array } from "./swing_twist_compose.js";
|
|
2
|
+
import { swing_twist_error_array } from "./swing_twist_error.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* The three swing-twist positions, measured and then clamped.
|
|
6
|
+
* @type {Float64Array}
|
|
7
|
+
*/
|
|
8
|
+
const e = new Float64Array(3);
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Project a rotation into a box of swing-twist limits: the twist about X and the swing over Y and Z,
|
|
12
|
+
* as {@link swing_twist_error_array} measures them, each clamped to its own `[lower, upper]`.
|
|
13
|
+
*
|
|
14
|
+
* This is the box a physics `Joint` with `swingTwist` on allows: the joint solver limits each of
|
|
15
|
+
* the three positions separately, so Y and Z swing are a box and not a cone. A rotation already
|
|
16
|
+
* inside is written back unchanged, bit for bit; one outside is composed again from the clamped
|
|
17
|
+
* positions ({@link swing_twist_compose_array}).
|
|
18
|
+
*
|
|
19
|
+
* An axis that is not limited takes `-Infinity` / `Infinity`; a locked one takes `0` / `0`.
|
|
20
|
+
*
|
|
21
|
+
* `out` may be `q`.
|
|
22
|
+
*
|
|
23
|
+
* @param {Float64Array} out
|
|
24
|
+
* @param {number} out_offset receives `[x, y, z, w]`
|
|
25
|
+
* @param {Float64Array} q
|
|
26
|
+
* @param {number} q_offset `[x, y, z, w]`, unit
|
|
27
|
+
* @param {Float64Array} lower
|
|
28
|
+
* @param {Float64Array} upper
|
|
29
|
+
* @param {number} limit_offset `[twist, swing y, swing z]` in `lower` and `upper`, radians
|
|
30
|
+
* @returns {boolean} whether any position was outside its limits
|
|
31
|
+
*/
|
|
32
|
+
export function swing_twist_clamp_array(out, out_offset, q, q_offset, lower, upper, limit_offset) {
|
|
33
|
+
swing_twist_error_array(q, q_offset, e);
|
|
34
|
+
|
|
35
|
+
let clamped = false;
|
|
36
|
+
|
|
37
|
+
for (let k = 0; k < 3; k++) {
|
|
38
|
+
const lo = lower[limit_offset + k];
|
|
39
|
+
const hi = upper[limit_offset + k];
|
|
40
|
+
|
|
41
|
+
const value = e[k];
|
|
42
|
+
|
|
43
|
+
if (value < lo) {
|
|
44
|
+
e[k] = lo;
|
|
45
|
+
clamped = true;
|
|
46
|
+
} else if (value > hi) {
|
|
47
|
+
e[k] = hi;
|
|
48
|
+
clamped = true;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (clamped) {
|
|
53
|
+
swing_twist_compose_array(out, out_offset, e, 0);
|
|
54
|
+
} else if (out !== q || out_offset !== q_offset) {
|
|
55
|
+
out[out_offset] = q[q_offset];
|
|
56
|
+
out[out_offset + 1] = q[q_offset + 1];
|
|
57
|
+
out[out_offset + 2] = q[q_offset + 2];
|
|
58
|
+
out[out_offset + 3] = q[q_offset + 3];
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return clamped;
|
|
62
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The rotation whose swing-twist positions are `e[e_offset ..+2]`: the inverse of
|
|
3
|
+
* {@link swing_twist_error_array}.
|
|
4
|
+
*
|
|
5
|
+
* `e[0]` is the twist about X, `e[1]`, `e[2]` the swing as `φ·axis` over Y and Z, and the rotation is
|
|
6
|
+
* `swing ⊗ twist`. Composed back from what {@link swing_twist_error_array} measured, it is the
|
|
7
|
+
* measured rotation, on the hemisphere with `w ≥ 0`.
|
|
8
|
+
*
|
|
9
|
+
* @param {Float64Array} out
|
|
10
|
+
* @param {number} out_offset receives `[x, y, z, w]`
|
|
11
|
+
* @param {Float64Array} e
|
|
12
|
+
* @param {number} e_offset `[twist, swing y, swing z]`, radians
|
|
13
|
+
*/
|
|
14
|
+
export function swing_twist_compose_array(out: Float64Array, out_offset: number, e: Float64Array, e_offset: number): void;
|
|
15
|
+
//# sourceMappingURL=swing_twist_compose.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swing_twist_compose.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/quaternion/swing_twist_compose.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,+CALW,YAAY,cACZ,MAAM,KACN,YAAY,YACZ,MAAM,QAwBhB"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The rotation whose swing-twist positions are `e[e_offset ..+2]`: the inverse of
|
|
3
|
+
* {@link swing_twist_error_array}.
|
|
4
|
+
*
|
|
5
|
+
* `e[0]` is the twist about X, `e[1]`, `e[2]` the swing as `φ·axis` over Y and Z, and the rotation is
|
|
6
|
+
* `swing ⊗ twist`. Composed back from what {@link swing_twist_error_array} measured, it is the
|
|
7
|
+
* measured rotation, on the hemisphere with `w ≥ 0`.
|
|
8
|
+
*
|
|
9
|
+
* @param {Float64Array} out
|
|
10
|
+
* @param {number} out_offset receives `[x, y, z, w]`
|
|
11
|
+
* @param {Float64Array} e
|
|
12
|
+
* @param {number} e_offset `[twist, swing y, swing z]`, radians
|
|
13
|
+
*/
|
|
14
|
+
export function swing_twist_compose_array(out, out_offset, e, e_offset) {
|
|
15
|
+
const twist = e[e_offset];
|
|
16
|
+
const y = e[e_offset + 1];
|
|
17
|
+
const z = e[e_offset + 2];
|
|
18
|
+
|
|
19
|
+
const tx = Math.sin(twist * 0.5);
|
|
20
|
+
const tw = Math.cos(twist * 0.5);
|
|
21
|
+
|
|
22
|
+
const phi = Math.sqrt(y * y + z * z);
|
|
23
|
+
|
|
24
|
+
// sin(φ/2) / φ, which is 1/2 as φ goes to 0, as the measure's small-angle branch is
|
|
25
|
+
const s = phi < 1e-9 ? 0.5 : Math.sin(phi * 0.5) / phi;
|
|
26
|
+
|
|
27
|
+
const sy = y * s;
|
|
28
|
+
const sz = z * s;
|
|
29
|
+
const sw = Math.cos(phi * 0.5);
|
|
30
|
+
|
|
31
|
+
// (0, sy, sz, sw) ⊗ (tx, 0, 0, tw)
|
|
32
|
+
out[out_offset] = sw * tx;
|
|
33
|
+
out[out_offset + 1] = sy * tw + sz * tx;
|
|
34
|
+
out[out_offset + 2] = sz * tw - sy * tx;
|
|
35
|
+
out[out_offset + 3] = sw * tw;
|
|
36
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Swing-twist decomposition of the relative rotation `qD = conj(qA)⊗qB`, giving
|
|
3
|
+
* the per-frame-axis angular positions used by wide-cone angular DOFs.
|
|
4
|
+
*
|
|
5
|
+
* Decomposes `qD = swing ⊗ twist`, with **twist** the rotation about frame
|
|
6
|
+
* axis X (the bone / twist axis) and **swing** the residual tilt (a rotation
|
|
7
|
+
* about an axis in the YZ plane that carries X to its new direction). Writes,
|
|
8
|
+
* into `out`:
|
|
9
|
+
* - `out[0]` = signed twist angle about X, in `(−π, π]` — *exact*, so a twist
|
|
10
|
+
* limit engages at the true angle, not the `2·sin(θ/2)` small-angle proxy;
|
|
11
|
+
* - `out[1]`, `out[2]` = the swing angle distributed over Y and Z
|
|
12
|
+
* (`φ·axis`, φ the true swing angle), so independent Y/Z swing limits form
|
|
13
|
+
* an accurate (box-shaped) cone that holds at large tilt.
|
|
14
|
+
* Reduces continuously to the small-angle vector near identity. Pure scratch /
|
|
15
|
+
* locals — no allocation, suitable for the per-substep hot loop. (The Quaternion
|
|
16
|
+
* class has an object-based `computeSwingAndTwist`; this is the inlined,
|
|
17
|
+
* allocation-free form — see the bench that justifies it.)
|
|
18
|
+
*
|
|
19
|
+
* The physics joint solver measures a `Joint`'s angular DOFs with it, and IK clamps to the same
|
|
20
|
+
* measure ({@link swing_twist_clamp_array}), so the two agree on what a limit allows.
|
|
21
|
+
*
|
|
22
|
+
* @param {number} dx qD x
|
|
23
|
+
* @param {number} dy qD y
|
|
24
|
+
* @param {number} dz qD z
|
|
25
|
+
* @param {number} dw qD w
|
|
26
|
+
* @param {Float64Array} out length-3 destination (frame-axis positions)
|
|
27
|
+
*/
|
|
28
|
+
export function swing_twist_error(dx: number, dy: number, dz: number, dw: number, out: Float64Array): void;
|
|
29
|
+
/**
|
|
30
|
+
* {@link swing_twist_error} with `qD` read from `q[q_offset ..+3]`, `[x, y, z, w]`: the one place the
|
|
31
|
+
* arithmetic lives. For a caller whose inlining budget is spent, where a call taking the four numbers
|
|
32
|
+
* would box each into a new heap object.
|
|
33
|
+
*
|
|
34
|
+
* @param {Float64Array} q
|
|
35
|
+
* @param {number} q_offset
|
|
36
|
+
* @param {Float64Array} out length-3 destination (frame-axis positions)
|
|
37
|
+
*/
|
|
38
|
+
export function swing_twist_error_array(q: Float64Array, q_offset: number, out: Float64Array): void;
|
|
39
|
+
//# sourceMappingURL=swing_twist_error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swing_twist_error.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/quaternion/swing_twist_error.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,sCANW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,OACN,YAAY,QAWtB;AAKD;;;;;;;;GAQG;AACH,2CAJW,YAAY,YACZ,MAAM,OACN,YAAY,QAoCtB"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Swing-twist decomposition of the relative rotation `qD = conj(qA)⊗qB`, giving
|
|
3
|
+
* the per-frame-axis angular positions used by wide-cone angular DOFs.
|
|
4
|
+
*
|
|
5
|
+
* Decomposes `qD = swing ⊗ twist`, with **twist** the rotation about frame
|
|
6
|
+
* axis X (the bone / twist axis) and **swing** the residual tilt (a rotation
|
|
7
|
+
* about an axis in the YZ plane that carries X to its new direction). Writes,
|
|
8
|
+
* into `out`:
|
|
9
|
+
* - `out[0]` = signed twist angle about X, in `(−π, π]` — *exact*, so a twist
|
|
10
|
+
* limit engages at the true angle, not the `2·sin(θ/2)` small-angle proxy;
|
|
11
|
+
* - `out[1]`, `out[2]` = the swing angle distributed over Y and Z
|
|
12
|
+
* (`φ·axis`, φ the true swing angle), so independent Y/Z swing limits form
|
|
13
|
+
* an accurate (box-shaped) cone that holds at large tilt.
|
|
14
|
+
* Reduces continuously to the small-angle vector near identity. Pure scratch /
|
|
15
|
+
* locals — no allocation, suitable for the per-substep hot loop. (The Quaternion
|
|
16
|
+
* class has an object-based `computeSwingAndTwist`; this is the inlined,
|
|
17
|
+
* allocation-free form — see the bench that justifies it.)
|
|
18
|
+
*
|
|
19
|
+
* The physics joint solver measures a `Joint`'s angular DOFs with it, and IK clamps to the same
|
|
20
|
+
* measure ({@link swing_twist_clamp_array}), so the two agree on what a limit allows.
|
|
21
|
+
*
|
|
22
|
+
* @param {number} dx qD x
|
|
23
|
+
* @param {number} dy qD y
|
|
24
|
+
* @param {number} dz qD z
|
|
25
|
+
* @param {number} dw qD w
|
|
26
|
+
* @param {Float64Array} out length-3 destination (frame-axis positions)
|
|
27
|
+
*/
|
|
28
|
+
export function swing_twist_error(dx, dy, dz, dw, out) {
|
|
29
|
+
const q = swing_twist_inputs;
|
|
30
|
+
|
|
31
|
+
q[0] = dx;
|
|
32
|
+
q[1] = dy;
|
|
33
|
+
q[2] = dz;
|
|
34
|
+
q[3] = dw;
|
|
35
|
+
|
|
36
|
+
swing_twist_error_array(q, 0, out);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** Where {@link swing_twist_error} packs its quaternion. */
|
|
40
|
+
const swing_twist_inputs = new Float64Array(4);
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* {@link swing_twist_error} with `qD` read from `q[q_offset ..+3]`, `[x, y, z, w]`: the one place the
|
|
44
|
+
* arithmetic lives. For a caller whose inlining budget is spent, where a call taking the four numbers
|
|
45
|
+
* would box each into a new heap object.
|
|
46
|
+
*
|
|
47
|
+
* @param {Float64Array} q
|
|
48
|
+
* @param {number} q_offset
|
|
49
|
+
* @param {Float64Array} out length-3 destination (frame-axis positions)
|
|
50
|
+
*/
|
|
51
|
+
export function swing_twist_error_array(q, q_offset, out) {
|
|
52
|
+
let dx = q[q_offset], dy = q[q_offset + 1], dz = q[q_offset + 2], dw = q[q_offset + 3];
|
|
53
|
+
|
|
54
|
+
// Shortest arc: work with the hemisphere where dw ≥ 0.
|
|
55
|
+
if (dw < 0) { dx = -dx; dy = -dy; dz = -dz; dw = -dw; }
|
|
56
|
+
|
|
57
|
+
const nxt = Math.sqrt(dx * dx + dw * dw); // |twist| (before normalising)
|
|
58
|
+
let sy, sz, sw;
|
|
59
|
+
if (nxt < 1e-12) {
|
|
60
|
+
// dw ≈ 0 and dx ≈ 0: a ~180° pure swing — twist is undefined, take 0.
|
|
61
|
+
out[0] = 0;
|
|
62
|
+
// Swing is qD itself; distribute its angle over Y/Z below.
|
|
63
|
+
sy = dy; sz = dz; sw = dw;
|
|
64
|
+
} else {
|
|
65
|
+
out[0] = 2 * Math.atan2(dx, dw); // exact signed twist about X
|
|
66
|
+
const tx = dx / nxt, tw = dw / nxt; // normalised twist (tx,0,0,tw)
|
|
67
|
+
// swing = qD ⊗ conj(twist); its X component is identically 0.
|
|
68
|
+
sy = dy * tw - dz * tx;
|
|
69
|
+
sz = dy * tx + dz * tw;
|
|
70
|
+
sw = dw * tw + dx * tx;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (sw < 0) { sy = -sy; sz = -sz; sw = -sw; }
|
|
74
|
+
const syz = Math.sqrt(sy * sy + sz * sz);
|
|
75
|
+
if (syz < 1e-9) {
|
|
76
|
+
// Near-zero swing: small-angle vector (continuous with φ·axis as φ→0).
|
|
77
|
+
out[1] = 2 * sy;
|
|
78
|
+
out[2] = 2 * sz;
|
|
79
|
+
} else {
|
|
80
|
+
const phi = 2 * Math.atan2(syz, sw); // exact swing angle in [0, π]
|
|
81
|
+
const s = phi / syz;
|
|
82
|
+
out[1] = sy * s;
|
|
83
|
+
out[2] = sz * s;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -8,16 +8,21 @@
|
|
|
8
8
|
*
|
|
9
9
|
* The matrix N is built so that the eigenvector of its largest eigenvalue
|
|
10
10
|
* IS the optimal rotation quaternion (in scalar-last form, matching meep's
|
|
11
|
-
* `Quaternion`).
|
|
11
|
+
* `Quaternion`). Largest means signed, not by magnitude: for a coplanar set
|
|
12
|
+
* (every set of two) det S = 0, which makes N's spectrum symmetric about zero,
|
|
13
|
+
* so −λmax is an eigenvalue too (±count for a perfect fit). N is decomposed
|
|
14
|
+
* directly (Jacobi), which needs no gap between the top two eigenvalues, so a
|
|
15
|
+
* set whose twist is weakly determined (nearly parallel vectors) is solved as
|
|
16
|
+
* exactly as a well-spread one.
|
|
12
17
|
*
|
|
13
18
|
* Inputs are unit vectors so no centroid subtraction is needed — the rotation
|
|
14
19
|
* is recovered from the cross-correlations alone.
|
|
15
20
|
*
|
|
16
|
-
* @param {Float32Array|number[]} a_xyz
|
|
17
|
-
* @param {Float32Array|number[]} b_xyz
|
|
21
|
+
* @param {Float32Array|Float64Array|number[]} a_xyz Target vectors, which R·b_i is fitted onto — Length: count*3, unit length per triple
|
|
22
|
+
* @param {Float32Array|Float64Array|number[]} b_xyz Source vectors, which R rotates — Length: count*3, unit length per triple
|
|
18
23
|
* @param {number} count
|
|
19
|
-
* @param {Float32Array|number[]} out_quaternion Length 4 (x, y, z, w)
|
|
20
|
-
* @returns {number} The maximum eigenvalue
|
|
24
|
+
* @param {Float32Array|Float64Array|number[]} out_quaternion Length 4 (x, y, z, w)
|
|
25
|
+
* @returns {number} The maximum eigenvalue = Σ a_i · R·b_i at the optimum. For a perfect alignment this equals `count`.
|
|
21
26
|
*/
|
|
22
|
-
export function v3_rigid_align_paired_unit_vectors(a_xyz: Float32Array | number[], b_xyz: Float32Array | number[], count: number, out_quaternion: Float32Array | number[]): number;
|
|
27
|
+
export function v3_rigid_align_paired_unit_vectors(a_xyz: Float32Array | Float64Array | number[], b_xyz: Float32Array | Float64Array | number[], count: number, out_quaternion: Float32Array | Float64Array | number[]): number;
|
|
23
28
|
//# sourceMappingURL=v3_rigid_align_paired_unit_vectors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"v3_rigid_align_paired_unit_vectors.d.ts","sourceRoot":"","sources":["../../../../../src/core/geom/vec3/v3_rigid_align_paired_unit_vectors.js"],"names":[],"mappings":"AAMA
|
|
1
|
+
{"version":3,"file":"v3_rigid_align_paired_unit_vectors.d.ts","sourceRoot":"","sources":["../../../../../src/core/geom/vec3/v3_rigid_align_paired_unit_vectors.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,0DANW,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,SAClC,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,SAClC,MAAM,kBACN,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,GAChC,MAAM,CA+ElB"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { matrix_top_eigenvector_power_iteration } from "../../math/linalg/eigen/matrix_top_eigenvector_power_iteration.js";
|
|
3
|
-
import { SquareMatrix } from "../../math/matrix/SquareMatrix.js"
|
|
1
|
+
import { matrix_symmetric_4x4_eigen } from "../../math/linalg/eigen/matrix_symmetric_4x4_eigen.js";
|
|
4
2
|
|
|
5
|
-
const scratch_horn_n = new
|
|
3
|
+
const scratch_horn_n = new Float64Array(16);
|
|
4
|
+
const scratch_eigen_values = new Float64Array(4);
|
|
5
|
+
const scratch_eigen_vectors = new Float64Array(16);
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Closed-form solution for the rotation that best aligns two sets of unit
|
|
@@ -14,16 +14,21 @@ const scratch_horn_n = new SquareMatrix(4, BinaryDataType.Float64);
|
|
|
14
14
|
*
|
|
15
15
|
* The matrix N is built so that the eigenvector of its largest eigenvalue
|
|
16
16
|
* IS the optimal rotation quaternion (in scalar-last form, matching meep's
|
|
17
|
-
* `Quaternion`).
|
|
17
|
+
* `Quaternion`). Largest means signed, not by magnitude: for a coplanar set
|
|
18
|
+
* (every set of two) det S = 0, which makes N's spectrum symmetric about zero,
|
|
19
|
+
* so −λmax is an eigenvalue too (±count for a perfect fit). N is decomposed
|
|
20
|
+
* directly (Jacobi), which needs no gap between the top two eigenvalues, so a
|
|
21
|
+
* set whose twist is weakly determined (nearly parallel vectors) is solved as
|
|
22
|
+
* exactly as a well-spread one.
|
|
18
23
|
*
|
|
19
24
|
* Inputs are unit vectors so no centroid subtraction is needed — the rotation
|
|
20
25
|
* is recovered from the cross-correlations alone.
|
|
21
26
|
*
|
|
22
|
-
* @param {Float32Array|number[]} a_xyz
|
|
23
|
-
* @param {Float32Array|number[]} b_xyz
|
|
27
|
+
* @param {Float32Array|Float64Array|number[]} a_xyz Target vectors, which R·b_i is fitted onto — Length: count*3, unit length per triple
|
|
28
|
+
* @param {Float32Array|Float64Array|number[]} b_xyz Source vectors, which R rotates — Length: count*3, unit length per triple
|
|
24
29
|
* @param {number} count
|
|
25
|
-
* @param {Float32Array|number[]} out_quaternion Length 4 (x, y, z, w)
|
|
26
|
-
* @returns {number} The maximum eigenvalue
|
|
30
|
+
* @param {Float32Array|Float64Array|number[]} out_quaternion Length 4 (x, y, z, w)
|
|
31
|
+
* @returns {number} The maximum eigenvalue = Σ a_i · R·b_i at the optimum. For a perfect alignment this equals `count`.
|
|
27
32
|
*/
|
|
28
33
|
export function v3_rigid_align_paired_unit_vectors(a_xyz, b_xyz, count, out_quaternion) {
|
|
29
34
|
|
|
@@ -72,9 +77,8 @@ export function v3_rigid_align_paired_unit_vectors(a_xyz, b_xyz, count, out_quat
|
|
|
72
77
|
const Nyw = Szx - Sxz;
|
|
73
78
|
const Nzw = Sxy - Syx;
|
|
74
79
|
|
|
75
|
-
|
|
76
|
-
const d =
|
|
77
|
-
// SquareMatrix is column-major: d[col * 4 + row]
|
|
80
|
+
// Symmetric, so the index is row*4 + col and col*4 + row alike.
|
|
81
|
+
const d = scratch_horn_n;
|
|
78
82
|
d[0] = Nxx;
|
|
79
83
|
d[5] = Nyy;
|
|
80
84
|
d[10] = Nzz;
|
|
@@ -92,5 +96,15 @@ export function v3_rigid_align_paired_unit_vectors(a_xyz, b_xyz, count, out_quat
|
|
|
92
96
|
d[11] = Nzw;
|
|
93
97
|
d[14] = Nzw;
|
|
94
98
|
|
|
95
|
-
|
|
99
|
+
const values = scratch_eigen_values;
|
|
100
|
+
const vectors = scratch_eigen_vectors;
|
|
101
|
+
matrix_symmetric_4x4_eigen(values, vectors, d);
|
|
102
|
+
|
|
103
|
+
// Eigenpairs come back ascending; the last is the largest.
|
|
104
|
+
out_quaternion[0] = vectors[12];
|
|
105
|
+
out_quaternion[1] = vectors[13];
|
|
106
|
+
out_quaternion[2] = vectors[14];
|
|
107
|
+
out_quaternion[3] = vectors[15];
|
|
108
|
+
|
|
109
|
+
return values[3];
|
|
96
110
|
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Eigendecomposition of a symmetric 4x4 matrix via cyclic Jacobi rotations.
|
|
3
|
+
*
|
|
4
|
+
* Only the upper triangle of `m` is read (the matrix is assumed symmetric, so
|
|
5
|
+
* row- and column-major are the same); the input is not modified. Eigenpairs
|
|
6
|
+
* are emitted sorted by **ascending eigenvalue** (signed, not by magnitude),
|
|
7
|
+
* so index 3 is the largest. Equal eigenvalues keep their column order, so a
|
|
8
|
+
* multiple of the identity comes back as the identity basis, in order.
|
|
9
|
+
*
|
|
10
|
+
* Unlike power iteration, this converges whatever the gaps between eigenvalues:
|
|
11
|
+
* a ±λ pair or a near-tie at the top costs nothing extra, and only the
|
|
12
|
+
* eigenvectors of a genuinely repeated eigenvalue are arbitrary (any orthonormal
|
|
13
|
+
* basis of that eigenspace is returned).
|
|
14
|
+
*
|
|
15
|
+
* Eigenvector sign is arbitrary (an eigenvector and its negation are both
|
|
16
|
+
* valid); callers that need a consistent orientation must fix the sign
|
|
17
|
+
* themselves.
|
|
18
|
+
*
|
|
19
|
+
* @param {Float64Array|Float32Array|number[]} out_values length >= 4, eigenvalues ascending
|
|
20
|
+
* @param {Float64Array|Float32Array|number[]} out_vectors length >= 16, eigenvector k
|
|
21
|
+
* in out_vectors[k*4 .. k*4 + 3] (contiguous per eigenvector)
|
|
22
|
+
* @param {Float64Array|Float32Array|number[]} m symmetric 4x4 (index = row*4 + col)
|
|
23
|
+
*/
|
|
24
|
+
export function matrix_symmetric_4x4_eigen(out_values: Float64Array | Float32Array | number[], out_vectors: Float64Array | Float32Array | number[], m: Float64Array | Float32Array | number[]): void;
|
|
25
|
+
//# sourceMappingURL=matrix_symmetric_4x4_eigen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matrix_symmetric_4x4_eigen.d.ts","sourceRoot":"","sources":["../../../../../../src/core/math/linalg/eigen/matrix_symmetric_4x4_eigen.js"],"names":[],"mappings":"AAsFA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,uDALW,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,eAClC,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,KAElC,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,QA0D5C"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Maximum number of cyclic Jacobi sweeps. A symmetric 4x4 reaches full double
|
|
3
|
+
* precision in 3-6 sweeps (Jacobi converges quadratically, whatever the gaps
|
|
4
|
+
* between eigenvalues): never more than 6 over 200,000 measured matrices,
|
|
5
|
+
* among them ±λ pairs, near and exact ties, rank 1, Horn's N, and scales from
|
|
6
|
+
* 1e-310 to 1e300. 50 only bounds the loop.
|
|
7
|
+
* @type {number}
|
|
8
|
+
*/
|
|
9
|
+
const MAX_SWEEPS = 50;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Working copy of the input, row-major (index = row*4 + col).
|
|
13
|
+
* @type {Float64Array}
|
|
14
|
+
*/
|
|
15
|
+
const scratch_a = new Float64Array(16);
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Rotation accumulator, row-major; its columns become the eigenvectors.
|
|
19
|
+
* @type {Float64Array}
|
|
20
|
+
*/
|
|
21
|
+
const scratch_v = new Float64Array(16);
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Column index of each eigenpair, sorted by ascending eigenvalue.
|
|
25
|
+
* @type {Uint8Array}
|
|
26
|
+
*/
|
|
27
|
+
const scratch_order = new Uint8Array(4);
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* One Jacobi rotation in the (p, q) plane that zeroes the off-diagonal entry
|
|
31
|
+
* a[p][q]. `a` and `v` are 4x4 matrices stored row-major (index = row*4 + col).
|
|
32
|
+
* `a` is the symmetric working matrix; `v` accumulates the rotations so its
|
|
33
|
+
* columns become the eigenvectors.
|
|
34
|
+
*
|
|
35
|
+
* @param {Float64Array} a symmetric 4x4, mutated in place
|
|
36
|
+
* @param {Float64Array} v 4x4 rotation accumulator, mutated in place
|
|
37
|
+
* @param {number} p
|
|
38
|
+
* @param {number} q
|
|
39
|
+
*/
|
|
40
|
+
function jacobi_rotate(a, v, p, q) {
|
|
41
|
+
const apq = a[p * 4 + q];
|
|
42
|
+
|
|
43
|
+
if (apq === 0) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const app = a[p * 4 + p];
|
|
48
|
+
const aqq = a[q * 4 + q];
|
|
49
|
+
|
|
50
|
+
// tan of the rotation angle (Numerical Recipes form, |angle| <= pi/4).
|
|
51
|
+
const theta = (aqq - app) / (2 * apq);
|
|
52
|
+
const t = (theta >= 0)
|
|
53
|
+
? 1 / (theta + Math.sqrt(theta * theta + 1))
|
|
54
|
+
: -1 / (-theta + Math.sqrt(theta * theta + 1));
|
|
55
|
+
const c = 1 / Math.sqrt(t * t + 1);
|
|
56
|
+
const s = t * c;
|
|
57
|
+
|
|
58
|
+
a[p * 4 + p] = app - t * apq;
|
|
59
|
+
a[q * 4 + q] = aqq + t * apq;
|
|
60
|
+
a[p * 4 + q] = 0;
|
|
61
|
+
a[q * 4 + p] = 0;
|
|
62
|
+
|
|
63
|
+
for (let r = 0; r < 4; r++) {
|
|
64
|
+
if (r === p || r === q) {
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const arp = a[r * 4 + p];
|
|
69
|
+
const arq = a[r * 4 + q];
|
|
70
|
+
|
|
71
|
+
const new_rp = c * arp - s * arq;
|
|
72
|
+
const new_rq = s * arp + c * arq;
|
|
73
|
+
a[r * 4 + p] = new_rp;
|
|
74
|
+
a[p * 4 + r] = new_rp;
|
|
75
|
+
a[r * 4 + q] = new_rq;
|
|
76
|
+
a[q * 4 + r] = new_rq;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
for (let row = 0; row < 4; row++) {
|
|
80
|
+
const vrp = v[row * 4 + p];
|
|
81
|
+
const vrq = v[row * 4 + q];
|
|
82
|
+
v[row * 4 + p] = c * vrp - s * vrq;
|
|
83
|
+
v[row * 4 + q] = s * vrp + c * vrq;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Eigendecomposition of a symmetric 4x4 matrix via cyclic Jacobi rotations.
|
|
89
|
+
*
|
|
90
|
+
* Only the upper triangle of `m` is read (the matrix is assumed symmetric, so
|
|
91
|
+
* row- and column-major are the same); the input is not modified. Eigenpairs
|
|
92
|
+
* are emitted sorted by **ascending eigenvalue** (signed, not by magnitude),
|
|
93
|
+
* so index 3 is the largest. Equal eigenvalues keep their column order, so a
|
|
94
|
+
* multiple of the identity comes back as the identity basis, in order.
|
|
95
|
+
*
|
|
96
|
+
* Unlike power iteration, this converges whatever the gaps between eigenvalues:
|
|
97
|
+
* a ±λ pair or a near-tie at the top costs nothing extra, and only the
|
|
98
|
+
* eigenvectors of a genuinely repeated eigenvalue are arbitrary (any orthonormal
|
|
99
|
+
* basis of that eigenspace is returned).
|
|
100
|
+
*
|
|
101
|
+
* Eigenvector sign is arbitrary (an eigenvector and its negation are both
|
|
102
|
+
* valid); callers that need a consistent orientation must fix the sign
|
|
103
|
+
* themselves.
|
|
104
|
+
*
|
|
105
|
+
* @param {Float64Array|Float32Array|number[]} out_values length >= 4, eigenvalues ascending
|
|
106
|
+
* @param {Float64Array|Float32Array|number[]} out_vectors length >= 16, eigenvector k
|
|
107
|
+
* in out_vectors[k*4 .. k*4 + 3] (contiguous per eigenvector)
|
|
108
|
+
* @param {Float64Array|Float32Array|number[]} m symmetric 4x4 (index = row*4 + col)
|
|
109
|
+
*/
|
|
110
|
+
export function matrix_symmetric_4x4_eigen(out_values, out_vectors, m) {
|
|
111
|
+
const a = scratch_a;
|
|
112
|
+
const v = scratch_v;
|
|
113
|
+
|
|
114
|
+
for (let row = 0; row < 4; row++) {
|
|
115
|
+
for (let col = row; col < 4; col++) {
|
|
116
|
+
const value = m[row * 4 + col];
|
|
117
|
+
a[row * 4 + col] = value;
|
|
118
|
+
a[col * 4 + row] = value;
|
|
119
|
+
|
|
120
|
+
v[row * 4 + col] = row === col ? 1 : 0;
|
|
121
|
+
v[col * 4 + row] = row === col ? 1 : 0;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
for (let sweep = 0; sweep < MAX_SWEEPS; sweep++) {
|
|
126
|
+
const scale = Math.abs(a[0]) + Math.abs(a[5]) + Math.abs(a[10]) + Math.abs(a[15]);
|
|
127
|
+
const off = Math.abs(a[1]) + Math.abs(a[2]) + Math.abs(a[3])
|
|
128
|
+
+ Math.abs(a[6]) + Math.abs(a[7]) + Math.abs(a[11]);
|
|
129
|
+
|
|
130
|
+
if (off <= 1e-18 * scale) {
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
jacobi_rotate(a, v, 0, 1);
|
|
135
|
+
jacobi_rotate(a, v, 0, 2);
|
|
136
|
+
jacobi_rotate(a, v, 0, 3);
|
|
137
|
+
jacobi_rotate(a, v, 1, 2);
|
|
138
|
+
jacobi_rotate(a, v, 1, 3);
|
|
139
|
+
jacobi_rotate(a, v, 2, 3);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// Eigenvalues live on the diagonal; eigenvector k is column k of V.
|
|
143
|
+
// Stable insertion sort of the four column indices by eigenvalue.
|
|
144
|
+
const order = scratch_order;
|
|
145
|
+
|
|
146
|
+
for (let k = 0; k < 4; k++) {
|
|
147
|
+
const value = a[k * 5];
|
|
148
|
+
let slot = k;
|
|
149
|
+
|
|
150
|
+
while (slot > 0 && a[order[slot - 1] * 5] > value) {
|
|
151
|
+
order[slot] = order[slot - 1];
|
|
152
|
+
slot--;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
order[slot] = k;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
for (let k = 0; k < 4; k++) {
|
|
159
|
+
const col = order[k];
|
|
160
|
+
out_values[k] = a[col * 5];
|
|
161
|
+
out_vectors[k * 4] = v[col];
|
|
162
|
+
out_vectors[k * 4 + 1] = v[4 + col];
|
|
163
|
+
out_vectors[k * 4 + 2] = v[8 + col];
|
|
164
|
+
out_vectors[k * 4 + 3] = v[12 + col];
|
|
165
|
+
}
|
|
166
|
+
}
|
|
@@ -3,9 +3,11 @@
|
|
|
3
3
|
* symmetric square matrix using power iteration.
|
|
4
4
|
*
|
|
5
5
|
* Designed for small symmetric matrices where the dominant eigenvalue is
|
|
6
|
-
* well-separated from the rest (
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* well-separated from the rest (PCA on a 3x3 covariance, etc.). Unsuitable
|
|
7
|
+
* when the top two eigenvalues have nearly equal magnitude — convergence
|
|
8
|
+
* stalls in that regime. That rules out Horn's quaternion matrix: a coplanar
|
|
9
|
+
* input makes its spectrum symmetric about zero (+λ and −λ); use
|
|
10
|
+
* `matrix_symmetric_4x4_eigen` there.
|
|
9
11
|
*
|
|
10
12
|
* @param {SquareMatrix} matrix Symmetric, column-major as per SquareMatrix
|
|
11
13
|
* @param {number[]|Float32Array|Float64Array} out Eigenvector is written here, length >= matrix.size
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matrix_top_eigenvector_power_iteration.d.ts","sourceRoot":"","sources":["../../../../../../src/core/math/linalg/eigen/matrix_top_eigenvector_power_iteration.js"],"names":[],"mappings":"AASA
|
|
1
|
+
{"version":3,"file":"matrix_top_eigenvector_power_iteration.d.ts","sourceRoot":"","sources":["../../../../../../src/core/math/linalg/eigen/matrix_top_eigenvector_power_iteration.js"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;GAgBG;AACH,kFALW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,mBAClC,MAAM,cACN,MAAM,GACJ,MAAM,CAoFlB"}
|
|
@@ -12,9 +12,11 @@ function ensure_scratch(n) {
|
|
|
12
12
|
* symmetric square matrix using power iteration.
|
|
13
13
|
*
|
|
14
14
|
* Designed for small symmetric matrices where the dominant eigenvalue is
|
|
15
|
-
* well-separated from the rest (
|
|
16
|
-
*
|
|
17
|
-
*
|
|
15
|
+
* well-separated from the rest (PCA on a 3x3 covariance, etc.). Unsuitable
|
|
16
|
+
* when the top two eigenvalues have nearly equal magnitude — convergence
|
|
17
|
+
* stalls in that regime. That rules out Horn's quaternion matrix: a coplanar
|
|
18
|
+
* input makes its spectrum symmetric about zero (+λ and −λ); use
|
|
19
|
+
* `matrix_symmetric_4x4_eigen` there.
|
|
18
20
|
*
|
|
19
21
|
* @param {SquareMatrix} matrix Symmetric, column-major as per SquareMatrix
|
|
20
22
|
* @param {number[]|Float32Array|Float64Array} out Eigenvector is written here, length >= matrix.size
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EngineHarness.d.ts","sourceRoot":"","sources":["../../../src/engine/EngineHarness.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"EngineHarness.d.ts","sourceRoot":"","sources":["../../../src/engine/EngineHarness.js"],"names":[],"mappings":"AAmFA;IAmBI;;;;;OAKG;IACH;QAHmE,aAAa,GAArE,CAAC,MAAM,EAAC,mBAAmB,EAAC,MAAM,EAAC,MAAM,QAAI;QAC5C,QAAQ,MAAM,CAAC,CAM1B;IAED;;;;;;;;;OASG;IACH,0BAHW,MAAM,GACJ,KAAK,CAYjB;IAED;;;;;;;;;OASG;IACH,6BAHW,MAAM,GACJ,aAAa,CAQzB;IAkED;;;;;;;;;;;;;OAaG;IACH;QAZyB,MAAM,EAApB,MAAM;QACyB,GAAG,GAAlC,sBAAsB;QACN,MAAM,GAAtB,OAAO;QACQ,QAAQ,GAAvB,MAAM;QACS,KAAK,GAApB,MAAM;QACS,GAAG,GAAlB,MAAM;QACU,QAAQ,GAAxB,OAAO;QACQ,WAAW,GAA1B,MAAM;QACS,WAAW,GAA1B,MAAM;QACS,WAAW,GAA1B,MAAM;QACJ,MAAM,CA+DlB;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH;QApB0B,MAAM,EAArB,MAAM;QACgC,KAAK,GAA3C;YAAC,CAAC,EAAC,MAAM,CAAC;YAAA,CAAC,EAAC,MAAM,CAAC;YAAA,CAAC,EAAC,MAAM,CAAA;SAAC;QACrB,SAAS;QACT,WAAW;QACF,KAAK,GAArB,MAAM;QACU,GAAG,GAAnB,MAAM;QACU,QAAQ,GAAxB,MAAM;QACwB,WAAW,GAAzC;YAAC,CAAC,EAAC,MAAM,CAAC;YAAC,CAAC,EAAC,MAAM,CAAA;SAAC;QACJ,iBAAiB,GAAjC,MAAM;QACW,WAAW,GAA5B,OAAO;QACU,aAAa,GAA9B,OAAO;QACU,YAAY,GAA7B,OAAO;QACU,aAAa,GAA9B,OAAO;QACS,iBAAiB,GAAjC,MAAM;QACU,iBAAiB,GAAjC,MAAM;QACW,gBAAgB,GAAjC,OAAO;QACU,cAAc,GAA/B,OAAO;QACS,mBAAmB,GAAnC,MAAM;QACW,OAAO,GAAxB,OAAO;sBA0EjB;IAGD;;;;;;;;;;;;OAYG;IACH;QAXyB,MAAM,EAApB,MAAM;QACyB,GAAG,GAAlC,sBAAsB;QACP,mBAAmB,GAAlC,MAAM;QACU,UAAU,GAA1B,OAAO;QACO,GAAG,GAAjB,KAAK;QACU,YAAY,GAA3B,MAAM;QACU,YAAY,GAA5B,OAAO;QACO,OAAO,GAArB,KAAK;QACU,gBAAgB,GAA/B,MAAM;QACS,iBAAiB,GAAhC,MAAM;sBA2DhB;IAED;;;;;;;OAOG;IACH;QAN0B,YAAY,GAA3B,MAAM;QACQ,MAAM,EAApB,MAAM;QACS,WAAW,GAA1B,MAAM;QACyB,GAAG,GAAlC,sBAAsB;QACpB,QAAQ,MAAM,CAAC,CA6C3B;IAGD;;;;;;;;;;OAUG;IACH;QAR2B,MAAM,EAAtB,MAAM;QACY,IAAI,GAAtB,OAAO;QACU,QAAQ;QACR,UAAU,GAA3B,MAAM;QACW,UAAU,GAA3B,MAAM;QACY,WAAW,GAA7B,OAAO;QACL,OAAO,CAmEnB;IA9fD;;;OAGG;IACH,YAFU,eAAQ,IAAI,CAEb;IAGL;;;OAGG;IACH,QAFU,MAAM,CAEiC;IA2DrD;;;;;OAKG;IACH;QAJkE,aAAa,GAApE,CAAC,MAAM,EAAC,mBAAmB,EAAC,MAAM,EAAC,MAAM,QAAI;QAC5B,mBAAmB,GAApC,OAAO;QACL,QAAQ,MAAM,CAAC,CA0D3B;CA2XJ;;IAID;;;OAGG;IACH,uCAMC;;qCAtjBY,OAAO,iCAAiC,EAAE,sBAAsB;mBA5B1D,aAAa;oCACI,0BAA0B;sBAOxC,kCAAkC;8BAjB1B,mCAAmC;oBAD7C,yBAAyB;mBAK1B,iBAAiB;sBATd,wBAAwB;oBAG1B,yBAAyB;oBAQzB,8BAA8B"}
|