@woosh/meep-engine 3.11.2 → 3.12.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/README.md +14 -18
- package/build/bundle-worker-terrain.js +1 -1
- package/editor/SelectionVisualizer.js +127 -127
- package/editor/entity_world_bounds.js +27 -27
- package/editor/particles/rebuildParticleEmitter.js +31 -31
- package/editor/process/SymbolicDisplayProcess.js +1 -1
- package/editor/process/symbolic/CameraSymbolicDisplay.js +146 -146
- package/editor/process/symbolic/LightSymbolicDisplay.js +172 -172
- package/editor/prototypeEditorShell.js +156 -156
- package/editor/selection/editor_pick.js +130 -130
- package/editor/selection/screen_rect_frustum.js +119 -119
- package/editor/tools/v2/TransformControls.js +971 -971
- package/package.json +1 -1
- package/src/engine/Engine.d.ts +3 -3
- package/src/engine/Engine.d.ts.map +1 -1
- package/src/engine/Engine.js +726 -726
- package/src/engine/EngineHarness.d.ts +1 -1
- package/src/engine/EngineHarness.js +590 -590
- package/src/engine/ecs/HIERARCHY_REVIEW.md +717 -717
- package/src/engine/ecs/terrain/ecs/BuildLightTexture.d.ts +1 -1
- package/src/engine/ecs/terrain/ecs/BuildLightTexture.js +27 -27
- package/src/engine/ecs/terrain/ecs/Terrain.d.ts +1 -5
- package/src/engine/ecs/terrain/ecs/Terrain.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/Terrain.js +790 -790
- package/src/engine/ecs/terrain/util/loadVisibleTerrainTiles.js +129 -129
- package/src/engine/graphics/ecs/camera/camera_find_active.d.ts +1 -1
- package/src/engine/graphics/ecs/camera/camera_find_active.js +28 -28
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +1 -1
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +428 -428
- package/src/engine/graphics/ecs/water/Water.d.ts +1 -1
- package/src/engine/graphics/ecs/water/Water.js +104 -104
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +1 -1
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +1 -1
- package/src/engine/graphics3/AnimationGraphSystem.d.ts +65 -0
- package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -0
- package/src/engine/graphics3/AnimationGraphSystem.js +329 -0
- package/src/engine/graphics3/AnimationGraphSystem3.d.ts +6 -61
- package/src/engine/graphics3/AnimationGraphSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationGraphSystem3.js +6 -325
- package/src/engine/graphics3/AnimationSystem.d.ts +76 -0
- package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -0
- package/src/engine/graphics3/AnimationSystem.js +352 -0
- package/src/engine/graphics3/AnimationSystem3.d.ts +6 -72
- package/src/engine/graphics3/AnimationSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationSystem3.js +6 -348
- package/src/engine/graphics3/CameraSystem.d.ts +49 -0
- package/src/engine/graphics3/CameraSystem.d.ts.map +1 -0
- package/src/engine/graphics3/CameraSystem.js +170 -0
- package/src/engine/graphics3/CameraSystem3.d.ts +6 -45
- package/src/engine/graphics3/CameraSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/CameraSystem3.js +6 -166
- package/src/engine/graphics3/DebugDrawSystem.d.ts +72 -0
- package/src/engine/graphics3/DebugDrawSystem.d.ts.map +1 -0
- package/src/engine/graphics3/DebugDrawSystem.js +205 -0
- package/src/engine/graphics3/DebugDrawSystem3.d.ts +6 -68
- package/src/engine/graphics3/DebugDrawSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/DebugDrawSystem3.js +6 -201
- package/src/engine/graphics3/DecalSystem.d.ts +81 -0
- package/src/engine/graphics3/DecalSystem.d.ts.map +1 -0
- package/src/engine/graphics3/DecalSystem.js +441 -0
- package/src/engine/graphics3/DecalSystem3.d.ts +6 -77
- package/src/engine/graphics3/DecalSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/DecalSystem3.js +6 -437
- package/src/engine/graphics3/FogOfWarSystem.d.ts +74 -0
- package/src/engine/graphics3/FogOfWarSystem.d.ts.map +1 -0
- package/src/engine/graphics3/FogOfWarSystem.js +265 -0
- package/src/engine/graphics3/FogOfWarSystem3.d.ts +6 -70
- package/src/engine/graphics3/FogOfWarSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/FogOfWarSystem3.js +6 -261
- package/src/engine/graphics3/GraphicsEngine.d.ts +340 -0
- package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -0
- package/src/engine/graphics3/GraphicsEngine.js +790 -0
- package/src/engine/graphics3/GraphicsEngine3.d.ts +6 -336
- package/src/engine/graphics3/GraphicsEngine3.d.ts.map +1 -1
- package/src/engine/graphics3/GraphicsEngine3.js +6 -786
- package/src/engine/graphics3/HighlightSystem.d.ts +82 -0
- package/src/engine/graphics3/HighlightSystem.d.ts.map +1 -0
- package/src/engine/graphics3/HighlightSystem.js +241 -0
- package/src/engine/graphics3/HighlightSystem3.d.ts +6 -78
- package/src/engine/graphics3/HighlightSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/HighlightSystem3.js +6 -237
- package/src/engine/graphics3/LightSystem.d.ts +40 -0
- package/src/engine/graphics3/LightSystem.d.ts.map +1 -0
- package/src/engine/graphics3/LightSystem.js +211 -0
- package/src/engine/graphics3/LightSystem3.d.ts +6 -36
- package/src/engine/graphics3/LightSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/LightSystem3.js +6 -207
- package/src/engine/graphics3/MeshSystem.d.ts +106 -0
- package/src/engine/graphics3/MeshSystem.d.ts.map +1 -0
- package/src/engine/graphics3/MeshSystem.js +647 -0
- package/src/engine/graphics3/MeshSystem3.d.ts +6 -102
- package/src/engine/graphics3/MeshSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/MeshSystem3.js +6 -642
- package/src/engine/graphics3/ParticipatingMedia.d.ts +2 -2
- package/src/engine/graphics3/ParticipatingMedia.js +203 -203
- package/src/engine/graphics3/ParticipatingMediaSystem.d.ts +87 -0
- package/src/engine/graphics3/ParticipatingMediaSystem.d.ts.map +1 -0
- package/src/engine/graphics3/ParticipatingMediaSystem.js +184 -0
- package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts +6 -83
- package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/ParticipatingMediaSystem3.js +6 -180
- package/src/engine/graphics3/ParticleEmitterSystem.d.ts +76 -0
- package/src/engine/graphics3/ParticleEmitterSystem.d.ts.map +1 -0
- package/src/engine/graphics3/ParticleEmitterSystem.js +289 -0
- package/src/engine/graphics3/ParticleEmitterSystem3.d.ts +6 -72
- package/src/engine/graphics3/ParticleEmitterSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/ParticleEmitterSystem3.js +6 -285
- package/src/engine/graphics3/PathDisplaySystem.d.ts +70 -0
- package/src/engine/graphics3/PathDisplaySystem.d.ts.map +1 -0
- package/src/engine/graphics3/PathDisplaySystem.js +309 -0
- package/src/engine/graphics3/PathDisplaySystem3.d.ts +6 -66
- package/src/engine/graphics3/PathDisplaySystem3.d.ts.map +1 -1
- package/src/engine/graphics3/PathDisplaySystem3.js +6 -305
- package/src/engine/graphics3/Pickable.d.ts +1 -1
- package/src/engine/graphics3/Pickable.js +65 -65
- package/src/engine/graphics3/PickingQuery.d.ts +1 -1
- package/src/engine/graphics3/PickingQuery.js +48 -48
- package/src/engine/graphics3/PickingSystem.d.ts +67 -0
- package/src/engine/graphics3/PickingSystem.d.ts.map +1 -0
- package/src/engine/graphics3/PickingSystem.js +273 -0
- package/src/engine/graphics3/PickingSystem3.d.ts +6 -63
- package/src/engine/graphics3/PickingSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/PickingSystem3.js +6 -269
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts +47 -0
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -0
- package/src/engine/graphics3/ShadedGeometrySystem.js +169 -0
- package/src/engine/graphics3/ShadedGeometrySystem3.d.ts +6 -43
- package/src/engine/graphics3/ShadedGeometrySystem3.d.ts.map +1 -1
- package/src/engine/graphics3/ShadedGeometrySystem3.js +6 -165
- package/src/engine/graphics3/TerrainSystem.d.ts +80 -0
- package/src/engine/graphics3/TerrainSystem.d.ts.map +1 -0
- package/src/engine/graphics3/TerrainSystem.js +566 -0
- package/src/engine/graphics3/TerrainSystem3.d.ts +6 -76
- package/src/engine/graphics3/TerrainSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/TerrainSystem3.js +6 -562
- package/src/engine/graphics3/TooltipComponentSystem.d.ts +65 -0
- package/src/engine/graphics3/TooltipComponentSystem.d.ts.map +1 -0
- package/src/engine/graphics3/TooltipComponentSystem.js +328 -0
- package/src/engine/graphics3/TooltipComponentSystem3.d.ts +6 -61
- package/src/engine/graphics3/TooltipComponentSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/TooltipComponentSystem3.js +6 -324
- package/src/engine/graphics3/Trail3DSystem.d.ts +73 -0
- package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -0
- package/src/engine/graphics3/Trail3DSystem.js +221 -0
- package/src/engine/graphics3/Trail3DSystem3.d.ts +6 -69
- package/src/engine/graphics3/Trail3DSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/Trail3DSystem3.js +6 -217
- package/src/engine/graphics3/VolumetricLightMap.d.ts +2 -2
- package/src/engine/graphics3/VolumetricLightMap.js +2 -2
- package/src/engine/graphics3/VolumetricLightMapSystem.d.ts +98 -0
- package/src/engine/graphics3/VolumetricLightMapSystem.d.ts.map +1 -0
- package/src/engine/graphics3/VolumetricLightMapSystem.js +261 -0
- package/src/engine/graphics3/VolumetricLightMapSystem3.d.ts +6 -94
- package/src/engine/graphics3/VolumetricLightMapSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/VolumetricLightMapSystem3.js +10 -261
- package/src/engine/graphics3/WaterSystem.d.ts +59 -0
- package/src/engine/graphics3/WaterSystem.d.ts.map +1 -0
- package/src/engine/graphics3/WaterSystem.js +293 -0
- package/src/engine/graphics3/WaterSystem3.d.ts +6 -55
- package/src/engine/graphics3/WaterSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/WaterSystem3.js +6 -289
- package/src/engine/graphics3/animation/AnimationGraphController.d.ts +1 -1
- package/src/engine/graphics3/animation/AnimationGraphController.js +518 -518
- package/src/engine/graphics3/animation/ClipListPlayer.d.ts +1 -1
- package/src/engine/graphics3/animation/ClipListPlayer.js +263 -263
- package/src/engine/graphics3/animation/ClipPlayback.d.ts +2 -2
- package/src/engine/graphics3/animation/ClipPlayback.js +84 -84
- package/src/engine/graphics3/decal/graph_build_decal_clusters.d.ts.map +1 -1
- package/src/engine/graphics3/decal/graph_build_decal_clusters.js +6 -8
- package/src/engine/graphics3/decal/shader_cluster_assign_decals.d.ts +0 -7
- package/src/engine/graphics3/decal/shader_cluster_assign_decals.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_cluster_assign_decals.js +1 -1
- package/src/engine/graphics3/decal/shader_cull_decals_frustum.d.ts +0 -4
- package/src/engine/graphics3/decal/shader_cull_decals_frustum.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_cull_decals_frustum.js +1 -1
- package/src/engine/graphics3/highlight/pack_highlight_table.d.ts +2 -2
- package/src/engine/graphics3/highlight/pack_highlight_table.d.ts.map +1 -1
- package/src/engine/graphics3/highlight/pack_highlight_table.js +74 -74
- package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts +1 -1
- package/src/engine/graphics3/pose/query_entity_node_world_pose.js +101 -101
- package/src/engine/graphics3/preview/make_model_thumbnail.d.ts +3 -3
- package/src/engine/graphics3/preview/make_model_thumbnail.d.ts.map +1 -1
- package/src/engine/graphics3/preview/make_model_thumbnail.js +48 -48
- package/src/engine/graphics3/shade_camera_projection_ray.d.ts +1 -1
- package/src/engine/graphics3/shade_camera_projection_ray.js +77 -77
- package/src/engine/graphics3/shade_node_to_entity_composition.d.ts +1 -1
- package/src/engine/graphics3/shade_node_to_entity_composition.js +84 -84
- package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.d.ts +16 -2
- package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.js +28 -4
- package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts +1 -1
- package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js +5 -2
- package/src/shade/device/IMMEDIATE_DATA_PLAN_2026_08_28.md +564 -451
- package/src/shade/device/ShadeGPUCommandContext.d.ts +18 -2
- package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
- package/src/shade/device/ShadeGPUCommandContext.js +994 -940
- package/src/shade/device/immediate_data_supported.d.ts +33 -0
- package/src/shade/device/immediate_data_supported.d.ts.map +1 -0
- package/src/shade/device/immediate_data_supported.js +53 -0
- package/src/shade/device/mock/SoftwareGPUCommandEncoder.d.ts +18 -0
- package/src/shade/device/mock/SoftwareGPUCommandEncoder.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUCommandEncoder.js +24 -0
- package/src/shade/device/mock/SoftwareGPUComputePassEncoder.d.ts +7 -0
- package/src/shade/device/mock/SoftwareGPUComputePassEncoder.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUComputePassEncoder.js +49 -1
- package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUDevice.js +20 -2
- package/src/shade/device/mock/SoftwareGPUImmediateData.d.ts +65 -0
- package/src/shade/device/mock/SoftwareGPUImmediateData.d.ts.map +1 -0
- package/src/shade/device/mock/SoftwareGPUImmediateData.js +160 -0
- package/src/shade/device/mock/SoftwareGPURenderPassEncoder.d.ts +7 -0
- package/src/shade/device/mock/SoftwareGPURenderPassEncoder.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPURenderPassEncoder.js +50 -0
- package/src/shade/device/mock/pipeline_immediate_size.d.ts +11 -0
- package/src/shade/device/mock/pipeline_immediate_size.d.ts.map +1 -0
- package/src/shade/device/mock/pipeline_immediate_size.js +18 -0
- package/src/shade/device/pipeline/PipelineLayoutManager.d.ts.map +1 -1
- package/src/shade/device/pipeline/PipelineLayoutManager.js +1 -0
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +0 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +0 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +133 -134
- package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +202 -202
- package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +249 -249
- package/src/shade/renderer/GraphicsContext.d.ts +9 -2
- package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
- package/src/shade/renderer/GraphicsContext.js +13 -1
- package/src/shade/renderer/STATIC_GRAPHICS_ENGINE_ASSETS.js +1 -1
- package/src/shade/renderer/animation/pose/PosePlayback.d.ts +2 -1
- package/src/shade/renderer/animation/pose/PosePlayback.d.ts.map +1 -1
- package/src/shade/renderer/animation/pose/PosePlayback.js +2 -1
- package/src/shade/renderer/animation/shader_animation_apply.d.ts.map +1 -1
- package/src/shade/renderer/animation/shader_animation_apply.js +128 -129
- package/src/shade/renderer/animation/shader_animation_pose_resolve.d.ts.map +1 -1
- package/src/shade/renderer/animation/shader_animation_pose_resolve.js +176 -177
- package/src/shade/renderer/animation/shader_animation_tick.d.ts.map +1 -1
- package/src/shade/renderer/animation/shader_animation_tick.js +125 -126
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.js +98 -99
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.js +212 -213
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.js +120 -121
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.js +75 -76
- package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.js +371 -372
- package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.js +104 -105
- package/src/shade/renderer/atmosphere/GPUSky.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/GPUSky.js +145 -142
- package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.d.ts +34 -0
- package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.d.ts.map +1 -0
- package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.js +36 -0
- package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.d.ts +20 -0
- package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.d.ts.map +1 -0
- package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.js +25 -0
- package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts +14 -1
- package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.js +163 -177
- package/src/shade/renderer/atmosphere/chunk_multiscatter_sample_direction.d.ts +20 -0
- package/src/shade/renderer/atmosphere/chunk_multiscatter_sample_direction.d.ts.map +1 -0
- package/src/shade/renderer/atmosphere/chunk_multiscatter_sample_direction.js +46 -0
- package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.d.ts +11 -1
- package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.js +57 -27
- package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.d.ts +19 -1
- package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.js +69 -33
- package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.d.ts +13 -0
- package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.js +35 -35
- package/src/shade/renderer/atmosphere/chunk_sky_lut_params.d.ts +13 -0
- package/src/shade/renderer/atmosphere/chunk_sky_lut_params.d.ts.map +1 -0
- package/src/shade/renderer/atmosphere/chunk_sky_lut_params.js +38 -0
- package/src/shade/renderer/atmosphere/chunk_sky_lut_texel_to_unit.d.ts +17 -0
- package/src/shade/renderer/atmosphere/chunk_sky_lut_texel_to_unit.d.ts.map +1 -0
- package/src/shade/renderer/atmosphere/chunk_sky_lut_texel_to_unit.js +29 -0
- package/src/shade/renderer/atmosphere/chunk_sky_lut_uv.d.ts +21 -0
- package/src/shade/renderer/atmosphere/chunk_sky_lut_uv.d.ts.map +1 -0
- package/src/shade/renderer/atmosphere/chunk_sky_lut_uv.js +42 -0
- package/src/shade/renderer/atmosphere/shader_multiscatter_lut.d.ts +2 -2
- package/src/shade/renderer/atmosphere/shader_multiscatter_lut.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/shader_multiscatter_lut.js +164 -84
- package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.js +215 -204
- package/src/shade/renderer/atmosphere/shader_transmittance_lut.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/shader_transmittance_lut.js +79 -67
- package/src/shade/renderer/buffer/graph_inspect_gpu_buffer.js +136 -136
- package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUDatabase.js +2 -3
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +319 -319
- package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.d.ts.map +1 -1
- package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.js +41 -42
- package/src/shade/renderer/buffer/util/shader_buffer_intra_copy_regions.d.ts.map +1 -1
- package/src/shade/renderer/buffer/util/shader_buffer_intra_copy_regions.js +83 -84
- package/src/shade/renderer/dynamic/shader_dynamic_mesh.d.ts.map +1 -1
- package/src/shade/renderer/dynamic/shader_dynamic_mesh.js +177 -170
- package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +918 -918
- package/src/shade/renderer/geometry/bvh/record_blas_refit.js +4 -4
- package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.js +121 -122
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +774 -774
- package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts +1 -1
- package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.js +69 -70
- package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +367 -367
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.js +184 -184
- package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +1115 -1115
- package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +217 -217
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +142 -143
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js +0 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.js +140 -141
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js +0 -1
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js +0 -1
- package/src/shade/renderer/light/cluster/cull/graph_cull_lights.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/cull/graph_cull_lights.js +191 -198
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts +0 -6
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.js +120 -120
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.d.ts +0 -4
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.js +112 -112
- package/src/shade/renderer/light/cluster/graph_assign_clsuters.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/graph_assign_clsuters.js +10 -9
- package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.d.ts +0 -6
- package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.js +1 -1
- package/src/shade/renderer/lightmap/bake/raster/shader_lightmap_to_viz_buffer.js +222 -222
- package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_tile_composit.js +81 -81
- package/src/shade/renderer/material/GPUMaterialContext.js +380 -380
- package/src/shade/renderer/material/standard/fragment_gbuffer_vt.js +169 -169
- package/src/shade/renderer/object_property/shader_object_property_process.d.ts.map +1 -1
- package/src/shade/renderer/object_property/shader_object_property_process.js +83 -84
- package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.d.ts.map +1 -1
- package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.js +57 -58
- package/src/shade/renderer/particles/prototypeParticleSystem.js +2 -3
- package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_emit.js +117 -118
- package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +77 -79
- package/src/shade/renderer/particles/shaders/shader_particle_render.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_render.js +190 -183
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +99 -100
- package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
- package/src/shade/renderer/particles/sort/shader_particle_sort.js +158 -161
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +184 -184
- package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.js +119 -119
- package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.js +3 -4
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.js +266 -267
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.js +270 -271
- package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/GTAO.js +4 -0
- package/src/shade/renderer/postprocess/nss/shader_nss_concat.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_concat.js +68 -69
- package/src/shade/renderer/postprocess/nss/shader_nss_conv_layer.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_conv_layer.js +225 -226
- package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.js +49 -50
- package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.js +291 -292
- package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.js +230 -231
- package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts +16 -2
- package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.js +12 -12
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +341 -345
- package/src/shade/renderer/rasterize/bucket/shader_count_meshlets_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_count_meshlets_by_material.js +68 -69
- package/src/shade/renderer/rasterize/bucket/shader_make_meshlet_indirect_draw_commands_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_make_meshlet_indirect_draw_commands_by_material.js +59 -60
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts +0 -2
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js +57 -57
- package/src/shade/renderer/rasterize/bucket/shader_sort_meshlets_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_sort_meshlets_by_material.js +64 -65
- package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.js +168 -169
- package/src/shade/renderer/rasterize/compute/graph_mesh_sphere_cull.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/compute/graph_mesh_sphere_cull.js +160 -161
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +109 -110
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +115 -116
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_classify_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_classify_bucket.js +139 -140
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_count_by_rasterization_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_count_by_rasterization_bucket.js +91 -92
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_rasterization_bucket_sort.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_rasterization_bucket_sort.js +88 -89
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.js +90 -91
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +65 -66
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.js +89 -90
- package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.js +169 -170
- package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.js +7 -3
- package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.js +89 -90
- package/src/shade/renderer/rasterize/expand/mesh/shader_meshes_to_meshlet_counts.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/mesh/shader_meshes_to_meshlet_counts.js +61 -62
- package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.js +153 -154
- package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.js +77 -81
- package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.js +144 -144
- package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_pass_descriptor.js +88 -88
- package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js +217 -217
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +179 -179
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.js +178 -178
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +194 -194
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_opaque_pass_descriptor.js +76 -76
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +5 -1
- package/src/shade/renderer/restir/di/shader_restir_di_denoise.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_denoise.js +136 -137
- package/src/shade/renderer/restir/di/shader_restir_di_resample.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_resample.js +129 -130
- package/src/shade/renderer/restir/di/shader_restir_di_resolve.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_resolve.js +99 -100
- package/src/shade/renderer/restir/di/shader_restir_di_spatial.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_spatial.js +116 -117
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +383 -383
- package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy_naive.js +123 -123
- package/src/shade/renderer/scene/hierarchy/shader_nodes_record_input_positions.d.ts.map +1 -1
- package/src/shade/renderer/scene/hierarchy/shader_nodes_record_input_positions.js +64 -65
- package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy.d.ts.map +1 -1
- package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy.js +372 -373
- package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy_naive.d.ts.map +1 -1
- package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy_naive.js +111 -112
- package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.d.ts.map +1 -1
- package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.js +0 -1
- package/src/shade/renderer/shader/ComputeShader.d.ts +24 -3
- package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
- package/src/shade/renderer/shader/ComputeShader.js +350 -292
- package/src/shade/renderer/shader/ImageShader.d.ts.map +1 -1
- package/src/shade/renderer/shader/ImageShader.js +217 -214
- package/src/shade/renderer/shader/ShaderDescriptor.d.ts +5 -0
- package/src/shade/renderer/shader/ShaderDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/ShaderDescriptor.js +46 -0
- package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.d.ts +18 -0
- package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.js +32 -0
- package/src/shade/renderer/shader/chunk/atmosphere/PLANET_CENTER_DECLARATION.d.ts +7 -0
- package/src/shade/renderer/shader/chunk/atmosphere/PLANET_CENTER_DECLARATION.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/PLANET_CENTER_DECLARATION.js +17 -6
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.d.ts +21 -0
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.js +69 -0
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_contains_aabb3.d.ts +9 -0
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_contains_aabb3.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_contains_aabb3.js +22 -0
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_from_transformed_corners.d.ts +16 -0
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_from_transformed_corners.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_from_transformed_corners.js +41 -0
- package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_m4.d.ts +11 -0
- package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_m4.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_m4.js +15 -19
- package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_plane_matrix.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_plane_matrix.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_plane_matrix.js +44 -0
- package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_uv_octahedral_unit_decode.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_uv_octahedral_unit_decode.js +1 -4
- package/src/shade/renderer/shader/compiler/CodeChunk.d.ts +7 -1
- package/src/shade/renderer/shader/compiler/CodeChunk.d.ts.map +1 -1
- package/src/shade/renderer/shader/compiler/CodeChunk.js +37 -2
- package/src/shade/renderer/shader/graph/compute/compute_binding_read_names.d.ts.map +1 -1
- package/src/shade/renderer/shader/graph/compute/compute_binding_read_names.js +6 -0
- package/src/shade/renderer/shader/graph/compute/graph_compute_indirect_pass.js +1 -1
- package/src/shade/renderer/shader/graph/compute/graph_compute_pass.js +1 -1
- package/src/shade/renderer/shader/graph/graph_image_pass.js +1 -1
- package/src/shade/renderer/shader/graph/graph_prepare_bindings.d.ts.map +1 -1
- package/src/shade/renderer/shader/graph/graph_prepare_bindings.js +7 -0
- package/src/shade/renderer/shader/graph/graph_prepare_pass_input_data.d.ts +3 -1
- package/src/shade/renderer/shader/graph/graph_prepare_pass_input_data.d.ts.map +1 -1
- package/src/shade/renderer/shader/graph/graph_prepare_pass_input_data.js +12 -1
- package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/pass/RenderPassDescriptor.js +1 -0
- package/src/shade/renderer/shader/resource/IMMEDIATE_DATA.d.ts +21 -0
- package/src/shade/renderer/shader/resource/IMMEDIATE_DATA.d.ts.map +1 -0
- package/src/shade/renderer/shader/resource/IMMEDIATE_DATA.js +21 -0
- package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts +59 -1
- package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +195 -2
- package/src/shade/renderer/shader/type/type_has_arrays.d.ts +14 -0
- package/src/shade/renderer/shader/type/type_has_arrays.d.ts.map +1 -0
- package/src/shade/renderer/shader/type/type_has_arrays.js +33 -0
- package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.d.ts +47 -0
- package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.d.ts.map +1 -0
- package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.js +448 -0
- package/src/shade/renderer/shadow/map/csm/graph_csm_setup_cascades.js +3 -3
- package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.js +3 -3
- package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +2 -2
- package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +4 -4
- package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.d.ts.map +1 -1
- package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.js +231 -232
- package/src/shade/renderer/view/GPUViewSkyContext.d.ts.map +1 -1
- package/src/shade/renderer/view/GPUViewSkyContext.js +169 -173
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +1 -1
- package/src/shade/renderer/volumetrics/NOTES.md +238 -0
- package/src/shade/renderer/volumetrics/chunk_volumetrics_local_light_shadow.js +145 -145
- package/src/shade/renderer/volumetrics/chunk_volumetrics_sun_optical_depth.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/chunk_volumetrics_sun_optical_depth.js +38 -15
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts +14 -2
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +591 -577
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts +17 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +20 -2
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.js +29 -18
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.js +260 -260
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.d.ts +53 -3
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.js +175 -59
- package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts +0 -2
- package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.js +17 -6
- package/src/shade/renderer/water/shader_water.js +246 -246
- package/src/shade/vitest.setup.mjs +1 -1
- package/src/shade/wgsl/emulator/ComputeShaderEmulator.js +291 -291
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +8 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +1325 -1297
- package/src/view/minimap/Minimap.d.ts +2 -2
- package/src/view/minimap/Minimap.d.ts.map +1 -1
- package/src/view/minimap/Minimap.js +225 -225
- package/src/view/minimap/dom/MinimapCameraView.d.ts +3 -3
- package/src/view/minimap/dom/MinimapCameraView.d.ts.map +1 -1
- package/src/view/minimap/dom/MinimapCameraView.js +206 -206
- package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.d.ts +0 -3
- package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.d.ts.map +0 -1
- package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.js +0 -20
- package/src/shade/renderer/volumetrics/VOLUMETRICS_WORKGROUP_RESOLUTION.d.ts +0 -2
- package/src/shade/renderer/volumetrics/VOLUMETRICS_WORKGROUP_RESOLUTION.d.ts.map +0 -1
- package/src/shade/renderer/volumetrics/VOLUMETRICS_WORKGROUP_RESOLUTION.js +0 -1
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import { assert } from "../../core/assert.js";
|
|
2
|
+
import { BVH } from "../../core/bvh2/bvh3/BVH.js";
|
|
3
|
+
import {
|
|
4
|
+
aabb3_ray_segment_entry_distance
|
|
5
|
+
} from "../../core/geom/3d/aabb/aabb3_ray_segment_entry_distance.js";
|
|
6
|
+
import { BVHQueryIntersectsRay } from "../../core/bvh2/bvh3/query/BVHQueryIntersectsRay.js";
|
|
7
|
+
import { bvh_query_leaves_generic } from "../../core/bvh2/bvh3/query/bvh_query_leaves_generic.js";
|
|
8
|
+
import { System } from "../ecs/System.js";
|
|
9
|
+
import { Transform } from "../ecs/transform/Transform.js";
|
|
10
|
+
import { Pickable } from "./Pickable.js";
|
|
11
|
+
import { PickingResult } from "./PickingResult.js";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @type {Float32Array}
|
|
15
|
+
*/
|
|
16
|
+
const SCRATCH_BOUNDS = new Float32Array(6);
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Answers "what is under this ray" for entities that asked to be pickable.
|
|
20
|
+
*
|
|
21
|
+
* **Asynchronous and batched from the first line, on purpose (I-9).** The backend here is a CPU
|
|
22
|
+
* bounding-volume hierarchy and could answer synchronously; the API does not let it, because the
|
|
23
|
+
* backend this is meant to grow into reads entity ids back off the GPU's visibility buffer, and that
|
|
24
|
+
* answer is inherently a frame late and arrives for a whole batch at once. A synchronous entry point
|
|
25
|
+
* would have to be broken to get there, and every caller broken with it.
|
|
26
|
+
*
|
|
27
|
+
* **Bounding boxes, not triangles.** A hit means the ray entered the entity's world bounding box.
|
|
28
|
+
* That is the precision this can offer for free — Shade maintains those boxes as part of drawing —
|
|
29
|
+
* and going finer means keeping CPU-side triangles for every pickable entity, which is the
|
|
30
|
+
* duplication {@link Pickable} exists to keep small. Terrain picking, which is where the game's
|
|
31
|
+
* precision actually matters, does not come through here at all: it is an exact raycast against the
|
|
32
|
+
* terrain's own representation and is untouched by any of this.
|
|
33
|
+
*
|
|
34
|
+
* The index is refreshed **on query rather than per frame**. Nothing pays for picking on a frame where
|
|
35
|
+
* nobody picks, and there is no window in which the index disagrees with the scene, so no class of
|
|
36
|
+
* bug where a pick lands on where something used to be.
|
|
37
|
+
*/
|
|
38
|
+
export class PickingSystem extends System {
|
|
39
|
+
/**
|
|
40
|
+
* @type {MeshSystem}
|
|
41
|
+
*/
|
|
42
|
+
#meshes;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* @type {BVH}
|
|
46
|
+
*/
|
|
47
|
+
#bvh = new BVH();
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* The BVH leaf standing for each pickable entity.
|
|
51
|
+
*
|
|
52
|
+
* @type {Map<number, number>}
|
|
53
|
+
*/
|
|
54
|
+
#leaves = new Map();
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Entities that have opted in but have nothing in the scene yet — a model still loading, most
|
|
58
|
+
* often. They hold no leaf, and every query looks again, which is what lets one appear without
|
|
59
|
+
* anything having to notice the moment it did.
|
|
60
|
+
*
|
|
61
|
+
* @type {Set<number>}
|
|
62
|
+
*/
|
|
63
|
+
#pending = new Set();
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* @param {MeshSystem} meshes what an entity looks like, which is where its bounds come from
|
|
67
|
+
*/
|
|
68
|
+
constructor(meshes) {
|
|
69
|
+
super();
|
|
70
|
+
|
|
71
|
+
assert.defined(meshes, 'meshes');
|
|
72
|
+
|
|
73
|
+
this.#meshes = meshes;
|
|
74
|
+
|
|
75
|
+
this.dependencies = [Pickable, Transform];
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
async startup(entityManager) {
|
|
79
|
+
this.entityManager = entityManager;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
async shutdown(entityManager) {
|
|
83
|
+
for (const entity of Array.from(this.#leaves.keys())) {
|
|
84
|
+
this.#drop(entity);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
this.#pending.clear();
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* @param {Pickable} pickable
|
|
92
|
+
* @param {Transform} transform
|
|
93
|
+
* @param {number} entity
|
|
94
|
+
*/
|
|
95
|
+
link(pickable, transform, entity) {
|
|
96
|
+
// no bounds are taken here: the model may not have arrived, and the first query is early
|
|
97
|
+
// enough to find out
|
|
98
|
+
this.#pending.add(entity);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* @param {Pickable} pickable
|
|
103
|
+
* @param {Transform} transform
|
|
104
|
+
* @param {number} entity
|
|
105
|
+
*/
|
|
106
|
+
unlink(pickable, transform, entity) {
|
|
107
|
+
this.#drop(entity);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* How many entities the index currently stands for.
|
|
112
|
+
*
|
|
113
|
+
* The index is built on query, so this is zero until the first {@link pick} — and stays behind by
|
|
114
|
+
* however many pickable entities are still waiting on their models.
|
|
115
|
+
*
|
|
116
|
+
* @returns {number}
|
|
117
|
+
*/
|
|
118
|
+
get indexed_count() {
|
|
119
|
+
return this.#leaves.size;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* What each of these rays hits first.
|
|
124
|
+
*
|
|
125
|
+
* One result per query, in the order the queries were given. A ray that hits nothing still gets a
|
|
126
|
+
* result — `entity` is {@link PickingResult.NOTHING} — so the two arrays line up by position and a
|
|
127
|
+
* caller never has to search for the answer to its own question.
|
|
128
|
+
*
|
|
129
|
+
* @param {PickingQuery[]} queries
|
|
130
|
+
* @returns {Promise<PickingResult[]>}
|
|
131
|
+
*/
|
|
132
|
+
async pick(queries) {
|
|
133
|
+
assert.isArray(queries, 'queries');
|
|
134
|
+
|
|
135
|
+
this.#refresh();
|
|
136
|
+
|
|
137
|
+
const results = [];
|
|
138
|
+
|
|
139
|
+
for (let i = 0; i < queries.length; i++) {
|
|
140
|
+
results.push(this.#pick_one(queries[i]));
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
return results;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* @param {PickingQuery} query
|
|
148
|
+
* @returns {PickingResult}
|
|
149
|
+
*/
|
|
150
|
+
#pick_one(query) {
|
|
151
|
+
const result = new PickingResult();
|
|
152
|
+
|
|
153
|
+
const bvh = this.#bvh;
|
|
154
|
+
|
|
155
|
+
const origin = query.origin;
|
|
156
|
+
const direction = query.direction;
|
|
157
|
+
|
|
158
|
+
const origin_x = origin.x;
|
|
159
|
+
const origin_y = origin.y;
|
|
160
|
+
const origin_z = origin.z;
|
|
161
|
+
|
|
162
|
+
const hits = [];
|
|
163
|
+
|
|
164
|
+
const hit_count = bvh_query_leaves_generic(
|
|
165
|
+
hits, 0,
|
|
166
|
+
bvh, bvh.root,
|
|
167
|
+
BVHQueryIntersectsRay.from([
|
|
168
|
+
origin_x, origin_y, origin_z,
|
|
169
|
+
direction.x, direction.y, direction.z
|
|
170
|
+
])
|
|
171
|
+
);
|
|
172
|
+
|
|
173
|
+
// reciprocals once for the whole batch of candidates; the entry-distance test wants them, and
|
|
174
|
+
// a division component that is zero deliberately produces an infinity it handles
|
|
175
|
+
const inv_x = 1 / direction.x;
|
|
176
|
+
const inv_y = 1 / direction.y;
|
|
177
|
+
const inv_z = 1 / direction.z;
|
|
178
|
+
|
|
179
|
+
let best_distance = query.max_distance;
|
|
180
|
+
let best_entity = PickingResult.NOTHING;
|
|
181
|
+
|
|
182
|
+
for (let i = 0; i < hit_count; i++) {
|
|
183
|
+
const leaf = hits[i];
|
|
184
|
+
|
|
185
|
+
bvh.node_get_aabb(leaf, SCRATCH_BOUNDS);
|
|
186
|
+
|
|
187
|
+
const distance = aabb3_ray_segment_entry_distance(
|
|
188
|
+
SCRATCH_BOUNDS[0], SCRATCH_BOUNDS[1], SCRATCH_BOUNDS[2],
|
|
189
|
+
SCRATCH_BOUNDS[3], SCRATCH_BOUNDS[4], SCRATCH_BOUNDS[5],
|
|
190
|
+
origin_x, origin_y, origin_z,
|
|
191
|
+
inv_x, inv_y, inv_z,
|
|
192
|
+
0, query.max_distance
|
|
193
|
+
);
|
|
194
|
+
|
|
195
|
+
if (distance >= best_distance) {
|
|
196
|
+
// further than something already found, or a miss the broadphase let through
|
|
197
|
+
continue;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
best_distance = distance;
|
|
201
|
+
best_entity = bvh.node_get_user_data(leaf);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
if (best_entity === PickingResult.NOTHING) {
|
|
205
|
+
return result;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
result.entity = best_entity;
|
|
209
|
+
result.distance = best_distance;
|
|
210
|
+
|
|
211
|
+
result.position.set(
|
|
212
|
+
origin_x + direction.x * best_distance,
|
|
213
|
+
origin_y + direction.y * best_distance,
|
|
214
|
+
origin_z + direction.z * best_distance
|
|
215
|
+
);
|
|
216
|
+
|
|
217
|
+
return result;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* Bring every leaf in line with where its entity now is, and give a leaf to any entity whose
|
|
222
|
+
* model has arrived since the last look.
|
|
223
|
+
*/
|
|
224
|
+
#refresh() {
|
|
225
|
+
const meshes = this.#meshes;
|
|
226
|
+
|
|
227
|
+
for (const [entity, leaf] of this.#leaves) {
|
|
228
|
+
if (meshes.compute_world_bounds(SCRATCH_BOUNDS, entity)) {
|
|
229
|
+
this.#bvh.node_move_aabb(leaf, SCRATCH_BOUNDS);
|
|
230
|
+
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// the model went away under it — the entity is still pickable, so it goes back to
|
|
235
|
+
// waiting rather than losing its opt-in
|
|
236
|
+
this.#drop(entity);
|
|
237
|
+
this.#pending.add(entity);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
for (const entity of Array.from(this.#pending)) {
|
|
241
|
+
if (!meshes.compute_world_bounds(SCRATCH_BOUNDS, entity)) {
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
const leaf = this.#bvh.allocate_node();
|
|
246
|
+
|
|
247
|
+
this.#bvh.node_set_aabb(leaf, SCRATCH_BOUNDS);
|
|
248
|
+
this.#bvh.node_set_user_data(leaf, entity);
|
|
249
|
+
this.#bvh.insert_leaf(leaf);
|
|
250
|
+
|
|
251
|
+
this.#leaves.set(entity, leaf);
|
|
252
|
+
this.#pending.delete(entity);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* @param {number} entity
|
|
258
|
+
*/
|
|
259
|
+
#drop(entity) {
|
|
260
|
+
this.#pending.delete(entity);
|
|
261
|
+
|
|
262
|
+
const leaf = this.#leaves.get(entity);
|
|
263
|
+
|
|
264
|
+
if (leaf === undefined) {
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
this.#bvh.remove_leaf(leaf);
|
|
269
|
+
this.#bvh.release_node(leaf);
|
|
270
|
+
|
|
271
|
+
this.#leaves.delete(entity);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
@@ -1,67 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* @deprecated Renamed to {@link PickingSystem}. The trailing `3` marked the 2.x → 3.x renderer transition;
|
|
3
|
+
* the 2.x name it disambiguated against is gone, so the suffix no longer distinguishes anything.
|
|
3
4
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* backend this is meant to grow into reads entity ids back off the GPU's visibility buffer, and that
|
|
7
|
-
* answer is inherently a frame late and arrives for a whole batch at once. A synchronous entry point
|
|
8
|
-
* would have to be broken to get there, and every caller broken with it.
|
|
9
|
-
*
|
|
10
|
-
* **Bounding boxes, not triangles.** A hit means the ray entered the entity's world bounding box.
|
|
11
|
-
* That is the precision this can offer for free — Shade maintains those boxes as part of drawing —
|
|
12
|
-
* and going finer means keeping CPU-side triangles for every pickable entity, which is the
|
|
13
|
-
* duplication {@link Pickable} exists to keep small. Terrain picking, which is where the game's
|
|
14
|
-
* precision actually matters, does not come through here at all: it is an exact raycast against the
|
|
15
|
-
* terrain's own representation and is untouched by any of this.
|
|
16
|
-
*
|
|
17
|
-
* The index is refreshed **on query rather than per frame**. Nothing pays for picking on a frame where
|
|
18
|
-
* nobody picks, and there is no window in which the index disagrees with the scene, so no class of
|
|
19
|
-
* bug where a pick lands on where something used to be.
|
|
5
|
+
* Kept as a re-export rather than removed: this is a library, and an import path is as much a
|
|
6
|
+
* published interface as a class name.
|
|
20
7
|
*/
|
|
21
|
-
export
|
|
22
|
-
|
|
23
|
-
* @param {MeshSystem3} meshes what an entity looks like, which is where its bounds come from
|
|
24
|
-
*/
|
|
25
|
-
constructor(meshes: MeshSystem3);
|
|
26
|
-
dependencies: (typeof Transform | typeof Pickable)[];
|
|
27
|
-
startup(entityManager: any): Promise<void>;
|
|
28
|
-
shutdown(entityManager: any): Promise<void>;
|
|
29
|
-
/**
|
|
30
|
-
* @param {Pickable} pickable
|
|
31
|
-
* @param {Transform} transform
|
|
32
|
-
* @param {number} entity
|
|
33
|
-
*/
|
|
34
|
-
link(pickable: Pickable, transform: Transform, entity: number): void;
|
|
35
|
-
/**
|
|
36
|
-
* @param {Pickable} pickable
|
|
37
|
-
* @param {Transform} transform
|
|
38
|
-
* @param {number} entity
|
|
39
|
-
*/
|
|
40
|
-
unlink(pickable: Pickable, transform: Transform, entity: number): void;
|
|
41
|
-
/**
|
|
42
|
-
* How many entities the index currently stands for.
|
|
43
|
-
*
|
|
44
|
-
* The index is built on query, so this is zero until the first {@link pick} — and stays behind by
|
|
45
|
-
* however many pickable entities are still waiting on their models.
|
|
46
|
-
*
|
|
47
|
-
* @returns {number}
|
|
48
|
-
*/
|
|
49
|
-
get indexed_count(): number;
|
|
50
|
-
/**
|
|
51
|
-
* What each of these rays hits first.
|
|
52
|
-
*
|
|
53
|
-
* One result per query, in the order the queries were given. A ray that hits nothing still gets a
|
|
54
|
-
* result — `entity` is {@link PickingResult.NOTHING} — so the two arrays line up by position and a
|
|
55
|
-
* caller never has to search for the answer to its own question.
|
|
56
|
-
*
|
|
57
|
-
* @param {PickingQuery[]} queries
|
|
58
|
-
* @returns {Promise<PickingResult[]>}
|
|
59
|
-
*/
|
|
60
|
-
pick(queries: PickingQuery[]): Promise<PickingResult[]>;
|
|
61
|
-
#private;
|
|
62
|
-
}
|
|
63
|
-
import { System } from "../ecs/System.js";
|
|
64
|
-
import { Transform } from "../ecs/transform/Transform.js";
|
|
65
|
-
import { Pickable } from "./Pickable.js";
|
|
66
|
-
import { PickingResult } from "./PickingResult.js";
|
|
8
|
+
export const PickingSystem3: typeof PickingSystem;
|
|
9
|
+
import { PickingSystem } from "./PickingSystem.js";
|
|
67
10
|
//# sourceMappingURL=PickingSystem3.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PickingSystem3.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/PickingSystem3.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PickingSystem3.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/PickingSystem3.js"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,kDAA4C;8BATd,oBAAoB"}
|
|
@@ -1,273 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { BVH } from "../../core/bvh2/bvh3/BVH.js";
|
|
3
|
-
import {
|
|
4
|
-
aabb3_ray_segment_entry_distance
|
|
5
|
-
} from "../../core/geom/3d/aabb/aabb3_ray_segment_entry_distance.js";
|
|
6
|
-
import { BVHQueryIntersectsRay } from "../../core/bvh2/bvh3/query/BVHQueryIntersectsRay.js";
|
|
7
|
-
import { bvh_query_leaves_generic } from "../../core/bvh2/bvh3/query/bvh_query_leaves_generic.js";
|
|
8
|
-
import { System } from "../ecs/System.js";
|
|
9
|
-
import { Transform } from "../ecs/transform/Transform.js";
|
|
10
|
-
import { Pickable } from "./Pickable.js";
|
|
11
|
-
import { PickingResult } from "./PickingResult.js";
|
|
1
|
+
import { PickingSystem } from "./PickingSystem.js";
|
|
12
2
|
|
|
13
3
|
/**
|
|
14
|
-
* @
|
|
15
|
-
|
|
16
|
-
const SCRATCH_BOUNDS = new Float32Array(6);
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Answers "what is under this ray" for entities that asked to be pickable.
|
|
20
|
-
*
|
|
21
|
-
* **Asynchronous and batched from the first line, on purpose (I-9).** The backend here is a CPU
|
|
22
|
-
* bounding-volume hierarchy and could answer synchronously; the API does not let it, because the
|
|
23
|
-
* backend this is meant to grow into reads entity ids back off the GPU's visibility buffer, and that
|
|
24
|
-
* answer is inherently a frame late and arrives for a whole batch at once. A synchronous entry point
|
|
25
|
-
* would have to be broken to get there, and every caller broken with it.
|
|
4
|
+
* @deprecated Renamed to {@link PickingSystem}. The trailing `3` marked the 2.x → 3.x renderer transition;
|
|
5
|
+
* the 2.x name it disambiguated against is gone, so the suffix no longer distinguishes anything.
|
|
26
6
|
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* and going finer means keeping CPU-side triangles for every pickable entity, which is the
|
|
30
|
-
* duplication {@link Pickable} exists to keep small. Terrain picking, which is where the game's
|
|
31
|
-
* precision actually matters, does not come through here at all: it is an exact raycast against the
|
|
32
|
-
* terrain's own representation and is untouched by any of this.
|
|
33
|
-
*
|
|
34
|
-
* The index is refreshed **on query rather than per frame**. Nothing pays for picking on a frame where
|
|
35
|
-
* nobody picks, and there is no window in which the index disagrees with the scene, so no class of
|
|
36
|
-
* bug where a pick lands on where something used to be.
|
|
7
|
+
* Kept as a re-export rather than removed: this is a library, and an import path is as much a
|
|
8
|
+
* published interface as a class name.
|
|
37
9
|
*/
|
|
38
|
-
export
|
|
39
|
-
/**
|
|
40
|
-
* @type {MeshSystem3}
|
|
41
|
-
*/
|
|
42
|
-
#meshes;
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* @type {BVH}
|
|
46
|
-
*/
|
|
47
|
-
#bvh = new BVH();
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* The BVH leaf standing for each pickable entity.
|
|
51
|
-
*
|
|
52
|
-
* @type {Map<number, number>}
|
|
53
|
-
*/
|
|
54
|
-
#leaves = new Map();
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Entities that have opted in but have nothing in the scene yet — a model still loading, most
|
|
58
|
-
* often. They hold no leaf, and every query looks again, which is what lets one appear without
|
|
59
|
-
* anything having to notice the moment it did.
|
|
60
|
-
*
|
|
61
|
-
* @type {Set<number>}
|
|
62
|
-
*/
|
|
63
|
-
#pending = new Set();
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* @param {MeshSystem3} meshes what an entity looks like, which is where its bounds come from
|
|
67
|
-
*/
|
|
68
|
-
constructor(meshes) {
|
|
69
|
-
super();
|
|
70
|
-
|
|
71
|
-
assert.defined(meshes, 'meshes');
|
|
72
|
-
|
|
73
|
-
this.#meshes = meshes;
|
|
74
|
-
|
|
75
|
-
this.dependencies = [Pickable, Transform];
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
async startup(entityManager) {
|
|
79
|
-
this.entityManager = entityManager;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
async shutdown(entityManager) {
|
|
83
|
-
for (const entity of Array.from(this.#leaves.keys())) {
|
|
84
|
-
this.#drop(entity);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
this.#pending.clear();
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* @param {Pickable} pickable
|
|
92
|
-
* @param {Transform} transform
|
|
93
|
-
* @param {number} entity
|
|
94
|
-
*/
|
|
95
|
-
link(pickable, transform, entity) {
|
|
96
|
-
// no bounds are taken here: the model may not have arrived, and the first query is early
|
|
97
|
-
// enough to find out
|
|
98
|
-
this.#pending.add(entity);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* @param {Pickable} pickable
|
|
103
|
-
* @param {Transform} transform
|
|
104
|
-
* @param {number} entity
|
|
105
|
-
*/
|
|
106
|
-
unlink(pickable, transform, entity) {
|
|
107
|
-
this.#drop(entity);
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* How many entities the index currently stands for.
|
|
112
|
-
*
|
|
113
|
-
* The index is built on query, so this is zero until the first {@link pick} — and stays behind by
|
|
114
|
-
* however many pickable entities are still waiting on their models.
|
|
115
|
-
*
|
|
116
|
-
* @returns {number}
|
|
117
|
-
*/
|
|
118
|
-
get indexed_count() {
|
|
119
|
-
return this.#leaves.size;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* What each of these rays hits first.
|
|
124
|
-
*
|
|
125
|
-
* One result per query, in the order the queries were given. A ray that hits nothing still gets a
|
|
126
|
-
* result — `entity` is {@link PickingResult.NOTHING} — so the two arrays line up by position and a
|
|
127
|
-
* caller never has to search for the answer to its own question.
|
|
128
|
-
*
|
|
129
|
-
* @param {PickingQuery[]} queries
|
|
130
|
-
* @returns {Promise<PickingResult[]>}
|
|
131
|
-
*/
|
|
132
|
-
async pick(queries) {
|
|
133
|
-
assert.isArray(queries, 'queries');
|
|
134
|
-
|
|
135
|
-
this.#refresh();
|
|
136
|
-
|
|
137
|
-
const results = [];
|
|
138
|
-
|
|
139
|
-
for (let i = 0; i < queries.length; i++) {
|
|
140
|
-
results.push(this.#pick_one(queries[i]));
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
return results;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
/**
|
|
147
|
-
* @param {PickingQuery} query
|
|
148
|
-
* @returns {PickingResult}
|
|
149
|
-
*/
|
|
150
|
-
#pick_one(query) {
|
|
151
|
-
const result = new PickingResult();
|
|
152
|
-
|
|
153
|
-
const bvh = this.#bvh;
|
|
154
|
-
|
|
155
|
-
const origin = query.origin;
|
|
156
|
-
const direction = query.direction;
|
|
157
|
-
|
|
158
|
-
const origin_x = origin.x;
|
|
159
|
-
const origin_y = origin.y;
|
|
160
|
-
const origin_z = origin.z;
|
|
161
|
-
|
|
162
|
-
const hits = [];
|
|
163
|
-
|
|
164
|
-
const hit_count = bvh_query_leaves_generic(
|
|
165
|
-
hits, 0,
|
|
166
|
-
bvh, bvh.root,
|
|
167
|
-
BVHQueryIntersectsRay.from([
|
|
168
|
-
origin_x, origin_y, origin_z,
|
|
169
|
-
direction.x, direction.y, direction.z
|
|
170
|
-
])
|
|
171
|
-
);
|
|
172
|
-
|
|
173
|
-
// reciprocals once for the whole batch of candidates; the entry-distance test wants them, and
|
|
174
|
-
// a division component that is zero deliberately produces an infinity it handles
|
|
175
|
-
const inv_x = 1 / direction.x;
|
|
176
|
-
const inv_y = 1 / direction.y;
|
|
177
|
-
const inv_z = 1 / direction.z;
|
|
178
|
-
|
|
179
|
-
let best_distance = query.max_distance;
|
|
180
|
-
let best_entity = PickingResult.NOTHING;
|
|
181
|
-
|
|
182
|
-
for (let i = 0; i < hit_count; i++) {
|
|
183
|
-
const leaf = hits[i];
|
|
184
|
-
|
|
185
|
-
bvh.node_get_aabb(leaf, SCRATCH_BOUNDS);
|
|
186
|
-
|
|
187
|
-
const distance = aabb3_ray_segment_entry_distance(
|
|
188
|
-
SCRATCH_BOUNDS[0], SCRATCH_BOUNDS[1], SCRATCH_BOUNDS[2],
|
|
189
|
-
SCRATCH_BOUNDS[3], SCRATCH_BOUNDS[4], SCRATCH_BOUNDS[5],
|
|
190
|
-
origin_x, origin_y, origin_z,
|
|
191
|
-
inv_x, inv_y, inv_z,
|
|
192
|
-
0, query.max_distance
|
|
193
|
-
);
|
|
194
|
-
|
|
195
|
-
if (distance >= best_distance) {
|
|
196
|
-
// further than something already found, or a miss the broadphase let through
|
|
197
|
-
continue;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
best_distance = distance;
|
|
201
|
-
best_entity = bvh.node_get_user_data(leaf);
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
if (best_entity === PickingResult.NOTHING) {
|
|
205
|
-
return result;
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
result.entity = best_entity;
|
|
209
|
-
result.distance = best_distance;
|
|
210
|
-
|
|
211
|
-
result.position.set(
|
|
212
|
-
origin_x + direction.x * best_distance,
|
|
213
|
-
origin_y + direction.y * best_distance,
|
|
214
|
-
origin_z + direction.z * best_distance
|
|
215
|
-
);
|
|
216
|
-
|
|
217
|
-
return result;
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
/**
|
|
221
|
-
* Bring every leaf in line with where its entity now is, and give a leaf to any entity whose
|
|
222
|
-
* model has arrived since the last look.
|
|
223
|
-
*/
|
|
224
|
-
#refresh() {
|
|
225
|
-
const meshes = this.#meshes;
|
|
226
|
-
|
|
227
|
-
for (const [entity, leaf] of this.#leaves) {
|
|
228
|
-
if (meshes.compute_world_bounds(SCRATCH_BOUNDS, entity)) {
|
|
229
|
-
this.#bvh.node_move_aabb(leaf, SCRATCH_BOUNDS);
|
|
230
|
-
|
|
231
|
-
continue;
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
// the model went away under it — the entity is still pickable, so it goes back to
|
|
235
|
-
// waiting rather than losing its opt-in
|
|
236
|
-
this.#drop(entity);
|
|
237
|
-
this.#pending.add(entity);
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
for (const entity of Array.from(this.#pending)) {
|
|
241
|
-
if (!meshes.compute_world_bounds(SCRATCH_BOUNDS, entity)) {
|
|
242
|
-
continue;
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
const leaf = this.#bvh.allocate_node();
|
|
246
|
-
|
|
247
|
-
this.#bvh.node_set_aabb(leaf, SCRATCH_BOUNDS);
|
|
248
|
-
this.#bvh.node_set_user_data(leaf, entity);
|
|
249
|
-
this.#bvh.insert_leaf(leaf);
|
|
250
|
-
|
|
251
|
-
this.#leaves.set(entity, leaf);
|
|
252
|
-
this.#pending.delete(entity);
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
/**
|
|
257
|
-
* @param {number} entity
|
|
258
|
-
*/
|
|
259
|
-
#drop(entity) {
|
|
260
|
-
this.#pending.delete(entity);
|
|
261
|
-
|
|
262
|
-
const leaf = this.#leaves.get(entity);
|
|
263
|
-
|
|
264
|
-
if (leaf === undefined) {
|
|
265
|
-
return;
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
this.#bvh.remove_leaf(leaf);
|
|
269
|
-
this.#bvh.release_node(leaf);
|
|
270
|
-
|
|
271
|
-
this.#leaves.delete(entity);
|
|
272
|
-
}
|
|
273
|
-
}
|
|
10
|
+
export const PickingSystem3 = PickingSystem;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Puts one primitive into Shade's scene, and keeps it where the entity says.
|
|
3
|
+
*
|
|
4
|
+
* **The component and the row are the same shape, which is the whole reason this system is short.**
|
|
5
|
+
* `ShadedGeometry` is a geometry, a material and a flat transform — *"not a hierarchical data
|
|
6
|
+
* structure"*, in its own docblock — and Shade's `Mesh` is a `Node3D` carrying a `MeshletGeometry`
|
|
7
|
+
* and a `ShadeMaterial`. §4.3 asks for exactly that mapping, 1:1, and there is nothing else to do.
|
|
8
|
+
*
|
|
9
|
+
* **What it is not is a model.** A model file is many primitives arranged in a hierarchy, and in an
|
|
10
|
+
* ECS a hierarchy is entities — one per node, parented through `EntityNode`, each carrying its own
|
|
11
|
+
* `ShadedGeometry` where it draws (D47). `SGMesh` is the layer that expands a loaded file into
|
|
12
|
+
* those entities; this system never sees the file, only the primitives that came out of it, and
|
|
13
|
+
* cannot tell them from primitives some tool built by hand.
|
|
14
|
+
*
|
|
15
|
+
* **The payload is the renderer's own.** Under three the same component holds a `BufferGeometry`
|
|
16
|
+
* and a three `Material`, and `ShadedGeometrySystem` reads those; here it holds Shade's pair. One
|
|
17
|
+
* renderer runs at a time and each system reads what its own renderer draws — the same bargain the
|
|
18
|
+
* v1 component made with `Mesh.mesh`, and not a neutral geometry format, which would be a redesign
|
|
19
|
+
* rather than a transition.
|
|
20
|
+
*/
|
|
21
|
+
export class ShadedGeometrySystem extends System<any> {
|
|
22
|
+
/**
|
|
23
|
+
* @param {GraphicsEngine} graphics
|
|
24
|
+
* @param {Scene} scene
|
|
25
|
+
*/
|
|
26
|
+
constructor(graphics: GraphicsEngine, scene: Scene);
|
|
27
|
+
dependencies: (typeof Transform | typeof ShadedGeometry)[];
|
|
28
|
+
startup(entityManager: any): Promise<void>;
|
|
29
|
+
shutdown(entityManager: any): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* @param {ShadedGeometry} geometry
|
|
32
|
+
* @param {Transform} transform
|
|
33
|
+
* @param {number} entity
|
|
34
|
+
*/
|
|
35
|
+
link(geometry: ShadedGeometry, transform: Transform, entity: number): void;
|
|
36
|
+
/**
|
|
37
|
+
* @param {ShadedGeometry} geometry
|
|
38
|
+
* @param {Transform} transform
|
|
39
|
+
* @param {number} entity
|
|
40
|
+
*/
|
|
41
|
+
unlink(geometry: ShadedGeometry, transform: Transform, entity: number): void;
|
|
42
|
+
#private;
|
|
43
|
+
}
|
|
44
|
+
import { System } from "../ecs/System.js";
|
|
45
|
+
import { Transform } from "../ecs/transform/Transform.js";
|
|
46
|
+
import { ShadedGeometry } from "../graphics/ecs/mesh-v2/ShadedGeometry.js";
|
|
47
|
+
//# sourceMappingURL=ShadedGeometrySystem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShadedGeometrySystem.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/ShadedGeometrySystem.js"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;GAmBG;AACH;IAkBI;;;OAGG;IACH,oDAUC;IADG,2DAA+C;IAGnD,2CAEC;IAED,4CAIC;IAED;;;;OAIG;IACH,eAJW,cAAc,aACd,SAAS,UACT,MAAM,QA2ChB;IAED;;;;OAIG;IACH,iBAJW,cAAc,aACd,SAAS,UACT,MAAM,QAMhB;;CAsCJ;uBApKsB,kBAAkB;0BACf,+BAA+B;+BAE1B,2CAA2C"}
|