@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,167 @@
|
|
|
1
|
+
import { hash_mix2 } from "../../../../../../core/math/hash/hash_mix2.js";
|
|
2
|
+
import { hash_mix3 } from "../../../../../../core/math/hash/hash_mix3.js";
|
|
3
|
+
import { lowbias32 } from "../../../../../../core/math/hash/lowbias32.js";
|
|
4
|
+
import { triangle_fingerprint_stream } from "./triangle_fingerprint_stream.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Stands in for the triangle across an edge that has none, or more than one: a boundary or a
|
|
8
|
+
* non-manifold edge. Any value does, so long as it is the same for every geometry.
|
|
9
|
+
* @type {number}
|
|
10
|
+
*/
|
|
11
|
+
const NO_NEIGHBOUR = 0x5bd1e995;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* For every triangle, the triangle across each of its three edges, where edge `k` runs from corner `k`
|
|
15
|
+
* to corner `k + 1`; -1 across a boundary edge or one shared by more than two triangles.
|
|
16
|
+
*
|
|
17
|
+
* Two triangles are neighbours when they share an edge's two vertex indices, which is how
|
|
18
|
+
* {@link geometry_to_topology} joins them too, so the triangles a hash reaches are the ones growth walks.
|
|
19
|
+
*
|
|
20
|
+
* @param {ArrayLike<number>|null} index three entries per triangle, or null for one vertex per corner
|
|
21
|
+
* @param {number} triangle_count
|
|
22
|
+
* @param {number} vertex_count
|
|
23
|
+
* @returns {Int32Array} `triangle_count * 3`
|
|
24
|
+
*/
|
|
25
|
+
function triangle_edge_neighbours(index, triangle_count, vertex_count) {
|
|
26
|
+
const corner_count = triangle_count * 3;
|
|
27
|
+
|
|
28
|
+
const result = new Int32Array(corner_count).fill(-1);
|
|
29
|
+
|
|
30
|
+
if (index === null) {
|
|
31
|
+
// no corner shares a vertex with another, so no edge is shared
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// each edge filed under its lower vertex, so the two sides of an edge land in one short list
|
|
36
|
+
const start = new Uint32Array(vertex_count + 1);
|
|
37
|
+
|
|
38
|
+
for (let e = 0; e < corner_count; e++) {
|
|
39
|
+
const a = index[e];
|
|
40
|
+
const b = index[e - e % 3 + (e + 1) % 3];
|
|
41
|
+
|
|
42
|
+
start[(a < b ? a : b) + 1]++;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
for (let v = 0; v < vertex_count; v++) {
|
|
46
|
+
start[v + 1] += start[v];
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const cursor = start.slice(0, vertex_count);
|
|
50
|
+
const edges = new Uint32Array(corner_count);
|
|
51
|
+
|
|
52
|
+
for (let e = 0; e < corner_count; e++) {
|
|
53
|
+
const a = index[e];
|
|
54
|
+
const b = index[e - e % 3 + (e + 1) % 3];
|
|
55
|
+
|
|
56
|
+
edges[cursor[a < b ? a : b]++] = e;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
for (let v = 0; v < vertex_count; v++) {
|
|
60
|
+
const end = start[v + 1];
|
|
61
|
+
|
|
62
|
+
for (let i = start[v]; i < end; i++) {
|
|
63
|
+
const e = edges[i];
|
|
64
|
+
const a = index[e];
|
|
65
|
+
const b = index[e - e % 3 + (e + 1) % 3];
|
|
66
|
+
|
|
67
|
+
if (a === b) {
|
|
68
|
+
// a degenerate triangle's collapsed edge joins nothing
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const upper = a < b ? b : a;
|
|
73
|
+
|
|
74
|
+
let other = -1;
|
|
75
|
+
let sharing = 0;
|
|
76
|
+
|
|
77
|
+
for (let j = start[v]; j < end; j++) {
|
|
78
|
+
if (j === i) continue;
|
|
79
|
+
|
|
80
|
+
const f = edges[j];
|
|
81
|
+
const fa = index[f];
|
|
82
|
+
const fb = index[f - f % 3 + (f + 1) % 3];
|
|
83
|
+
|
|
84
|
+
if ((fa < fb ? fb : fa) === upper) {
|
|
85
|
+
other = f;
|
|
86
|
+
sharing++;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if (sharing === 1) {
|
|
91
|
+
result[e] = (other / 3) | 0;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return result;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* One 32-bit hash per triangle that depends on the triangles within `rounds` edge-steps of it, and on
|
|
101
|
+
* nothing else: not on where any of them sits in the index stream, not on which corner a triangle's
|
|
102
|
+
* indices start at, and not on the rigid motion and uniform scale the geometry was placed with.
|
|
103
|
+
*
|
|
104
|
+
* Round 0 is the triangle's own {@link triangle_fingerprint_stream} fingerprint. Each round after that
|
|
105
|
+
* mixes in the three hashes across the triangle's edges, read in winding order and started at the
|
|
106
|
+
* smallest, so the same triangle indexed from another corner reads the same three in the same order.
|
|
107
|
+
*
|
|
108
|
+
* Two copies of a piece hash their triangles alike wherever a triangle's `rounds`-ring lies inside the
|
|
109
|
+
* piece, whatever order a meshlet build or an exporter left the triangles in. A triangle nearer the
|
|
110
|
+
* piece's edge than that sees what surrounds the piece, which differs between copies.
|
|
111
|
+
*
|
|
112
|
+
* @param {Geometry} geometry
|
|
113
|
+
* @param {number} rounds
|
|
114
|
+
* @returns {Uint32Array} one per triangle
|
|
115
|
+
*/
|
|
116
|
+
export function face_neighbourhood_hash(geometry, rounds) {
|
|
117
|
+
let hash = triangle_fingerprint_stream(geometry);
|
|
118
|
+
|
|
119
|
+
if (rounds === 0) {
|
|
120
|
+
return hash;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
const triangle_count = hash.length;
|
|
124
|
+
|
|
125
|
+
const neighbours = triangle_edge_neighbours(
|
|
126
|
+
geometry.index !== null ? geometry.index.data : null,
|
|
127
|
+
triangle_count,
|
|
128
|
+
geometry.getVertexCount()
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
let next = new Uint32Array(triangle_count);
|
|
132
|
+
|
|
133
|
+
for (let round = 0; round < rounds; round++) {
|
|
134
|
+
for (let t = 0; t < triangle_count; t++) {
|
|
135
|
+
const n0 = neighbours[t * 3];
|
|
136
|
+
const n1 = neighbours[t * 3 + 1];
|
|
137
|
+
const n2 = neighbours[t * 3 + 2];
|
|
138
|
+
|
|
139
|
+
const h0 = n0 >= 0 ? hash[n0] : NO_NEIGHBOUR;
|
|
140
|
+
const h1 = n1 >= 0 ? hash[n1] : NO_NEIGHBOUR;
|
|
141
|
+
const h2 = n2 >= 0 ? hash[n2] : NO_NEIGHBOUR;
|
|
142
|
+
|
|
143
|
+
// the rotation of (h0, h1, h2) that starts at the smallest; ties go to the smaller next value
|
|
144
|
+
let x = h0, y = h1, z = h2;
|
|
145
|
+
|
|
146
|
+
if (h1 < x || (h1 === x && (h2 < y || (h2 === y && h0 < z)))) {
|
|
147
|
+
x = h1;
|
|
148
|
+
y = h2;
|
|
149
|
+
z = h0;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if (h2 < x || (h2 === x && (h0 < y || (h0 === y && h1 < z)))) {
|
|
153
|
+
x = h2;
|
|
154
|
+
y = h0;
|
|
155
|
+
z = h1;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
next[t] = lowbias32(hash_mix2(hash_mix3(hash[t], x, y), z));
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
const swap = hash;
|
|
162
|
+
hash = next;
|
|
163
|
+
next = swap;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return hash;
|
|
167
|
+
}
|
package/src/shade/renderer/scene/optimization/geometry/internal/neighbourhood_anchor_index.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pair up triangles whose {@link face_neighbourhood_hash} values are equal, within a geometry or across
|
|
3
|
+
* two: each pair is a place where a copy may sit, for growth to confirm or throw out.
|
|
4
|
+
*
|
|
5
|
+
* Within one hash, every triangle is paired with the first, in input order (geometry, then triangle) -
|
|
6
|
+
* not every triangle with every other. A copy that matches the first is found from it, and one that
|
|
7
|
+
* does not still gets the first's canonical piece by another anchor; pairing them all only repeats
|
|
8
|
+
* growth that the first pair already did. On Sponza through scene_optimize's meshlet round trip,
|
|
9
|
+
* pairing them all grew 172k times against 41k, and shared fewer triangles: 144.5k against 145.8k.
|
|
10
|
+
*
|
|
11
|
+
* A hash shared by more than `seed_budget` triangles keeps the first `seed_budget` of them, so a
|
|
12
|
+
* featureless region repeated thousands of times does not swamp what follows.
|
|
13
|
+
*
|
|
14
|
+
* @param {Uint32Array[]} hash_streams one per geometry, one hash per triangle
|
|
15
|
+
* @param {number} seed_budget most triangles kept per hash, >= 2
|
|
16
|
+
* @returns {Uint32Array} {@link ANCHOR_STRIDE} words per anchor: a geometry, a triangle of it, b geometry,
|
|
17
|
+
* a triangle of it. The `a` side is the earlier of the two in input order.
|
|
18
|
+
*/
|
|
19
|
+
export function neighbourhood_anchor_index(hash_streams: Uint32Array[], seed_budget: number): Uint32Array;
|
|
20
|
+
/**
|
|
21
|
+
* Words per anchor in the array {@link neighbourhood_anchor_index} returns.
|
|
22
|
+
* @type {number}
|
|
23
|
+
*/
|
|
24
|
+
export const ANCHOR_STRIDE: number;
|
|
25
|
+
//# sourceMappingURL=neighbourhood_anchor_index.d.ts.map
|
package/src/shade/renderer/scene/optimization/geometry/internal/neighbourhood_anchor_index.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"neighbourhood_anchor_index.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/scene/optimization/geometry/internal/neighbourhood_anchor_index.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;GAiBG;AACH,yDALW,WAAW,EAAE,eACb,MAAM,GACJ,WAAW,CAoGvB;AAzHD;;;GAGG;AACH,4BAFU,MAAM,CAEe"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { array_quick_sort_by_lookup_uint } from "../../../../../../core/collection/array/array_quick_sort_by_lookup_uint.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Words per anchor in the array {@link neighbourhood_anchor_index} returns.
|
|
5
|
+
* @type {number}
|
|
6
|
+
*/
|
|
7
|
+
export const ANCHOR_STRIDE = 4;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Pair up triangles whose {@link face_neighbourhood_hash} values are equal, within a geometry or across
|
|
11
|
+
* two: each pair is a place where a copy may sit, for growth to confirm or throw out.
|
|
12
|
+
*
|
|
13
|
+
* Within one hash, every triangle is paired with the first, in input order (geometry, then triangle) -
|
|
14
|
+
* not every triangle with every other. A copy that matches the first is found from it, and one that
|
|
15
|
+
* does not still gets the first's canonical piece by another anchor; pairing them all only repeats
|
|
16
|
+
* growth that the first pair already did. On Sponza through scene_optimize's meshlet round trip,
|
|
17
|
+
* pairing them all grew 172k times against 41k, and shared fewer triangles: 144.5k against 145.8k.
|
|
18
|
+
*
|
|
19
|
+
* A hash shared by more than `seed_budget` triangles keeps the first `seed_budget` of them, so a
|
|
20
|
+
* featureless region repeated thousands of times does not swamp what follows.
|
|
21
|
+
*
|
|
22
|
+
* @param {Uint32Array[]} hash_streams one per geometry, one hash per triangle
|
|
23
|
+
* @param {number} seed_budget most triangles kept per hash, >= 2
|
|
24
|
+
* @returns {Uint32Array} {@link ANCHOR_STRIDE} words per anchor: a geometry, a triangle of it, b geometry,
|
|
25
|
+
* a triangle of it. The `a` side is the earlier of the two in input order.
|
|
26
|
+
*/
|
|
27
|
+
export function neighbourhood_anchor_index(hash_streams, seed_budget) {
|
|
28
|
+
let total = 0;
|
|
29
|
+
|
|
30
|
+
for (const stream of hash_streams) {
|
|
31
|
+
total += stream.length;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// every triangle of every geometry, numbered in input order
|
|
35
|
+
const hash = new Uint32Array(total);
|
|
36
|
+
const geometry_of = new Uint32Array(total);
|
|
37
|
+
const offset_of = new Uint32Array(hash_streams.length);
|
|
38
|
+
|
|
39
|
+
let cursor = 0;
|
|
40
|
+
|
|
41
|
+
for (let g = 0; g < hash_streams.length; g++) {
|
|
42
|
+
const stream = hash_streams[g];
|
|
43
|
+
|
|
44
|
+
offset_of[g] = cursor;
|
|
45
|
+
hash.set(stream, cursor);
|
|
46
|
+
geometry_of.fill(g, cursor, cursor + stream.length);
|
|
47
|
+
|
|
48
|
+
cursor += stream.length;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const order = new Uint32Array(total);
|
|
52
|
+
|
|
53
|
+
for (let i = 0; i < total; i++) {
|
|
54
|
+
order[i] = i;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
array_quick_sort_by_lookup_uint(order, hash, 0, total - 1);
|
|
58
|
+
|
|
59
|
+
/*
|
|
60
|
+
Each shared hash's triangles, filed under the first of them in input order: where its run starts in
|
|
61
|
+
`order`, and how many of the run are kept. -1 for a triangle that is first of no run.
|
|
62
|
+
*/
|
|
63
|
+
const run_of_first = new Int32Array(total).fill(-1);
|
|
64
|
+
const kept_of_first = new Uint32Array(total);
|
|
65
|
+
|
|
66
|
+
let anchor_count = 0;
|
|
67
|
+
|
|
68
|
+
for (let run_start = 0; run_start < total;) {
|
|
69
|
+
let run_end = run_start + 1;
|
|
70
|
+
|
|
71
|
+
while (run_end < total && hash[order[run_end]] === hash[order[run_start]]) {
|
|
72
|
+
run_end++;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (run_end - run_start > 1) {
|
|
76
|
+
// the sort leaves equal hashes in no particular order; input order decides who is first and who is kept
|
|
77
|
+
order.subarray(run_start, run_end).sort();
|
|
78
|
+
|
|
79
|
+
const kept = Math.min(run_end - run_start, seed_budget);
|
|
80
|
+
|
|
81
|
+
run_of_first[order[run_start]] = run_start;
|
|
82
|
+
kept_of_first[order[run_start]] = kept;
|
|
83
|
+
|
|
84
|
+
anchor_count += kept - 1;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
run_start = run_end;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/*
|
|
91
|
+
Emitted in input order of each run's first triangle, so growth meets the anchors geometry by geometry,
|
|
92
|
+
triangle by triangle. Growth claims the triangles it covers and later anchors inside them are skipped,
|
|
93
|
+
so the order decides which matches are grown: in the order the sort left the hashes, Sponza through
|
|
94
|
+
scene_optimize's meshlet round trip shared 125.7k triangles, against 145.8k in this one.
|
|
95
|
+
*/
|
|
96
|
+
const anchors = new Uint32Array(anchor_count * ANCHOR_STRIDE);
|
|
97
|
+
|
|
98
|
+
let written = 0;
|
|
99
|
+
|
|
100
|
+
for (let first = 0; first < total; first++) {
|
|
101
|
+
const run_start = run_of_first[first];
|
|
102
|
+
|
|
103
|
+
if (run_start === -1) {
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const first_geometry = geometry_of[first];
|
|
108
|
+
const first_triangle = first - offset_of[first_geometry];
|
|
109
|
+
|
|
110
|
+
const kept = kept_of_first[first];
|
|
111
|
+
|
|
112
|
+
for (let i = 1; i < kept; i++) {
|
|
113
|
+
const other = order[run_start + i];
|
|
114
|
+
const other_geometry = geometry_of[other];
|
|
115
|
+
|
|
116
|
+
anchors[written++] = first_geometry;
|
|
117
|
+
anchors[written++] = first_triangle;
|
|
118
|
+
anchors[written++] = other_geometry;
|
|
119
|
+
anchors[written++] = other - offset_of[other_geometry];
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return anchors;
|
|
124
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lay triangle `face_b` of B on triangle `face_a` of A corner to corner, keeping the winding: corner `k`
|
|
3
|
+
* of A on corner `(k + offset) % 3` of B. Writes the three pairs into `out` (vertex of A → vertex of B)
|
|
4
|
+
* when every pair carries equal attributes.
|
|
5
|
+
*
|
|
6
|
+
* A triangle lies on another in three ways that keep the winding. Attributes usually rule out two; where
|
|
7
|
+
* they leave more than one, the caller grows from each in turn and lets positions decide.
|
|
8
|
+
*
|
|
9
|
+
* @param {Map<number, number>} out cleared first; left empty when the offset does not fit
|
|
10
|
+
* @param {import("./vertex_attributes_equal.js").VertexAttributePairs} attributes
|
|
11
|
+
* @param {BinaryTopology} topology_a
|
|
12
|
+
* @param {BinaryTopology} topology_b
|
|
13
|
+
* @param {number} face_a
|
|
14
|
+
* @param {number} face_b
|
|
15
|
+
* @param {number} offset 0, 1 or 2
|
|
16
|
+
* @returns {boolean} whether `out` holds a correspondence
|
|
17
|
+
*/
|
|
18
|
+
export function seed_correspondence_from_face_pair(out: Map<number, number>, attributes: import("./vertex_attributes_equal.js").VertexAttributePairs, topology_a: BinaryTopology, topology_b: BinaryTopology, face_a: number, face_b: number, offset: number): boolean;
|
|
19
|
+
//# sourceMappingURL=seed_correspondence_from_face_pair.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seed_correspondence_from_face_pair.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/scene/optimization/geometry/internal/seed_correspondence_from_face_pair.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;GAgBG;AACH,wDATW,IAAI,MAAM,EAAE,MAAM,CAAC,cACnB,OAAO,8BAA8B,EAAE,oBAAoB,kEAG3D,MAAM,UACN,MAAM,UACN,MAAM,GACJ,OAAO,CA0BnB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { bt_face_read_triangle_vertices } from "../../../../../../core/geom/3d/topology/struct/binary/query/bt_face_read_triangle.js";
|
|
2
|
+
import { vertex_attributes_match } from "./vertex_attributes_equal.js";
|
|
3
|
+
|
|
4
|
+
const a_corners = [0, 0, 0];
|
|
5
|
+
const b_corners = [0, 0, 0];
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Lay triangle `face_b` of B on triangle `face_a` of A corner to corner, keeping the winding: corner `k`
|
|
9
|
+
* of A on corner `(k + offset) % 3` of B. Writes the three pairs into `out` (vertex of A → vertex of B)
|
|
10
|
+
* when every pair carries equal attributes.
|
|
11
|
+
*
|
|
12
|
+
* A triangle lies on another in three ways that keep the winding. Attributes usually rule out two; where
|
|
13
|
+
* they leave more than one, the caller grows from each in turn and lets positions decide.
|
|
14
|
+
*
|
|
15
|
+
* @param {Map<number, number>} out cleared first; left empty when the offset does not fit
|
|
16
|
+
* @param {import("./vertex_attributes_equal.js").VertexAttributePairs} attributes
|
|
17
|
+
* @param {BinaryTopology} topology_a
|
|
18
|
+
* @param {BinaryTopology} topology_b
|
|
19
|
+
* @param {number} face_a
|
|
20
|
+
* @param {number} face_b
|
|
21
|
+
* @param {number} offset 0, 1 or 2
|
|
22
|
+
* @returns {boolean} whether `out` holds a correspondence
|
|
23
|
+
*/
|
|
24
|
+
export function seed_correspondence_from_face_pair(
|
|
25
|
+
out,
|
|
26
|
+
attributes,
|
|
27
|
+
topology_a, topology_b,
|
|
28
|
+
face_a, face_b,
|
|
29
|
+
offset
|
|
30
|
+
) {
|
|
31
|
+
out.clear();
|
|
32
|
+
|
|
33
|
+
if (!bt_face_read_triangle_vertices(a_corners, topology_a, face_a)) return false;
|
|
34
|
+
if (!bt_face_read_triangle_vertices(b_corners, topology_b, face_b)) return false;
|
|
35
|
+
|
|
36
|
+
for (let k = 0; k < 3; k++) {
|
|
37
|
+
if (!vertex_attributes_match(attributes, a_corners[k], b_corners[(k + offset) % 3])) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
for (let k = 0; k < 3; k++) {
|
|
43
|
+
out.set(a_corners[k], b_corners[(k + offset) % 3]);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// a triangle with a repeated vertex has fewer than three to fit a transform to
|
|
47
|
+
return out.size === 3;
|
|
48
|
+
}
|
|
@@ -42,7 +42,8 @@ export function entity_of_row(row: number): number;
|
|
|
42
42
|
* **Change flow is mark, then flush.** The systems that place entities listen to the dataset's
|
|
43
43
|
* change events and {@link mark_local} or {@link mark_world}; nothing is read at mark time. The
|
|
44
44
|
* flush, in `GPUSceneContext.build`, reads each marked entity's components once, consults
|
|
45
|
-
* `GPUStateAuthority` then, writes the ranges the CPU owns
|
|
45
|
+
* `GPUStateAuthority` then, writes the ranges the CPU owns — and an offset the GPU has just taken,
|
|
46
|
+
* once ({@link mark_handover}) — and clears the list. A world mark on
|
|
46
47
|
* an attached entity whose parent has a row writes nothing: its local offset and its parent are
|
|
47
48
|
* unchanged, and the GPU composes the rest. That is what stops a root's move from costing a row
|
|
48
49
|
* per descendant.
|
|
@@ -155,6 +156,21 @@ export class GPUSceneRows {
|
|
|
155
156
|
* @param {number} entity
|
|
156
157
|
*/
|
|
157
158
|
mark_local(entity: number): void;
|
|
159
|
+
/**
|
|
160
|
+
* The entity's offset passes to the GPU as it stands: a clip binds it for the first time, or a
|
|
161
|
+
* CPU writer that held it has let go and a clip still bound has it back. The next flush writes
|
|
162
|
+
* the offset into the row once more, though `GPUStateAuthority` already says the GPU writes it.
|
|
163
|
+
*
|
|
164
|
+
* The bit is granted at that moment, and the flush runs later, in the frame's build, and reads
|
|
165
|
+
* the bit then. So whatever was written since the last flush — an offset announced in the frame
|
|
166
|
+
* the clip binds; a holder's last step, or an offset it captured and put back — would never
|
|
167
|
+
* reach the row: the axes no bound clip keys would keep the previous pose on the GPU, while the
|
|
168
|
+
* CPU twin reads the offset. The axes a clip keys are rewritten by the resolve, which runs after
|
|
169
|
+
* the flush.
|
|
170
|
+
*
|
|
171
|
+
* @param {number} entity
|
|
172
|
+
*/
|
|
173
|
+
mark_handover(entity: number): void;
|
|
158
174
|
/**
|
|
159
175
|
* The entity's world transform changed. For an entity the GPU composes under a parent row this
|
|
160
176
|
* is nothing to write; for one carrying its world pose it is the row's contents.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GPUSceneRows.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/scene/rows/GPUSceneRows.js"],"names":[],"mappings":"AAcA;;;;;;;;;;GAUG;AAEH;;;;;;;;;GASG;AACH,sCAHW,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;GAMG;AACH,mCAHW,MAAM,GACJ,MAAM,CAIlB;
|
|
1
|
+
{"version":3,"file":"GPUSceneRows.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/scene/rows/GPUSceneRows.js"],"names":[],"mappings":"AAcA;;;;;;;;;;GAUG;AAEH;;;;;;;;;GASG;AACH,sCAHW,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;GAMG;AACH,mCAHW,MAAM,GACJ,MAAM,CAIlB;AA0ID;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH;IA2II;;;;;;;;;OASG;IACH;QAR2C,OAAO,EAAvC,sBAAsB;QACC,UAAU;QACV,MAAM;QACD,UAAU,EAAtC,kBAAkB;QACU,SAAS,EAArC,kBAAkB;QACyB,IAAI,EAA/C,iCAAiC;QACW,QAAQ,QAAxC,sBAAsB;OAmB5C;IAED;;OAEG;IACH,iGAEC;IAED;;;;;OAKG;IACH,gCAEC;IAED;;;;;OAKG;IACH,YAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;;;;;;OAQG;IACH,oBAA8B;IAE9B;;;;;OAKG;IACH,iBAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;;;;;OAOG;IACH,8BAHoB,MAAM,QAAE,eAAe,QAAE,aAAa,QAAE,OAAO,KAAG,IAAI,QASzE;IAED;;;;;;;;;OASG;IACH,6BAHW,KAAK,GACH,OAAO,CAyBnB;IAED;;;;;;;;;;OAUG;IACH,gBAFW,MAAM,QAuChB;IAED;;;;;;;;OAQG;IACH,gBAFW,MAAM,QA0BhB;IAED;;;;OAIG;IACH,mBAFW,MAAM,QAIhB;IAED;;;;;;;;;;;;;OAaG;IACH,sBAFW,MAAM,QAIhB;IAED;;;;;OAKG;IACH,mBAFW,MAAM,QAIhB;IAED;;;;;OAKG;IACH,2EAOC;IAED;;;;OAIG;IACH,gCAEC;IAqCD;;;;;;;;;;;;;;OAcG;IACH,oBALW,MAAM,YACN,eAAe,YACf,aAAa,YACb,OAAO,QAgDjB;IAED;;;;;OAKG;IACH,oBAFW,MAAM,QAUhB;IAwCD;;;;OAIG;IACH,SAFa,MAAM,CAsDlB;IA0MD;;;;OAIG;IACH;;;;;;;;OAQG;IACH,4BAHW,MAAM,kBACG,MAAM,KAAG,IAAI,QAiBhC;IAyGD;;;;;OAKG;IACH,gBAUC;;CACJ;qCAppCY,OAAO,kDAAkD,EAAE,sBAAsB;;iCAEjF,OAAO,sCAAsC,EAAE,kBAAkB;iCACjE,OAAO,sCAAsC,EAAE,kBAAkB;gDACjE,OAAO,yCAAyC,EAAE,iCAAiC;qCACnF,OAAO,oDAAoD,EAAE,sBAAsB;8BACnF,OAAO,mCAAmC,EAAE,eAAe;4BAC3D,OAAO,iCAAiC,EAAE,aAAa;oBACvD,OAAO,wCAAwC,EAAE,KAAK"}
|
|
@@ -57,6 +57,12 @@ const MARK_LOCAL = 1;
|
|
|
57
57
|
const MARK_WORLD = 2;
|
|
58
58
|
const MARK_MESH = 4;
|
|
59
59
|
|
|
60
|
+
/**
|
|
61
|
+
* The offset goes to the row although the GPU writes it now — see {@link GPUSceneRows#mark_handover}.
|
|
62
|
+
* Always carried with {@link MARK_LOCAL}.
|
|
63
|
+
*/
|
|
64
|
+
const MARK_HANDOVER = 8;
|
|
65
|
+
|
|
60
66
|
/**
|
|
61
67
|
* Staging for one `transforms` row, reused across every write. `global` and `prev_global` are read
|
|
62
68
|
* only on a row's first write.
|
|
@@ -193,7 +199,8 @@ class MeshEntry {
|
|
|
193
199
|
* **Change flow is mark, then flush.** The systems that place entities listen to the dataset's
|
|
194
200
|
* change events and {@link mark_local} or {@link mark_world}; nothing is read at mark time. The
|
|
195
201
|
* flush, in `GPUSceneContext.build`, reads each marked entity's components once, consults
|
|
196
|
-
* `GPUStateAuthority` then, writes the ranges the CPU owns
|
|
202
|
+
* `GPUStateAuthority` then, writes the ranges the CPU owns — and an offset the GPU has just taken,
|
|
203
|
+
* once ({@link mark_handover}) — and clears the list. A world mark on
|
|
197
204
|
* an attached entity whose parent has a row writes nothing: its local offset and its parent are
|
|
198
205
|
* unchanged, and the GPU composes the rest. That is what stops a root's move from costing a row
|
|
199
206
|
* per descendant.
|
|
@@ -564,6 +571,24 @@ export class GPUSceneRows {
|
|
|
564
571
|
this.#mark(entity, MARK_LOCAL);
|
|
565
572
|
}
|
|
566
573
|
|
|
574
|
+
/**
|
|
575
|
+
* The entity's offset passes to the GPU as it stands: a clip binds it for the first time, or a
|
|
576
|
+
* CPU writer that held it has let go and a clip still bound has it back. The next flush writes
|
|
577
|
+
* the offset into the row once more, though `GPUStateAuthority` already says the GPU writes it.
|
|
578
|
+
*
|
|
579
|
+
* The bit is granted at that moment, and the flush runs later, in the frame's build, and reads
|
|
580
|
+
* the bit then. So whatever was written since the last flush — an offset announced in the frame
|
|
581
|
+
* the clip binds; a holder's last step, or an offset it captured and put back — would never
|
|
582
|
+
* reach the row: the axes no bound clip keys would keep the previous pose on the GPU, while the
|
|
583
|
+
* CPU twin reads the offset. The axes a clip keys are rewritten by the resolve, which runs after
|
|
584
|
+
* the flush.
|
|
585
|
+
*
|
|
586
|
+
* @param {number} entity
|
|
587
|
+
*/
|
|
588
|
+
mark_handover(entity) {
|
|
589
|
+
this.#mark(entity, MARK_LOCAL | MARK_HANDOVER);
|
|
590
|
+
}
|
|
591
|
+
|
|
567
592
|
/**
|
|
568
593
|
* The entity's world transform changed. For an entity the GPU composes under a parent row this
|
|
569
594
|
* is nothing to write; for one carrying its world pose it is the row's contents.
|
|
@@ -845,10 +870,11 @@ export class GPUSceneRows {
|
|
|
845
870
|
|
|
846
871
|
const parent_changed = this.#parent_row[entity] !== parent_row;
|
|
847
872
|
|
|
848
|
-
if ((flags & GPUStateAuthorityFlags.TransformAttachment) !== 0) {
|
|
873
|
+
if ((flags & GPUStateAuthorityFlags.TransformAttachment) !== 0 && (why & MARK_HANDOVER) === 0) {
|
|
849
874
|
// The GPU writes this row's TRS — a clip, a pose the CPU never sees — and a CPU that
|
|
850
875
|
// wrote it too would race what the animation just resolved. The parent row is still
|
|
851
|
-
// this side's, and changes only when the parent's own row comes or goes.
|
|
876
|
+
// this side's, and changes only when the parent's own row comes or goes. A hand-over
|
|
877
|
+
// is the one write past the bit: the offset as the GPU takes it.
|
|
852
878
|
if (!parent_changed) {
|
|
853
879
|
return 0;
|
|
854
880
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build_lut_fog_parameters_jendersie_deon.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/shade/renderer/shader/chunk/atmosphere/phase/jd/build_lut_fog_parameters_jendersie_deon.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"build_lut_fog_parameters_jendersie_deon.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/shade/renderer/shader/chunk/atmosphere/phase/jd/build_lut_fog_parameters_jendersie_deon.js"],"names":[],"mappings":"AAcA;;;;;;;;;GASG;AACH,qEAPW,MAAM,iBACN,MAAM,iBACN,MAAM,GACJ,YAAY,CAoDxB;6BArE4B,wCAAwC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { assert } from "../../../../../../../core/assert.js";
|
|
2
|
-
import { to_half_float_uint16 } from "../../../../../../../core/binary/to_half_float_uint16.js";
|
|
3
2
|
import { BinaryDataType } from "../../../../../../../core/binary/type/BinaryDataType.js";
|
|
4
3
|
import { ColorSpace } from "../../../../../texture/ColorSpace.js";
|
|
5
4
|
import { ShadeTexture } from "../../../../../texture/ShadeTexture.js";
|
|
@@ -33,7 +32,7 @@ export function build_lut_fog_parameters_jendersie_deon(
|
|
|
33
32
|
const log_d_min = Math.log(min_diameter);
|
|
34
33
|
const log_range = Math.log(max_diameter) - log_d_min;
|
|
35
34
|
|
|
36
|
-
const
|
|
35
|
+
const f16 = new Float16Array(resolution * 4);
|
|
37
36
|
|
|
38
37
|
const sample = [];
|
|
39
38
|
for (let i = 0; i < resolution; i++) {
|
|
@@ -49,7 +48,7 @@ export function build_lut_fog_parameters_jendersie_deon(
|
|
|
49
48
|
);
|
|
50
49
|
|
|
51
50
|
for (let j = 0; j < 4; j++) {
|
|
52
|
-
|
|
51
|
+
f16[i * 4 + j] = sample[j];
|
|
53
52
|
}
|
|
54
53
|
|
|
55
54
|
assert.greaterThanOrEqual(sample[3],0, "w_D must not be negative");
|
|
@@ -57,7 +56,7 @@ export function build_lut_fog_parameters_jendersie_deon(
|
|
|
57
56
|
}
|
|
58
57
|
|
|
59
58
|
const image = ShadeImage.fromArrayBuffer(
|
|
60
|
-
|
|
59
|
+
f16.buffer,
|
|
61
60
|
4,
|
|
62
61
|
BinaryDataType.Float16,
|
|
63
62
|
resolution, 1, 1,
|
|
@@ -71,4 +70,4 @@ export function build_lut_fog_parameters_jendersie_deon(
|
|
|
71
70
|
texture.dimensions = 1;
|
|
72
71
|
|
|
73
72
|
return texture;
|
|
74
|
-
}
|
|
73
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate_dfg_texture.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/shader/chunk/brdf/dfg/generate_dfg_texture.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generate_dfg_texture.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/shader/chunk/brdf/dfg/generate_dfg_texture.js"],"names":[],"mappings":"AA0EA;;;;;GAKG;AACH;IAHoC,QAAQ;IAChB,UAAU,GAA3B,MAAM;SA2BhB"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { BinaryBuffer } from "../../../../../../core/binary/BinaryBuffer.js";
|
|
2
2
|
import { downloadAsFile } from "../../../../../../core/binary/downloadAsFile.js";
|
|
3
|
-
import { to_half_float_uint16 } from "../../../../../../core/binary/to_half_float_uint16.js";
|
|
4
3
|
import { BinaryDataType } from "../../../../../../core/binary/type/BinaryDataType.js";
|
|
5
4
|
import { FrameGraph } from "../../../../../../engine/graphics/render/frame_graph/FrameGraph.js";
|
|
6
5
|
import { ShadeGPUCommandContext } from "../../../../../device/ShadeGPUCommandContext.js";
|
|
@@ -40,10 +39,7 @@ function graph_download_texture({
|
|
|
40
39
|
const texture_data = await texture.download();
|
|
41
40
|
|
|
42
41
|
// encode to f16
|
|
43
|
-
const f16_data = new
|
|
44
|
-
for (let i = 0; i < texture_data.length; i++) {
|
|
45
|
-
f16_data[i] = to_half_float_uint16(texture_data[i]);
|
|
46
|
-
}
|
|
42
|
+
const f16_data = new Float16Array(texture_data);
|
|
47
43
|
|
|
48
44
|
|
|
49
45
|
const image = ShadeImage.fromArrayBuffer(
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How far in from each edge of the screen the importance falls off, as a fraction of the screen's
|
|
3
|
+
* height (the horizontal falloff is the same distance in pixels).
|
|
4
|
+
* @type {number}
|
|
5
|
+
*/
|
|
6
|
+
export const SCREEN_IMPORTANCE_BORDER_FRACTION: number;
|
|
7
|
+
/**
|
|
8
|
+
* Steps a pixel's importance is quantized to when it is summed with atomics: a pixel of full
|
|
9
|
+
* importance adds this much.
|
|
10
|
+
* @type {number}
|
|
11
|
+
*/
|
|
12
|
+
export const SCREEN_IMPORTANCE_STEPS: number;
|
|
13
|
+
/**
|
|
14
|
+
* How much a pixel matters by where it is on screen: 1 over most of it, falling to 0 at the edges —
|
|
15
|
+
* the automatic exposure's metering mask, after
|
|
16
|
+
* https://www.unrealengine.com/en-US/tech-blog/how-epic-games-is-handling-auto-exposure-in-4-25 —
|
|
17
|
+
* shared by every pass that weighs pixels by their place on screen.
|
|
18
|
+
*
|
|
19
|
+
* - `screen_importance(uv, vertical_aspect, border_fraction)` — the mask, in [0, 1]; `vertical_aspect`
|
|
20
|
+
* is the screen's height over its width, `border_fraction` the falloff's width
|
|
21
|
+
* - `screen_importance_weight(uv, vertical_aspect)` — the mask at
|
|
22
|
+
* {@link SCREEN_IMPORTANCE_BORDER_FRACTION} as an integer for an atomic sum:
|
|
23
|
+
* {@link SCREEN_IMPORTANCE_STEPS} at full importance, and never below 1, so that a pixel at the very
|
|
24
|
+
* edge still counts
|
|
25
|
+
*
|
|
26
|
+
* @type {CodeChunk}
|
|
27
|
+
*/
|
|
28
|
+
export const chunk_screen_importance: CodeChunk;
|
|
29
|
+
import { CodeChunk } from "../../compiler/CodeChunk.js";
|
|
30
|
+
//# sourceMappingURL=chunk_screen_importance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk_screen_importance.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/screen_space/chunk_screen_importance.js"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,gDAFU,MAAM,CAEsC;AAEtD;;;;GAIG;AACH,sCAFU,MAAM,CAE0B;AAE1C;;;;;;;;;;;;;;GAcG;AACH,sCAFU,SAAS,CAwBjB;0BArDwB,6BAA6B"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { CodeChunk } from "../../compiler/CodeChunk.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* How far in from each edge of the screen the importance falls off, as a fraction of the screen's
|
|
5
|
+
* height (the horizontal falloff is the same distance in pixels).
|
|
6
|
+
* @type {number}
|
|
7
|
+
*/
|
|
8
|
+
export const SCREEN_IMPORTANCE_BORDER_FRACTION = 0.13;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Steps a pixel's importance is quantized to when it is summed with atomics: a pixel of full
|
|
12
|
+
* importance adds this much.
|
|
13
|
+
* @type {number}
|
|
14
|
+
*/
|
|
15
|
+
export const SCREEN_IMPORTANCE_STEPS = 64;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* How much a pixel matters by where it is on screen: 1 over most of it, falling to 0 at the edges —
|
|
19
|
+
* the automatic exposure's metering mask, after
|
|
20
|
+
* https://www.unrealengine.com/en-US/tech-blog/how-epic-games-is-handling-auto-exposure-in-4-25 —
|
|
21
|
+
* shared by every pass that weighs pixels by their place on screen.
|
|
22
|
+
*
|
|
23
|
+
* - `screen_importance(uv, vertical_aspect, border_fraction)` — the mask, in [0, 1]; `vertical_aspect`
|
|
24
|
+
* is the screen's height over its width, `border_fraction` the falloff's width
|
|
25
|
+
* - `screen_importance_weight(uv, vertical_aspect)` — the mask at
|
|
26
|
+
* {@link SCREEN_IMPORTANCE_BORDER_FRACTION} as an integer for an atomic sum:
|
|
27
|
+
* {@link SCREEN_IMPORTANCE_STEPS} at full importance, and never below 1, so that a pixel at the very
|
|
28
|
+
* edge still counts
|
|
29
|
+
*
|
|
30
|
+
* @type {CodeChunk}
|
|
31
|
+
*/
|
|
32
|
+
export const chunk_screen_importance = CodeChunk.from(
|
|
33
|
+
//language=WGSL
|
|
34
|
+
`
|
|
35
|
+
fn screen_importance(
|
|
36
|
+
uv: vec2<f32>,
|
|
37
|
+
vertical_aspect: f32,
|
|
38
|
+
border_fraction: f32
|
|
39
|
+
) -> f32{
|
|
40
|
+
|
|
41
|
+
let fov = border_fraction * vec2(vertical_aspect, 1.0);
|
|
42
|
+
|
|
43
|
+
let border = smoothstep(vec2(0.0, 0.0), fov, uv) * (1.0 - smoothstep(vec2(1.0, 1.0) - fov, vec2(1.0, 1.0), uv));
|
|
44
|
+
|
|
45
|
+
return border.x * border.y;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
fn screen_importance_weight(uv: vec2<f32>, vertical_aspect: f32) -> u32 {
|
|
49
|
+
let importance = screen_importance(uv, vertical_aspect, ${SCREEN_IMPORTANCE_BORDER_FRACTION});
|
|
50
|
+
|
|
51
|
+
return max(1u, u32(importance * ${SCREEN_IMPORTANCE_STEPS}));
|
|
52
|
+
}
|
|
53
|
+
`
|
|
54
|
+
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read_gpu_typed_buffer.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/type/serde/read_gpu_typed_buffer.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"read_gpu_typed_buffer.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/type/serde/read_gpu_typed_buffer.js"],"names":[],"mappings":"AAwGA;;;;GAIG;AACH,6CAHW,YAAY,yBAqDtB;AAwBD;;;;;;GAMG;AACH,8DALW,WAAW,eACX,MAAM,UACN,MAAM,GACJ,EAAE,CAsBd;6BAlN4B,4CAA4C"}
|