@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
|
@@ -1,139 +1,139 @@
|
|
|
1
|
-
import { assert } from "../../../core/assert.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { Transform64 } from "./Transform64.js";
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* @typedef {import("../EntityComponentDataset.js").EntityComponentDataset} EntityComponentDataset
|
|
8
|
-
* @typedef {import("../../../shade/renderer/animation/pose/PosePlayback.js").PosePlayback} PosePlayback
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* {@link t64_evaluate_world}, memoised per entity for the length of a tick.
|
|
13
|
-
*
|
|
14
|
-
* An exact evaluation walks the chain to the root and evaluates every level's clips; a socket on a
|
|
15
|
-
* hand is fourteen levels deep on a character, and the sockets a game asks about share most of
|
|
16
|
-
* that chain. Within a tick the inputs — the hierarchy, the clip set, the times, the weights — do
|
|
17
|
-
* not move, so each entity's world is evaluated once and every query below it composes onto the
|
|
18
|
-
* stored answer. Measured on a 70-joint skeleton with two clips: 764 µs to evaluate every joint
|
|
19
|
-
* one query at a time, 160 µs through the cache.
|
|
20
|
-
*
|
|
21
|
-
* **One cache per tick, per model.** The answer for an entity depends on the playbacks it was
|
|
22
|
-
* evaluated under, and the cache does not check them: a caller that changes what a model plays
|
|
23
|
-
* between queries calls {@link invalidate} in between, and calls it once per tick regardless.
|
|
24
|
-
*
|
|
25
|
-
* @author Alex Goldring
|
|
26
|
-
* @copyright Company Named Limited (c) 2026
|
|
27
|
-
*/
|
|
28
|
-
export class T64WorldCache {
|
|
29
|
-
/**
|
|
30
|
-
* Evaluated worlds by entity, valid until {@link invalidate}.
|
|
31
|
-
*
|
|
32
|
-
* @type {Map<number, Transform64>}
|
|
33
|
-
*/
|
|
34
|
-
#worlds = new Map();
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Transforms handed back by {@link invalidate}, for the next tick's entries.
|
|
38
|
-
*
|
|
39
|
-
* @type {Transform64[]}
|
|
40
|
-
*/
|
|
41
|
-
#pool = [];
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Scratch for one level's animated local pose.
|
|
45
|
-
*
|
|
46
|
-
* @type {Transform64}
|
|
47
|
-
*/
|
|
48
|
-
#local = new Transform64();
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* How many entities hold an evaluated world right now.
|
|
52
|
-
*
|
|
53
|
-
* @returns {number}
|
|
54
|
-
*/
|
|
55
|
-
get size() {
|
|
56
|
-
return this.#worlds.size;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Forget every evaluated world. Once per tick, and again whenever a model's playbacks change
|
|
61
|
-
* within one.
|
|
62
|
-
*/
|
|
63
|
-
invalidate() {
|
|
64
|
-
const pool = this.#pool;
|
|
65
|
-
|
|
66
|
-
for (const world of this.#worlds.values()) {
|
|
67
|
-
pool.push(world);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
this.#worlds.clear();
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* The entity's world pose under the playbacks, exactly — the same answer as
|
|
75
|
-
* {@link t64_evaluate_world}, from the cache where it has it.
|
|
76
|
-
*
|
|
77
|
-
* @param {Transform64} result
|
|
78
|
-
* @param {EntityComponentDataset} dataset
|
|
79
|
-
* @param {number} entity
|
|
80
|
-
* @param {PosePlayback[]} playbacks
|
|
81
|
-
* @returns {Transform64} `result`
|
|
82
|
-
*/
|
|
83
|
-
evaluate(result, dataset, entity, playbacks) {
|
|
84
|
-
assert.defined(result, 'result');
|
|
85
|
-
assert.defined(dataset, 'dataset');
|
|
86
|
-
assert.isNonNegativeInteger(entity, 'entity');
|
|
87
|
-
assert.isArray(playbacks, 'playbacks');
|
|
88
|
-
|
|
89
|
-
result.copy(this.#world_of(dataset, entity, playbacks));
|
|
90
|
-
|
|
91
|
-
return result;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* @param {EntityComponentDataset} dataset
|
|
96
|
-
* @param {number} entity
|
|
97
|
-
* @param {PosePlayback[]} playbacks
|
|
98
|
-
* @returns {Transform64} the cache's own copy; not to be kept
|
|
99
|
-
*/
|
|
100
|
-
#world_of(dataset, entity, playbacks) {
|
|
101
|
-
const cached = this.#worlds.get(entity);
|
|
102
|
-
|
|
103
|
-
if (cached !== undefined) {
|
|
104
|
-
return cached;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
assert.ok(dataset.entityExists(entity), `entity ${entity} does not exist`);
|
|
108
|
-
|
|
109
|
-
const attachment = dataset.getComponent(entity, TransformAttachment);
|
|
110
|
-
|
|
111
|
-
const world = this.#pool.pop() ?? new Transform64();
|
|
112
|
-
const local = this.#local;
|
|
113
|
-
|
|
114
|
-
if (attachment === undefined || attachment === null || !dataset.entityExists(attachment.parent)) {
|
|
115
|
-
// the root of the chain, whose world pose is its own; a link whose parent has gone is
|
|
116
|
-
// a root until the attachment system detaches it, and answers from where it was
|
|
117
|
-
const rest = dataset.getComponent(entity, Transform64);
|
|
118
|
-
|
|
119
|
-
assert.defined(rest, `entity ${entity} carries no Transform64 and no attachment`);
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
local.updateMatrix();
|
|
123
|
-
|
|
124
|
-
world.copy(local);
|
|
125
|
-
} else {
|
|
126
|
-
// the parent first, so its answer is in the cache before this level's scratch is used
|
|
127
|
-
const parent = this.#world_of(dataset, attachment.parent, playbacks);
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
local.updateMatrix();
|
|
131
|
-
|
|
132
|
-
world.multiplyTransforms(parent, local);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
this.#worlds.set(entity, world);
|
|
136
|
-
|
|
137
|
-
return world;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
1
|
+
import { assert } from "../../../core/assert.js";
|
|
2
|
+
import { TransformAttachment } from "../transform-attachment/TransformAttachment.js";
|
|
3
|
+
import { t64_evaluate_local } from "./t64_evaluate_local.js";
|
|
4
|
+
import { Transform64 } from "./Transform64.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @typedef {import("../EntityComponentDataset.js").EntityComponentDataset} EntityComponentDataset
|
|
8
|
+
* @typedef {import("../../../shade/renderer/animation/pose/PosePlayback.js").PosePlayback} PosePlayback
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* {@link t64_evaluate_world}, memoised per entity for the length of a tick.
|
|
13
|
+
*
|
|
14
|
+
* An exact evaluation walks the chain to the root and evaluates every level's clips; a socket on a
|
|
15
|
+
* hand is fourteen levels deep on a character, and the sockets a game asks about share most of
|
|
16
|
+
* that chain. Within a tick the inputs — the hierarchy, the clip set, the times, the weights — do
|
|
17
|
+
* not move, so each entity's world is evaluated once and every query below it composes onto the
|
|
18
|
+
* stored answer. Measured on a 70-joint skeleton with two clips: 764 µs to evaluate every joint
|
|
19
|
+
* one query at a time, 160 µs through the cache.
|
|
20
|
+
*
|
|
21
|
+
* **One cache per tick, per model.** The answer for an entity depends on the playbacks it was
|
|
22
|
+
* evaluated under, and the cache does not check them: a caller that changes what a model plays
|
|
23
|
+
* between queries calls {@link invalidate} in between, and calls it once per tick regardless.
|
|
24
|
+
*
|
|
25
|
+
* @author Alex Goldring
|
|
26
|
+
* @copyright Company Named Limited (c) 2026
|
|
27
|
+
*/
|
|
28
|
+
export class T64WorldCache {
|
|
29
|
+
/**
|
|
30
|
+
* Evaluated worlds by entity, valid until {@link invalidate}.
|
|
31
|
+
*
|
|
32
|
+
* @type {Map<number, Transform64>}
|
|
33
|
+
*/
|
|
34
|
+
#worlds = new Map();
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Transforms handed back by {@link invalidate}, for the next tick's entries.
|
|
38
|
+
*
|
|
39
|
+
* @type {Transform64[]}
|
|
40
|
+
*/
|
|
41
|
+
#pool = [];
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Scratch for one level's animated local pose.
|
|
45
|
+
*
|
|
46
|
+
* @type {Transform64}
|
|
47
|
+
*/
|
|
48
|
+
#local = new Transform64();
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* How many entities hold an evaluated world right now.
|
|
52
|
+
*
|
|
53
|
+
* @returns {number}
|
|
54
|
+
*/
|
|
55
|
+
get size() {
|
|
56
|
+
return this.#worlds.size;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Forget every evaluated world. Once per tick, and again whenever a model's playbacks change
|
|
61
|
+
* within one.
|
|
62
|
+
*/
|
|
63
|
+
invalidate() {
|
|
64
|
+
const pool = this.#pool;
|
|
65
|
+
|
|
66
|
+
for (const world of this.#worlds.values()) {
|
|
67
|
+
pool.push(world);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
this.#worlds.clear();
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* The entity's world pose under the playbacks, exactly — the same answer as
|
|
75
|
+
* {@link t64_evaluate_world}, from the cache where it has it.
|
|
76
|
+
*
|
|
77
|
+
* @param {Transform64} result
|
|
78
|
+
* @param {EntityComponentDataset} dataset
|
|
79
|
+
* @param {number} entity
|
|
80
|
+
* @param {PosePlayback[]} playbacks
|
|
81
|
+
* @returns {Transform64} `result`
|
|
82
|
+
*/
|
|
83
|
+
evaluate(result, dataset, entity, playbacks) {
|
|
84
|
+
assert.defined(result, 'result');
|
|
85
|
+
assert.defined(dataset, 'dataset');
|
|
86
|
+
assert.isNonNegativeInteger(entity, 'entity');
|
|
87
|
+
assert.isArray(playbacks, 'playbacks');
|
|
88
|
+
|
|
89
|
+
result.copy(this.#world_of(dataset, entity, playbacks));
|
|
90
|
+
|
|
91
|
+
return result;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* @param {EntityComponentDataset} dataset
|
|
96
|
+
* @param {number} entity
|
|
97
|
+
* @param {PosePlayback[]} playbacks
|
|
98
|
+
* @returns {Transform64} the cache's own copy; not to be kept
|
|
99
|
+
*/
|
|
100
|
+
#world_of(dataset, entity, playbacks) {
|
|
101
|
+
const cached = this.#worlds.get(entity);
|
|
102
|
+
|
|
103
|
+
if (cached !== undefined) {
|
|
104
|
+
return cached;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
assert.ok(dataset.entityExists(entity), `entity ${entity} does not exist`);
|
|
108
|
+
|
|
109
|
+
const attachment = dataset.getComponent(entity, TransformAttachment);
|
|
110
|
+
|
|
111
|
+
const world = this.#pool.pop() ?? new Transform64();
|
|
112
|
+
const local = this.#local;
|
|
113
|
+
|
|
114
|
+
if (attachment === undefined || attachment === null || !dataset.entityExists(attachment.parent)) {
|
|
115
|
+
// the root of the chain, whose world pose is its own; a link whose parent has gone is
|
|
116
|
+
// a root until the attachment system detaches it, and answers from where it was
|
|
117
|
+
const rest = dataset.getComponent(entity, Transform64);
|
|
118
|
+
|
|
119
|
+
assert.defined(rest, `entity ${entity} carries no Transform64 and no attachment`);
|
|
120
|
+
|
|
121
|
+
t64_evaluate_local(local, dataset, entity, rest, playbacks);
|
|
122
|
+
local.updateMatrix();
|
|
123
|
+
|
|
124
|
+
world.copy(local);
|
|
125
|
+
} else {
|
|
126
|
+
// the parent first, so its answer is in the cache before this level's scratch is used
|
|
127
|
+
const parent = this.#world_of(dataset, attachment.parent, playbacks);
|
|
128
|
+
|
|
129
|
+
t64_evaluate_local(local, dataset, entity, attachment.transform, playbacks);
|
|
130
|
+
local.updateMatrix();
|
|
131
|
+
|
|
132
|
+
world.multiplyTransforms(parent, local);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
this.#worlds.set(entity, world);
|
|
136
|
+
|
|
137
|
+
return world;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {import("../EntityComponentDataset.js").EntityComponentDataset} EntityComponentDataset
|
|
3
|
+
* @typedef {import("../../../shade/renderer/animation/pose/PosePlayback.js").PosePlayback} PosePlayback
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* One level of an exact evaluation: an entity's local pose under the playing clips
|
|
7
|
+
* ({@link pose_evaluate_local}), or — where a CPU writer holds its offset (`gpu_authority_hold`) —
|
|
8
|
+
* the offset itself, whatever the clips say of it.
|
|
9
|
+
*
|
|
10
|
+
* That is the GPU's rule, mirrored: the animation manager mutes every binding that names a held
|
|
11
|
+
* entity, so its row is what the holder wrote and no clip reaches it. A twin that applied the clips
|
|
12
|
+
* there would put a socket under a cape joint where the clip says the joint is, and the cape where
|
|
13
|
+
* the cloth says it is.
|
|
14
|
+
*
|
|
15
|
+
* @param {Transform64} result written with the local TRS; its matrix is left stale
|
|
16
|
+
* @param {EntityComponentDataset} dataset
|
|
17
|
+
* @param {number} entity
|
|
18
|
+
* @param {Transform64} rest the entity's own offset, or a root's world
|
|
19
|
+
* @param {PosePlayback[]} playbacks
|
|
20
|
+
* @returns {Transform64} `result`
|
|
21
|
+
*/
|
|
22
|
+
export function t64_evaluate_local(result: Transform64, dataset: EntityComponentDataset, entity: number, rest: Transform64, playbacks: PosePlayback[]): Transform64;
|
|
23
|
+
export type EntityComponentDataset = import("../EntityComponentDataset.js").EntityComponentDataset;
|
|
24
|
+
export type PosePlayback = import("../../../shade/renderer/animation/pose/PosePlayback.js").PosePlayback;
|
|
25
|
+
//# sourceMappingURL=t64_evaluate_local.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"t64_evaluate_local.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/transform/t64_evaluate_local.js"],"names":[],"mappings":"AAIA;;;GAGG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,iEANW,sBAAsB,UACtB,MAAM,gCAEN,YAAY,EAAE,eAWxB;qCA7BY,OAAO,8BAA8B,EAAE,sBAAsB;2BAC7D,OAAO,wDAAwD,EAAE,YAAY"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { pose_evaluate_local } from "../../../shade/renderer/animation/pose/pose_evaluate_local.js";
|
|
2
|
+
import { GPUStateAuthorityFlags } from "../gpu/GPUStateAuthorityFlags.js";
|
|
3
|
+
import { gpu_authority_held } from "../gpu/gpu_authority_held.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @typedef {import("../EntityComponentDataset.js").EntityComponentDataset} EntityComponentDataset
|
|
7
|
+
* @typedef {import("../../../shade/renderer/animation/pose/PosePlayback.js").PosePlayback} PosePlayback
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* One level of an exact evaluation: an entity's local pose under the playing clips
|
|
12
|
+
* ({@link pose_evaluate_local}), or — where a CPU writer holds its offset (`gpu_authority_hold`) —
|
|
13
|
+
* the offset itself, whatever the clips say of it.
|
|
14
|
+
*
|
|
15
|
+
* That is the GPU's rule, mirrored: the animation manager mutes every binding that names a held
|
|
16
|
+
* entity, so its row is what the holder wrote and no clip reaches it. A twin that applied the clips
|
|
17
|
+
* there would put a socket under a cape joint where the clip says the joint is, and the cape where
|
|
18
|
+
* the cloth says it is.
|
|
19
|
+
*
|
|
20
|
+
* @param {Transform64} result written with the local TRS; its matrix is left stale
|
|
21
|
+
* @param {EntityComponentDataset} dataset
|
|
22
|
+
* @param {number} entity
|
|
23
|
+
* @param {Transform64} rest the entity's own offset, or a root's world
|
|
24
|
+
* @param {PosePlayback[]} playbacks
|
|
25
|
+
* @returns {Transform64} `result`
|
|
26
|
+
*/
|
|
27
|
+
export function t64_evaluate_local(result, dataset, entity, rest, playbacks) {
|
|
28
|
+
if (gpu_authority_held(dataset, entity, GPUStateAuthorityFlags.TransformAttachment)) {
|
|
29
|
+
result.copy(rest);
|
|
30
|
+
|
|
31
|
+
return result;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return pose_evaluate_local(result, entity, rest, playbacks);
|
|
35
|
+
}
|
|
@@ -12,10 +12,12 @@
|
|
|
12
12
|
*
|
|
13
13
|
* An entity the GPU owns the transform of — see `GPUStateAuthority` — is answered the same way;
|
|
14
14
|
* that is the point. A row the GPU composes and a chain this evaluates agree to float precision.
|
|
15
|
+
* So does a level a CPU writer holds (`gpu_authority_hold`): no clip reaches its row on the GPU,
|
|
16
|
+
* and none reaches it here — it is its offset ({@link t64_evaluate_local}).
|
|
15
17
|
*
|
|
16
|
-
* Each level costs a
|
|
17
|
-
*
|
|
18
|
-
*
|
|
18
|
+
* Each level costs a lookup in every playing clip and the curves of the channels that name it in the
|
|
19
|
+
* audible ones, so a whole skeleton one query at a time re-evaluates every level above each joint
|
|
20
|
+
* again; a caller asking about several entities of one model within a tick goes through
|
|
19
21
|
* {@link T64WorldCache}, which evaluates each entity once and composes the rest onto it.
|
|
20
22
|
*
|
|
21
23
|
* @param {Transform64} result written with the evaluated world TRS and matrix
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"t64_evaluate_world.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/transform/t64_evaluate_world.js"],"names":[],"mappings":"AA0CA
|
|
1
|
+
{"version":3,"file":"t64_evaluate_world.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/transform/t64_evaluate_world.js"],"names":[],"mappings":"AA0CA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,2CANW,WAAW,WACX,sBAAsB,UACtB,MAAM,aACN,YAAY,EAAE,GACZ,WAAW,CA2DvB;qCAzHY,OAAO,8BAA8B,EAAE,sBAAsB;2BAC7D,OAAO,wDAAwD,EAAE,YAAY;4BAJ9D,kBAAkB"}
|
|
@@ -1,126 +1,128 @@
|
|
|
1
|
-
import { assert } from "../../../core/assert.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { Transform64 } from "./Transform64.js";
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* @typedef {import("../EntityComponentDataset.js").EntityComponentDataset} EntityComponentDataset
|
|
8
|
-
* @typedef {import("../../../shade/renderer/animation/pose/PosePlayback.js").PosePlayback} PosePlayback
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Scratch for one level of the parent walk. Depth is bounded by the hierarchy, and reusing a
|
|
13
|
-
* small stack keeps the query allocation-free.
|
|
14
|
-
*
|
|
15
|
-
* @type {Transform64[]}
|
|
16
|
-
*/
|
|
17
|
-
const SCRATCH = [];
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* The chain from the entity up to its root, and each level's rest pose.
|
|
21
|
-
*
|
|
22
|
-
* @type {number[]}
|
|
23
|
-
*/
|
|
24
|
-
const CHAIN = [];
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* @type {Transform64[]}
|
|
28
|
-
*/
|
|
29
|
-
const RESTS = [];
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* @param {number} depth
|
|
33
|
-
* @returns {Transform64}
|
|
34
|
-
*/
|
|
35
|
-
function scratch_at(depth) {
|
|
36
|
-
while (SCRATCH.length <= depth) {
|
|
37
|
-
SCRATCH.push(new Transform64());
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
return SCRATCH[depth];
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Evaluate an entity's **world** pose under a set of playing clips, exactly, from its own chain.
|
|
45
|
-
*
|
|
46
|
-
* This is the question gameplay asks of an animated model and the only way the simulation may
|
|
47
|
-
* ask it: where is the muzzle, where does this effect attach, where does the projectile leave
|
|
48
|
-
* from. It walks the entity's `TransformAttachment` parents to the root, evaluates each level's
|
|
49
|
-
* animated local pose from the clips ({@link pose_evaluate_local}, with the attachment's offset —
|
|
50
|
-
* or the root's `Transform64` — as the rest pose), and composes down in double precision. Nothing
|
|
51
|
-
* is read back from the GPU, nothing is a frame late, and nothing on the CPU has to have been
|
|
52
|
-
* composed first: the answer is a pure function of (hierarchy, clip set, time, weights), which is
|
|
53
|
-
* what keeps it deterministic on a peer with no device at all.
|
|
54
|
-
*
|
|
55
|
-
* An entity the GPU owns the transform of — see `GPUStateAuthority` — is answered the same way;
|
|
56
|
-
* that is the point. A row the GPU composes and a chain this evaluates agree to float precision.
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
* @
|
|
64
|
-
*
|
|
65
|
-
* @param {
|
|
66
|
-
* @param {
|
|
67
|
-
* @
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
assert.
|
|
73
|
-
assert.
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
result.
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
1
|
+
import { assert } from "../../../core/assert.js";
|
|
2
|
+
import { TransformAttachment } from "../transform-attachment/TransformAttachment.js";
|
|
3
|
+
import { t64_evaluate_local } from "./t64_evaluate_local.js";
|
|
4
|
+
import { Transform64 } from "./Transform64.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @typedef {import("../EntityComponentDataset.js").EntityComponentDataset} EntityComponentDataset
|
|
8
|
+
* @typedef {import("../../../shade/renderer/animation/pose/PosePlayback.js").PosePlayback} PosePlayback
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Scratch for one level of the parent walk. Depth is bounded by the hierarchy, and reusing a
|
|
13
|
+
* small stack keeps the query allocation-free.
|
|
14
|
+
*
|
|
15
|
+
* @type {Transform64[]}
|
|
16
|
+
*/
|
|
17
|
+
const SCRATCH = [];
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The chain from the entity up to its root, and each level's rest pose.
|
|
21
|
+
*
|
|
22
|
+
* @type {number[]}
|
|
23
|
+
*/
|
|
24
|
+
const CHAIN = [];
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @type {Transform64[]}
|
|
28
|
+
*/
|
|
29
|
+
const RESTS = [];
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* @param {number} depth
|
|
33
|
+
* @returns {Transform64}
|
|
34
|
+
*/
|
|
35
|
+
function scratch_at(depth) {
|
|
36
|
+
while (SCRATCH.length <= depth) {
|
|
37
|
+
SCRATCH.push(new Transform64());
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return SCRATCH[depth];
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Evaluate an entity's **world** pose under a set of playing clips, exactly, from its own chain.
|
|
45
|
+
*
|
|
46
|
+
* This is the question gameplay asks of an animated model and the only way the simulation may
|
|
47
|
+
* ask it: where is the muzzle, where does this effect attach, where does the projectile leave
|
|
48
|
+
* from. It walks the entity's `TransformAttachment` parents to the root, evaluates each level's
|
|
49
|
+
* animated local pose from the clips ({@link pose_evaluate_local}, with the attachment's offset —
|
|
50
|
+
* or the root's `Transform64` — as the rest pose), and composes down in double precision. Nothing
|
|
51
|
+
* is read back from the GPU, nothing is a frame late, and nothing on the CPU has to have been
|
|
52
|
+
* composed first: the answer is a pure function of (hierarchy, clip set, time, weights), which is
|
|
53
|
+
* what keeps it deterministic on a peer with no device at all.
|
|
54
|
+
*
|
|
55
|
+
* An entity the GPU owns the transform of — see `GPUStateAuthority` — is answered the same way;
|
|
56
|
+
* that is the point. A row the GPU composes and a chain this evaluates agree to float precision.
|
|
57
|
+
* So does a level a CPU writer holds (`gpu_authority_hold`): no clip reaches its row on the GPU,
|
|
58
|
+
* and none reaches it here — it is its offset ({@link t64_evaluate_local}).
|
|
59
|
+
*
|
|
60
|
+
* Each level costs a lookup in every playing clip and the curves of the channels that name it in the
|
|
61
|
+
* audible ones, so a whole skeleton one query at a time re-evaluates every level above each joint
|
|
62
|
+
* again; a caller asking about several entities of one model within a tick goes through
|
|
63
|
+
* {@link T64WorldCache}, which evaluates each entity once and composes the rest onto it.
|
|
64
|
+
*
|
|
65
|
+
* @param {Transform64} result written with the evaluated world TRS and matrix
|
|
66
|
+
* @param {EntityComponentDataset} dataset
|
|
67
|
+
* @param {number} entity
|
|
68
|
+
* @param {PosePlayback[]} playbacks every clip playing on the model, with its time and weight
|
|
69
|
+
* @returns {Transform64} `result`
|
|
70
|
+
*/
|
|
71
|
+
export function t64_evaluate_world(result, dataset, entity, playbacks) {
|
|
72
|
+
assert.defined(result, 'result');
|
|
73
|
+
assert.defined(dataset, 'dataset');
|
|
74
|
+
assert.isNonNegativeInteger(entity, 'entity');
|
|
75
|
+
assert.isArray(playbacks, 'playbacks');
|
|
76
|
+
|
|
77
|
+
CHAIN.length = 0;
|
|
78
|
+
RESTS.length = 0;
|
|
79
|
+
|
|
80
|
+
let cursor = entity;
|
|
81
|
+
|
|
82
|
+
while (cursor !== -1) {
|
|
83
|
+
assert.ok(dataset.entityExists(cursor), `entity ${cursor} in the chain above ${entity} does not exist`);
|
|
84
|
+
|
|
85
|
+
const attachment = dataset.getComponent(cursor, TransformAttachment);
|
|
86
|
+
|
|
87
|
+
CHAIN.push(cursor);
|
|
88
|
+
|
|
89
|
+
if (attachment === undefined || attachment === null || !dataset.entityExists(attachment.parent)) {
|
|
90
|
+
// the root of the chain, whose world pose is its own; a link whose parent has gone is
|
|
91
|
+
// a root until the attachment system detaches it, and answers from where it was
|
|
92
|
+
const world = dataset.getComponent(cursor, Transform64);
|
|
93
|
+
|
|
94
|
+
assert.defined(world, `entity ${cursor} carries no Transform64 and no attachment`);
|
|
95
|
+
|
|
96
|
+
RESTS.push(world);
|
|
97
|
+
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
RESTS.push(attachment.transform);
|
|
102
|
+
|
|
103
|
+
cursor = attachment.parent;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// root first, so each step composes onto what is already accumulated
|
|
107
|
+
let depth = 0;
|
|
108
|
+
|
|
109
|
+
for (let i = CHAIN.length - 1; i >= 0; i--) {
|
|
110
|
+
const local = scratch_at(depth);
|
|
111
|
+
|
|
112
|
+
t64_evaluate_local(local, dataset, CHAIN[i], RESTS[i], playbacks);
|
|
113
|
+
local.updateMatrix();
|
|
114
|
+
|
|
115
|
+
if (i === CHAIN.length - 1) {
|
|
116
|
+
result.copy(local);
|
|
117
|
+
} else {
|
|
118
|
+
result.multiplyTransforms(result, local);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
depth++;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
CHAIN.length = 0;
|
|
125
|
+
RESTS.length = 0;
|
|
126
|
+
|
|
127
|
+
return result;
|
|
128
|
+
}
|