@woosh/meep-engine 3.41.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/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/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/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.map +1 -1
- package/src/engine/ecs/EntityManager.js +18 -15
- 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/parent/EntityNode.js +3 -3
- 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/binary/BinarySerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/binary/BinarySerializationRegistry.js +3 -2
- 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 +8 -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/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/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/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/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/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/scene/SCENE_DATABASE_SPEC.js +2 -1
- 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/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
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
2
|
+
import { chunk_water_lod } from "./chunk_water_lod.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* A lattice cell cut by an authored triangle in the body's metric local xz
|
|
6
|
+
* (WATER_SURFACE_DISTANCE_LOD_PROPOSAL_2026_10_06.md §4.2).
|
|
7
|
+
*
|
|
8
|
+
* Every point is identified by what it lies on — a cell corner, an authored corner, or a cell edge crossing an
|
|
9
|
+
* authored edge — and its position, rest height and normal are computed from that identity alone, with each edge
|
|
10
|
+
* taken in a fixed endpoint order (the lesser in x, then z, first). So two triangles sharing an edge, and two cells or
|
|
11
|
+
* two levels sharing a seam, produce the same f32 vertices whichever way round they walk them.
|
|
12
|
+
*
|
|
13
|
+
* Point bits: the authored edges 1 (b–c), 2 (c–a), 4 (a–b); the cell edges 16 (corner 0 → 1), 32 (1 → 2), 64 (2 → 3),
|
|
14
|
+
* 128 (3 → 0), corners 0 … 3 at (x0, z0), (x1, z0), (x1, z1), (x0, z1).
|
|
15
|
+
*
|
|
16
|
+
* @type {CodeChunk}
|
|
17
|
+
*/
|
|
18
|
+
export const chunk_water_lod_cell = CodeChunk.from(/* language=WGSL */ `
|
|
19
|
+
struct WaterLodTriangle {
|
|
20
|
+
// authored corners, local units
|
|
21
|
+
local: array<vec3<f32>, 3>,
|
|
22
|
+
normal: array<vec3<f32>, 3>,
|
|
23
|
+
// the corners in metric local xz
|
|
24
|
+
p: array<vec2<f32>, 3>,
|
|
25
|
+
// per edge, the side of its canonical line the triangle is on: ±1
|
|
26
|
+
side: vec3<f32>,
|
|
27
|
+
// whether the corners turn the same way as a cell's, x towards z
|
|
28
|
+
ccw: bool,
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
struct WaterLodPolygon {
|
|
32
|
+
points: array<vec2<f32>, 8>,
|
|
33
|
+
bits: array<u32, 8>,
|
|
34
|
+
count: u32,
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Edge t of a triangle joins corners t + 1 and t + 2, in the order their metric positions sort.
|
|
38
|
+
fn water_lod_edge(tri: WaterLodTriangle, t: u32) -> vec2<u32> {
|
|
39
|
+
let i = (t + 1u) % 3u;
|
|
40
|
+
let j = (t + 2u) % 3u;
|
|
41
|
+
let pi = tri.p[i];
|
|
42
|
+
let pj = tri.p[j];
|
|
43
|
+
let swap = pi.x > pj.x || (pi.x == pj.x && pi.y > pj.y);
|
|
44
|
+
return select(vec2<u32>(i, j), vec2<u32>(j, i), swap);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Where x lies against edge t's canonical line: the same number from either triangle that shares the edge.
|
|
48
|
+
fn water_lod_edge_distance(tri: WaterLodTriangle, t: u32, x: vec2<f32>) -> f32 {
|
|
49
|
+
let e = water_lod_edge(tri, t);
|
|
50
|
+
let u = tri.p[e.x];
|
|
51
|
+
let v = tri.p[e.y];
|
|
52
|
+
return (v.x - u.x) * (x.y - u.y) - (v.y - u.y) * (x.x - u.x);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
fn water_lod_triangle(a: vec3<f32>, b: vec3<f32>, c: vec3<f32>, na: vec3<f32>, nb: vec3<f32>, nc: vec3<f32>, scale: vec3<f32>) -> WaterLodTriangle {
|
|
56
|
+
var tri: WaterLodTriangle;
|
|
57
|
+
tri.local = array<vec3<f32>, 3>(a, b, c);
|
|
58
|
+
tri.normal = array<vec3<f32>, 3>(na, nb, nc);
|
|
59
|
+
tri.p = array<vec2<f32>, 3>(a.xz * scale.xz, b.xz * scale.xz, c.xz * scale.xz);
|
|
60
|
+
for (var t = 0u; t < 3u; t++) { tri.side[t] = select(-1.0, 1.0, water_lod_edge_distance(tri, t, tri.p[t]) >= 0.0); }
|
|
61
|
+
let e1 = tri.p[1] - tri.p[0];
|
|
62
|
+
let e2 = tri.p[2] - tri.p[0];
|
|
63
|
+
tri.ccw = e1.x * e2.y - e1.y * e2.x >= 0.0;
|
|
64
|
+
return tri;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Whether the triangle covers no area of metric xz as the lattice measures it: a corner on its opposite edge's line.
|
|
68
|
+
// Every edge would then count the triangle on both of its sides, and the triangle would read as a half-plane.
|
|
69
|
+
fn water_lod_no_area(tri: WaterLodTriangle) -> bool {
|
|
70
|
+
var none = false;
|
|
71
|
+
for (var t = 0u; t < 3u; t++) { none = none || water_lod_edge_distance(tri, t, tri.p[t]) == 0.0; }
|
|
72
|
+
return none;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// The authored edges a point lies exactly on.
|
|
76
|
+
fn water_lod_edge_bits(tri: WaterLodTriangle, x: vec2<f32>) -> u32 {
|
|
77
|
+
var bits = 0u;
|
|
78
|
+
for (var t = 0u; t < 3u; t++) { if (water_lod_edge_distance(tri, t, x) == 0.0) { bits |= 1u << t; } }
|
|
79
|
+
return bits;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Whether a point is inside the triangle, its edges included.
|
|
83
|
+
fn water_lod_inside(tri: WaterLodTriangle, x: vec2<f32>) -> bool {
|
|
84
|
+
var inside = true;
|
|
85
|
+
for (var t = 0u; t < 3u; t++) { inside = inside && tri.side[t] * water_lod_edge_distance(tri, t, x) >= 0.0; }
|
|
86
|
+
return inside;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
fn water_lod_corner_bits(k: u32) -> u32 {
|
|
90
|
+
return (16u << k) | (16u << ((k + 3u) % 4u));
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Whether a point's bits say where it is: a cell corner, an authored corner, or a cell edge crossing an authored edge.
|
|
94
|
+
fn water_lod_identified(bits: u32) -> bool {
|
|
95
|
+
let authored = bits & 7u;
|
|
96
|
+
let cell = bits >> 4u;
|
|
97
|
+
var corner = false;
|
|
98
|
+
for (var k = 0u; k < 4u; k++) {
|
|
99
|
+
let pair = water_lod_corner_bits(k) >> 4u;
|
|
100
|
+
corner = corner || (cell & pair) == pair;
|
|
101
|
+
}
|
|
102
|
+
return corner || countOneBits(authored) >= 2u || (authored != 0u && cell != 0u);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// A point from what it lies on, for bits that identify it: a cell corner first, so a cell's own corners keep their
|
|
106
|
+
// places wherever an authored corner also lies.
|
|
107
|
+
fn water_lod_point(tri: WaterLodTriangle, corners: array<vec2<f32>, 4>, bits: u32) -> vec2<f32> {
|
|
108
|
+
let cell = bits >> 4u;
|
|
109
|
+
for (var k = 0u; k < 4u; k++) {
|
|
110
|
+
let corner = water_lod_corner_bits(k) >> 4u;
|
|
111
|
+
if ((cell & corner) == corner) { return corners[k]; }
|
|
112
|
+
}
|
|
113
|
+
let authored = bits & 7u;
|
|
114
|
+
if (authored == 6u) { return tri.p[0]; }
|
|
115
|
+
if (authored == 5u) { return tri.p[1]; }
|
|
116
|
+
if (authored == 3u) { return tri.p[2]; }
|
|
117
|
+
// a cell edge crossing an authored edge: the cell edge in its canonical order too
|
|
118
|
+
let e = firstTrailingBit(cell);
|
|
119
|
+
let t = firstTrailingBit(authored);
|
|
120
|
+
var p = corners[e];
|
|
121
|
+
var q = corners[(e + 1u) % 4u];
|
|
122
|
+
if (p.x > q.x || (p.x == q.x && p.y > q.y)) { let swap = p; p = q; q = swap; }
|
|
123
|
+
let dp = water_lod_edge_distance(tri, t, p);
|
|
124
|
+
let dq = water_lod_edge_distance(tri, t, q);
|
|
125
|
+
if (dp == dq) { return p; }
|
|
126
|
+
return mix(p, q, dp / (dp - dq));
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// The cell with corners morphed, every corner tagged with the authored edges it lies on.
|
|
130
|
+
fn water_lod_cell_polygon(tri: WaterLodTriangle, corners: array<vec2<f32>, 4>) -> WaterLodPolygon {
|
|
131
|
+
var polygon: WaterLodPolygon;
|
|
132
|
+
for (var k = 0u; k < 4u; k++) {
|
|
133
|
+
polygon.points[k] = corners[k];
|
|
134
|
+
polygon.bits[k] = water_lod_corner_bits(k) | water_lod_edge_bits(tri, corners[k]);
|
|
135
|
+
}
|
|
136
|
+
polygon.count = 4u;
|
|
137
|
+
return polygon;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Sutherland–Hodgman against the inside of authored edge t. A new point takes what its two neighbours share and
|
|
141
|
+
// the edge, and its position from those alone; where that does not say where it is (two neighbours that share no
|
|
142
|
+
// edge, which only rounding makes), it stands in for the point it was found at. So every point of a clipped cell can
|
|
143
|
+
// be rebuilt from its bits.
|
|
144
|
+
fn water_lod_clip(tri: WaterLodTriangle, corners: array<vec2<f32>, 4>, polygon: WaterLodPolygon, t: u32) -> WaterLodPolygon {
|
|
145
|
+
var out: WaterLodPolygon;
|
|
146
|
+
if (polygon.count == 0u) { return out; }
|
|
147
|
+
var previous = polygon.count - 1u;
|
|
148
|
+
var d_previous = tri.side[t] * water_lod_edge_distance(tri, t, polygon.points[previous]);
|
|
149
|
+
for (var i = 0u; i < polygon.count; i++) {
|
|
150
|
+
let d = tri.side[t] * water_lod_edge_distance(tri, t, polygon.points[i]);
|
|
151
|
+
if ((d >= 0.0) != (d_previous >= 0.0) && out.count < 8u) {
|
|
152
|
+
var bits = (polygon.bits[previous] & polygon.bits[i]) | (1u << t);
|
|
153
|
+
var point = polygon.points[i];
|
|
154
|
+
if (water_lod_identified(bits)) { point = water_lod_point(tri, corners, bits); } else { bits = polygon.bits[i]; }
|
|
155
|
+
out.bits[out.count] = bits;
|
|
156
|
+
out.points[out.count] = point;
|
|
157
|
+
out.count++;
|
|
158
|
+
}
|
|
159
|
+
if (d >= 0.0 && out.count < 8u) {
|
|
160
|
+
out.bits[out.count] = polygon.bits[i];
|
|
161
|
+
out.points[out.count] = polygon.points[i];
|
|
162
|
+
out.count++;
|
|
163
|
+
}
|
|
164
|
+
previous = i;
|
|
165
|
+
d_previous = d;
|
|
166
|
+
}
|
|
167
|
+
return out;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
fn water_lod_cell_clipped(tri: WaterLodTriangle, corners: array<vec2<f32>, 4>) -> WaterLodPolygon {
|
|
171
|
+
var polygon = water_lod_cell_polygon(tri, corners);
|
|
172
|
+
for (var t = 0u; t < 3u; t++) { polygon = water_lod_clip(tri, corners, polygon, t); }
|
|
173
|
+
return polygon;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// A clipped cell as two words, what its points are rebuilt from: byte 0 its point count, at most the seven a square
|
|
177
|
+
// cut by a triangle can have, then each point's bits a byte.
|
|
178
|
+
fn water_lod_polygon_pack(polygon: WaterLodPolygon) -> vec2<u32> {
|
|
179
|
+
let count = min(polygon.count, 7u);
|
|
180
|
+
var words = vec2<u32>(count, 0u);
|
|
181
|
+
for (var i = 0u; i < count; i++) {
|
|
182
|
+
let at = i + 1u;
|
|
183
|
+
let byte = (polygon.bits[i] & 255u) << (8u * (at & 3u));
|
|
184
|
+
if (at < 4u) { words.x |= byte; } else { words.y |= byte; }
|
|
185
|
+
}
|
|
186
|
+
return words;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
fn water_lod_polygon_count(words: vec2<u32>) -> u32 { return words.x & 255u; }
|
|
190
|
+
|
|
191
|
+
fn water_lod_polygon_bits(words: vec2<u32>, i: u32) -> u32 {
|
|
192
|
+
let at = i + 1u;
|
|
193
|
+
return (select(words.x, words.y, at >= 4u) >> (8u * (at & 3u))) & 255u;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
struct WaterLodRest {
|
|
197
|
+
// local units
|
|
198
|
+
position: vec3<f32>,
|
|
199
|
+
normal: vec3<f32>,
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// A point's rest position on the authored surface: an authored corner itself; along its edge, in the edge's canonical
|
|
203
|
+
// order, for a point on one; inside, the triangle's plane.
|
|
204
|
+
fn water_lod_rest(tri: WaterLodTriangle, bits: u32, x: vec2<f32>, scale: vec3<f32>) -> WaterLodRest {
|
|
205
|
+
let authored = bits & 7u;
|
|
206
|
+
if (authored == 6u) { return WaterLodRest(tri.local[0], tri.normal[0]); }
|
|
207
|
+
if (authored == 5u) { return WaterLodRest(tri.local[1], tri.normal[1]); }
|
|
208
|
+
if (authored == 3u) { return WaterLodRest(tri.local[2], tri.normal[2]); }
|
|
209
|
+
let xz = x / scale.xz;
|
|
210
|
+
if (authored != 0u) {
|
|
211
|
+
let e = water_lod_edge(tri, firstTrailingBit(authored));
|
|
212
|
+
let u = tri.p[e.x];
|
|
213
|
+
let span = tri.p[e.y] - u;
|
|
214
|
+
let along = dot(x - u, span) / max(dot(span, span), 1e-30);
|
|
215
|
+
return WaterLodRest(vec3<f32>(xz.x, mix(tri.local[e.x].y, tri.local[e.y].y, along), xz.y),
|
|
216
|
+
mix(tri.normal[e.x], tri.normal[e.y], along));
|
|
217
|
+
}
|
|
218
|
+
var weights: vec3<f32>;
|
|
219
|
+
for (var t = 0u; t < 3u; t++) {
|
|
220
|
+
weights[t] = water_lod_edge_distance(tri, t, x) / water_lod_edge_distance(tri, t, tri.p[t]);
|
|
221
|
+
}
|
|
222
|
+
return WaterLodRest(vec3<f32>(xz.x, dot(weights, vec3<f32>(tri.local[0].y, tri.local[1].y, tri.local[2].y)), xz.y),
|
|
223
|
+
tri.normal[0] * weights.x + tri.normal[1] * weights.y + tri.normal[2] * weights.z);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// Separating axes in 2D: whether the triangle and the square lo … hi share area. Touching along an edge or at a point
|
|
227
|
+
// draws nothing, so it does not count.
|
|
228
|
+
fn water_lod_triangle_meets_square(tri: WaterLodTriangle, lo: vec2<f32>, hi: vec2<f32>) -> bool {
|
|
229
|
+
let tri_lo = min(min(tri.p[0], tri.p[1]), tri.p[2]);
|
|
230
|
+
let tri_hi = max(max(tri.p[0], tri.p[1]), tri.p[2]);
|
|
231
|
+
if (any(tri_lo >= hi) || any(tri_hi <= lo)) { return false; }
|
|
232
|
+
let square = array<vec2<f32>, 4>(lo, vec2<f32>(hi.x, lo.y), hi, vec2<f32>(lo.x, hi.y));
|
|
233
|
+
for (var t = 0u; t < 3u; t++) {
|
|
234
|
+
var any_inside = false;
|
|
235
|
+
for (var k = 0u; k < 4u; k++) { any_inside = any_inside || tri.side[t] * water_lod_edge_distance(tri, t, square[k]) > 0.0; }
|
|
236
|
+
if (!any_inside) { return false; }
|
|
237
|
+
}
|
|
238
|
+
return true;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
// Whether the whole square lies inside the triangle.
|
|
242
|
+
fn water_lod_triangle_holds_square(tri: WaterLodTriangle, lo: vec2<f32>, hi: vec2<f32>) -> bool {
|
|
243
|
+
return water_lod_inside(tri, lo) && water_lod_inside(tri, vec2<f32>(hi.x, lo.y))
|
|
244
|
+
&& water_lod_inside(tri, hi) && water_lod_inside(tri, vec2<f32>(lo.x, hi.y));
|
|
245
|
+
}
|
|
246
|
+
`, [chunk_water_lod]);
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/** Vertices a cell of each list draws: an interior cell's quad, a boundary cell's clipped polygon fan, a triangle. */
|
|
2
|
+
export const WATER_LOD_INTERIOR_VERTICES: 6;
|
|
3
|
+
export const WATER_LOD_BOUNDARY_VERTICES: 15;
|
|
4
|
+
export const WATER_LOD_TRIANGLE_VERTICES: 3;
|
|
5
|
+
/** First vertex of each list's draw: the vertex stage tells the lists apart by it. */
|
|
6
|
+
export const WATER_LOD_BOUNDARY_FIRST_VERTEX: 16;
|
|
7
|
+
export const WATER_LOD_TRIANGLE_FIRST_VERTEX: 32;
|
|
8
|
+
/** A patch's base vertex: its indices name its 9 × 9 lattice points from here. */
|
|
9
|
+
export const WATER_LOD_PATCH_FIRST_VERTEX: 64;
|
|
10
|
+
/** Lattice points along a patch's side: a quadrant's 8 cells and their far edge. */
|
|
11
|
+
export const WATER_LOD_PATCH_SIDE: 9;
|
|
12
|
+
/**
|
|
13
|
+
* A quadrant inside its triangle drawn as one indexed patch: its 64 cells as two triangles each, row by row, over its
|
|
14
|
+
* 9 × 9 lattice points, so the vertex stage runs about once a point rather than six times a cell. Each cell turns as
|
|
15
|
+
* an interior cell's quad does, its diagonal from its first corner to its third.
|
|
16
|
+
*/
|
|
17
|
+
export const WATER_LOD_PATCH_INDICES: Uint16Array;
|
|
18
|
+
/** Bits of a cell record that hold the cell's place in its candidate's node: quadrant · 64 + row · 8 + column. */
|
|
19
|
+
export const WATER_LOD_CELL_LOCAL_BITS: 8;
|
|
20
|
+
/** Most candidates a frame can hold: the rest of a cell record's bits. */
|
|
21
|
+
export const WATER_LOD_CANDIDATE_LIMIT: number;
|
|
22
|
+
/** Words a boundary cell's clipped polygon is kept in, beside its record: see water_lod_polygon_pack. */
|
|
23
|
+
export const WATER_LOD_POLYGON_WORDS: 2;
|
|
24
|
+
/** Cell lists, in the order their scans, budgets and draws are kept. */
|
|
25
|
+
export const WaterLodList: Readonly<{
|
|
26
|
+
Interior: 0;
|
|
27
|
+
Boundary: 1;
|
|
28
|
+
Triangle: 2;
|
|
29
|
+
Patch: 3;
|
|
30
|
+
}>;
|
|
31
|
+
/**
|
|
32
|
+
* One (authored triangle, lattice node) pair the frame considered.
|
|
33
|
+
* `packed`: bits 0–6 the triangle in its meshlet, bits 8–12 the level,
|
|
34
|
+
* 16–19 the quadrants drawn, 20–23 those of them inside the triangle.
|
|
35
|
+
*/
|
|
36
|
+
export const WATER_LOD_CANDIDATE_STRUCT: WebGPUStruct;
|
|
37
|
+
/**
|
|
38
|
+
* Budgets a frame's lists are cut to, and so where each list's records start in the cell buffer: interior cells,
|
|
39
|
+
* boundary cells, triangles drawn as themselves (two words each), patches, then the boundary cells' polygons
|
|
40
|
+
* ({@link WATER_LOD_POLYGON_WORDS} each).
|
|
41
|
+
*/
|
|
42
|
+
export const WATER_LOD_LIMITS_STRUCT: WebGPUStruct;
|
|
43
|
+
/**
|
|
44
|
+
* Words of the per-view statistics, totals before budgets: candidates, interior cells, boundary cells, flat triangles,
|
|
45
|
+
* patches.
|
|
46
|
+
*/
|
|
47
|
+
export const WATER_LOD_STATISTICS_WORDS: 5;
|
|
48
|
+
/**
|
|
49
|
+
* The view's draw culling (WATER_SURFACE_DISTANCE_LOD_PROPOSAL_2026_10_06.md §4.3), one thread a body of the culling
|
|
50
|
+
* pass's visible list: against the view with the body's exact bounds, and for a body drawn, how this view sees it —
|
|
51
|
+
* the camera in its metric local frame and whether it is cut from the lattice or drawn as its authored triangles —
|
|
52
|
+
* and its meshlet count at its row, for an ordered expansion. A drawn body's steep flag starts again: its triangles
|
|
53
|
+
* set it.
|
|
54
|
+
*/
|
|
55
|
+
export const shader_water_lod_bodies: ComputeShader;
|
|
56
|
+
/**
|
|
57
|
+
* One workgroup a drawn meshlet, one thread a triangle slot: whether the triangle is drawn as itself — its body is flat
|
|
58
|
+
* in this view, or it is too steep for the lattice, which also marks its body steep so the next frame keeps it calm —
|
|
59
|
+
* and otherwise how many candidates it makes: the nodes of each level of its distance range that its bounds overlap
|
|
60
|
+
* within reach of the level's range.
|
|
61
|
+
*/
|
|
62
|
+
export const shader_water_lod_triangles: ComputeShader;
|
|
63
|
+
/**
|
|
64
|
+
* One thread a triangle drawn as itself, up to its list's budget: its record, two words at the list's base in the cell
|
|
65
|
+
* buffer — its meshlet, and its body row and triangle — in the triangles' order.
|
|
66
|
+
*/
|
|
67
|
+
export const shader_water_lod_flats: ComputeShader;
|
|
68
|
+
/** Words of a candidate's row record: 32 rows (4 quadrants × 8), 16 bits each. */
|
|
69
|
+
export const WATER_LOD_CANDIDATE_ROW_WORDS: 16;
|
|
70
|
+
/**
|
|
71
|
+
* One thread a candidate, up to the frame's budget: which of its node's quadrants the selection rule draws at its
|
|
72
|
+
* level, that meet the view and the triangle, which of those lie inside the triangle, and so how many patches, interior
|
|
73
|
+
* cells and boundary cells it draws. A quadrant inside the triangle is a patch. One the triangle only partly covers is
|
|
74
|
+
* taken row by row — the cells that can meet the triangle, of which the run wholly inside it is interior — and each
|
|
75
|
+
* row's runs are kept for the cells pass, 16 bits a row: first column, then the counts of the left boundary run, the
|
|
76
|
+
* inside run and the right boundary run. Its three counts go to their regions of the one collection the lists share.
|
|
77
|
+
*/
|
|
78
|
+
export const shader_water_lod_candidates: ComputeShader;
|
|
79
|
+
/**
|
|
80
|
+
* One thread a record of the interior, boundary or patch list, up to its budget: its candidate, and its place in the
|
|
81
|
+
* candidate's node (quadrant · 64 + row · 8 + column; a patch's first cell), at the list's base in the cell buffer,
|
|
82
|
+
* from the candidate's quadrant masks and row record: a patch for each quadrant inside the triangle in turn, and of
|
|
83
|
+
* the others, row by row, the inside run or the left and right boundary runs, in the order the candidate pass counted
|
|
84
|
+
* them. A boundary cell is clipped here, once, and its polygon kept beside the lists for the vertex stage to rebuild
|
|
85
|
+
* its points from.
|
|
86
|
+
*/
|
|
87
|
+
export const shader_water_lod_cells: ComputeShader;
|
|
88
|
+
/** Byte offsets in the command buffer the commands passes write. */
|
|
89
|
+
export const WaterLodCommand: Readonly<{
|
|
90
|
+
/** Dispatches of the cells pass: interior, then boundary, 16 bytes apart. */
|
|
91
|
+
Cells: 0;
|
|
92
|
+
/** The flat triangles' dispatch. */
|
|
93
|
+
Flats: 32;
|
|
94
|
+
/** Draws of the interior, boundary and triangle lists, 16 bytes apart. */
|
|
95
|
+
Draws: 48;
|
|
96
|
+
/** The candidate pass's dispatch. */
|
|
97
|
+
Candidates: 96;
|
|
98
|
+
/** The cells pass's dispatch for the patch list. */
|
|
99
|
+
PatchCells: 112;
|
|
100
|
+
/** The patches' indexed draw. */
|
|
101
|
+
PatchDraw: 128;
|
|
102
|
+
}>;
|
|
103
|
+
export const WATER_LOD_COMMAND_BYTES: 160;
|
|
104
|
+
/**
|
|
105
|
+
* From the triangles' scans: the candidate pass's dispatch, cut to its budget; the flat triangles' dispatch and draw;
|
|
106
|
+
* and the frame's candidate and flat triangle totals.
|
|
107
|
+
*/
|
|
108
|
+
export const shader_water_lod_candidate_command: ComputeShader;
|
|
109
|
+
/** The interior, boundary and patch lists' cells-pass dispatches and draws, cut to their budgets; their totals. */
|
|
110
|
+
export const shader_water_lod_draw_commands: ComputeShader;
|
|
111
|
+
import { WebGPUStruct } from "../../../shader/type/WebGPUStruct.js";
|
|
112
|
+
export const chunk_water_lod_layout: CodeChunk;
|
|
113
|
+
import { ComputeShader } from "../../../shader/ComputeShader.js";
|
|
114
|
+
export const chunk_water_lod_candidate: CodeChunk;
|
|
115
|
+
/** Reads a drawn triangle of the view's meshlet list: its body, its frame and its corners. */
|
|
116
|
+
export const chunk_water_lod_source: CodeChunk;
|
|
117
|
+
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
118
|
+
//# sourceMappingURL=shader_water_lod.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader_water_lod.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/water/surface/lod/shader_water_lod.js"],"names":[],"mappings":"AA8BA,sHAAsH;AACtH,4CAA6C;AAC7C,6CAA8C;AAC9C,4CAA6C;AAC7C,sFAAsF;AACtF,iDAAkD;AAClD,iDAAkD;AAClD,kFAAkF;AAClF,8CAA+C;AAC/C,oFAAoF;AACpF,qCAAsC;AAEtC;;;;GAIG;AACH,kDASK;AAEL,kHAAkH;AAClH,0CAA2C;AAC3C,0EAA0E;AAC1E,+CAA+E;AAE/E,yGAAyG;AACzG,wCAAyC;AAEzC,wEAAwE;AACxE;;;;;GAA+F;AAE/F;;;;GAIG;AACH,sDAEwB;AAExB;;;;GAIG;AACH,mDAE4B;AAE5B;;;GAGG;AACH,2CAA4C;AA0I5C;;;;;;GAMG;AACH,oDAuD0E;AAsD1E;;;;;GAKG;AACH,uDAkCsH;AAWtH;;;GAGG;AACH,mDAYoE;AAIpE,kFAAkF;AAClF,+CAAgD;AAiBhD;;;;;;;GAOG;AACH,wDAqF0C;AAiB1C;;;;;;;GAOG;AACH,mDAqEmF;AAInF,oEAAoE;AACpE;IACI,6EAA6E;;IAE7E,oCAAoC;;IAEpC,0EAA0E;;IAE1E,qCAAqC;;IAErC,oDAAoD;;IAEpD,iCAAiC;;GAElC;AACH,0CAA2C;AA4B3C;;;GAGG;AACH,+DAcM;AASN,mHAAmH;AACnH,2DA4BmC;6BA7rBN,sCAAsC;AAuFnE,+CAIgD;8BAxGlB,kCAAkC;AA2GhE,kDAgG6G;AAkF7G,8FAA8F;AAC9F,+CAmCsH;0BAhU5F,uCAAuC"}
|