@woosh/meep-engine 3.11.3 → 3.13.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/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/GPUDecalRenderer.js +3 -3
- 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/decal/shader_decal_composite.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_decal_composite.js +4 -2
- package/src/engine/graphics3/highlight/GPUHighlightRenderer.d.ts.map +1 -1
- package/src/engine/graphics3/highlight/GPUHighlightRenderer.js +2 -3
- 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/highlight/shader_highlight_outline.js +150 -150
- 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/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/shade/RENDERER_CONTRACT.md +2 -1
- package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts +18 -0
- package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js +73 -0
- package/src/shade/device/PASS_ENCODER_PROPOSAL_2026_08_31.md +750 -0
- package/src/shade/device/ShadeGPUCommandContext.d.ts +10 -16
- package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
- package/src/shade/device/ShadeGPUCommandContext.js +801 -994
- package/src/shade/device/pass/ShadeGPUComputePassEncoder.d.ts +107 -0
- package/src/shade/device/pass/ShadeGPUComputePassEncoder.d.ts.map +1 -0
- package/src/shade/device/pass/ShadeGPUComputePassEncoder.js +222 -0
- package/src/shade/device/pass/ShadeGPURenderPassEncoder.d.ts +168 -0
- package/src/shade/device/pass/ShadeGPURenderPassEncoder.d.ts.map +1 -0
- package/src/shade/device/pass/ShadeGPURenderPassEncoder.js +317 -0
- package/src/shade/device/timing/GPUTimerArray.d.ts +4 -9
- package/src/shade/device/timing/GPUTimerArray.d.ts.map +1 -1
- package/src/shade/device/timing/GPUTimerArray.js +261 -289
- package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +20 -2
- package/src/shade/device/timing/ShadeGPUContextProfiler.d.ts +59 -0
- package/src/shade/device/timing/ShadeGPUContextProfiler.d.ts.map +1 -0
- package/src/shade/device/timing/ShadeGPUContextProfiler.js +182 -0
- package/src/shade/device/timing/profile/GPUProfileSession.d.ts +4 -4
- package/src/shade/device/timing/profile/GPUProfileSession.js +4 -4
- 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 +3 -2
- 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 +3 -2
- 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 +135 -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/Renderer.d.ts +0 -6
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +0 -29
- package/src/shade/renderer/STATIC_GRAPHICS_ENGINE_ASSETS.js +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.js +1 -3
- 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 +4 -2
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +8 -18
- 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 +3 -2
- 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 +4 -2
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts +1 -1
- 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 +24 -10
- 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 +3 -2
- 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 +5 -2
- 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/shader_multiscatter_lut.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/shader_multiscatter_lut.js +0 -1
- package/src/shade/renderer/atmosphere/shader_transmittance_lut.js +3 -3
- 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 +16 -22
- package/src/shade/renderer/buffer/table/gpu_table_element_upload_shader.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/gpu_table_element_upload_shader.js +7 -2
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +11 -5
- 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 +43 -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/deferred/shader_tonemap_HDR.d.ts.map +1 -1
- package/src/shade/renderer/deferred/shader_tonemap_HDR.js +4 -1
- package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts +2 -2
- package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts.map +1 -1
- package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +167 -167
- 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/fow/GPUFogOfWarRenderer.js +3 -3
- package/src/shade/renderer/fow/shader_fog_of_war.d.ts.map +1 -1
- package/src/shade/renderer/fow/shader_fog_of_war.js +3 -1
- package/src/shade/renderer/geometry/bvh/record_blas_refit.js +102 -102
- 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 +5 -2
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +3 -11
- 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 +6 -4
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +5 -10
- package/src/shade/renderer/geometry/sdf/shader_build_sdf.js +129 -129
- package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.js +5 -3
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.js +4 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_resolve_probes.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_resolve_probes.js +3 -1
- package/src/shade/renderer/global_illumination/clipmap/shader_update_clipmap_cascade.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/clipmap/shader_update_clipmap_cascade.js +114 -112
- 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_lpv_store_sh.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lpv_store_sh.js +4 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.js +9 -6
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.js +4 -1
- package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.js +6 -8
- package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.js +3 -1
- package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_update.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_update.js +3 -1
- package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +1115 -1115
- package/src/shade/renderer/gpu_primitive/bvh/PHASE1_HANDOVER.md +3 -3
- package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +10 -10
- 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 +4 -2
- 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 +87 -83
- 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 +4 -2
- package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.d.ts +2 -2
- package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.js +43 -8
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.js +4 -5
- 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 +88 -85
- 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 +194 -192
- package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
- package/src/shade/renderer/hiz/HierarchicalZBuffer.js +33 -69
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts.map +1 -1
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.js +6 -1
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts.map +1 -1
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.js +23 -7
- 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 +4 -7
- 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/light/environment/execute_filter_environment_map.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/execute_filter_environment_map.js +1 -2
- package/src/shade/renderer/light/environment/shader_convolve_reflection_map.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/shader_convolve_reflection_map.js +6 -1
- package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.js +234 -219
- package/src/shade/renderer/lightmap/bake/raster/shader_lightmap_to_viz_buffer.js +222 -222
- package/src/shade/renderer/lightmap/bake/shader_lightmap_denoise_sh.js +191 -191
- package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_accummulate_tile.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_accummulate_tile.js +85 -82
- 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/graph_particles.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles.js +5 -3
- package/src/shade/renderer/particles/prototypeParticleSystem.js +5 -7
- package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_emit.js +27 -13
- package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +4 -4
- 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 +18 -7
- package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
- package/src/shade/renderer/particles/sort/shader_particle_sort.js +47 -21
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +7 -10
- package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.js +4 -1
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +184 -184
- package/src/shade/renderer/postprocess/bloom/shader_bloom_mix.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/bloom/shader_bloom_mix.js +3 -1
- package/src/shade/renderer/postprocess/cas/shader_ffx_rcas.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/cas/shader_ffx_rcas.js +4 -2
- package/src/shade/renderer/postprocess/denoise/fragment_shader_denoise_ao.js +147 -147
- package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.js +19 -17
- package/src/shade/renderer/postprocess/dof/gather/graph_postprocess_dof2.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/gather/graph_postprocess_dof2.js +1 -2
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_far.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_far.js +4 -1
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_near.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_near.js +4 -1
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_recombine.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_recombine.js +4 -1
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_setup.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_setup.js +4 -1
- package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.js +5 -8
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_composite.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_composite.js +4 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_prefilter.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_prefilter.js +4 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch.js +4 -1
- 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 +4 -2
- 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 +4 -2
- package/src/shade/renderer/postprocess/dof/shader_dof_autofocus.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/shader_dof_autofocus.js +4 -1
- package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.js +8 -11
- package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.js +5 -1
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +11 -8
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.js +7 -8
- package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.js +3 -1
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_concat.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_concat.js +3 -2
- 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/depth_max_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/depth_max_shader.js +70 -68
- 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/postprocess/ssr/resolve/ssr_resolve_shader_IBL.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.js +3 -1
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.js +4 -1
- package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.js +103 -101
- package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.js +4 -2
- package/src/shade/renderer/postprocess/ssr/ssr_trace_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/ssr_trace_shader.js +3 -1
- package/src/shade/renderer/postprocess/taa/shader_taa.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/shader_taa.js +4 -1
- package/src/shade/renderer/postprocess/upscale-dither/fragment_shader_upscale_dither.js +5 -5
- 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 +339 -341
- 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.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js +0 -1
- 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 +6 -2
- 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 +4 -2
- 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 +5 -2
- 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/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/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/graph_rasterize_meshes_transparent_oit.js +722 -722
- 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_partial_opaque.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +1 -9
- package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +1 -6
- package/src/shade/renderer/restir/di/graph_restir_di.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/graph_restir_di.js +2 -3
- package/src/shade/renderer/restir/di/graph_restir_di_denoise.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/graph_restir_di_denoise.js +1 -2
- 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 +5 -3
- 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 +4 -3
- 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 +4 -3
- 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.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +3 -7
- 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 +147 -145
- package/src/shade/renderer/shader/ComputeShader.d.ts +26 -5
- package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
- package/src/shade/renderer/shader/ComputeShader.js +347 -296
- package/src/shade/renderer/shader/ImageShader.js +217 -217
- 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 +20 -0
- package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts +2 -2
- package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/pass/RenderPassDescriptor.js +189 -189
- package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +3 -1
- 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/GPUSceneShadowmapContext.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +14 -18
- package/src/shade/renderer/shadow/map/csm/graph_csm_setup_cascades.js +3 -3
- package/src/shade/renderer/shadow/map/shader/shader_shadowmap_remap_cube_to_octahedral.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/shader/shader_shadowmap_remap_cube_to_octahedral.js +5 -1
- package/src/shade/renderer/shadow/ray/shader_shadow_upscale.d.ts.map +1 -1
- package/src/shade/renderer/shadow/ray/shader_shadow_upscale.js +3 -1
- package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.js +73 -73
- package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.d.ts.map +1 -1
- package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.js +151 -148
- package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.d.ts.map +1 -1
- package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +6 -4
- package/src/shade/renderer/shadow/ray/staged/trace/shader_trace_rays.d.ts.map +1 -1
- package/src/shade/renderer/shadow/ray/staged/trace/shader_trace_rays.js +18 -4
- package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +11 -12
- package/src/shade/renderer/shadow/sdf/cascade/shader_build_scene_sdf_f32.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/cascade/shader_build_scene_sdf_f32.js +6 -2
- package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_debug_viz.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_debug_viz.js +129 -127
- package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.js +5 -3
- package/src/shade/renderer/texture/virtual/VirtualTextureManager.d.ts.map +1 -1
- package/src/shade/renderer/texture/virtual/VirtualTextureManager.js +2 -5
- 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 +3 -2
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +14 -19
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts +3 -2
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +3 -2
- 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/validate_wgsl_source.d.ts.map +1 -1
- package/src/shade/wgsl/validate_wgsl_source.js +8 -3
- 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/device/timing/profile/make_profiling_pass_encoder.d.ts +0 -21
- package/src/shade/device/timing/profile/make_profiling_pass_encoder.d.ts.map +0 -1
- package/src/shade/device/timing/profile/make_profiling_pass_encoder.js +0 -114
- package/src/shade/device/timing/profile/parse_workgroup_size.d.ts +0 -20
- package/src/shade/device/timing/profile/parse_workgroup_size.d.ts.map +0 -1
- package/src/shade/device/timing/profile/parse_workgroup_size.js +0 -43
- 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
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { assert } from "../../core/assert.js";
|
|
2
|
+
import { isArrayEqualStrict } from "../../core/collection/array/isArrayEqualStrict.js";
|
|
3
|
+
import { ParticipatingMediaVolume } from "../../shade/renderer/volumetrics/ParticipatingMediaVolume.js";
|
|
4
|
+
import { System } from "../ecs/System.js";
|
|
5
|
+
import { Transform } from "../ecs/transform/Transform.js";
|
|
6
|
+
import { ParticipatingMedia } from "./ParticipatingMedia.js";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Mirrors fog, smoke and cloud entities into Shade's volumetrics.
|
|
10
|
+
*
|
|
11
|
+
* The same shape as {@link LightSystem}: the ECS says what exists and where, and this keeps the
|
|
12
|
+
* renderer's own objects in step. A {@link ParticipatingMediaVolume} is a unit cube posed by a
|
|
13
|
+
* transform, so an entity's `Transform` is the volume — position, size and orientation with no
|
|
14
|
+
* translation step in between.
|
|
15
|
+
*
|
|
16
|
+
* **The transform is taken as world-space, with no hierarchy applied**, which is what the volume
|
|
17
|
+
* model can express: a volume is an oriented box in the scene and Shade has no parent chain to walk
|
|
18
|
+
* for it. Parenting a fog volume to a moving entity therefore leaves the fog where the child's own
|
|
19
|
+
* transform puts it. The lights are placed the same way, for the same reason.
|
|
20
|
+
*
|
|
21
|
+
* **Changes are polled once a frame rather than subscribed to.** A `Transform` announces itself and
|
|
22
|
+
* nothing else here does — a density tuned by an editor slider, a particle spec swapped wholesale
|
|
23
|
+
* for a different Mie solution — so subscribing would cover one field in three and the other two
|
|
24
|
+
* would still have to be polled. Two paths that have to agree, where one does the whole job. It
|
|
25
|
+
* costs about two dozen float comparisons per volume per frame and a scene holds volumes in the
|
|
26
|
+
* tens, so the comparison is cheaper than the signal plumbing it replaces. The price is latency: a
|
|
27
|
+
* change is visible within a frame rather than instantly.
|
|
28
|
+
*
|
|
29
|
+
* **Nothing is uploaded unless something actually changed.** The GPU table is repacked whole
|
|
30
|
+
* whenever {@link SceneVolumetrics.version} moves, so an unconditional copy every frame would
|
|
31
|
+
* re-upload every volume in the scene forever. The comparison is what decides, and on almost every
|
|
32
|
+
* frame it decides nothing has to happen.
|
|
33
|
+
*
|
|
34
|
+
* @see ParticipatingMedia the component
|
|
35
|
+
* @see SceneVolumetrics what the volumes are handed to
|
|
36
|
+
*/
|
|
37
|
+
export class ParticipatingMediaSystem extends System {
|
|
38
|
+
|
|
39
|
+
dependencies = [ParticipatingMedia, Transform];
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* @type {GraphicsEngine}
|
|
43
|
+
*/
|
|
44
|
+
#graphics;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* @type {Scene}
|
|
48
|
+
*/
|
|
49
|
+
#scene;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* @type {Map<number, {component: ParticipatingMedia, transform: Transform, volume: ParticipatingMediaVolume}>}
|
|
53
|
+
*/
|
|
54
|
+
#entries = new Map();
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* @param {GraphicsEngine} graphics
|
|
58
|
+
* @param {Scene} scene
|
|
59
|
+
*/
|
|
60
|
+
constructor(graphics, scene) {
|
|
61
|
+
super();
|
|
62
|
+
|
|
63
|
+
assert.defined(graphics, 'graphics');
|
|
64
|
+
assert.defined(scene, 'scene');
|
|
65
|
+
assert.equal(scene.isScene, true, 'scene.isScene !== true');
|
|
66
|
+
|
|
67
|
+
this.#graphics = graphics;
|
|
68
|
+
this.#scene = scene;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
async startup(entityManager) {
|
|
72
|
+
this.entityManager = entityManager;
|
|
73
|
+
|
|
74
|
+
this.#graphics.set_scene(this.#scene);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
async shutdown(entityManager) {
|
|
78
|
+
for (const entity of Array.from(this.#entries.keys())) {
|
|
79
|
+
this.#drop(entity);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* @param {ParticipatingMedia} component
|
|
85
|
+
* @param {Transform} transform
|
|
86
|
+
* @param {number} entity
|
|
87
|
+
*/
|
|
88
|
+
link(component, transform, entity) {
|
|
89
|
+
const volume = new ParticipatingMediaVolume();
|
|
90
|
+
|
|
91
|
+
participating_media_volume_write(volume, component, transform);
|
|
92
|
+
|
|
93
|
+
this.#scene.volumetrics.add(volume);
|
|
94
|
+
|
|
95
|
+
this.#entries.set(entity, { component, transform, volume });
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* @param {ParticipatingMedia} component
|
|
100
|
+
* @param {Transform} transform
|
|
101
|
+
* @param {number} entity
|
|
102
|
+
*/
|
|
103
|
+
unlink(component, transform, entity) {
|
|
104
|
+
this.#drop(entity);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* @param {number} time_delta_seconds
|
|
109
|
+
*/
|
|
110
|
+
update(time_delta_seconds) {
|
|
111
|
+
const volumetrics = this.#scene.volumetrics;
|
|
112
|
+
|
|
113
|
+
for (const entry of this.#entries.values()) {
|
|
114
|
+
const volume = entry.volume;
|
|
115
|
+
|
|
116
|
+
if (participating_media_volume_is_current(volume, entry.component, entry.transform)) {
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
participating_media_volume_write(volume, entry.component, entry.transform);
|
|
121
|
+
|
|
122
|
+
volumetrics.invalidate();
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* @param {number} entity
|
|
128
|
+
*/
|
|
129
|
+
#drop(entity) {
|
|
130
|
+
const entry = this.#entries.get(entity);
|
|
131
|
+
|
|
132
|
+
if (entry === undefined) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
this.#scene.volumetrics.remove(entry.volume);
|
|
137
|
+
|
|
138
|
+
this.#entries.delete(entity);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Copy what the component and its transform say onto the volume Shade will render.
|
|
144
|
+
*
|
|
145
|
+
* The particle spec is **copied, not referenced**: two entities are routinely built from the same
|
|
146
|
+
* blueprint and would otherwise share one spec, so tuning one volume's particle would silently
|
|
147
|
+
* retune the other's.
|
|
148
|
+
*
|
|
149
|
+
* @param {ParticipatingMediaVolume} volume Shade's
|
|
150
|
+
* @param {ParticipatingMedia} component meep's
|
|
151
|
+
* @param {Transform} transform where the box is
|
|
152
|
+
*/
|
|
153
|
+
export function participating_media_volume_write(volume, component, transform) {
|
|
154
|
+
volume.density = component.density;
|
|
155
|
+
volume.fade_distance = component.fade_distance;
|
|
156
|
+
|
|
157
|
+
volume.particle_spec.copy(component.particle_spec);
|
|
158
|
+
|
|
159
|
+
volume.transform.copy(transform);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Whether the volume already says what the component and transform say.
|
|
164
|
+
*
|
|
165
|
+
* True on all but a handful of frames, which is the point of asking: a `false` here costs the whole
|
|
166
|
+
* scene's volumetrics table a trip to the GPU.
|
|
167
|
+
*
|
|
168
|
+
* **The transform is compared by its matrix rather than by `Transform.equals`**, because the matrix
|
|
169
|
+
* is the entire transform the GPU is given — the volume's position, rotation and scale are never
|
|
170
|
+
* read on their own. That makes this exactly the question worth asking, "would the upload differ",
|
|
171
|
+
* and it catches a transform posed by writing its matrix, which comparing position, rotation and
|
|
172
|
+
* scale would not.
|
|
173
|
+
*
|
|
174
|
+
* @param {ParticipatingMediaVolume} volume
|
|
175
|
+
* @param {ParticipatingMedia} component
|
|
176
|
+
* @param {Transform} transform
|
|
177
|
+
* @returns {boolean}
|
|
178
|
+
*/
|
|
179
|
+
export function participating_media_volume_is_current(volume, component, transform) {
|
|
180
|
+
return volume.density === component.density
|
|
181
|
+
&& volume.fade_distance === component.fade_distance
|
|
182
|
+
&& isArrayEqualStrict(volume.transform.matrix, transform.matrix)
|
|
183
|
+
&& volume.particle_spec.equals(component.particle_spec);
|
|
184
|
+
}
|
|
@@ -1,87 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* @deprecated Renamed to {@link ParticipatingMediaSystem}. 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
|
-
* retune the other's.
|
|
7
|
-
*
|
|
8
|
-
* @param {ParticipatingMediaVolume} volume Shade's
|
|
9
|
-
* @param {ParticipatingMedia} component meep's
|
|
10
|
-
* @param {Transform} transform where the box is
|
|
11
|
-
*/
|
|
12
|
-
export function participating_media_volume_write(volume: ParticipatingMediaVolume, component: ParticipatingMedia, transform: Transform): void;
|
|
13
|
-
/**
|
|
14
|
-
* Whether the volume already says what the component and transform say.
|
|
15
|
-
*
|
|
16
|
-
* True on all but a handful of frames, which is the point of asking: a `false` here costs the whole
|
|
17
|
-
* scene's volumetrics table a trip to the GPU.
|
|
18
|
-
*
|
|
19
|
-
* **The transform is compared by its matrix rather than by `Transform.equals`**, because the matrix
|
|
20
|
-
* is the entire transform the GPU is given — the volume's position, rotation and scale are never
|
|
21
|
-
* read on their own. That makes this exactly the question worth asking, "would the upload differ",
|
|
22
|
-
* and it catches a transform posed by writing its matrix, which comparing position, rotation and
|
|
23
|
-
* scale would not.
|
|
24
|
-
*
|
|
25
|
-
* @param {ParticipatingMediaVolume} volume
|
|
26
|
-
* @param {ParticipatingMedia} component
|
|
27
|
-
* @param {Transform} transform
|
|
28
|
-
* @returns {boolean}
|
|
29
|
-
*/
|
|
30
|
-
export function participating_media_volume_is_current(volume: ParticipatingMediaVolume, component: ParticipatingMedia, transform: Transform): boolean;
|
|
31
|
-
/**
|
|
32
|
-
* Mirrors fog, smoke and cloud entities into Shade's volumetrics.
|
|
33
|
-
*
|
|
34
|
-
* The same shape as {@link LightSystem3}: the ECS says what exists and where, and this keeps the
|
|
35
|
-
* renderer's own objects in step. A {@link ParticipatingMediaVolume} is a unit cube posed by a
|
|
36
|
-
* transform, so an entity's `Transform` is the volume — position, size and orientation with no
|
|
37
|
-
* translation step in between.
|
|
38
|
-
*
|
|
39
|
-
* **The transform is taken as world-space, with no hierarchy applied**, which is what the volume
|
|
40
|
-
* model can express: a volume is an oriented box in the scene and Shade has no parent chain to walk
|
|
41
|
-
* for it. Parenting a fog volume to a moving entity therefore leaves the fog where the child's own
|
|
42
|
-
* transform puts it. The lights are placed the same way, for the same reason.
|
|
43
|
-
*
|
|
44
|
-
* **Changes are polled once a frame rather than subscribed to.** A `Transform` announces itself and
|
|
45
|
-
* nothing else here does — a density tuned by an editor slider, a particle spec swapped wholesale
|
|
46
|
-
* for a different Mie solution — so subscribing would cover one field in three and the other two
|
|
47
|
-
* would still have to be polled. Two paths that have to agree, where one does the whole job. It
|
|
48
|
-
* costs about two dozen float comparisons per volume per frame and a scene holds volumes in the
|
|
49
|
-
* tens, so the comparison is cheaper than the signal plumbing it replaces. The price is latency: a
|
|
50
|
-
* change is visible within a frame rather than instantly.
|
|
51
|
-
*
|
|
52
|
-
* **Nothing is uploaded unless something actually changed.** The GPU table is repacked whole
|
|
53
|
-
* whenever {@link SceneVolumetrics.version} moves, so an unconditional copy every frame would
|
|
54
|
-
* re-upload every volume in the scene forever. The comparison is what decides, and on almost every
|
|
55
|
-
* frame it decides nothing has to happen.
|
|
56
|
-
*
|
|
57
|
-
* @see ParticipatingMedia the component
|
|
58
|
-
* @see SceneVolumetrics what the volumes are handed to
|
|
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.
|
|
59
7
|
*/
|
|
60
|
-
export
|
|
61
|
-
|
|
62
|
-
* @param {GraphicsEngine3} graphics
|
|
63
|
-
* @param {Scene} scene
|
|
64
|
-
*/
|
|
65
|
-
constructor(graphics: GraphicsEngine3, scene: Scene);
|
|
66
|
-
dependencies: (typeof Transform | typeof ParticipatingMedia)[];
|
|
67
|
-
startup(entityManager: any): Promise<void>;
|
|
68
|
-
shutdown(entityManager: any): Promise<void>;
|
|
69
|
-
/**
|
|
70
|
-
* @param {ParticipatingMedia} component
|
|
71
|
-
* @param {Transform} transform
|
|
72
|
-
* @param {number} entity
|
|
73
|
-
*/
|
|
74
|
-
link(component: ParticipatingMedia, transform: Transform, entity: number): void;
|
|
75
|
-
/**
|
|
76
|
-
* @param {ParticipatingMedia} component
|
|
77
|
-
* @param {Transform} transform
|
|
78
|
-
* @param {number} entity
|
|
79
|
-
*/
|
|
80
|
-
unlink(component: ParticipatingMedia, transform: Transform, entity: number): void;
|
|
81
|
-
#private;
|
|
82
|
-
}
|
|
83
|
-
import { ParticipatingMediaVolume } from "../../shade/renderer/volumetrics/ParticipatingMediaVolume.js";
|
|
84
|
-
import { ParticipatingMedia } from "./ParticipatingMedia.js";
|
|
85
|
-
import { Transform } from "../ecs/transform/Transform.js";
|
|
86
|
-
import { System } from "../ecs/System.js";
|
|
8
|
+
export const ParticipatingMediaSystem3: typeof ParticipatingMediaSystem;
|
|
9
|
+
import { ParticipatingMediaSystem } from "./ParticipatingMediaSystem.js";
|
|
87
10
|
//# sourceMappingURL=ParticipatingMediaSystem3.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParticipatingMediaSystem3.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/ParticipatingMediaSystem3.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ParticipatingMediaSystem3.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/ParticipatingMediaSystem3.js"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,wEAAkE;yCATzB,+BAA+B"}
|
|
@@ -1,184 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { isArrayEqualStrict } from "../../core/collection/array/isArrayEqualStrict.js";
|
|
3
|
-
import { ParticipatingMediaVolume } from "../../shade/renderer/volumetrics/ParticipatingMediaVolume.js";
|
|
4
|
-
import { System } from "../ecs/System.js";
|
|
5
|
-
import { Transform } from "../ecs/transform/Transform.js";
|
|
6
|
-
import { ParticipatingMedia } from "./ParticipatingMedia.js";
|
|
1
|
+
import { ParticipatingMediaSystem } from "./ParticipatingMediaSystem.js";
|
|
7
2
|
|
|
8
3
|
/**
|
|
9
|
-
*
|
|
4
|
+
* @deprecated Renamed to {@link ParticipatingMediaSystem}. 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.
|
|
10
6
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* transform, so an entity's `Transform` is the volume — position, size and orientation with no
|
|
14
|
-
* translation step in between.
|
|
15
|
-
*
|
|
16
|
-
* **The transform is taken as world-space, with no hierarchy applied**, which is what the volume
|
|
17
|
-
* model can express: a volume is an oriented box in the scene and Shade has no parent chain to walk
|
|
18
|
-
* for it. Parenting a fog volume to a moving entity therefore leaves the fog where the child's own
|
|
19
|
-
* transform puts it. The lights are placed the same way, for the same reason.
|
|
20
|
-
*
|
|
21
|
-
* **Changes are polled once a frame rather than subscribed to.** A `Transform` announces itself and
|
|
22
|
-
* nothing else here does — a density tuned by an editor slider, a particle spec swapped wholesale
|
|
23
|
-
* for a different Mie solution — so subscribing would cover one field in three and the other two
|
|
24
|
-
* would still have to be polled. Two paths that have to agree, where one does the whole job. It
|
|
25
|
-
* costs about two dozen float comparisons per volume per frame and a scene holds volumes in the
|
|
26
|
-
* tens, so the comparison is cheaper than the signal plumbing it replaces. The price is latency: a
|
|
27
|
-
* change is visible within a frame rather than instantly.
|
|
28
|
-
*
|
|
29
|
-
* **Nothing is uploaded unless something actually changed.** The GPU table is repacked whole
|
|
30
|
-
* whenever {@link SceneVolumetrics.version} moves, so an unconditional copy every frame would
|
|
31
|
-
* re-upload every volume in the scene forever. The comparison is what decides, and on almost every
|
|
32
|
-
* frame it decides nothing has to happen.
|
|
33
|
-
*
|
|
34
|
-
* @see ParticipatingMedia the component
|
|
35
|
-
* @see SceneVolumetrics what the volumes are handed to
|
|
36
|
-
*/
|
|
37
|
-
export class ParticipatingMediaSystem3 extends System {
|
|
38
|
-
|
|
39
|
-
dependencies = [ParticipatingMedia, Transform];
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* @type {GraphicsEngine3}
|
|
43
|
-
*/
|
|
44
|
-
#graphics;
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* @type {Scene}
|
|
48
|
-
*/
|
|
49
|
-
#scene;
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* @type {Map<number, {component: ParticipatingMedia, transform: Transform, volume: ParticipatingMediaVolume}>}
|
|
53
|
-
*/
|
|
54
|
-
#entries = new Map();
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* @param {GraphicsEngine3} graphics
|
|
58
|
-
* @param {Scene} scene
|
|
59
|
-
*/
|
|
60
|
-
constructor(graphics, scene) {
|
|
61
|
-
super();
|
|
62
|
-
|
|
63
|
-
assert.defined(graphics, 'graphics');
|
|
64
|
-
assert.defined(scene, 'scene');
|
|
65
|
-
assert.equal(scene.isScene, true, 'scene.isScene !== true');
|
|
66
|
-
|
|
67
|
-
this.#graphics = graphics;
|
|
68
|
-
this.#scene = scene;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
async startup(entityManager) {
|
|
72
|
-
this.entityManager = entityManager;
|
|
73
|
-
|
|
74
|
-
this.#graphics.set_scene(this.#scene);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
async shutdown(entityManager) {
|
|
78
|
-
for (const entity of Array.from(this.#entries.keys())) {
|
|
79
|
-
this.#drop(entity);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* @param {ParticipatingMedia} component
|
|
85
|
-
* @param {Transform} transform
|
|
86
|
-
* @param {number} entity
|
|
87
|
-
*/
|
|
88
|
-
link(component, transform, entity) {
|
|
89
|
-
const volume = new ParticipatingMediaVolume();
|
|
90
|
-
|
|
91
|
-
participating_media_volume_write(volume, component, transform);
|
|
92
|
-
|
|
93
|
-
this.#scene.volumetrics.add(volume);
|
|
94
|
-
|
|
95
|
-
this.#entries.set(entity, { component, transform, volume });
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* @param {ParticipatingMedia} component
|
|
100
|
-
* @param {Transform} transform
|
|
101
|
-
* @param {number} entity
|
|
102
|
-
*/
|
|
103
|
-
unlink(component, transform, entity) {
|
|
104
|
-
this.#drop(entity);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* @param {number} time_delta_seconds
|
|
109
|
-
*/
|
|
110
|
-
update(time_delta_seconds) {
|
|
111
|
-
const volumetrics = this.#scene.volumetrics;
|
|
112
|
-
|
|
113
|
-
for (const entry of this.#entries.values()) {
|
|
114
|
-
const volume = entry.volume;
|
|
115
|
-
|
|
116
|
-
if (participating_media_volume_is_current(volume, entry.component, entry.transform)) {
|
|
117
|
-
continue;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
participating_media_volume_write(volume, entry.component, entry.transform);
|
|
121
|
-
|
|
122
|
-
volumetrics.invalidate();
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* @param {number} entity
|
|
128
|
-
*/
|
|
129
|
-
#drop(entity) {
|
|
130
|
-
const entry = this.#entries.get(entity);
|
|
131
|
-
|
|
132
|
-
if (entry === undefined) {
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
this.#scene.volumetrics.remove(entry.volume);
|
|
137
|
-
|
|
138
|
-
this.#entries.delete(entity);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
/**
|
|
143
|
-
* Copy what the component and its transform say onto the volume Shade will render.
|
|
144
|
-
*
|
|
145
|
-
* The particle spec is **copied, not referenced**: two entities are routinely built from the same
|
|
146
|
-
* blueprint and would otherwise share one spec, so tuning one volume's particle would silently
|
|
147
|
-
* retune the other's.
|
|
148
|
-
*
|
|
149
|
-
* @param {ParticipatingMediaVolume} volume Shade's
|
|
150
|
-
* @param {ParticipatingMedia} component meep's
|
|
151
|
-
* @param {Transform} transform where the box is
|
|
152
|
-
*/
|
|
153
|
-
export function participating_media_volume_write(volume, component, transform) {
|
|
154
|
-
volume.density = component.density;
|
|
155
|
-
volume.fade_distance = component.fade_distance;
|
|
156
|
-
|
|
157
|
-
volume.particle_spec.copy(component.particle_spec);
|
|
158
|
-
|
|
159
|
-
volume.transform.copy(transform);
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
/**
|
|
163
|
-
* Whether the volume already says what the component and transform say.
|
|
164
|
-
*
|
|
165
|
-
* True on all but a handful of frames, which is the point of asking: a `false` here costs the whole
|
|
166
|
-
* scene's volumetrics table a trip to the GPU.
|
|
167
|
-
*
|
|
168
|
-
* **The transform is compared by its matrix rather than by `Transform.equals`**, because the matrix
|
|
169
|
-
* is the entire transform the GPU is given — the volume's position, rotation and scale are never
|
|
170
|
-
* read on their own. That makes this exactly the question worth asking, "would the upload differ",
|
|
171
|
-
* and it catches a transform posed by writing its matrix, which comparing position, rotation and
|
|
172
|
-
* scale would not.
|
|
173
|
-
*
|
|
174
|
-
* @param {ParticipatingMediaVolume} volume
|
|
175
|
-
* @param {ParticipatingMedia} component
|
|
176
|
-
* @param {Transform} transform
|
|
177
|
-
* @returns {boolean}
|
|
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.
|
|
178
9
|
*/
|
|
179
|
-
export
|
|
180
|
-
return volume.density === component.density
|
|
181
|
-
&& volume.fade_distance === component.fade_distance
|
|
182
|
-
&& isArrayEqualStrict(volume.transform.matrix, transform.matrix)
|
|
183
|
-
&& volume.particle_spec.equals(component.particle_spec);
|
|
184
|
-
}
|
|
10
|
+
export const ParticipatingMediaSystem3 = ParticipatingMediaSystem;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Draws the game's particle effects under Shade.
|
|
3
|
+
*
|
|
4
|
+
* **The simulation does not move.** `particular` emits, ages, integrates and colours particles on
|
|
5
|
+
* the CPU, and that is where it stays: the plan makes Shade's GPU particle system a later, opt-in
|
|
6
|
+
* upgrade rather than this port. What changes is only what happens to the state it produces each
|
|
7
|
+
* frame — instead of a three `Points` object per emitter, it is packed into the layout Shade's own
|
|
8
|
+
* billboard renderer reads.
|
|
9
|
+
*
|
|
10
|
+
* **No visibility layer comes across.** The legacy system drives a render layer backed by a BVH and
|
|
11
|
+
* puts emitters to sleep when they leave the visible set; §4.5 retires CPU render culling, so every
|
|
12
|
+
* linked emitter simulates and the GPU decides what is on screen. An emitter that should not
|
|
13
|
+
* simulate says so itself, through {@link ParticleEmitterFlag.Emitting}.
|
|
14
|
+
*/
|
|
15
|
+
export class ParticleEmitterSystem extends System<any> {
|
|
16
|
+
/**
|
|
17
|
+
* @param {GraphicsEngine} graphics
|
|
18
|
+
* @param {AssetManager} assets
|
|
19
|
+
*/
|
|
20
|
+
constructor(graphics: GraphicsEngine, assets: AssetManager);
|
|
21
|
+
dependencies: (typeof Transform | typeof ParticleEmitter)[];
|
|
22
|
+
/**
|
|
23
|
+
* What the pass draws. Read-only — the emitters follow the entities.
|
|
24
|
+
*
|
|
25
|
+
* @returns {ParticleEmitter[]}
|
|
26
|
+
*/
|
|
27
|
+
get emitters(): ParticleEmitter[];
|
|
28
|
+
startup(entityManager: any): Promise<void>;
|
|
29
|
+
shutdown(entityManager: any): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* @param {ParticleEmitter} emitter
|
|
32
|
+
* @param {Transform} transform
|
|
33
|
+
* @param {number} entity
|
|
34
|
+
*/
|
|
35
|
+
link(emitter: ParticleEmitter, transform: Transform, entity: number): void;
|
|
36
|
+
/**
|
|
37
|
+
* Rebuild an emitter that has been edited structurally — layers added or removed, a sprite
|
|
38
|
+
* changed, a parameter curve redrawn.
|
|
39
|
+
*
|
|
40
|
+
* The pool, the parameter tracks and the atlas references are all built from the emitter's
|
|
41
|
+
* description, so an edit to that description is only visible once they are built again. Sleep
|
|
42
|
+
* state is preserved because it is the editor's, not the emitter's.
|
|
43
|
+
*
|
|
44
|
+
* @param {ParticleEmitter} emitter one this system has linked
|
|
45
|
+
*/
|
|
46
|
+
rebuild(emitter: ParticleEmitter): void;
|
|
47
|
+
/**
|
|
48
|
+
* @param {ParticleEmitter} emitter
|
|
49
|
+
* @param {Transform} transform
|
|
50
|
+
* @param {number} entity
|
|
51
|
+
*/
|
|
52
|
+
unlink(emitter: ParticleEmitter, transform: Transform, entity: number): void;
|
|
53
|
+
update(timeDelta: any): void;
|
|
54
|
+
/**
|
|
55
|
+
* @param {FrameContext} frame
|
|
56
|
+
*/
|
|
57
|
+
record(frame: FrameContext): void;
|
|
58
|
+
#private;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Emitters draw into the scene, so they are subject to the fog of war that conceals it — which is
|
|
62
|
+
* a declaration on the fog rather than a placement here.
|
|
63
|
+
*/
|
|
64
|
+
export class ParticleExtension extends RenderExtension {
|
|
65
|
+
/**
|
|
66
|
+
* @param {ParticleEmitterSystem} system
|
|
67
|
+
*/
|
|
68
|
+
constructor(system: ParticleEmitterSystem);
|
|
69
|
+
record(frame: any): void;
|
|
70
|
+
#private;
|
|
71
|
+
}
|
|
72
|
+
import { System } from "../ecs/System.js";
|
|
73
|
+
import { Transform } from "../ecs/transform/Transform.js";
|
|
74
|
+
import { ParticleEmitter } from "../graphics/particles/particular/engine/emitter/ParticleEmitter.js";
|
|
75
|
+
import { RenderExtension } from "../../shade/renderer/extension/RenderExtension.js";
|
|
76
|
+
//# sourceMappingURL=ParticleEmitterSystem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ParticleEmitterSystem.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/ParticleEmitterSystem.js"],"names":[],"mappings":"AAaA;;;;;;;;;;;;;GAaG;AACH;IAiDI;;;OAGG;IACH,4DAUC;IA9DD,4DAA4C;IAuC5C;;;;OAIG;IACH,kCAEC;IAkBD,2CAUC;IAED,4CAeC;IAED;;;;OAIG;IACH,cAJW,eAAe,aACf,SAAS,UACT,MAAM,QAwBhB;IAED;;;;;;;;;OASG;IACH,iBAFW,eAAe,QAqBzB;IAED;;;;OAIG;IACH,gBAJW,eAAe,aACf,SAAS,UACT,MAAM,QAwBhB;IAED,6BAaC;IAED;;OAEG;IACH,kCA+BC;;CACJ;AAED;;;GAGG;AACH;IAUI;;OAEG;IACH,oBAFW,qBAAqB,EAM/B;IAED,yBAEC;;CACJ;uBA1RsB,kBAAkB;0BACf,+BAA+B;gCACzB,oEAAoE;gCANpE,mDAAmD"}
|