@woosh/meep-engine 3.40.0 → 3.42.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-image-decoder.js +1 -1
- package/build/bundle-worker-terrain.js +1 -1
- package/editor/selection/editor_pick.d.ts.map +1 -1
- package/editor/selection/editor_pick.js +2 -1
- package/editor/tools/TransformToolV2.d.ts.map +1 -1
- package/editor/tools/TransformToolV2.js +7 -1
- package/editor/tools/engine/ToolEngine.d.ts.map +1 -1
- package/editor/tools/engine/ToolEngine.js +10 -0
- package/editor/tools/v2/TransformControls.d.ts.map +1 -1
- package/editor/tools/v2/TransformControls.js +7 -20
- package/editor/tools/v2/handle/gizmo_drag_plane.d.ts.map +1 -1
- package/editor/tools/v2/handle/gizmo_drag_plane.js +4 -0
- package/editor/view/ecs/EntityEditor.d.ts.map +1 -1
- package/editor/view/ecs/EntityEditor.js +3 -1
- package/editor/view/node-graph/NodeGraphView.d.ts.map +1 -1
- package/editor/view/node-graph/NodeGraphView.js +28 -12
- package/package.json +1 -1
- package/samples/engine/first-scene/index.html +4 -1
- package/samples/engine/first-scene/main.js +14 -9
- package/src/core/binary/utf8/utf8_decode.js +3 -3
- package/src/core/bvh2/binary/2/bvh32_query_user_data_ray.d.ts.map +1 -1
- package/src/core/bvh2/binary/2/bvh32_query_user_data_ray.js +112 -113
- package/src/core/bvh2/bvh3/ebvh_nodes_sort_sah_local4.js +2 -2
- package/src/core/cache/wtinylfu/benchmark/CacheWTinylfu.bench.md +14 -14
- package/src/core/collection/RingBuffer.d.ts.map +1 -1
- package/src/core/collection/RingBuffer.js +4 -0
- package/src/core/collection/array/array_contains_duplicates.d.ts.map +1 -1
- package/src/core/collection/array/array_contains_duplicates.js +2 -1
- package/src/core/collection/array/array_copy.d.ts.map +1 -1
- package/src/core/collection/array/array_copy.js +23 -0
- package/src/core/collection/array/typed/sparse_typed_array_hash.d.ts +2 -2
- package/src/core/collection/array/typed/sparse_typed_array_hash.d.ts.map +1 -1
- package/src/core/collection/array/typed/sparse_typed_array_hash.js +9 -8
- package/src/core/collection/array/typed/uint16_array_hash.d.ts +2 -2
- package/src/core/collection/array/typed/uint16_array_hash.js +4 -4
- package/src/core/collection/array/typed/uint8_array_hash.d.ts +2 -2
- package/src/core/collection/array/typed/uint8_array_hash.js +4 -4
- package/src/core/collection/array/weightedRandomFromArray.d.ts +1 -0
- package/src/core/collection/array/weightedRandomFromArray.d.ts.map +1 -1
- package/src/core/collection/array/weightedRandomFromArray.js +9 -1
- package/src/core/collection/heap/BinaryHeap.d.ts.map +1 -1
- package/src/core/collection/heap/BinaryHeap.js +4 -0
- package/src/core/collection/list/List.d.ts.map +1 -1
- package/src/core/collection/list/List.js +4 -2
- package/src/core/collection/set/ArraySet.js +1 -1
- package/src/core/collection/set/HashSet.d.ts +1 -1
- package/src/core/collection/set/HashSet.d.ts.map +1 -1
- package/src/core/collection/set/HashSet.js +4 -2
- package/src/core/debug/matchers/IsEqual.js +1 -1
- package/src/core/debug/matchers/IsIterableContaining.d.ts.map +1 -1
- package/src/core/debug/matchers/IsIterableContaining.js +61 -74
- package/src/core/events/signal/SignalBinding.js +101 -101
- package/src/core/function/extractFunctionBody.js +13 -13
- package/src/core/function/objectsEqual.d.ts.map +1 -1
- package/src/core/function/objectsEqual.js +15 -14
- package/src/core/geom/3d/frustum/frustum3_compute_closest_point.d.ts.map +1 -1
- package/src/core/geom/3d/frustum/frustum3_compute_closest_point.js +207 -172
- package/src/core/geom/3d/gjk/gjk_epa_penetration.d.ts.map +1 -1
- package/src/core/geom/3d/gjk/gjk_epa_penetration.js +5 -4
- package/src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.d.ts.map +1 -1
- package/src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.js +8 -2
- 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/3d/triangle/tri3_ray_intersection.d.ts +20 -0
- package/src/core/geom/3d/triangle/tri3_ray_intersection.d.ts.map +1 -1
- package/src/core/geom/3d/triangle/tri3_ray_intersection.js +182 -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/core/math/noise/curl_noise_3dt.d.ts.map +1 -1
- package/src/core/math/noise/curl_noise_3dt.js +20 -10
- package/src/core/math/noise/sdnoise.d.ts +16 -5
- package/src/core/math/noise/sdnoise.d.ts.map +1 -1
- package/src/core/math/noise/sdnoise.js +43 -9
- package/src/core/math/spline/spline3_hermite_nearest_point.d.ts +16 -1
- package/src/core/math/spline/spline3_hermite_nearest_point.d.ts.map +1 -1
- package/src/core/math/spline/spline3_hermite_nearest_point.js +44 -3
- package/src/engine/Engine.d.ts.map +1 -1
- package/src/engine/Engine.js +6 -2
- 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/control/first-person/FirstPersonPlayerController.d.ts +9 -0
- package/src/engine/control/first-person/FirstPersonPlayerController.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts +26 -0
- package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.js +2 -0
- package/src/engine/control/first-person/abilities/AbilitySet.d.ts.map +1 -1
- package/src/engine/control/first-person/abilities/AbilitySet.js +9 -0
- package/src/engine/control/first-person/abilities/LedgeGrab.d.ts.map +1 -1
- package/src/engine/control/first-person/abilities/LedgeGrab.js +6 -0
- package/src/engine/control/first-person/abilities/Slide.d.ts.map +1 -1
- package/src/engine/control/first-person/abilities/Slide.js +1 -0
- package/src/engine/control/first-person/abilities/WallRun.d.ts +4 -1
- package/src/engine/control/first-person/abilities/WallRun.d.ts.map +1 -1
- package/src/engine/control/first-person/abilities/WallRun.js +13 -1
- package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts +1 -1
- package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts.map +1 -1
- package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.js +6 -5
- package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts +3 -3
- package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts.map +1 -1
- package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.js +9 -8
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts.map +1 -1
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.js +13 -4
- 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 +44 -42
- package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescription.d.ts.map +1 -1
- package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescription.js +2 -1
- package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescriptionTable.d.ts.map +1 -1
- package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescriptionTable.js +1 -0
- package/src/engine/ecs/fow/FogOfWarRevealerSystem.d.ts.map +1 -1
- package/src/engine/ecs/fow/FogOfWarRevealerSystem.js +3 -0
- 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/parent/EntityNode.js +3 -3
- 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/speaker/VoiceSystem.js +4 -0
- package/src/engine/ecs/storage/BinaryBufferDeSerializer.js +5 -5
- 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/BinarySerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/binary/BinarySerializationRegistry.js +3 -2
- package/src/engine/ecs/storage/binary/SERIALIZATION_COVERAGE.md +7 -3
- package/src/engine/ecs/storage/binary/object/BinaryObjectSerializationAdapter2.js +1 -1
- package/src/engine/ecs/storage/binary/object-v2/BinaryObjectDeSerializer.d.ts.map +1 -1
- package/src/engine/ecs/storage/binary/object-v2/BinaryObjectDeSerializer.js +8 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +9 -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/terrain/ecs/cling/ClingToTerrainSystem.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.js +5 -2
- package/src/engine/ecs/terrain/ecs/layers/TerrainLayers.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/layers/TerrainLayers.js +3 -0
- package/src/engine/ecs/terrain/ecs/splat/SplatMapping.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/splat/SplatMapping.js +1 -0
- package/src/engine/ecs/terrain/overlay/TerrainOverlay.js +1 -1
- package/src/engine/ecs/terrain/tiles/TerrainTile.d.ts.map +1 -1
- package/src/engine/ecs/terrain/tiles/TerrainTile.js +13 -1
- package/src/engine/ecs/terrain/tiles/TerrainTileManager.d.ts.map +1 -1
- package/src/engine/ecs/terrain/tiles/TerrainTileManager.js +1 -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/light/LightSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/light/LightSerializationAdapter.js +13 -1
- package/src/engine/graphics/ecs/light/LightSerializationUpgrader_0_1.d.ts +5 -0
- package/src/engine/graphics/ecs/light/LightSerializationUpgrader_0_1.d.ts.map +1 -0
- package/src/engine/graphics/ecs/light/LightSerializationUpgrader_0_1.js +27 -0
- package/src/engine/graphics/ecs/water/Water.d.ts +11 -0
- package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/Water.js +17 -0
- package/src/engine/graphics/ecs/water/WaterSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/WaterSerializationAdapter.js +3 -1
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_4_5.d.ts +9 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_4_5.d.ts.map +1 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_4_5.js +24 -0
- package/src/engine/graphics/ecs/water/WaterWaves.d.ts +30 -9
- package/src/engine/graphics/ecs/water/WaterWaves.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/WaterWaves.js +41 -9
- package/src/engine/graphics/ecs/water/WaterWavesSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/WaterWavesSerializationAdapter.js +30 -26
- package/src/engine/graphics/ecs/water/WaterWavesSerializationUpgrader_0_1.d.ts +6 -0
- package/src/engine/graphics/ecs/water/WaterWavesSerializationUpgrader_0_1.d.ts.map +1 -0
- package/src/engine/graphics/ecs/water/WaterWavesSerializationUpgrader_0_1.js +22 -0
- package/src/engine/graphics/geometry/buffered/query/bvh32_geometry_raycast.d.ts.map +1 -1
- package/src/engine/graphics/geometry/buffered/query/bvh32_geometry_raycast.js +3 -5
- package/src/engine/graphics/texture/3d/scs3d_sample_linear3.d.ts +20 -0
- package/src/engine/graphics/texture/3d/scs3d_sample_linear3.d.ts.map +1 -1
- package/src/engine/graphics/texture/3d/scs3d_sample_linear3.js +36 -0
- 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 +12 -3
- package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/WaterSystem.js +78 -46
- package/src/engine/input/devices/PointerDevice.d.ts.map +1 -1
- package/src/engine/input/devices/PointerDevice.js +29 -4
- package/src/engine/intelligence/behavior/selector/WeightedRandomBehavior.d.ts +1 -0
- package/src/engine/intelligence/behavior/selector/WeightedRandomBehavior.d.ts.map +1 -1
- package/src/engine/intelligence/behavior/selector/WeightedRandomBehavior.js +14 -3
- 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/fluid/solver/v3_grid_advect_maccormack_velocity.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.js +12 -3
- package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.js +8 -2
- package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.d.ts +19 -0
- package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.js +41 -2
- package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.js +9 -3
- package/src/engine/physics/fluid/solver/v3_mac_advect_sl_velocity.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_mac_advect_sl_velocity.js +26 -10
- 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/engine/sound/sopra/definition/clip/RandomContainerAudioClip.d.ts +3 -6
- package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.js +22 -9
- package/src/engine/ui/DraggableAspect.d.ts +5 -1
- package/src/engine/ui/DraggableAspect.d.ts.map +1 -1
- package/src/engine/ui/DraggableAspect.js +61 -4
- package/src/format/image/avif/heif/ItemProperty.d.ts +1 -1
- package/src/format/image/avif/heif/ItemProperty.js +1 -1
- package/src/format/image/png/chunk/png_chunk_decode_iTXt.d.ts.map +1 -1
- package/src/format/image/png/chunk/png_chunk_decode_iTXt.js +17 -6
- package/src/shade/device/mock/SoftwareGPUDevice.d.ts +2 -4
- package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUDevice.js +20 -13
- package/src/shade/playground/skinned_blas_refit/sweep_views.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/sweep_views.js +2 -1
- package/src/shade/playground/water_refraction/README.md +10 -11
- package/src/shade/playground/water_refraction/main.js +9 -8
- package/src/shade/playground/water_refraction/world.js +1 -1
- package/src/shade/playground/water_surface/README.md +43 -0
- package/src/shade/playground/water_surface/index.html +30 -0
- package/src/shade/playground/water_surface/main.d.ts +2 -0
- package/src/shade/playground/water_surface/main.d.ts.map +1 -0
- package/src/shade/playground/water_surface/main.js +154 -0
- package/src/shade/playground/water_surface/world.d.ts +44 -0
- package/src/shade/playground/water_surface/world.d.ts.map +1 -0
- package/src/shade/playground/water_surface/world.js +160 -0
- 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 +10 -4
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.js +251 -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.map +1 -1
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +5 -0
- package/src/shade/renderer/binding/BufferBinding.js +2 -2
- package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUTypedTable.js +5 -3
- package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts +10 -3
- package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.js +17 -9
- package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts +3 -0
- package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts.map +1 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraInput.js +16 -0
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts +2 -0
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts.map +1 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.js +11 -0
- package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.d.ts +1 -1
- package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.js +9 -3
- package/src/shade/renderer/geometry/util/geometry_simplify_redundant_topology.d.ts.map +1 -1
- package/src/shade/renderer/geometry/util/geometry_simplify_redundant_topology.js +2 -2
- package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.js +85 -0
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +12 -6
- package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.js +7 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.js +3 -1
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- 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/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.js +2 -1
- 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/math/fft/chunk_fft128_inverse.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128_inverse.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128_inverse.js +42 -0
- package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128x4_inverse_workgroup.d.ts +15 -0
- package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128x4_inverse_workgroup.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128x4_inverse_workgroup.js +39 -0
- package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +2 -0
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts +15 -0
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +110 -30
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts +16 -8
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +1 -1
- package/src/shade/renderer/water/medium/GPUWaterBodies.js +31 -26
- package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts +0 -1
- package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts.map +1 -1
- package/src/shade/renderer/water/medium/shader_water_meshlets.js +1 -39
- package/src/shade/renderer/water/shader_water.d.ts +0 -1
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +201 -72
- package/src/shade/renderer/water/surface/GPUWaterSurface.d.ts +70 -0
- package/src/shade/renderer/water/surface/GPUWaterSurface.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/GPUWaterSurface.js +199 -0
- package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts +5 -2
- package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.js +32 -12
- package/src/shade/renderer/water/surface/chunk_water_surface_sample.d.ts +22 -0
- package/src/shade/renderer/water/surface/chunk_water_surface_sample.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/chunk_water_surface_sample.js +217 -0
- package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts +65 -11
- package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/graph_water_tessellation.js +163 -28
- package/src/shade/renderer/water/surface/lod/WATER_LOD.d.ts +51 -0
- package/src/shade/renderer/water/surface/lod/WATER_LOD.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/lod/WATER_LOD.js +95 -0
- package/src/shade/renderer/water/surface/lod/chunk_water_lod.d.ts +10 -0
- package/src/shade/renderer/water/surface/lod/chunk_water_lod.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/lod/chunk_water_lod.js +127 -0
- package/src/shade/renderer/water/surface/lod/chunk_water_lod_cell.d.ts +17 -0
- package/src/shade/renderer/water/surface/lod/chunk_water_lod_cell.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/lod/chunk_water_lod_cell.js +246 -0
- package/src/shade/renderer/water/surface/lod/shader_water_lod.d.ts +118 -0
- package/src/shade/renderer/water/surface/lod/shader_water_lod.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/lod/shader_water_lod.js +727 -0
- package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts +60 -0
- package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/particles/GPUWaterParticles.js +228 -0
- package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts +17 -0
- package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.js +49 -0
- package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts +22 -0
- package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/particles/chunk_water_particle.js +143 -0
- package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts +15 -0
- package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.js +121 -0
- package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts +83 -0
- package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/particles/shader_water_particles.js +502 -0
- package/src/shade/renderer/water/surface/shader_water_cull.d.ts +42 -0
- package/src/shade/renderer/water/surface/shader_water_cull.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/shader_water_cull.js +269 -0
- package/src/shade/renderer/water/surface/shader_water_waves_combine.d.ts +15 -0
- package/src/shade/renderer/water/surface/shader_water_waves_combine.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/shader_water_waves_combine.js +73 -0
- package/src/shade/renderer/water/surface/shader_water_waves_derive.d.ts +11 -0
- package/src/shade/renderer/water/surface/shader_water_waves_derive.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/shader_water_waves_derive.js +78 -0
- package/src/shade/renderer/water/surface/spectrum/GPUWaterSpectrum.d.ts +35 -0
- package/src/shade/renderer/water/surface/spectrum/GPUWaterSpectrum.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/spectrum/GPUWaterSpectrum.js +103 -0
- package/src/shade/renderer/water/surface/spectrum/WATER_BAND_STATE.d.ts +22 -0
- package/src/shade/renderer/water/surface/spectrum/WATER_BAND_STATE.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/spectrum/WATER_BAND_STATE.js +57 -0
- package/src/shade/renderer/water/surface/spectrum/WATER_SPECTRUM.d.ts +22 -0
- package/src/shade/renderer/water/surface/spectrum/WATER_SPECTRUM.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/spectrum/WATER_SPECTRUM.js +25 -0
- package/src/shade/renderer/water/surface/spectrum/chunk_water_jonswap.d.ts +14 -0
- package/src/shade/renderer/water/surface/spectrum/chunk_water_jonswap.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/spectrum/chunk_water_jonswap.js +48 -0
- package/src/shade/renderer/water/surface/spectrum/chunk_water_spectrum.d.ts +23 -0
- package/src/shade/renderer/water/surface/spectrum/chunk_water_spectrum.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/spectrum/chunk_water_spectrum.js +169 -0
- package/src/shade/renderer/water/surface/spectrum/shader_water_spectrum.d.ts +26 -0
- package/src/shade/renderer/water/surface/spectrum/shader_water_spectrum.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/spectrum/shader_water_spectrum.js +161 -0
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +18 -6
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +11 -3
- package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.d.ts +0 -28
- package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.d.ts.map +0 -1
- package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.js +0 -86
- 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/ecs/storage/binary/object-v2/serializerTestHarness.d.ts +0 -29
- package/src/engine/ecs/storage/binary/object-v2/serializerTestHarness.d.ts.map +0 -1
- package/src/engine/ecs/storage/binary/object-v2/serializerTestHarness.js +0 -44
- package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts +0 -4
- package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts.map +0 -1
- package/src/shade/renderer/water/medium/shader_water_bodies_derive.js +0 -32
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts +0 -25
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.js +0 -128
- package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts +0 -9
- package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/chunk_water_tessellation.js +0 -144
- package/src/shade/renderer/water/surface/chunk_water_wave.d.ts +0 -13
- package/src/shade/renderer/water/surface/chunk_water_wave.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/chunk_water_wave.js +0 -40
- package/src/shade/renderer/water/surface/shader_water_tiles.d.ts +0 -4
- package/src/shade/renderer/water/surface/shader_water_tiles.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/shader_water_tiles.js +0 -123
- package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts +0 -6
- package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/shader_water_wave_batch.js +0 -85
- package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts +0 -6
- package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/shader_water_wave_domain.js +0 -83
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
import Signal from "../../../../core/events/signal/Signal.js";
|
|
2
|
-
import { assert } from "../../../../core/assert.js";
|
|
3
|
-
import { WATER_WAVE_BATCH_STRUCT, shader_water_wave_batch, shader_water_wave_batch_finish } from "./shader_water_wave_batch.js";
|
|
4
|
-
import { shader_water_wave_bounds, shader_water_wave_domain } from "./shader_water_wave_domain.js";
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* A shared wave atlas, indexed by occupied water_waves rows. Calm bodies allocate no grid.
|
|
8
|
-
* Each fixed step dispatches the whole atlas once; tessellated vertices sample it in local xz.
|
|
9
|
-
* The regular grid is a displacement field, never the rendered water footprint.
|
|
10
|
-
*/
|
|
11
|
-
export class GPUWaterWaveSimulation {
|
|
12
|
-
onInputsConsumed = new Signal();
|
|
13
|
-
resolution = 128;
|
|
14
|
-
step = 1 / 120;
|
|
15
|
-
max_steps_per_frame = 8;
|
|
16
|
-
damping = 0.08;
|
|
17
|
-
#device = null;
|
|
18
|
-
#scene = null;
|
|
19
|
-
#state = [];
|
|
20
|
-
#domain = null;
|
|
21
|
-
#capacity = 0;
|
|
22
|
-
#resolution = 0;
|
|
23
|
-
#parity = 0;
|
|
24
|
-
#pending = 0;
|
|
25
|
-
#time = 0;
|
|
26
|
-
#recorded = new WeakSet();
|
|
27
|
-
#write_pending = true;
|
|
28
|
-
get time() { return this.#time; }
|
|
29
|
-
get buffer() { return this.#state[this.#parity]; }
|
|
30
|
-
get grid_resolution() { return this.#resolution || this.resolution; }
|
|
31
|
-
|
|
32
|
-
advance(dt) {
|
|
33
|
-
assert.isFinite(dt, 'dt'); assert.greaterThanOrEqual(dt, 0, 'dt');
|
|
34
|
-
this.#pending += dt;
|
|
35
|
-
this.#write_pending = true;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
dispose() {
|
|
39
|
-
for (const buffer of this.#state) { buffer.destroy(); }
|
|
40
|
-
this.#domain?.destroy(); this.#domain = null;
|
|
41
|
-
this.#state = []; this.#capacity = 0; this.#device = null; this.#scene = null;
|
|
42
|
-
this.#recorded = new WeakSet();
|
|
43
|
-
this.#write_pending = true;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
record({ graph, device, scene }) {
|
|
47
|
-
if (this.#recorded.has(graph)) { return; }
|
|
48
|
-
if (device !== this.#device || scene !== this.#scene) {
|
|
49
|
-
this.dispose(); this.#device = device; this.#scene = scene;
|
|
50
|
-
}
|
|
51
|
-
this.#recorded.add(graph);
|
|
52
|
-
if (!this.#write_pending) { return; }
|
|
53
|
-
this.#write_pending = false;
|
|
54
|
-
const table = scene.scene_database.get('water_waves');
|
|
55
|
-
const capacity = table.count === 0 ? 0 : table.element_capacity;
|
|
56
|
-
assert.isInteger(this.resolution, 'resolution'); assert.greaterThanOrEqual(this.resolution, 2, 'resolution');
|
|
57
|
-
assert.greaterThan(this.step, 0, 'step');
|
|
58
|
-
const resize = capacity > this.#capacity || (capacity === 0 && this.#capacity !== 0) || this.resolution !== this.#resolution;
|
|
59
|
-
const old = this.#state;
|
|
60
|
-
const old_domain = this.#domain;
|
|
61
|
-
if (resize || old.length === 0) {
|
|
62
|
-
const size = Math.max(4, capacity * this.resolution ** 2 * 4);
|
|
63
|
-
assert.lessThanOrEqual(size, device.limits.maxStorageBufferBindingSize, 'Water wave atlas exceeds device storage limit; lower waves.resolution');
|
|
64
|
-
this.#state = [0, 1].map(i => device.createBuffer({ label: `Water / wave state ${i}`, size,
|
|
65
|
-
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST }));
|
|
66
|
-
this.#domain = device.createBuffer({ label: 'Water / authored footprint', size,
|
|
67
|
-
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST });
|
|
68
|
-
this.#capacity = capacity;
|
|
69
|
-
}
|
|
70
|
-
const same_resolution = this.#resolution === this.resolution;
|
|
71
|
-
this.#resolution = this.resolution;
|
|
72
|
-
const steps = Math.min(Math.floor(this.#pending / this.step + 1e-6), this.max_steps_per_frame);
|
|
73
|
-
this.#pending = Math.max(0, Math.min(this.#pending - steps * this.step, this.step));
|
|
74
|
-
const start = this.#parity, time = this.#time, state = this.#state, domain = this.#domain;
|
|
75
|
-
this.#parity = (start + steps) % 2;
|
|
76
|
-
this.#time += steps * this.step;
|
|
77
|
-
const n = this.#resolution, dt = this.step, damping = this.damping;
|
|
78
|
-
const pass = graph.add('Water / batched surface update', {}, (_d, _r, { encoder }) => {
|
|
79
|
-
if (state !== old) {
|
|
80
|
-
if (same_resolution && old.length !== 0) {
|
|
81
|
-
for (let i = 0; i < 2; i++) { encoder.copyBufferToBuffer(old[i], 0, state[i], 0, Math.min(old[i].size, state[i].size)); }
|
|
82
|
-
encoder.copyBufferToBuffer(old_domain, 0, domain, 0, Math.min(old_domain.size, domain.size));
|
|
83
|
-
}
|
|
84
|
-
encoder.done.then(() => { for (const buffer of old) { buffer.destroy(); } old_domain?.destroy(); });
|
|
85
|
-
}
|
|
86
|
-
if (capacity === 0) { return; }
|
|
87
|
-
const groups = Math.ceil(capacity * n * n / 128);
|
|
88
|
-
shader_water_wave_domain.dispatch({ encoder, bindings: {
|
|
89
|
-
batch: encoder.allocateTransientValueBuffer(WATER_WAVE_BATCH_STRUCT,
|
|
90
|
-
{ resolution: n, capacity, apply_impulses: same_resolution ? 0 : 1 }),
|
|
91
|
-
scene_database: scene.scene_database_buffer, domain,
|
|
92
|
-
geometries: scene.geometries.buffer_metadata,
|
|
93
|
-
blas_lookup: scene.geometries.blas.buffer_metadata, blas_data: scene.geometries.blas.buffer_data,
|
|
94
|
-
meshlet_metadata: scene.geometries.meshlets.buffer_metadata, meshlet_data: scene.geometries.meshlets.buffer_data,
|
|
95
|
-
}, group_count_x: Math.min(groups, 65535), group_count_y: Math.ceil(groups / 65535) });
|
|
96
|
-
const dispatch = (parity, step_dt, step_time, apply_impulses) => {
|
|
97
|
-
shader_water_wave_batch.dispatch({ encoder, bindings: {
|
|
98
|
-
batch: encoder.allocateTransientValueBuffer(WATER_WAVE_BATCH_STRUCT,
|
|
99
|
-
{ resolution: n, capacity, dt: step_dt, time: step_time, damping, apply_impulses }),
|
|
100
|
-
scene_database: scene.scene_database_buffer, domain, state_current: state[parity], state_previous: state[1 - parity],
|
|
101
|
-
}, group_count_x: Math.min(groups, 65535), group_count_y: Math.ceil(groups / 65535) });
|
|
102
|
-
};
|
|
103
|
-
// Clear both histories of new/reused slots before advancing, then release the reset flag.
|
|
104
|
-
dispatch(0, 0, time, 0); dispatch(1, 0, time, 0);
|
|
105
|
-
const finish = apply_impulses => {
|
|
106
|
-
const groups = table.dispatch_group_count(64);
|
|
107
|
-
shader_water_wave_batch_finish.dispatch({ encoder, bindings: { scene_database: scene.scene_database_buffer,
|
|
108
|
-
batch: encoder.allocateTransientValueBuffer(WATER_WAVE_BATCH_STRUCT,
|
|
109
|
-
{ resolution: n, capacity, dt, time, damping, apply_impulses }) },
|
|
110
|
-
group_count_x: Math.min(groups, 65535), group_count_y: Math.ceil(groups / 65535) });
|
|
111
|
-
};
|
|
112
|
-
finish(0);
|
|
113
|
-
for (let i = 0; i < steps; i++) { dispatch((start + i) % 2, dt, time + i * dt, i === 0 ? 1 : 0); }
|
|
114
|
-
if (steps > 0) {
|
|
115
|
-
finish(1);
|
|
116
|
-
// Submit is the ownership boundary for staged CPU inputs. Use the encoder's
|
|
117
|
-
// existing synchronous signal so a later scene/update cannot be cleared by
|
|
118
|
-
// an old promise callback.
|
|
119
|
-
encoder.onFinished.addOne(() => this.onInputsConsumed.dispatch(scene));
|
|
120
|
-
}
|
|
121
|
-
shader_water_wave_bounds.dispatch({ encoder, bindings: {
|
|
122
|
-
batch: encoder.allocateTransientValueBuffer(WATER_WAVE_BATCH_STRUCT, { resolution: n, capacity }),
|
|
123
|
-
scene_database: scene.scene_database_buffer, state: state[(start + steps) % 2],
|
|
124
|
-
}, group_count_x: Math.min(capacity, 65535), group_count_y: Math.ceil(capacity / 65535) });
|
|
125
|
-
});
|
|
126
|
-
pass.make_side_effect();
|
|
127
|
-
}
|
|
128
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export const WATER_TILE_CELLS: 16;
|
|
2
|
-
export const WATER_TILE_VERTEX_COUNT: number;
|
|
3
|
-
export const WATER_TILE_STRUCT: WebGPUStruct;
|
|
4
|
-
export const WATER_TESSELLATION_STRUCT: WebGPUStruct;
|
|
5
|
-
/** Clip in barycentric space: every generated point remains on the authored triangle. */
|
|
6
|
-
export const chunk_water_tessellation: CodeChunk;
|
|
7
|
-
import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
|
|
8
|
-
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
9
|
-
//# sourceMappingURL=chunk_water_tessellation.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chunk_water_tessellation.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/water/surface/chunk_water_tessellation.js"],"names":[],"mappings":"AAKA,kCAAmC;AAEnC,6CAAkE;AAClE,6CAEuB;AACvB,qDAE+B;AAE/B,yFAAyF;AACzF,iDA+H8B;6BA9ID,mCAAmC;0BADtC,oCAAoC"}
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
2
|
-
import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
|
|
3
|
-
import { f32, u32, vec2i, vec2u, vec2f, mat4x4f } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
4
|
-
import { chunk_barycentric_solve } from "../../shader/chunk/geometry/triangle/chunk_barycentric_solve.js";
|
|
5
|
-
|
|
6
|
-
export const WATER_TILE_CELLS = 16;
|
|
7
|
-
// A triangle clipped by five planes has at most eight corners, hence six fan triangles.
|
|
8
|
-
export const WATER_TILE_VERTEX_COUNT = WATER_TILE_CELLS ** 2 * 18;
|
|
9
|
-
export const WATER_TILE_STRUCT = WebGPUStruct.from({
|
|
10
|
-
meshlet: u32, triangle: u32, body: u32, anchor: f32, origin: vec2i, size: vec2u, pixels: f32,
|
|
11
|
-
}, 'WaterTile').pack();
|
|
12
|
-
export const WATER_TESSELLATION_STRUCT = WebGPUStruct.from({
|
|
13
|
-
resolution: vec2f, pixels: f32, view_projection_matrix: mat4x4f,
|
|
14
|
-
}, 'WaterTessellation').pack();
|
|
15
|
-
|
|
16
|
-
/** Clip in barycentric space: every generated point remains on the authored triangle. */
|
|
17
|
-
export const chunk_water_tessellation = CodeChunk.from(/* language=WGSL */ `
|
|
18
|
-
fn water_reference_position(position: vec3f, height: f32, simulated: bool) -> vec3f {
|
|
19
|
-
return vec3f(position.x, select(position.y, height, simulated), position.z);
|
|
20
|
-
}
|
|
21
|
-
// Bits identify the boundaries meeting at each corner: the three authored edges,
|
|
22
|
-
// followed by the near plane and four cell edges. Retaining them lets reconstruction
|
|
23
|
-
// evaluate an intersection directly, independent of the polygon clipping history.
|
|
24
|
-
struct WaterPolygon { points: array<vec3f, 8>, boundaries: array<u32, 8>, count: u32 }
|
|
25
|
-
fn water_triangle_polygon() -> WaterPolygon {
|
|
26
|
-
var p: WaterPolygon;
|
|
27
|
-
p.points[0] = vec3f(1,0,0); p.points[1] = vec3f(0,1,0); p.points[2] = vec3f(0,0,1); p.count = 3u;
|
|
28
|
-
p.boundaries[0] = 6u; p.boundaries[1] = 5u; p.boundaries[2] = 3u;
|
|
29
|
-
return p;
|
|
30
|
-
}
|
|
31
|
-
fn water_clip_polygon(p: WaterPolygon, distances: vec3f, boundary: u32) -> WaterPolygon {
|
|
32
|
-
var out: WaterPolygon;
|
|
33
|
-
if (p.count == 0u) { return out; }
|
|
34
|
-
var previous = p.points[p.count - 1u];
|
|
35
|
-
var d_previous = dot(previous, distances);
|
|
36
|
-
for (var i = 0u; i < p.count; i++) {
|
|
37
|
-
let current = p.points[i]; let d = dot(current, distances);
|
|
38
|
-
if ((d >= 0.0) != (d_previous >= 0.0)) {
|
|
39
|
-
let previous_index = select(i - 1u, p.count - 1u, i == 0u);
|
|
40
|
-
out.boundaries[out.count] = (p.boundaries[previous_index] & p.boundaries[i]) | boundary;
|
|
41
|
-
out.points[out.count] = mix(previous, current, d_previous / (d_previous - d)); out.count++;
|
|
42
|
-
}
|
|
43
|
-
if (d >= 0.0) { out.boundaries[out.count] = p.boundaries[i]; out.points[out.count] = current; out.count++; }
|
|
44
|
-
previous = current; d_previous = d;
|
|
45
|
-
}
|
|
46
|
-
return out;
|
|
47
|
-
}
|
|
48
|
-
fn water_plane_distances(a: vec4f, b: vec4f, c: vec4f, plane: vec4f) -> vec3f {
|
|
49
|
-
return vec3f(dot(a, plane), dot(b, plane), dot(c, plane));
|
|
50
|
-
}
|
|
51
|
-
fn water_point_weights(a: vec4f, b: vec4f, c: vec4f, point: vec2f) -> vec3f {
|
|
52
|
-
let w = vec3f(a.w,b.w,c.w);
|
|
53
|
-
return barycentric_solve(vec3f(a.x,b.x,c.x) - point.x * w, vec3f(a.y,b.y,c.y) - point.y * w);
|
|
54
|
-
}
|
|
55
|
-
fn water_authored_edges(weights: vec3f) -> u32 {
|
|
56
|
-
return select(0u,1u,weights.x == 0.0) | select(0u,2u,weights.y == 0.0) | select(0u,4u,weights.z == 0.0);
|
|
57
|
-
}
|
|
58
|
-
fn water_boundary_plane(boundary: u32, lo: vec2f, hi: vec2f) -> vec4f {
|
|
59
|
-
if ((boundary & 8u) != 0u) { return vec4f(0,0,-1,1); }
|
|
60
|
-
if ((boundary & 16u) != 0u) { return vec4f(1,0,0,-lo.x); }
|
|
61
|
-
if ((boundary & 32u) != 0u) { return vec4f(-1,0,0,hi.x); }
|
|
62
|
-
if ((boundary & 64u) != 0u) { return vec4f(0,1,0,-lo.y); }
|
|
63
|
-
return vec4f(0,-1,0,hi.y);
|
|
64
|
-
}
|
|
65
|
-
fn water_corner_weights(a: vec4f, b: vec4f, c: vec4f, boundaries: u32, lo: vec2f, hi: vec2f) -> vec3f {
|
|
66
|
-
if ((boundaries & 15u) == 0u) {
|
|
67
|
-
return water_point_weights(a,b,c,vec2f(select(lo.x,hi.x,(boundaries & 32u) != 0u),
|
|
68
|
-
select(lo.y,hi.y,(boundaries & 128u) != 0u)));
|
|
69
|
-
}
|
|
70
|
-
var distances: array<vec3f, 2>;
|
|
71
|
-
var count = 0u;
|
|
72
|
-
for (var bit = 0u; bit < 8u; bit++) {
|
|
73
|
-
if ((boundaries & (1u << bit)) == 0u) { continue; }
|
|
74
|
-
if (bit < 3u) { distances[count][bit] = 1.0; }
|
|
75
|
-
else { distances[count] = water_plane_distances(a,b,c,water_boundary_plane(1u << bit,lo,hi)); }
|
|
76
|
-
count++;
|
|
77
|
-
if (count == 2u) { break; }
|
|
78
|
-
}
|
|
79
|
-
return barycentric_solve(distances[0], distances[1]);
|
|
80
|
-
}
|
|
81
|
-
fn water_corner_position(a: vec3f, b: vec3f, c: vec3f, ca: vec4f, cb: vec4f, cc: vec4f,
|
|
82
|
-
weights: vec3f, boundaries: u32, lo: vec2f, hi: vec2f) -> vec3f {
|
|
83
|
-
let edges = boundaries & 7u;
|
|
84
|
-
if (edges == 6u) { return a; }
|
|
85
|
-
if (edges == 5u) { return b; }
|
|
86
|
-
if (edges == 3u) { return c; }
|
|
87
|
-
if (edges != 0u) {
|
|
88
|
-
var p = a; var q = b; var cp = ca; var cq = cb;
|
|
89
|
-
if (edges == 1u) { p = b; q = c; cp = cb; cq = cc; }
|
|
90
|
-
if (edges == 2u) { q = c; cq = cc; }
|
|
91
|
-
// Adjacent authored triangles traverse their common edge in opposite orders.
|
|
92
|
-
// Canonical endpoints and the original clipping plane give identical f32 positions.
|
|
93
|
-
if (p.x > q.x || (p.x == q.x && (p.y > q.y || (p.y == q.y && p.z > q.z)))) {
|
|
94
|
-
let tmp = p; p = q; q = tmp; let tc = cp; cp = cq; cq = tc;
|
|
95
|
-
}
|
|
96
|
-
// A cell corner may also lie on an authored edge coincident with a cell plane.
|
|
97
|
-
// Use the intersecting plane, rather than dividing by that coincident plane's zero span.
|
|
98
|
-
var dp = 0.0; var dq = 0.0;
|
|
99
|
-
for (var bit = 3u; bit < 8u; bit++) {
|
|
100
|
-
if ((boundaries & (1u << bit)) == 0u) { continue; }
|
|
101
|
-
let plane = water_boundary_plane(1u << bit,lo,hi);
|
|
102
|
-
let p_distance = dot(cp,plane); let q_distance = dot(cq,plane);
|
|
103
|
-
if (abs(p_distance - q_distance) > abs(dp - dq)) { dp = p_distance; dq = q_distance; }
|
|
104
|
-
}
|
|
105
|
-
return mix(p,q,dp / (dp - dq));
|
|
106
|
-
}
|
|
107
|
-
return a * weights.x + b * weights.y + c * weights.z;
|
|
108
|
-
}
|
|
109
|
-
fn water_cell_polygon(a: vec4f, b: vec4f, c: vec4f, lo: vec2f, hi: vec2f) -> WaterPolygon {
|
|
110
|
-
// Interior cells are ordinary quads. Reuse the rasterizer's homogeneous barycentric solve
|
|
111
|
-
// and reserve polygon clipping for the authored boundary and near-plane intersections.
|
|
112
|
-
if (a.w > 0.0 && b.w > 0.0 && c.w > 0.0 && a.w >= a.z && b.w >= b.z && c.w >= c.z) {
|
|
113
|
-
let p0 = water_point_weights(a,b,c,lo);
|
|
114
|
-
let p1 = water_point_weights(a,b,c,vec2f(hi.x,lo.y));
|
|
115
|
-
let p2 = water_point_weights(a,b,c,hi);
|
|
116
|
-
let p3 = water_point_weights(a,b,c,vec2f(lo.x,hi.y));
|
|
117
|
-
let minimum = min(min(p0,p1),min(p2,p3));
|
|
118
|
-
if (all(minimum >= vec3f(0))) {
|
|
119
|
-
var quad: WaterPolygon;
|
|
120
|
-
quad.points[0] = p0; quad.points[1] = p1; quad.points[2] = p2; quad.points[3] = p3;
|
|
121
|
-
quad.boundaries[0] = 80u | water_authored_edges(p0); quad.boundaries[1] = 96u | water_authored_edges(p1);
|
|
122
|
-
quad.boundaries[2] = 160u | water_authored_edges(p2); quad.boundaries[3] = 144u | water_authored_edges(p3);
|
|
123
|
-
// Preserve the source triangle's winding, just as the clipped path does.
|
|
124
|
-
// The rasterizer must identify the same side on interior and boundary cells.
|
|
125
|
-
if (dot(cross(a.xyw,b.xyw),c.xyw) < 0.0) {
|
|
126
|
-
quad.points[1] = p3; quad.points[3] = p1;
|
|
127
|
-
let boundary = quad.boundaries[1]; quad.boundaries[1] = quad.boundaries[3]; quad.boundaries[3] = boundary;
|
|
128
|
-
}
|
|
129
|
-
quad.count = 4u; return quad;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
var p = water_triangle_polygon();
|
|
133
|
-
p = water_clip_polygon(p, water_plane_distances(a,b,c,vec4f(0,0,-1,1)), 8u);
|
|
134
|
-
p = water_clip_polygon(p, water_plane_distances(a,b,c,vec4f(1,0,0,-lo.x)), 16u);
|
|
135
|
-
p = water_clip_polygon(p, water_plane_distances(a,b,c,vec4f(-1,0,0,hi.x)), 32u);
|
|
136
|
-
p = water_clip_polygon(p, water_plane_distances(a,b,c,vec4f(0,1,0,-lo.y)), 64u);
|
|
137
|
-
p = water_clip_polygon(p, water_plane_distances(a,b,c,vec4f(0,-1,0,hi.y)), 128u);
|
|
138
|
-
for (var i = 0u; i < p.count; i++) {
|
|
139
|
-
p.points[i] = water_corner_weights(a,b,c,p.boundaries[i],lo,hi);
|
|
140
|
-
p.boundaries[i] |= water_authored_edges(p.points[i]);
|
|
141
|
-
}
|
|
142
|
-
return p;
|
|
143
|
-
}
|
|
144
|
-
`, [chunk_barycentric_solve]);
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The primitive surface producer's physics, as pure functions so each is testable alone.
|
|
3
|
-
*
|
|
4
|
-
* A damped linear wave equation on a height field, `h_tt = c² ∇²h − γ h_t + f`, stepped by
|
|
5
|
-
* leapfrog. The celerity is the shallow-water one, `c = √(g·d)`. The batched producer uses a
|
|
6
|
-
* one-metre reference depth because an authored surface supplies no bathymetry. This primitive
|
|
7
|
-
* model describes long waves; deep-water wind waves have wavelength-dependent speed.
|
|
8
|
-
*
|
|
9
|
-
* @type {CodeChunk}
|
|
10
|
-
*/
|
|
11
|
-
export const chunk_water_wave: CodeChunk;
|
|
12
|
-
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
13
|
-
//# sourceMappingURL=chunk_water_wave.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chunk_water_wave.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/water/surface/chunk_water_wave.js"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,+BAFU,SAAS,CA6BhB;0BAvCuB,oCAAoC"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* The primitive surface producer's physics, as pure functions so each is testable alone.
|
|
5
|
-
*
|
|
6
|
-
* A damped linear wave equation on a height field, `h_tt = c² ∇²h − γ h_t + f`, stepped by
|
|
7
|
-
* leapfrog. The celerity is the shallow-water one, `c = √(g·d)`. The batched producer uses a
|
|
8
|
-
* one-metre reference depth because an authored surface supplies no bathymetry. This primitive
|
|
9
|
-
* model describes long waves; deep-water wind waves have wavelength-dependent speed.
|
|
10
|
-
*
|
|
11
|
-
* @type {CodeChunk}
|
|
12
|
-
*/
|
|
13
|
-
export const chunk_water_wave = CodeChunk.from(/* language=WGSL */ `
|
|
14
|
-
const WATER_WAVE_GRAVITY: f32 = 9.81;
|
|
15
|
-
|
|
16
|
-
// Squared celerity of a long wave over water depth metres deep, capped so an explicit step of the
|
|
17
|
-
// size the producer takes stays stable (2-D CFL: c·dt/dx ≤ 1/√2).
|
|
18
|
-
fn water_wave_celerity2(depth: f32, celerity_limit: f32) -> f32 {
|
|
19
|
-
return min(WATER_WAVE_GRAVITY * max(depth, 0.0), celerity_limit * celerity_limit);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
// One leapfrog step of h_tt = c² ∇²h − γ h_t + f: the next height from the current one, the
|
|
23
|
-
// previous one, the current height's Laplacian, c², the damping rate γ (1/s), the forcing f (m/s²)
|
|
24
|
-
// and the step dt (s).
|
|
25
|
-
fn water_wave_step(h: f32, h_previous: f32, laplacian: f32, celerity2: f32, damping: f32,
|
|
26
|
-
force: f32, dt: f32) -> f32 {
|
|
27
|
-
return h + (h - h_previous) * max(1.0 - damping * dt, 0.0) + dt * dt * (celerity2 * laplacian + force);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
// Extra damping in a band along the grid's border, rising quadratically to strength at the edge,
|
|
31
|
-
// so waves leave the domain instead of reflecting off the end of the grid.
|
|
32
|
-
fn water_wave_sponge(cell: vec2<u32>, resolution: u32, width: f32, strength: f32) -> f32 {
|
|
33
|
-
let last = f32(resolution - 1u);
|
|
34
|
-
let p = vec2<f32>(cell);
|
|
35
|
-
let edge = min(min(p.x, p.y), min(last - p.x, last - p.y));
|
|
36
|
-
let s = clamp(1.0 - edge / max(width, 1.0), 0.0, 1.0);
|
|
37
|
-
return strength * s * s;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
`);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shader_water_tiles.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/water/surface/shader_water_tiles.js"],"names":[],"mappings":"AA4BA,sGAAsG;AACtG,+CA6FmG;8BApHrE,+BAA+B"}
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import { CAMERA_UNIFORM_STRUCT } from "../../camera/CAMERA_UNIFORM_STRUCT.js";
|
|
2
|
-
import { GEOMETRY_METADATA_STRUCT } from "../../geometry/GEOMETRY_METADATA_STRUCT.js";
|
|
3
|
-
import { MESHLET_METADATA_STRUCT } from "../../geometry/meshlet/encoding/MESHLET_METADATA_STRUCT.js";
|
|
4
|
-
import { GEOMETRY_MESHLET_TRIANGLE_LIMIT } from "../../geometry/meshlet/GEOMETRY_MESHLET_TRIANGLE_LIMIT.js";
|
|
5
|
-
import { MESHLET_COLLECTION_STRUCT } from "../../rasterize/MESHLET_COLLECTION_STRUCT.js";
|
|
6
|
-
import { COLLECTION_U32_STRUCT_READ } from "../../gpu_primitive/COLLECTION_U32_STRUCT_READ.js";
|
|
7
|
-
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
8
|
-
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
9
|
-
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
10
|
-
import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
|
|
11
|
-
import { f32, u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
12
|
-
import { chunk_scene_database_access } from "../../scene/chunk_scene_database_access.js";
|
|
13
|
-
import { chunk_folded_workgroup_index } from "../../shader/chunk/grid/chunk_folded_workgroup_index.js";
|
|
14
|
-
import { chunk_read_meshlet_vertex_by_draw_index } from "../../shader/chunk/geometry/meshlet/chunk_read_meshlet_vertex_by_draw_index.js";
|
|
15
|
-
import { WATER_BODIES_TABLE, WATER_WAVES_TABLE } from "../medium/chunk_water_bodies.js";
|
|
16
|
-
import { chunk_water_tessellation, WATER_TILE_CELLS, WATER_TILE_STRUCT, WATER_TESSELLATION_STRUCT } from "./chunk_water_tessellation.js";
|
|
17
|
-
|
|
18
|
-
const resources = new ShaderResourceSetDescriptor();
|
|
19
|
-
resources.setImmediate('capacity', u32);
|
|
20
|
-
resources.createGroup().addUniform('camera', CAMERA_UNIFORM_STRUCT).addUniform('tessellation', WATER_TESSELLATION_STRUCT)
|
|
21
|
-
.addStorageBuffer('scene_database', WebGPUArray.u32)
|
|
22
|
-
.addStorageBuffer('geometries', WebGPUArray.from(GEOMETRY_METADATA_STRUCT))
|
|
23
|
-
.addStorageBuffer('water_meshlets', MESHLET_COLLECTION_STRUCT)
|
|
24
|
-
.addStorageBuffer('meshlet_metadata', WebGPUArray.from(MESHLET_METADATA_STRUCT))
|
|
25
|
-
.addStorageBuffer('meshlet_data', WebGPUArray.from(f32))
|
|
26
|
-
.addStorageBuffer('tiles', WebGPUArray.from(WATER_TILE_STRUCT), true)
|
|
27
|
-
.addStorageBuffer('counts', COLLECTION_U32_STRUCT_READ, true);
|
|
28
|
-
|
|
29
|
-
/** Keep triangle identity, including hidden bodies. Only displaced raster depth selects ownership. */
|
|
30
|
-
export const shader_water_tiles = ComputeShader.from({ label: 'Water / classify view tiles', resources,
|
|
31
|
-
body: CodeChunk.from(/* language=WGSL */ `
|
|
32
|
-
@compute @workgroup_size(128)
|
|
33
|
-
fn main(@builtin(workgroup_id) group: vec3u, @builtin(local_invocation_index) lane: u32) {
|
|
34
|
-
let i = folded_workgroup_index(group) * 128u + lane;
|
|
35
|
-
if (i == 0u) { counts.count = capacity; }
|
|
36
|
-
if (i >= capacity) { return; }
|
|
37
|
-
counts.elements[i] = 0u;
|
|
38
|
-
let meshlet_slot = i / ${GEOMETRY_MESHLET_TRIANGLE_LIMIT}u;
|
|
39
|
-
if (meshlet_slot >= water_meshlets.count) { return; }
|
|
40
|
-
let definition = water_meshlets.elements[meshlet_slot];
|
|
41
|
-
let triangle = i % ${GEOMETRY_MESHLET_TRIANGLE_LIMIT}u;
|
|
42
|
-
let header = meshlet_metadata[definition.index];
|
|
43
|
-
if (triangle >= header.primitive_count) { return; }
|
|
44
|
-
let body = ${WATER_BODIES_TABLE.marshalling_method_read}(&scene_database, definition.mesh);
|
|
45
|
-
let node = scene_read_node(&scene_database, body.node);
|
|
46
|
-
let simulated = body.wave != ~0u;
|
|
47
|
-
var bounds = vec2f(0);
|
|
48
|
-
if (simulated) { bounds = ${WATER_WAVES_TABLE.marshalling_method_read}(&scene_database, body.wave).displacement_bounds; }
|
|
49
|
-
// Increasing near-plane distance is farther from the camera. Use the far endpoint;
|
|
50
|
-
// clipping it at the near plane cannot discard a point displaced into the visible frustum.
|
|
51
|
-
let direction = tessellation.view_projection_matrix * node.global[1];
|
|
52
|
-
let farther = direction.w - direction.z >= 0.0;
|
|
53
|
-
var anchor = 0.0;
|
|
54
|
-
var pixels = tessellation.pixels;
|
|
55
|
-
if (simulated) {
|
|
56
|
-
let box = geometries[body.geometry].bounding_box;
|
|
57
|
-
// A shared local-xz reference keeps adjacent triangles' generated edge vertices
|
|
58
|
-
// identical, including sloped rest geometry. Only reconstruction flattens height;
|
|
59
|
-
// rendered vertices still interpolate all three authored position coordinates.
|
|
60
|
-
anchor = select(box[1] + bounds.x, box[4] + bounds.y, farther);
|
|
61
|
-
let x = tessellation.view_projection_matrix * node.global[0];
|
|
62
|
-
let z = tessellation.view_projection_matrix * node.global[2];
|
|
63
|
-
let origin = tessellation.view_projection_matrix * node.global[3];
|
|
64
|
-
let plane = cross(x.xyw, z.xyw);
|
|
65
|
-
let reference = origin + direction * anchor;
|
|
66
|
-
let span = box[4] - box[1] + bounds.y - bounds.x;
|
|
67
|
-
if (span > 0.0 && abs(dot(plane, reference.xyw)) <= 1e-5 * length(plane) * max(length(reference.xyw), 1.0)
|
|
68
|
-
&& abs(dot(plane, direction.xyw)) > 1e-20) {
|
|
69
|
-
anchor += select(-span, span, farther);
|
|
70
|
-
}
|
|
71
|
-
var minimum_w = 1e30;
|
|
72
|
-
for (var corner = 0u; corner < 4u; corner++) {
|
|
73
|
-
let p = vec3f(select(box[0], box[3], (corner & 1u) != 0u), anchor, select(box[2], box[5], (corner & 2u) != 0u));
|
|
74
|
-
minimum_w = min(minimum_w, (tessellation.view_projection_matrix * (node.global * vec4f(p, 1))).w);
|
|
75
|
-
}
|
|
76
|
-
let low = box[1] + bounds.x - anchor;
|
|
77
|
-
let high = box[4] + bounds.y - anchor;
|
|
78
|
-
let slopes = vec4f(direction.w + direction.x, direction.w - direction.x, direction.w + direction.y, direction.w - direction.y);
|
|
79
|
-
let allowance = max(vec4f(0), max(slopes * low, slopes * high));
|
|
80
|
-
// After swept side-plane clipping, the reference's NDC span is at most
|
|
81
|
-
// 2 + (left + right allowance)/minimum_w. Use this body-wide bound so a
|
|
82
|
-
// near-plane envelope cannot amplify patches or split shared edge grids.
|
|
83
|
-
let amplification = 1.0 + max(allowance.x + allowance.y, allowance.z + allowance.w)
|
|
84
|
-
/ (2.0 * max(camera.clip_near_far.x, minimum_w));
|
|
85
|
-
pixels *= amplification;
|
|
86
|
-
}
|
|
87
|
-
let pa = read_meshlet_vertex_by_draw_index(header, triangle * 3u).position;
|
|
88
|
-
let pb = read_meshlet_vertex_by_draw_index(header, triangle * 3u + 1u).position;
|
|
89
|
-
let pc = read_meshlet_vertex_by_draw_index(header, triangle * 3u + 2u).position;
|
|
90
|
-
let a = tessellation.view_projection_matrix * (node.global * vec4f(water_reference_position(pa, anchor, simulated), 1));
|
|
91
|
-
let b = tessellation.view_projection_matrix * (node.global * vec4f(water_reference_position(pb, anchor, simulated), 1));
|
|
92
|
-
let c = tessellation.view_projection_matrix * (node.global * vec4f(water_reference_position(pc, anchor, simulated), 1));
|
|
93
|
-
let heights = select(vec3f(0), vec3f(pa.y, pb.y, pc.y) - vec3f(anchor), simulated);
|
|
94
|
-
var p = water_clip_polygon(water_triangle_polygon(), water_plane_distances(a,b,c,vec4f(0,0,-1,1)), 0u);
|
|
95
|
-
// The reference is unjittered, but raster samples may move into the viewport by
|
|
96
|
-
// a pixel. Retain that fixed border without letting jitter change the tile grid.
|
|
97
|
-
let border = vec2f(1.0) + vec2f(2.0) / tessellation.resolution;
|
|
98
|
-
let planes = array<vec4f,4>(vec4f(1,0,0,border.x),vec4f(-1,0,0,border.x),vec4f(0,1,0,border.y),vec4f(0,-1,0,border.y));
|
|
99
|
-
for (var plane = 0u; plane < 4u; plane++) {
|
|
100
|
-
let sweep = dot(direction, planes[plane]);
|
|
101
|
-
let allowance = max((heights + vec3f(bounds.x)) * sweep, (heights + vec3f(bounds.y)) * sweep);
|
|
102
|
-
p = water_clip_polygon(p, water_plane_distances(a,b,c,planes[plane]) + allowance, 0u);
|
|
103
|
-
}
|
|
104
|
-
if (p.count < 3u) { return; }
|
|
105
|
-
var lo = vec2f(1e30); var hi = vec2f(-1e30);
|
|
106
|
-
for (var corner = 0u; corner < p.count; corner++) {
|
|
107
|
-
let q = a * p.points[corner].x + b * p.points[corner].y + c * p.points[corner].z;
|
|
108
|
-
let pixel = (q.xy / q.w * vec2f(0.5,-0.5) + vec2f(0.5)) * tessellation.resolution;
|
|
109
|
-
lo = min(lo, pixel); hi = max(hi, pixel);
|
|
110
|
-
}
|
|
111
|
-
let tile_pixels = pixels * ${WATER_TILE_CELLS}.0;
|
|
112
|
-
let origin = vec2i(floor(lo / tile_pixels));
|
|
113
|
-
let end = vec2i(ceil(hi / tile_pixels));
|
|
114
|
-
let size = vec2u(max(end - origin, vec2i(0)));
|
|
115
|
-
if (any(size == vec2u(0))) { return; }
|
|
116
|
-
var tile: WaterTile;
|
|
117
|
-
tile.meshlet = definition.index; tile.triangle = triangle; tile.body = definition.mesh;
|
|
118
|
-
tile.anchor = anchor; tile.origin = origin; tile.size = size; tile.pixels = pixels;
|
|
119
|
-
tiles[i] = tile;
|
|
120
|
-
counts.elements[i] = size.x * size.y;
|
|
121
|
-
}
|
|
122
|
-
`, [chunk_water_tessellation, chunk_read_meshlet_vertex_by_draw_index, chunk_scene_database_access,
|
|
123
|
-
WATER_BODIES_TABLE.chunk_read, WATER_WAVES_TABLE.chunk_read, chunk_folded_workgroup_index]) });
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export const WATER_WAVE_BATCH_STRUCT: WebGPUStruct;
|
|
2
|
-
export const shader_water_wave_batch: ComputeShader;
|
|
3
|
-
export const shader_water_wave_batch_finish: ComputeShader;
|
|
4
|
-
import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
|
|
5
|
-
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
6
|
-
//# sourceMappingURL=shader_water_wave_batch.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shader_water_wave_batch.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/water/surface/shader_water_wave_batch.js"],"names":[],"mappings":"AAYA,mDAC+E;AAO/E,oDA8CwH;AAMxH,2DAY4F;6BA/E/D,mCAAmC;8BALlC,+BAA+B"}
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
2
|
-
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
3
|
-
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
4
|
-
import { f32, u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
5
|
-
import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
|
|
6
|
-
import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
|
|
7
|
-
import { WATER_WAVES_TABLE as table } from "../medium/chunk_water_bodies.js";
|
|
8
|
-
import { chunk_folded_workgroup_index } from "../../shader/chunk/grid/chunk_folded_workgroup_index.js";
|
|
9
|
-
import { chunk_srdnoise2 } from "../../shader/chunk/noise/psrdnoise/chunk_srdnoise2.js";
|
|
10
|
-
import { chunk_water_wave } from "./chunk_water_wave.js";
|
|
11
|
-
import { chunk_scene_database_access } from "../../scene/chunk_scene_database_access.js";
|
|
12
|
-
|
|
13
|
-
export const WATER_WAVE_BATCH_STRUCT = WebGPUStruct.from({ resolution: u32, capacity: u32,
|
|
14
|
-
dt: f32, time: f32, damping: f32, apply_impulses: u32 }, 'WaterWaveBatch');
|
|
15
|
-
const resources = new ShaderResourceSetDescriptor();
|
|
16
|
-
resources.createGroup().addUniform('batch', WATER_WAVE_BATCH_STRUCT)
|
|
17
|
-
.addStorageBuffer('scene_database', WebGPUArray.u32)
|
|
18
|
-
.addStorageBuffer('domain', WebGPUArray.u32)
|
|
19
|
-
.addStorageBuffer('state_current', WebGPUArray.from(f32))
|
|
20
|
-
.addStorageBuffer('state_previous', WebGPUArray.from(f32), true);
|
|
21
|
-
export const shader_water_wave_batch = ComputeShader.from({ label: 'Water / batched wave step', resources,
|
|
22
|
-
body: CodeChunk.from(/* language=WGSL */ `
|
|
23
|
-
@compute @workgroup_size(128)
|
|
24
|
-
fn main(@builtin(workgroup_id) group: vec3u, @builtin(local_invocation_index) lane: u32) {
|
|
25
|
-
let i = folded_workgroup_index(group) * 128u + lane;
|
|
26
|
-
let n = batch.resolution;
|
|
27
|
-
let row = i / (n * n);
|
|
28
|
-
if (row >= batch.capacity) { return; }
|
|
29
|
-
let params = ${table.marshalling_method_read}(&scene_database, row);
|
|
30
|
-
if (params.first_write != 0u || params.node == 0u || params.node == ~0u || domain[i] == 0u) { state_previous[i] = 0.0; return; }
|
|
31
|
-
if (batch.dt == 0.0) { return; }
|
|
32
|
-
let cell = vec2u(i % n, (i / n) % n);
|
|
33
|
-
let start = row * n * n;
|
|
34
|
-
let spacing = max((params.extent.zw - params.extent.xy) / f32(n - 1u), vec2f(1e-20));
|
|
35
|
-
let world = scene_read_node(&scene_database, params.node).global;
|
|
36
|
-
let scale = vec3f(length(world[0].xyz), length(world[1].xyz), length(world[2].xyz));
|
|
37
|
-
// A temporarily collapsed transform must not poison persistent histories with NaNs.
|
|
38
|
-
if (any(scale <= vec3f(1e-10))) { state_previous[i] = state_current[i]; return; }
|
|
39
|
-
let world_spacing = max(spacing * scale.xz, vec2f(1e-10));
|
|
40
|
-
let h = state_current[i];
|
|
41
|
-
let left = start + cell.y * n + select(cell.x - 1u, 0u, cell.x == 0u);
|
|
42
|
-
let right = start + cell.y * n + min(cell.x + 1u, n - 1u);
|
|
43
|
-
let down = start + select(cell.y - 1u, 0u, cell.y == 0u) * n + cell.x;
|
|
44
|
-
let up = start + min(cell.y + 1u, n - 1u) * n + cell.x;
|
|
45
|
-
let laplacian = (state_current[left] + state_current[right] - 2.0 * h) / (world_spacing.x * world_spacing.x)
|
|
46
|
-
+ (state_current[down] + state_current[up] - 2.0 * h) / (world_spacing.y * world_spacing.y);
|
|
47
|
-
let position = mix(params.extent.xy, params.extent.zw, vec2f(cell) / f32(n - 1u));
|
|
48
|
-
let wind = params.forcing.xy * scale.xz;
|
|
49
|
-
let wind_direction = wind / max(length(wind), 1e-20);
|
|
50
|
-
let drift = wind_direction * params.forcing.w * batch.time;
|
|
51
|
-
var force = params.forcing.z / scale.y * srdnoise2((position * scale.xz - drift) / 6.0, 0.0).x;
|
|
52
|
-
if (batch.apply_impulses != 0u) {
|
|
53
|
-
for (var j = 0u; j < params.impulse_count; j++) {
|
|
54
|
-
let impulse = params.impulses[j];
|
|
55
|
-
let d = position - impulse.xy;
|
|
56
|
-
let world_delta = (world * vec4f(d.x, 0.0, d.y, 0.0)).xyz;
|
|
57
|
-
force += impulse.w / (batch.dt * scale.y) * exp(-dot(world_delta, world_delta) / max(impulse.z * impulse.z, 1e-6));
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
let damping = batch.damping + water_wave_sponge(cell, n, max(4.0, f32(n) * 0.04), 4.0);
|
|
61
|
-
// The authored surface has no bathymetry. The primitive producer uses a one-metre reference
|
|
62
|
-
// depth; the CFL cap follows both axes of its local grid. It does not define the mesh outline.
|
|
63
|
-
let celerity = 0.6 * min(world_spacing.x, world_spacing.y) / batch.dt;
|
|
64
|
-
state_previous[i] = water_wave_step(h, state_previous[i], laplacian,
|
|
65
|
-
water_wave_celerity2(1.0, celerity), damping, force, batch.dt);
|
|
66
|
-
}
|
|
67
|
-
`, [table.chunk_read, chunk_folded_workgroup_index, chunk_srdnoise2, chunk_water_wave, chunk_scene_database_access]) });
|
|
68
|
-
|
|
69
|
-
const finish_resources = new ShaderResourceSetDescriptor();
|
|
70
|
-
finish_resources.createGroup().addUniform('batch', WATER_WAVE_BATCH_STRUCT)
|
|
71
|
-
.addStorageBuffer('scene_database', WebGPUArray.u32, true);
|
|
72
|
-
const pg = table.page_iterator_symbol_prefix(64, true);
|
|
73
|
-
export const shader_water_wave_batch_finish = ComputeShader.from({ label: 'Water / consume wave inputs', resources: finish_resources,
|
|
74
|
-
body: CodeChunk.from(/* language=WGSL */ `
|
|
75
|
-
@compute @workgroup_size(64)
|
|
76
|
-
fn main(@builtin(workgroup_id) group: vec3u, @builtin(local_invocation_index) lane: u32) {
|
|
77
|
-
if (!${pg}_setup(&scene_database, folded_workgroup_index(group), lane)) { return; }
|
|
78
|
-
let slot = ${pg}_slot_in_page(lane);
|
|
79
|
-
if (slot >= ${pg}_ELEMENTS_PER_PAGE || !${pg}_is_occupied(slot)) { return; }
|
|
80
|
-
let row = ${pg}_slot_to_index(slot);
|
|
81
|
-
${table.marshalling_method_write_field('first_write')}(&scene_database, row, 0u);
|
|
82
|
-
if (batch.apply_impulses != 0u) { ${table.marshalling_method_write_field('impulse_count')}(&scene_database, row, 0u); }
|
|
83
|
-
}
|
|
84
|
-
`, [table.chunk_iterate(64, true), table.wgsl_gen_write_field_code('first_write'),
|
|
85
|
-
table.wgsl_gen_write_field_code('impulse_count'), chunk_folded_workgroup_index]) });
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
/** Bake the authored footprint once per new wave row, using the existing geometry BLAS. */
|
|
2
|
-
export const shader_water_wave_domain: ComputeShader;
|
|
3
|
-
/** Bilinear reconstruction cannot leave the extrema of its samples. Include the rest surface. */
|
|
4
|
-
export const shader_water_wave_bounds: ComputeShader;
|
|
5
|
-
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
6
|
-
//# sourceMappingURL=shader_water_wave_domain.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shader_water_wave_domain.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/water/surface/shader_water_wave_domain.js"],"names":[],"mappings":"AAwBA,2FAA2F;AAC3F,qDAqBsF;AAOtF,iGAAiG;AACjG,qDA4BmH;8BAlFrF,+BAA+B"}
|