@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
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The hinge a mid joint (a knee, an elbow) has, from the physics {@link Joint} on it, as
|
|
3
|
+
* {@link two_joint_ik} takes it: an axis in the mid joint's own frame about which a positive turn
|
|
4
|
+
* straightens the joint, so it names the side the joint bends to as well as the axis
|
|
5
|
+
* (ozz-animation's `mid_axis`).
|
|
6
|
+
*
|
|
7
|
+
* The Joint sits on the mid bone: `entityA` is its parent, `entityB` the bone itself. A hinge
|
|
8
|
+
* ({@link Joint#asHinge}) leaves one angular frame axis unlocked, and turned by `localBasisB` that axis
|
|
9
|
+
* is the hinge in the bone's own frame. Physics measures the angle about it as B's turn relative to A,
|
|
10
|
+
* 0 at rest, so the bone bends to the side its limits reach further: positive for limits like
|
|
11
|
+
* `[0, 2.6]`, and the axis that straightens it is then the hinge reversed.
|
|
12
|
+
*
|
|
13
|
+
* A straight leg's pose says nothing about which way its knee bends, which is why the side is read
|
|
14
|
+
* off the limits and not the pose. So a hinge that does not say is no hinge here:
|
|
15
|
+
* - an unlocked axis that is not {@link DofMode.LIMITED} (FREE, or a SPRING or MOTOR, which IK
|
|
16
|
+
* ignores) has no limits to read;
|
|
17
|
+
* - limits with `lower + upper == 0` reach equally far both ways.
|
|
18
|
+
*
|
|
19
|
+
* Anchors and the linear axes are ignored.
|
|
20
|
+
*
|
|
21
|
+
* @param {Vector3} out the hinge, of unit length, in the bone's own frame; written only on success
|
|
22
|
+
* @param {Joint} joint the physics joint on the mid bone
|
|
23
|
+
* @returns {boolean} false when the joint gives no bend side: more or fewer than one unlocked angular
|
|
24
|
+
* axis, an unlimited one, or symmetric limits
|
|
25
|
+
*/
|
|
26
|
+
export function joint_hinge_mid_axis(out: Vector3, joint: Joint): boolean;
|
|
27
|
+
//# sourceMappingURL=joint_hinge_mid_axis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"joint_hinge_mid_axis.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/inverse_kinematics/joint_hinge_mid_axis.js"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,kEAHa,OAAO,CA6CnB"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { v3_quaternion_apply } from "../../../core/geom/vec3/v3_quaternion_apply.js";
|
|
2
|
+
import { DofMode } from "../constraint/DofMode.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* `[x, y, z]` scratch.
|
|
6
|
+
* @type {Float64Array}
|
|
7
|
+
*/
|
|
8
|
+
const axis = new Float64Array(3);
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* The hinge a mid joint (a knee, an elbow) has, from the physics {@link Joint} on it, as
|
|
12
|
+
* {@link two_joint_ik} takes it: an axis in the mid joint's own frame about which a positive turn
|
|
13
|
+
* straightens the joint, so it names the side the joint bends to as well as the axis
|
|
14
|
+
* (ozz-animation's `mid_axis`).
|
|
15
|
+
*
|
|
16
|
+
* The Joint sits on the mid bone: `entityA` is its parent, `entityB` the bone itself. A hinge
|
|
17
|
+
* ({@link Joint#asHinge}) leaves one angular frame axis unlocked, and turned by `localBasisB` that axis
|
|
18
|
+
* is the hinge in the bone's own frame. Physics measures the angle about it as B's turn relative to A,
|
|
19
|
+
* 0 at rest, so the bone bends to the side its limits reach further: positive for limits like
|
|
20
|
+
* `[0, 2.6]`, and the axis that straightens it is then the hinge reversed.
|
|
21
|
+
*
|
|
22
|
+
* A straight leg's pose says nothing about which way its knee bends, which is why the side is read
|
|
23
|
+
* off the limits and not the pose. So a hinge that does not say is no hinge here:
|
|
24
|
+
* - an unlocked axis that is not {@link DofMode.LIMITED} (FREE, or a SPRING or MOTOR, which IK
|
|
25
|
+
* ignores) has no limits to read;
|
|
26
|
+
* - limits with `lower + upper == 0` reach equally far both ways.
|
|
27
|
+
*
|
|
28
|
+
* Anchors and the linear axes are ignored.
|
|
29
|
+
*
|
|
30
|
+
* @param {Vector3} out the hinge, of unit length, in the bone's own frame; written only on success
|
|
31
|
+
* @param {Joint} joint the physics joint on the mid bone
|
|
32
|
+
* @returns {boolean} false when the joint gives no bend side: more or fewer than one unlocked angular
|
|
33
|
+
* axis, an unlimited one, or symmetric limits
|
|
34
|
+
*/
|
|
35
|
+
export function joint_hinge_mid_axis(out, joint) {
|
|
36
|
+
const mode = joint.dofMode;
|
|
37
|
+
|
|
38
|
+
let free = -1;
|
|
39
|
+
|
|
40
|
+
for (let k = 0; k < 3; k++) {
|
|
41
|
+
if (mode[3 + k] === DofMode.LOCKED) {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (free !== -1) {
|
|
46
|
+
// two axes turn: a ball or a cone, not a hinge
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
free = k;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (free === -1 || mode[3 + free] !== DofMode.LIMITED) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const middle = joint.dofLowerLimit[3 + free] + joint.dofUpperLimit[3 + free];
|
|
58
|
+
|
|
59
|
+
if (middle === 0) {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const basis = joint.localBasisB;
|
|
64
|
+
|
|
65
|
+
v3_quaternion_apply(
|
|
66
|
+
axis, 0,
|
|
67
|
+
free === 0 ? 1 : 0, free === 1 ? 1 : 0, free === 2 ? 1 : 0,
|
|
68
|
+
basis[0], basis[1], basis[2], basis[3]
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
// bending is a turn toward the further limit, so straightening is a turn the other way
|
|
72
|
+
const sign = middle > 0 ? -1 : 1;
|
|
73
|
+
|
|
74
|
+
out.set(axis[0] * sign, axis[1] * sign, axis[2] * sign);
|
|
75
|
+
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pose a two-bone path (hip, knee, ankle) for a goal: the position by {@link two_joint_ik}, blended
|
|
3
|
+
* in by the goal's position weight, then the end's rotation slerped toward the goal's.
|
|
4
|
+
*
|
|
5
|
+
* Two-bone paths stay analytic: frame FABRIK needs more than 256 iterations to put a leg at 99.9 %
|
|
6
|
+
* of its reach where this is exact.
|
|
7
|
+
*
|
|
8
|
+
* - **Position.** The root and mid joints' local rotations are corrected to land the end on `t`, and
|
|
9
|
+
* each is slerped from its animated rotation toward the correction by `position_weight`. Slerp,
|
|
10
|
+
* not lerp: a componentwise blend of two unit quaternions is shorter than unit, and a hovering foot
|
|
11
|
+
* blends by a fraction, so that is the ordinary case (a knee half-way through a 56 degree
|
|
12
|
+
* correction came out at |q| = 0.970, its shin 3 cm short). The twist about each bone is the
|
|
13
|
+
* animated one; the corrections turn the mid joint about its hinge and the root as little as
|
|
14
|
+
* reaching the target takes.
|
|
15
|
+
* - **Rotation.** The end rides its chain, carried by the mid joint's corrected frame, and is then
|
|
16
|
+
* turned toward `target_rotation` by slerp, `rotation_weight` of the way. At 0 its local rotation
|
|
17
|
+
* is left exactly as animated.
|
|
18
|
+
*
|
|
19
|
+
* @param {Vector3} a root joint position, world
|
|
20
|
+
* @param {Vector3} b mid joint position, world
|
|
21
|
+
* @param {Vector3} c end position, world
|
|
22
|
+
* @param {Vector3} t target position, world
|
|
23
|
+
* @param {Vector3} mid_axis the mid joint's hinge in its own frame, of unit length, a positive turn
|
|
24
|
+
* straightening it; see {@link joint_hinge_mid_axis}
|
|
25
|
+
* @param {Quaternion} a_gr world rotation of the root joint
|
|
26
|
+
* @param {Quaternion} b_gr world rotation of the mid joint
|
|
27
|
+
* @param {Quaternion} a_lr local rotation of the root joint, corrected in place
|
|
28
|
+
* @param {Quaternion} b_lr local rotation of the mid joint, corrected in place
|
|
29
|
+
* @param {Quaternion} c_lr local rotation of the end, corrected in place
|
|
30
|
+
* @param {number} position_weight 0..1
|
|
31
|
+
* @param {Quaternion} target_rotation the rotation the goal wants the end to have, world
|
|
32
|
+
* @param {number} rotation_weight 0..1
|
|
33
|
+
*/
|
|
34
|
+
export function two_bone_path_solve(a: Vector3, b: Vector3, c: Vector3, t: Vector3, mid_axis: Vector3, a_gr: Quaternion, b_gr: Quaternion, a_lr: Quaternion, b_lr: Quaternion, c_lr: Quaternion, position_weight: number, target_rotation: Quaternion, rotation_weight: number): void;
|
|
35
|
+
import Quaternion from "../../../core/geom/Quaternion.js";
|
|
36
|
+
//# sourceMappingURL=two_bone_path_solve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"two_bone_path_solve.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/inverse_kinematics/two_bone_path_solve.js"],"names":[],"mappings":"AAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,6GATW,UAAU,QACV,UAAU,QACV,UAAU,QACV,UAAU,QACV,UAAU,mBACV,MAAM,mBACN,UAAU,mBACV,MAAM,QAqDhB;uBA/FsB,kCAAkC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { assert } from "../../../core/assert.js";
|
|
2
|
+
import Quaternion from "../../../core/geom/Quaternion.js";
|
|
3
|
+
import { two_joint_ik } from "./two_joint_ik.js";
|
|
4
|
+
|
|
5
|
+
const solved_a = new Quaternion();
|
|
6
|
+
const solved_b = new Quaternion();
|
|
7
|
+
|
|
8
|
+
const above_a = new Quaternion();
|
|
9
|
+
const mid_world = new Quaternion();
|
|
10
|
+
const carried = new Quaternion();
|
|
11
|
+
const turned = new Quaternion();
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Pose a two-bone path (hip, knee, ankle) for a goal: the position by {@link two_joint_ik}, blended
|
|
15
|
+
* in by the goal's position weight, then the end's rotation slerped toward the goal's.
|
|
16
|
+
*
|
|
17
|
+
* Two-bone paths stay analytic: frame FABRIK needs more than 256 iterations to put a leg at 99.9 %
|
|
18
|
+
* of its reach where this is exact.
|
|
19
|
+
*
|
|
20
|
+
* - **Position.** The root and mid joints' local rotations are corrected to land the end on `t`, and
|
|
21
|
+
* each is slerped from its animated rotation toward the correction by `position_weight`. Slerp,
|
|
22
|
+
* not lerp: a componentwise blend of two unit quaternions is shorter than unit, and a hovering foot
|
|
23
|
+
* blends by a fraction, so that is the ordinary case (a knee half-way through a 56 degree
|
|
24
|
+
* correction came out at |q| = 0.970, its shin 3 cm short). The twist about each bone is the
|
|
25
|
+
* animated one; the corrections turn the mid joint about its hinge and the root as little as
|
|
26
|
+
* reaching the target takes.
|
|
27
|
+
* - **Rotation.** The end rides its chain, carried by the mid joint's corrected frame, and is then
|
|
28
|
+
* turned toward `target_rotation` by slerp, `rotation_weight` of the way. At 0 its local rotation
|
|
29
|
+
* is left exactly as animated.
|
|
30
|
+
*
|
|
31
|
+
* @param {Vector3} a root joint position, world
|
|
32
|
+
* @param {Vector3} b mid joint position, world
|
|
33
|
+
* @param {Vector3} c end position, world
|
|
34
|
+
* @param {Vector3} t target position, world
|
|
35
|
+
* @param {Vector3} mid_axis the mid joint's hinge in its own frame, of unit length, a positive turn
|
|
36
|
+
* straightening it; see {@link joint_hinge_mid_axis}
|
|
37
|
+
* @param {Quaternion} a_gr world rotation of the root joint
|
|
38
|
+
* @param {Quaternion} b_gr world rotation of the mid joint
|
|
39
|
+
* @param {Quaternion} a_lr local rotation of the root joint, corrected in place
|
|
40
|
+
* @param {Quaternion} b_lr local rotation of the mid joint, corrected in place
|
|
41
|
+
* @param {Quaternion} c_lr local rotation of the end, corrected in place
|
|
42
|
+
* @param {number} position_weight 0..1
|
|
43
|
+
* @param {Quaternion} target_rotation the rotation the goal wants the end to have, world
|
|
44
|
+
* @param {number} rotation_weight 0..1
|
|
45
|
+
*/
|
|
46
|
+
export function two_bone_path_solve(
|
|
47
|
+
a, b, c, t,
|
|
48
|
+
mid_axis,
|
|
49
|
+
a_gr, b_gr,
|
|
50
|
+
a_lr, b_lr, c_lr,
|
|
51
|
+
position_weight,
|
|
52
|
+
target_rotation,
|
|
53
|
+
rotation_weight
|
|
54
|
+
) {
|
|
55
|
+
assert.ok(position_weight >= 0 && position_weight <= 1, 'position_weight is within 0..1');
|
|
56
|
+
assert.ok(rotation_weight >= 0 && rotation_weight <= 1, 'rotation_weight is within 0..1');
|
|
57
|
+
|
|
58
|
+
// the frame above the root, which the corrections do not move: a_gr = above_a * a_lr
|
|
59
|
+
above_a.copyInverse(a_lr);
|
|
60
|
+
above_a.multiplyQuaternions(a_gr, above_a);
|
|
61
|
+
|
|
62
|
+
// slerp's endpoints are a ratio of sines, which rounds: weight 0 has to be the animated pose
|
|
63
|
+
// exactly, as no goal is
|
|
64
|
+
if (position_weight > 0) {
|
|
65
|
+
solved_a.copy(a_lr);
|
|
66
|
+
solved_b.copy(b_lr);
|
|
67
|
+
|
|
68
|
+
two_joint_ik(a, b, c, t, mid_axis, a_gr, b_gr, solved_a, solved_b);
|
|
69
|
+
|
|
70
|
+
if (position_weight === 1) {
|
|
71
|
+
a_lr.copy(solved_a);
|
|
72
|
+
b_lr.copy(solved_b);
|
|
73
|
+
} else {
|
|
74
|
+
a_lr.slerpQuaternions(a_lr, solved_a, position_weight);
|
|
75
|
+
b_lr.slerpQuaternions(b_lr, solved_b, position_weight);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (rotation_weight === 0) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
mid_world.multiplyQuaternions(above_a, a_lr);
|
|
84
|
+
mid_world.multiply(b_lr);
|
|
85
|
+
|
|
86
|
+
carried.multiplyQuaternions(mid_world, c_lr);
|
|
87
|
+
|
|
88
|
+
if (rotation_weight === 1) {
|
|
89
|
+
turned.copy(target_rotation);
|
|
90
|
+
} else {
|
|
91
|
+
turned.slerpQuaternions(carried, target_rotation, rotation_weight);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
mid_world.conjugate();
|
|
95
|
+
|
|
96
|
+
c_lr.multiplyQuaternions(mid_world, turned);
|
|
97
|
+
}
|
|
@@ -1,16 +1,38 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
2
|
+
* Two-joint inverse kinematics: turn a root joint and a hinged mid joint so the end of the chain
|
|
3
|
+
* lands on a target, in one call.
|
|
4
|
+
*
|
|
5
|
+
* After http://theorangeduck.com/page/simple-two-joint, with the mid joint's hinge given rather than
|
|
6
|
+
* guessed. The reference bends about `normalize((c - a) x d)` for some `d` "close to" where the knee
|
|
7
|
+
* points; this file used to take `d` as the mid joint's local -Z, which is the hinge only for a rig
|
|
8
|
+
* whose -Z lies in the bend plane and on the knee's side of it - a knee bending toward +Z, or a frame
|
|
9
|
+
* yawed 30 degrees, bent about the wrong axis and missed by up to 119 mm. `mid_axis` is the convention
|
|
10
|
+
* ozz-animation ships (`IKTwoBoneJob::mid_axis`): an axis in the mid joint's own frame, about which a
|
|
11
|
+
* positive turn straightens the joint, so it names the side the joint bends to as well as the axis.
|
|
12
|
+
*
|
|
13
|
+
* - The mid joint turns about its hinge alone, by the angle that sets the end at the target's distance
|
|
14
|
+
* from the root. That is solved exactly whether or not the bones are square to the hinge, and a joint
|
|
15
|
+
* animated past straight, against its hinge, is brought round to the side the hinge bends it.
|
|
16
|
+
* - The root then turns twice, both turns in world: back onto the ray the end was animated along (the
|
|
17
|
+
* reference's bend, a turn about the hinge when the bones are square to it), then along the shortest
|
|
18
|
+
* arc from that ray onto the target (its swing).
|
|
19
|
+
* - A target the chain cannot reach is reached for: the chain straightens, or folds, and points at it.
|
|
20
|
+
*
|
|
21
|
+
* The corrections are right-multiplied onto the local rotations, so whatever is above the root may be
|
|
22
|
+
* rotated arbitrarily.
|
|
23
|
+
*
|
|
24
|
+
* @param {Vector3} a root joint position, world
|
|
25
|
+
* @param {Vector3} b mid joint position, world
|
|
26
|
+
* @param {Vector3} c end position, world
|
|
27
|
+
* @param {Vector3} t target position, world
|
|
28
|
+
* @param {Vector3} mid_axis the mid joint's hinge in its own frame, of unit length; a positive turn
|
|
29
|
+
* about it straightens the joint
|
|
30
|
+
* @param {Quaternion} a_gr world rotation of the root joint
|
|
31
|
+
* @param {Quaternion} b_gr world rotation of the mid joint
|
|
32
|
+
* @param {Quaternion} a_lr local rotation of the root joint, corrected in place
|
|
33
|
+
* @param {Quaternion} b_lr local rotation of the mid joint, corrected in place
|
|
12
34
|
*/
|
|
13
|
-
export function two_joint_ik(a: Vector3, b: Vector3, c: Vector3, t: Vector3,
|
|
35
|
+
export function two_joint_ik(a: Vector3, b: Vector3, c: Vector3, t: Vector3, mid_axis: Vector3, a_gr: Quaternion, b_gr: Quaternion, a_lr: Quaternion, b_lr: Quaternion): void;
|
|
14
36
|
import Vector3 from "../../../core/geom/Vector3.js";
|
|
15
37
|
import Quaternion from "../../../core/geom/Quaternion.js";
|
|
16
38
|
//# sourceMappingURL=two_joint_ik.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"two_joint_ik.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/inverse_kinematics/two_joint_ik.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"two_joint_ik.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/inverse_kinematics/two_joint_ik.js"],"names":[],"mappings":"AAyEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,gCAXW,OAAO,KACP,OAAO,KACP,OAAO,KACP,OAAO,YACP,OAAO,QAEP,UAAU,QACV,UAAU,QACV,UAAU,QACV,UAAU,QA0FpB;oBAjMmB,+BAA+B;uBAD5B,kCAAkC"}
|
|
@@ -1,105 +1,196 @@
|
|
|
1
|
+
import { assert } from "../../../core/assert.js";
|
|
1
2
|
import Quaternion from "../../../core/geom/Quaternion.js";
|
|
2
|
-
import { v3_interior_angle } from "../../../core/geom/vec3/v3_interior_angle.js";
|
|
3
3
|
import Vector3 from "../../../core/geom/Vector3.js";
|
|
4
4
|
import { clamp } from "../../../core/math/clamp.js";
|
|
5
5
|
|
|
6
|
-
const
|
|
6
|
+
const hinge = new Vector3();
|
|
7
7
|
|
|
8
|
-
const
|
|
9
|
-
const
|
|
8
|
+
const thigh = new Vector3();
|
|
9
|
+
const shin = new Vector3();
|
|
10
10
|
|
|
11
|
-
const
|
|
12
|
-
const
|
|
11
|
+
const thigh_across = new Vector3();
|
|
12
|
+
const shin_across = new Vector3();
|
|
13
13
|
|
|
14
|
-
const
|
|
15
|
-
const
|
|
14
|
+
const ankle_bent = new Vector3();
|
|
15
|
+
const aim = new Vector3();
|
|
16
|
+
const reach = new Vector3();
|
|
16
17
|
|
|
17
|
-
const
|
|
18
|
-
const r1 = new Quaternion();
|
|
19
|
-
const r2 = new Quaternion();
|
|
18
|
+
const axis = new Vector3();
|
|
20
19
|
|
|
21
|
-
const
|
|
22
|
-
const
|
|
23
|
-
const
|
|
20
|
+
const knee_turn = new Quaternion();
|
|
21
|
+
const hip_turn = new Quaternion();
|
|
22
|
+
const turn = new Quaternion();
|
|
23
|
+
const inverse_a_gr = new Quaternion();
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
/**
|
|
26
|
+
* The shortest turn taking the direction of `from` onto the direction of `to`; neither has to be of
|
|
27
|
+
* unit length. Either being zero leaves nothing to turn.
|
|
28
|
+
*
|
|
29
|
+
* Directions within 1e-12 rad of opposite turn half a circle about `fallback`, less its part along
|
|
30
|
+
* `from`. Their cross product is no axis there - it is zero, or rounding noise, and noise need not
|
|
31
|
+
* even be square to `from` (measured: an exact-zero test missed targets opposite the effector by up
|
|
32
|
+
* to 995 mm on 1,911 of 2,000 random leg orientations).
|
|
33
|
+
*
|
|
34
|
+
* @param {Quaternion} out
|
|
35
|
+
* @param {Vector3} from
|
|
36
|
+
* @param {Vector3} to
|
|
37
|
+
* @param {Vector3} fallback unit length
|
|
38
|
+
*/
|
|
39
|
+
function turn_between(out, from, to, fallback) {
|
|
40
|
+
const scale = Math.sqrt(from.lengthSqr() * to.lengthSqr());
|
|
41
|
+
|
|
42
|
+
axis.crossVectors(from, to);
|
|
43
|
+
|
|
44
|
+
// both scaled by |from| |to|
|
|
45
|
+
const sine = Math.sqrt(axis.lengthSqr());
|
|
46
|
+
const cosine = from.dot(to);
|
|
47
|
+
|
|
48
|
+
if (sine > 1e-12 * scale) {
|
|
49
|
+
axis.multiplyScalar(1 / sine);
|
|
50
|
+
|
|
51
|
+
out.fromAxisAngle(axis, Math.atan2(sine, cosine));
|
|
52
|
+
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (scale === 0 || cosine > 0) {
|
|
57
|
+
out.set(0, 0, 0, 1);
|
|
58
|
+
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
axis.copy(from).multiplyScalar(-fallback.dot(from) / from.lengthSqr()).add(fallback);
|
|
63
|
+
|
|
64
|
+
if (axis.lengthSqr() < 1e-24) {
|
|
65
|
+
// the fallback lies along `from` as well: any axis square to it will do
|
|
66
|
+
axis.crossVectors(from, Math.abs(from.x) < Math.abs(from.y) ? Vector3.right : Vector3.up);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
axis.normalize();
|
|
70
|
+
|
|
71
|
+
out.fromAxisAngle(axis, Math.PI);
|
|
72
|
+
}
|
|
26
73
|
|
|
27
74
|
/**
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
75
|
+
* Two-joint inverse kinematics: turn a root joint and a hinged mid joint so the end of the chain
|
|
76
|
+
* lands on a target, in one call.
|
|
77
|
+
*
|
|
78
|
+
* After http://theorangeduck.com/page/simple-two-joint, with the mid joint's hinge given rather than
|
|
79
|
+
* guessed. The reference bends about `normalize((c - a) x d)` for some `d` "close to" where the knee
|
|
80
|
+
* points; this file used to take `d` as the mid joint's local -Z, which is the hinge only for a rig
|
|
81
|
+
* whose -Z lies in the bend plane and on the knee's side of it - a knee bending toward +Z, or a frame
|
|
82
|
+
* yawed 30 degrees, bent about the wrong axis and missed by up to 119 mm. `mid_axis` is the convention
|
|
83
|
+
* ozz-animation ships (`IKTwoBoneJob::mid_axis`): an axis in the mid joint's own frame, about which a
|
|
84
|
+
* positive turn straightens the joint, so it names the side the joint bends to as well as the axis.
|
|
85
|
+
*
|
|
86
|
+
* - The mid joint turns about its hinge alone, by the angle that sets the end at the target's distance
|
|
87
|
+
* from the root. That is solved exactly whether or not the bones are square to the hinge, and a joint
|
|
88
|
+
* animated past straight, against its hinge, is brought round to the side the hinge bends it.
|
|
89
|
+
* - The root then turns twice, both turns in world: back onto the ray the end was animated along (the
|
|
90
|
+
* reference's bend, a turn about the hinge when the bones are square to it), then along the shortest
|
|
91
|
+
* arc from that ray onto the target (its swing).
|
|
92
|
+
* - A target the chain cannot reach is reached for: the chain straightens, or folds, and points at it.
|
|
93
|
+
*
|
|
94
|
+
* The corrections are right-multiplied onto the local rotations, so whatever is above the root may be
|
|
95
|
+
* rotated arbitrarily.
|
|
96
|
+
*
|
|
97
|
+
* @param {Vector3} a root joint position, world
|
|
98
|
+
* @param {Vector3} b mid joint position, world
|
|
99
|
+
* @param {Vector3} c end position, world
|
|
100
|
+
* @param {Vector3} t target position, world
|
|
101
|
+
* @param {Vector3} mid_axis the mid joint's hinge in its own frame, of unit length; a positive turn
|
|
102
|
+
* about it straightens the joint
|
|
103
|
+
* @param {Quaternion} a_gr world rotation of the root joint
|
|
104
|
+
* @param {Quaternion} b_gr world rotation of the mid joint
|
|
105
|
+
* @param {Quaternion} a_lr local rotation of the root joint, corrected in place
|
|
106
|
+
* @param {Quaternion} b_lr local rotation of the mid joint, corrected in place
|
|
38
107
|
*/
|
|
39
108
|
export function two_joint_ik(
|
|
40
|
-
a, b, c, t,
|
|
109
|
+
a, b, c, t,
|
|
110
|
+
mid_axis,
|
|
41
111
|
a_gr, b_gr,
|
|
42
112
|
a_lr, b_lr
|
|
43
113
|
) {
|
|
114
|
+
assert.ok(mid_axis.isNormalized(), 'mid_axis must be of unit length');
|
|
115
|
+
|
|
116
|
+
hinge.copy(mid_axis).applyQuaternion(b_gr);
|
|
117
|
+
|
|
118
|
+
thigh.subVectors(b, a);
|
|
119
|
+
shin.subVectors(c, b);
|
|
120
|
+
|
|
121
|
+
// turning the knee leaves each bone's part along the hinge where it is, and turns the part across
|
|
122
|
+
const thigh_along = thigh.dot(hinge);
|
|
123
|
+
const shin_along = shin.dot(hinge);
|
|
124
|
+
|
|
125
|
+
thigh_across.copy(hinge).multiplyScalar(-thigh_along).add(thigh);
|
|
126
|
+
shin_across.copy(hinge).multiplyScalar(-shin_along).add(shin);
|
|
127
|
+
|
|
128
|
+
/*
|
|
129
|
+
With the shin's across part at angle g from the thigh's, about the hinge,
|
|
44
130
|
|
|
45
|
-
|
|
46
|
-
const lab = b.distanceTo(a);
|
|
47
|
-
const lcb = b.distanceTo(c);
|
|
131
|
+
|end - root|^2 = base + span * cos(g)
|
|
48
132
|
|
|
49
|
-
|
|
133
|
+
so the chain reaches from sqrt(base - span), folded, to sqrt(base + span), straight: for bones
|
|
134
|
+
square to the hinge, |lab - lcb| to lab + lcb. That is the whole of the clamp. The reference
|
|
135
|
+
trims the far end by an absolute `eps` so a leg "never appears fully extended"; a length in world
|
|
136
|
+
units is no ratio of a leg, and the 0.01 the ECS solver passed left every foot short of a target
|
|
137
|
+
within a centimetre of full reach. Easing into full extension is a separate choice
|
|
138
|
+
(ozz-animation's `soften`) and nothing asks for it.
|
|
139
|
+
*/
|
|
140
|
+
const base = thigh.lengthSqr() + shin.lengthSqr() + 2 * thigh_along * shin_along;
|
|
141
|
+
const span = 2 * Math.sqrt(thigh_across.lengthSqr() * shin_across.lengthSqr());
|
|
50
142
|
|
|
51
|
-
|
|
52
|
-
const lat = clamp(t.distanceTo(a), eps, maximum_extension);
|
|
143
|
+
reach.subVectors(t, a);
|
|
53
144
|
|
|
54
|
-
|
|
55
|
-
const ac_ab_0 = v3_interior_angle(c, a, b);
|
|
56
|
-
const ba_bc_0 = v3_interior_angle(a, b, c);
|
|
57
|
-
const ac_at_0 = v3_interior_angle(c, a, t);
|
|
145
|
+
let knee_angle = 0;
|
|
58
146
|
|
|
59
|
-
//
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
const length_ab_sqr = lab * lab;
|
|
147
|
+
// a bone along the hinge has nothing across it to turn, and the reach is what it is
|
|
148
|
+
if (span > 0) {
|
|
149
|
+
axis.crossVectors(thigh_across, shin_across);
|
|
63
150
|
|
|
64
|
-
|
|
65
|
-
const ba_bc_1 = Math.acos(clamp((length_at_sqr - length_ab_sqr - length_cb_sqr) / (-2 * lab * lcb), -1, 1));
|
|
151
|
+
const bend_animated = Math.atan2(axis.dot(hinge), thigh_across.dot(shin_across));
|
|
66
152
|
|
|
67
|
-
|
|
68
|
-
d.applyQuaternion(b_gr);
|
|
153
|
+
const reach_sqr = clamp(reach.lengthSqr(), base - span, base + span);
|
|
69
154
|
|
|
70
|
-
|
|
71
|
-
|
|
155
|
+
// a positive turn straightens, so a joint bent the way its hinge bends it sits at g <= 0
|
|
156
|
+
const bend_solved = -Math.acos(clamp((reach_sqr - base) / span, -1, 1));
|
|
72
157
|
|
|
73
|
-
|
|
74
|
-
|
|
158
|
+
knee_angle = bend_solved - bend_animated;
|
|
159
|
+
}
|
|
75
160
|
|
|
76
|
-
|
|
77
|
-
axis1.normalize();
|
|
161
|
+
turn.fromAxisAngle(mid_axis, knee_angle);
|
|
78
162
|
|
|
79
|
-
|
|
80
|
-
inv_b_gr.copyInverse(b_gr);
|
|
163
|
+
b_lr.multiply(turn);
|
|
81
164
|
|
|
82
|
-
|
|
83
|
-
|
|
165
|
+
// the end, relative to the root, with the knee turned and the hip not yet
|
|
166
|
+
knee_turn.fromAxisAngle(hinge, knee_angle);
|
|
84
167
|
|
|
85
|
-
|
|
168
|
+
ankle_bent.copy(shin).applyQuaternion(knee_turn).add(thigh);
|
|
86
169
|
|
|
87
|
-
|
|
170
|
+
aim.subVectors(c, a);
|
|
88
171
|
|
|
89
|
-
|
|
172
|
+
if (aim.lengthSqr() === 0) {
|
|
173
|
+
// animated with the end on the root, there is no ray to keep; the bent end's own serves
|
|
174
|
+
aim.copy(ankle_bent);
|
|
175
|
+
}
|
|
90
176
|
|
|
91
|
-
|
|
92
|
-
|
|
177
|
+
/*
|
|
178
|
+
The bend first, then the swing, both turns in world, so the swing is the left factor. The
|
|
179
|
+
reference's listing composes them the other way about - bend after swing, about an axis the swing
|
|
180
|
+
has already carried away - and misses every target off the bend plane (14 mm for one 23 cm off on
|
|
181
|
+
a 0.92 m leg); its prose has them in this order.
|
|
182
|
+
*/
|
|
183
|
+
turn_between(hip_turn, ankle_bent, aim, hinge);
|
|
93
184
|
|
|
94
|
-
|
|
185
|
+
turn_between(turn, aim, reach, hinge);
|
|
95
186
|
|
|
96
|
-
|
|
97
|
-
axis1_la.applyQuaternion(inv_a_gr);
|
|
187
|
+
hip_turn.multiplyQuaternions(turn, hip_turn);
|
|
98
188
|
|
|
99
|
-
|
|
189
|
+
// into the root's frame: a_lr * (a_gr^-1 * hip_turn * a_gr)
|
|
190
|
+
inverse_a_gr.copyInverse(a_gr);
|
|
100
191
|
|
|
101
|
-
|
|
192
|
+
turn.multiplyQuaternions(inverse_a_gr, hip_turn);
|
|
193
|
+
turn.multiply(a_gr);
|
|
102
194
|
|
|
103
|
-
a_lr.multiply(
|
|
104
|
-
|
|
105
|
-
}
|
|
195
|
+
a_lr.multiply(turn);
|
|
196
|
+
}
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* for, in nits; defaults to {@link LINEAR_REFERENCE_NITS}. Only read for `COLOUR_SPACE_LINEAR`,
|
|
15
15
|
* and the exact counterpart of {@link encode_avif}'s option of the same name
|
|
16
16
|
* @param {number} [options.chroma_upsampling] one of the `CHROMA_UPSAMPLING_*` constants
|
|
17
|
-
* @returns {{data: (Uint8ClampedArray|Uint16Array), width: number, height: number}}
|
|
17
|
+
* @returns {{data: (Uint8ClampedArray|Uint16Array|Float16Array), width: number, height: number}}
|
|
18
18
|
*
|
|
19
19
|
* @author Alex Goldring
|
|
20
20
|
* @copyright Company Named Limited (c) 2026
|
|
@@ -26,7 +26,7 @@ export function convert_to_rgba(decoder: AvifDecoder, image: YuvImage, options?:
|
|
|
26
26
|
linear_reference_nits?: number;
|
|
27
27
|
chroma_upsampling?: number;
|
|
28
28
|
}): {
|
|
29
|
-
data: (Uint8ClampedArray | Uint16Array);
|
|
29
|
+
data: (Uint8ClampedArray | Uint16Array | Float16Array);
|
|
30
30
|
width: number;
|
|
31
31
|
height: number;
|
|
32
32
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert_to_rgba.d.ts","sourceRoot":"","sources":["../../../../../../src/format/image/avif/api/convert_to_rgba.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"convert_to_rgba.d.ts","sourceRoot":"","sources":["../../../../../../src/format/image/avif/api/convert_to_rgba.js"],"names":[],"mappings":"AAmCA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH;IAZ4B,SAAS,GAA1B,MAAM;IACY,cAAc,GAAhC,OAAO;IACU,mBAAmB,GAApC,MAAM;IACW,qBAAqB,GAAtC,MAAM;IAGW,iBAAiB,GAAlC,MAAM;IACJ;IAAC,IAAI,EAAE,CAAC,iBAAiB,GAAC,WAAW,eAAa,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,CAoJ/F;AA9LD;;;GAGG;AACH,kCAFU,MAAM,CAEqB;AAErC;;;;;GAKG;AACH,kCAFU,MAAM,CAEqB;AAErC;;;GAGG;AACH,0CAFU,MAAM,CAE6B;AAE7C,uCAAuC;AACvC,wCADW,MAAM,CAC0B;AAE3C,8BAA8B;AAC9B,qCADW,MAAM,CACuB"}
|
|
@@ -3,7 +3,6 @@ import { clamp_sample } from "../color/clamp_sample.js";
|
|
|
3
3
|
import { colour_transform_init } from "../color/ColourTransform.js";
|
|
4
4
|
import { LINEAR_REFERENCE_NITS } from "../color/transfer_to_linear.js";
|
|
5
5
|
import { MC_BT_601 } from "../av1/tables/av1_symbols.js";
|
|
6
|
-
import { to_half_float_uint16 } from "../../../../core/binary/to_half_float_uint16.js";
|
|
7
6
|
import { transfer_row_to_linear } from "../color/transfer_to_linear.js";
|
|
8
7
|
import { UPSAMPLE_BILINEAR, UPSAMPLE_NEAREST, upsample_chroma_row } from "../color/upsample_chroma_row.js";
|
|
9
8
|
import { ycbcr_row_to_rgb } from "../color/ycbcr_row_to_rgb.js";
|
|
@@ -50,7 +49,7 @@ export const CHROMA_UPSAMPLING_BEST = 2;
|
|
|
50
49
|
* for, in nits; defaults to {@link LINEAR_REFERENCE_NITS}. Only read for `COLOUR_SPACE_LINEAR`,
|
|
51
50
|
* and the exact counterpart of {@link encode_avif}'s option of the same name
|
|
52
51
|
* @param {number} [options.chroma_upsampling] one of the `CHROMA_UPSAMPLING_*` constants
|
|
53
|
-
* @returns {{data: (Uint8ClampedArray|Uint16Array), width: number, height: number}}
|
|
52
|
+
* @returns {{data: (Uint8ClampedArray|Uint16Array|Float16Array), width: number, height: number}}
|
|
54
53
|
*
|
|
55
54
|
* @author Alex Goldring
|
|
56
55
|
* @copyright Company Named Limited (c) 2026
|
|
@@ -98,9 +97,9 @@ export function convert_to_rgba(decoder, image, options = {}) {
|
|
|
98
97
|
|
|
99
98
|
const samples = width * height * 4;
|
|
100
99
|
|
|
101
|
-
const data = output_float16
|
|
102
|
-
? new
|
|
103
|
-
: new Uint8ClampedArray(samples);
|
|
100
|
+
const data = output_float16
|
|
101
|
+
? new Float16Array(samples)
|
|
102
|
+
: output_bit_depth > 8 ? new Uint16Array(samples) : new Uint8ClampedArray(samples);
|
|
104
103
|
|
|
105
104
|
const maximum = (1 << output_bit_depth) - 1;
|
|
106
105
|
|
|
@@ -180,10 +179,12 @@ export function convert_to_rgba(decoder, image, options = {}) {
|
|
|
180
179
|
: clamp01((image.alpha[alpha_row + x] - alpha_offset) * alpha_scale);
|
|
181
180
|
|
|
182
181
|
if (output_float16) {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
182
|
+
for (let c = 0; c < 3; c++) {
|
|
183
|
+
const value = rgb_row[i + c];
|
|
184
|
+
// Preserve finite HDR saturation, even with a very small reference white.
|
|
185
|
+
data[out + c] = Number.isFinite(value) ? Math.min(Math.max(value, -65504), 65504) : value;
|
|
186
|
+
}
|
|
187
|
+
data[out + 3] = alpha;
|
|
187
188
|
} else {
|
|
188
189
|
data[out] = quantise(rgb_row[i], maximum);
|
|
189
190
|
data[out + 1] = quantise(rgb_row[i + 1], maximum);
|