@woosh/meep-engine 3.11.3 → 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/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/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/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/shader_multiscatter_lut.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/shader_multiscatter_lut.js +0 -1
- 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 +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/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/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.js +2 -2
- 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 +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/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/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/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 -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/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/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 +12 -15
- 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/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
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
import { assert } from "../../core/assert.js";
|
|
2
|
+
import { FramePhase } from "../../shade/renderer/extension/FramePhase.js";
|
|
3
|
+
import { RenderExtension } from "../../shade/renderer/extension/RenderExtension.js";
|
|
4
|
+
import { SceneColor } from "../../shade/renderer/extension/SceneColor.js";
|
|
5
|
+
import { ViewTextures } from "../../shade/renderer/extension/ViewTextures.js";
|
|
6
|
+
import { ImageRGBADataLoader } from "../asset/loaders/image/ImageRGBADataLoader.js";
|
|
7
|
+
import { System } from "../ecs/System.js";
|
|
8
|
+
import { Transform } from "../ecs/transform/Transform.js";
|
|
9
|
+
import { ParticleEmitter } from "../graphics/particles/particular/engine/emitter/ParticleEmitter.js";
|
|
10
|
+
import { ParticleEmitterFlag } from "../graphics/particles/particular/engine/emitter/ParticleEmitterFlag.js";
|
|
11
|
+
import { ParticularEngine } from "../graphics/particles/particular/engine/ParticularEngine.js";
|
|
12
|
+
import { GPUParticularRenderer } from "./particles/GPUParticularRenderer.js";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Draws the game's particle effects under Shade.
|
|
16
|
+
*
|
|
17
|
+
* **The simulation does not move.** `particular` emits, ages, integrates and colours particles on
|
|
18
|
+
* the CPU, and that is where it stays: the plan makes Shade's GPU particle system a later, opt-in
|
|
19
|
+
* upgrade rather than this port. What changes is only what happens to the state it produces each
|
|
20
|
+
* frame — instead of a three `Points` object per emitter, it is packed into the layout Shade's own
|
|
21
|
+
* billboard renderer reads.
|
|
22
|
+
*
|
|
23
|
+
* **No visibility layer comes across.** The legacy system drives a render layer backed by a BVH and
|
|
24
|
+
* puts emitters to sleep when they leave the visible set; §4.5 retires CPU render culling, so every
|
|
25
|
+
* linked emitter simulates and the GPU decides what is on screen. An emitter that should not
|
|
26
|
+
* simulate says so itself, through {@link ParticleEmitterFlag.Emitting}.
|
|
27
|
+
*/
|
|
28
|
+
export class ParticleEmitterSystem extends System {
|
|
29
|
+
dependencies = [ParticleEmitter, Transform];
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* @type {GraphicsEngine}
|
|
33
|
+
*/
|
|
34
|
+
#graphics;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* @type {AssetManager}
|
|
38
|
+
*/
|
|
39
|
+
#assets;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* @type {ParticularEngine}
|
|
43
|
+
*/
|
|
44
|
+
#engine;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* @type {GPUParticularRenderer}
|
|
48
|
+
*/
|
|
49
|
+
#renderer = new GPUParticularRenderer();
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* The emitters to simulate and draw, in link order.
|
|
53
|
+
*
|
|
54
|
+
* @type {ParticleEmitter[]}
|
|
55
|
+
*/
|
|
56
|
+
#emitters = [];
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* @type {Map<number, {emitter: ParticleEmitter, position: Function, rotation: Function, scale: Function}>}
|
|
60
|
+
*/
|
|
61
|
+
#entries = new Map();
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* @type {RenderExtension|null}
|
|
65
|
+
*/
|
|
66
|
+
#extension = null;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* What the pass draws. Read-only — the emitters follow the entities.
|
|
70
|
+
*
|
|
71
|
+
* @returns {ParticleEmitter[]}
|
|
72
|
+
*/
|
|
73
|
+
get emitters() {
|
|
74
|
+
return this.#emitters;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* @param {GraphicsEngine} graphics
|
|
79
|
+
* @param {AssetManager} assets
|
|
80
|
+
*/
|
|
81
|
+
constructor(graphics, assets) {
|
|
82
|
+
super();
|
|
83
|
+
|
|
84
|
+
assert.defined(graphics, 'graphics');
|
|
85
|
+
assert.defined(assets, 'assets');
|
|
86
|
+
|
|
87
|
+
this.#graphics = graphics;
|
|
88
|
+
this.#assets = assets;
|
|
89
|
+
|
|
90
|
+
this.#engine = new ParticularEngine(assets);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
async startup(entityManager) {
|
|
94
|
+
this.entityManager = entityManager;
|
|
95
|
+
|
|
96
|
+
this.#extension = this.#graphics.add_extension(new ParticleExtension(this));
|
|
97
|
+
|
|
98
|
+
const assets = this.#assets;
|
|
99
|
+
|
|
100
|
+
if (!assets.hasLoaderForType('image')) {
|
|
101
|
+
await assets.registerLoader('image', new ImageRGBADataLoader());
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
async shutdown(entityManager) {
|
|
106
|
+
if (this.#extension !== null) {
|
|
107
|
+
this.#graphics.remove_extension(this.#extension);
|
|
108
|
+
|
|
109
|
+
this.#extension = null;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
this.#renderer.destroy();
|
|
113
|
+
|
|
114
|
+
// every emitter has been unlinked by this point — both teardown paths detach the dataset or
|
|
115
|
+
// remove the system observer first — so what is left is the shared sprite atlas
|
|
116
|
+
this.#engine.dispose();
|
|
117
|
+
|
|
118
|
+
this.#emitters.length = 0;
|
|
119
|
+
this.#entries.clear();
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* @param {ParticleEmitter} emitter
|
|
124
|
+
* @param {Transform} transform
|
|
125
|
+
* @param {number} entity
|
|
126
|
+
*/
|
|
127
|
+
link(emitter, transform, entity) {
|
|
128
|
+
const position = (x, y, z) => emitter.position.set(x, y, z);
|
|
129
|
+
const rotation = (x, y, z, w) => emitter.rotation.set(x, y, z, w);
|
|
130
|
+
const scale = (x, y, z) => emitter.scale.set(x, y, z);
|
|
131
|
+
|
|
132
|
+
transform.position.process(position);
|
|
133
|
+
transform.rotation.process(rotation);
|
|
134
|
+
transform.scale.process(scale);
|
|
135
|
+
|
|
136
|
+
this.#entries.set(entity, { emitter, position, rotation, scale });
|
|
137
|
+
|
|
138
|
+
emitter.id = entity;
|
|
139
|
+
|
|
140
|
+
/*
|
|
141
|
+
Awake from the start. The legacy system links emitters asleep and lets its visibility layer
|
|
142
|
+
wake them; there is no such layer here, and an emitter that never wakes never emits.
|
|
143
|
+
*/
|
|
144
|
+
emitter.clearFlag(ParticleEmitterFlag.Sleeping);
|
|
145
|
+
|
|
146
|
+
this.#engine.add(emitter);
|
|
147
|
+
|
|
148
|
+
this.#emitters.push(emitter);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Rebuild an emitter that has been edited structurally — layers added or removed, a sprite
|
|
153
|
+
* changed, a parameter curve redrawn.
|
|
154
|
+
*
|
|
155
|
+
* The pool, the parameter tracks and the atlas references are all built from the emitter's
|
|
156
|
+
* description, so an edit to that description is only visible once they are built again. Sleep
|
|
157
|
+
* state is preserved because it is the editor's, not the emitter's.
|
|
158
|
+
*
|
|
159
|
+
* @param {ParticleEmitter} emitter one this system has linked
|
|
160
|
+
*/
|
|
161
|
+
rebuild(emitter) {
|
|
162
|
+
assert.ok(this.#emitters.includes(emitter), 'emitter is not linked to this system');
|
|
163
|
+
|
|
164
|
+
const engine = this.#engine;
|
|
165
|
+
|
|
166
|
+
const sleeping = emitter.getFlag(ParticleEmitterFlag.Sleeping);
|
|
167
|
+
|
|
168
|
+
engine.remove(emitter);
|
|
169
|
+
|
|
170
|
+
emitter.clearFlag(ParticleEmitterFlag.Built | ParticleEmitterFlag.Initialized);
|
|
171
|
+
|
|
172
|
+
emitter.registerLayerParameters();
|
|
173
|
+
emitter.build();
|
|
174
|
+
emitter.initialize();
|
|
175
|
+
emitter.computeBoundingBox();
|
|
176
|
+
|
|
177
|
+
engine.add(emitter);
|
|
178
|
+
|
|
179
|
+
emitter.writeFlag(ParticleEmitterFlag.Sleeping, sleeping);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* @param {ParticleEmitter} emitter
|
|
184
|
+
* @param {Transform} transform
|
|
185
|
+
* @param {number} entity
|
|
186
|
+
*/
|
|
187
|
+
unlink(emitter, transform, entity) {
|
|
188
|
+
const entry = this.#entries.get(entity);
|
|
189
|
+
|
|
190
|
+
if (entry === undefined) {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
transform.position.onChanged.remove(entry.position);
|
|
195
|
+
transform.rotation.onChanged.remove(entry.rotation);
|
|
196
|
+
transform.scale.onChanged.remove(entry.scale);
|
|
197
|
+
|
|
198
|
+
this.#entries.delete(entity);
|
|
199
|
+
|
|
200
|
+
const index = this.#emitters.indexOf(emitter);
|
|
201
|
+
|
|
202
|
+
if (index !== -1) {
|
|
203
|
+
this.#emitters.splice(index, 1);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
this.#engine.remove(emitter);
|
|
207
|
+
|
|
208
|
+
emitter.dispose();
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
update(timeDelta) {
|
|
212
|
+
this.#engine.advance(timeDelta);
|
|
213
|
+
|
|
214
|
+
const emitters = this.#emitters;
|
|
215
|
+
|
|
216
|
+
for (let i = 0; i < emitters.length; i++) {
|
|
217
|
+
// retires dead particles and compacts the pool, which is what makes the live ones a
|
|
218
|
+
// contiguous run for the packer
|
|
219
|
+
emitters[i].update();
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// repacks the sprite atlas when an effect has brought a new sprite in
|
|
223
|
+
this.#engine.shaderManager.spriteAtlas.atlas.update();
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* @param {FrameContext} frame
|
|
228
|
+
*/
|
|
229
|
+
record(frame) {
|
|
230
|
+
const emitters = this.#emitters;
|
|
231
|
+
|
|
232
|
+
if (emitters.length === 0) {
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
const camera_context = frame.view.camera;
|
|
237
|
+
|
|
238
|
+
// the camera's world transform, whose first two columns are the axes a billboard is built on
|
|
239
|
+
const m = camera_context.camera.transform.matrix;
|
|
240
|
+
|
|
241
|
+
/*
|
|
242
|
+
The particles are packed and uploaded inside the pass rather than here: that needs a
|
|
243
|
+
`GraphicsContext`, which the frame graph hands out at execution time and the frame does not
|
|
244
|
+
carry. So the pass is recorded whether or not anything is alive, and draws nothing when
|
|
245
|
+
nothing is — which leaves the frame's colour exactly as it was either way.
|
|
246
|
+
*/
|
|
247
|
+
const scene = frame.get(SceneColor);
|
|
248
|
+
|
|
249
|
+
scene.color = this.#renderer.graph_draw({
|
|
250
|
+
graph: frame.graph,
|
|
251
|
+
color: scene.color,
|
|
252
|
+
depth: frame.get(ViewTextures).depth,
|
|
253
|
+
camera: camera_context.buffer,
|
|
254
|
+
emitters,
|
|
255
|
+
atlas: this.#engine.shaderManager.spriteAtlas.atlas.sampler,
|
|
256
|
+
camera_position: [m[12], m[13], m[14]],
|
|
257
|
+
camera_right: [m[0], m[1], m[2]],
|
|
258
|
+
camera_up: [m[4], m[5], m[6]]
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Emitters draw into the scene, so they are subject to the fog of war that conceals it — which is
|
|
265
|
+
* a declaration on the fog rather than a placement here.
|
|
266
|
+
*/
|
|
267
|
+
export class ParticleExtension extends RenderExtension {
|
|
268
|
+
name = "particles";
|
|
269
|
+
|
|
270
|
+
phase = FramePhase.AfterTransparency;
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* @type {ParticleEmitterSystem}
|
|
274
|
+
*/
|
|
275
|
+
#system;
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* @param {ParticleEmitterSystem} system
|
|
279
|
+
*/
|
|
280
|
+
constructor(system) {
|
|
281
|
+
super();
|
|
282
|
+
|
|
283
|
+
this.#system = system;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
record(frame) {
|
|
287
|
+
this.#system.record(frame);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
@@ -1,76 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* @deprecated Renamed to {@link ParticleEmitterSystem}. 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
|
-
* 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 ParticleEmitterSystem3 extends System<any> {
|
|
16
|
-
/**
|
|
17
|
-
* @param {GraphicsEngine3} graphics
|
|
18
|
-
* @param {AssetManager} assets
|
|
19
|
-
*/
|
|
20
|
-
constructor(graphics: GraphicsEngine3, 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.
|
|
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.
|
|
63
7
|
*/
|
|
64
|
-
export
|
|
65
|
-
|
|
66
|
-
* @param {ParticleEmitterSystem3} system
|
|
67
|
-
*/
|
|
68
|
-
constructor(system: ParticleEmitterSystem3);
|
|
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";
|
|
8
|
+
export const ParticleEmitterSystem3: typeof ParticleEmitterSystem;
|
|
9
|
+
import { ParticleEmitterSystem } from "./ParticleEmitterSystem.js";
|
|
76
10
|
//# sourceMappingURL=ParticleEmitterSystem3.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParticleEmitterSystem3.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/ParticleEmitterSystem3.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ParticleEmitterSystem3.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/ParticleEmitterSystem3.js"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,kEAA4D;sCATtB,4BAA4B"}
|
|
@@ -1,289 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { FramePhase } from "../../shade/renderer/extension/FramePhase.js";
|
|
3
|
-
import { RenderExtension } from "../../shade/renderer/extension/RenderExtension.js";
|
|
4
|
-
import { SceneColor } from "../../shade/renderer/extension/SceneColor.js";
|
|
5
|
-
import { ViewTextures } from "../../shade/renderer/extension/ViewTextures.js";
|
|
6
|
-
import { ImageRGBADataLoader } from "../asset/loaders/image/ImageRGBADataLoader.js";
|
|
7
|
-
import { System } from "../ecs/System.js";
|
|
8
|
-
import { Transform } from "../ecs/transform/Transform.js";
|
|
9
|
-
import { ParticleEmitter } from "../graphics/particles/particular/engine/emitter/ParticleEmitter.js";
|
|
10
|
-
import { ParticleEmitterFlag } from "../graphics/particles/particular/engine/emitter/ParticleEmitterFlag.js";
|
|
11
|
-
import { ParticularEngine } from "../graphics/particles/particular/engine/ParticularEngine.js";
|
|
12
|
-
import { GPUParticularRenderer } from "./particles/GPUParticularRenderer.js";
|
|
1
|
+
import { ParticleEmitterSystem } from "./ParticleEmitterSystem.js";
|
|
13
2
|
|
|
14
3
|
/**
|
|
15
|
-
*
|
|
4
|
+
* @deprecated Renamed to {@link ParticleEmitterSystem}. 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.
|
|
16
6
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* upgrade rather than this port. What changes is only what happens to the state it produces each
|
|
20
|
-
* frame — instead of a three `Points` object per emitter, it is packed into the layout Shade's own
|
|
21
|
-
* billboard renderer reads.
|
|
22
|
-
*
|
|
23
|
-
* **No visibility layer comes across.** The legacy system drives a render layer backed by a BVH and
|
|
24
|
-
* puts emitters to sleep when they leave the visible set; §4.5 retires CPU render culling, so every
|
|
25
|
-
* linked emitter simulates and the GPU decides what is on screen. An emitter that should not
|
|
26
|
-
* simulate says so itself, through {@link ParticleEmitterFlag.Emitting}.
|
|
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.
|
|
27
9
|
*/
|
|
28
|
-
export
|
|
29
|
-
dependencies = [ParticleEmitter, Transform];
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* @type {GraphicsEngine3}
|
|
33
|
-
*/
|
|
34
|
-
#graphics;
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* @type {AssetManager}
|
|
38
|
-
*/
|
|
39
|
-
#assets;
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* @type {ParticularEngine}
|
|
43
|
-
*/
|
|
44
|
-
#engine;
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* @type {GPUParticularRenderer}
|
|
48
|
-
*/
|
|
49
|
-
#renderer = new GPUParticularRenderer();
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* The emitters to simulate and draw, in link order.
|
|
53
|
-
*
|
|
54
|
-
* @type {ParticleEmitter[]}
|
|
55
|
-
*/
|
|
56
|
-
#emitters = [];
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* @type {Map<number, {emitter: ParticleEmitter, position: Function, rotation: Function, scale: Function}>}
|
|
60
|
-
*/
|
|
61
|
-
#entries = new Map();
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* @type {RenderExtension|null}
|
|
65
|
-
*/
|
|
66
|
-
#extension = null;
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* What the pass draws. Read-only — the emitters follow the entities.
|
|
70
|
-
*
|
|
71
|
-
* @returns {ParticleEmitter[]}
|
|
72
|
-
*/
|
|
73
|
-
get emitters() {
|
|
74
|
-
return this.#emitters;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* @param {GraphicsEngine3} graphics
|
|
79
|
-
* @param {AssetManager} assets
|
|
80
|
-
*/
|
|
81
|
-
constructor(graphics, assets) {
|
|
82
|
-
super();
|
|
83
|
-
|
|
84
|
-
assert.defined(graphics, 'graphics');
|
|
85
|
-
assert.defined(assets, 'assets');
|
|
86
|
-
|
|
87
|
-
this.#graphics = graphics;
|
|
88
|
-
this.#assets = assets;
|
|
89
|
-
|
|
90
|
-
this.#engine = new ParticularEngine(assets);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
async startup(entityManager) {
|
|
94
|
-
this.entityManager = entityManager;
|
|
95
|
-
|
|
96
|
-
this.#extension = this.#graphics.add_extension(new ParticleExtension(this));
|
|
97
|
-
|
|
98
|
-
const assets = this.#assets;
|
|
99
|
-
|
|
100
|
-
if (!assets.hasLoaderForType('image')) {
|
|
101
|
-
await assets.registerLoader('image', new ImageRGBADataLoader());
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
async shutdown(entityManager) {
|
|
106
|
-
if (this.#extension !== null) {
|
|
107
|
-
this.#graphics.remove_extension(this.#extension);
|
|
108
|
-
|
|
109
|
-
this.#extension = null;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
this.#renderer.destroy();
|
|
113
|
-
|
|
114
|
-
// every emitter has been unlinked by this point — both teardown paths detach the dataset or
|
|
115
|
-
// remove the system observer first — so what is left is the shared sprite atlas
|
|
116
|
-
this.#engine.dispose();
|
|
117
|
-
|
|
118
|
-
this.#emitters.length = 0;
|
|
119
|
-
this.#entries.clear();
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* @param {ParticleEmitter} emitter
|
|
124
|
-
* @param {Transform} transform
|
|
125
|
-
* @param {number} entity
|
|
126
|
-
*/
|
|
127
|
-
link(emitter, transform, entity) {
|
|
128
|
-
const position = (x, y, z) => emitter.position.set(x, y, z);
|
|
129
|
-
const rotation = (x, y, z, w) => emitter.rotation.set(x, y, z, w);
|
|
130
|
-
const scale = (x, y, z) => emitter.scale.set(x, y, z);
|
|
131
|
-
|
|
132
|
-
transform.position.process(position);
|
|
133
|
-
transform.rotation.process(rotation);
|
|
134
|
-
transform.scale.process(scale);
|
|
135
|
-
|
|
136
|
-
this.#entries.set(entity, { emitter, position, rotation, scale });
|
|
137
|
-
|
|
138
|
-
emitter.id = entity;
|
|
139
|
-
|
|
140
|
-
/*
|
|
141
|
-
Awake from the start. The legacy system links emitters asleep and lets its visibility layer
|
|
142
|
-
wake them; there is no such layer here, and an emitter that never wakes never emits.
|
|
143
|
-
*/
|
|
144
|
-
emitter.clearFlag(ParticleEmitterFlag.Sleeping);
|
|
145
|
-
|
|
146
|
-
this.#engine.add(emitter);
|
|
147
|
-
|
|
148
|
-
this.#emitters.push(emitter);
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
/**
|
|
152
|
-
* Rebuild an emitter that has been edited structurally — layers added or removed, a sprite
|
|
153
|
-
* changed, a parameter curve redrawn.
|
|
154
|
-
*
|
|
155
|
-
* The pool, the parameter tracks and the atlas references are all built from the emitter's
|
|
156
|
-
* description, so an edit to that description is only visible once they are built again. Sleep
|
|
157
|
-
* state is preserved because it is the editor's, not the emitter's.
|
|
158
|
-
*
|
|
159
|
-
* @param {ParticleEmitter} emitter one this system has linked
|
|
160
|
-
*/
|
|
161
|
-
rebuild(emitter) {
|
|
162
|
-
assert.ok(this.#emitters.includes(emitter), 'emitter is not linked to this system');
|
|
163
|
-
|
|
164
|
-
const engine = this.#engine;
|
|
165
|
-
|
|
166
|
-
const sleeping = emitter.getFlag(ParticleEmitterFlag.Sleeping);
|
|
167
|
-
|
|
168
|
-
engine.remove(emitter);
|
|
169
|
-
|
|
170
|
-
emitter.clearFlag(ParticleEmitterFlag.Built | ParticleEmitterFlag.Initialized);
|
|
171
|
-
|
|
172
|
-
emitter.registerLayerParameters();
|
|
173
|
-
emitter.build();
|
|
174
|
-
emitter.initialize();
|
|
175
|
-
emitter.computeBoundingBox();
|
|
176
|
-
|
|
177
|
-
engine.add(emitter);
|
|
178
|
-
|
|
179
|
-
emitter.writeFlag(ParticleEmitterFlag.Sleeping, sleeping);
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
/**
|
|
183
|
-
* @param {ParticleEmitter} emitter
|
|
184
|
-
* @param {Transform} transform
|
|
185
|
-
* @param {number} entity
|
|
186
|
-
*/
|
|
187
|
-
unlink(emitter, transform, entity) {
|
|
188
|
-
const entry = this.#entries.get(entity);
|
|
189
|
-
|
|
190
|
-
if (entry === undefined) {
|
|
191
|
-
return;
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
transform.position.onChanged.remove(entry.position);
|
|
195
|
-
transform.rotation.onChanged.remove(entry.rotation);
|
|
196
|
-
transform.scale.onChanged.remove(entry.scale);
|
|
197
|
-
|
|
198
|
-
this.#entries.delete(entity);
|
|
199
|
-
|
|
200
|
-
const index = this.#emitters.indexOf(emitter);
|
|
201
|
-
|
|
202
|
-
if (index !== -1) {
|
|
203
|
-
this.#emitters.splice(index, 1);
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
this.#engine.remove(emitter);
|
|
207
|
-
|
|
208
|
-
emitter.dispose();
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
update(timeDelta) {
|
|
212
|
-
this.#engine.advance(timeDelta);
|
|
213
|
-
|
|
214
|
-
const emitters = this.#emitters;
|
|
215
|
-
|
|
216
|
-
for (let i = 0; i < emitters.length; i++) {
|
|
217
|
-
// retires dead particles and compacts the pool, which is what makes the live ones a
|
|
218
|
-
// contiguous run for the packer
|
|
219
|
-
emitters[i].update();
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
// repacks the sprite atlas when an effect has brought a new sprite in
|
|
223
|
-
this.#engine.shaderManager.spriteAtlas.atlas.update();
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
/**
|
|
227
|
-
* @param {FrameContext} frame
|
|
228
|
-
*/
|
|
229
|
-
record(frame) {
|
|
230
|
-
const emitters = this.#emitters;
|
|
231
|
-
|
|
232
|
-
if (emitters.length === 0) {
|
|
233
|
-
return;
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
const camera_context = frame.view.camera;
|
|
237
|
-
|
|
238
|
-
// the camera's world transform, whose first two columns are the axes a billboard is built on
|
|
239
|
-
const m = camera_context.camera.transform.matrix;
|
|
240
|
-
|
|
241
|
-
/*
|
|
242
|
-
The particles are packed and uploaded inside the pass rather than here: that needs a
|
|
243
|
-
`GraphicsContext`, which the frame graph hands out at execution time and the frame does not
|
|
244
|
-
carry. So the pass is recorded whether or not anything is alive, and draws nothing when
|
|
245
|
-
nothing is — which leaves the frame's colour exactly as it was either way.
|
|
246
|
-
*/
|
|
247
|
-
const scene = frame.get(SceneColor);
|
|
248
|
-
|
|
249
|
-
scene.color = this.#renderer.graph_draw({
|
|
250
|
-
graph: frame.graph,
|
|
251
|
-
color: scene.color,
|
|
252
|
-
depth: frame.get(ViewTextures).depth,
|
|
253
|
-
camera: camera_context.buffer,
|
|
254
|
-
emitters,
|
|
255
|
-
atlas: this.#engine.shaderManager.spriteAtlas.atlas.sampler,
|
|
256
|
-
camera_position: [m[12], m[13], m[14]],
|
|
257
|
-
camera_right: [m[0], m[1], m[2]],
|
|
258
|
-
camera_up: [m[4], m[5], m[6]]
|
|
259
|
-
});
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
/**
|
|
264
|
-
* Emitters draw into the scene, so they are subject to the fog of war that conceals it — which is
|
|
265
|
-
* a declaration on the fog rather than a placement here.
|
|
266
|
-
*/
|
|
267
|
-
export class ParticleExtension extends RenderExtension {
|
|
268
|
-
name = "particles";
|
|
269
|
-
|
|
270
|
-
phase = FramePhase.AfterTransparency;
|
|
271
|
-
|
|
272
|
-
/**
|
|
273
|
-
* @type {ParticleEmitterSystem3}
|
|
274
|
-
*/
|
|
275
|
-
#system;
|
|
276
|
-
|
|
277
|
-
/**
|
|
278
|
-
* @param {ParticleEmitterSystem3} system
|
|
279
|
-
*/
|
|
280
|
-
constructor(system) {
|
|
281
|
-
super();
|
|
282
|
-
|
|
283
|
-
this.#system = system;
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
record(frame) {
|
|
287
|
-
this.#system.record(frame);
|
|
288
|
-
}
|
|
289
|
-
}
|
|
10
|
+
export const ParticleEmitterSystem3 = ParticleEmitterSystem;
|