@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,265 @@
|
|
|
1
|
+
import { assert } from "../../core/assert.js";
|
|
2
|
+
import { SignalBinding } from "../../core/events/signal/SignalBinding.js";
|
|
3
|
+
import { GPUFogOfWarRenderer } from "../../shade/renderer/fow/GPUFogOfWarRenderer.js";
|
|
4
|
+
import { HighlightExtension } from "./HighlightSystem.js";
|
|
5
|
+
import { ParticleExtension } from "./ParticleEmitterSystem.js";
|
|
6
|
+
import { PathDisplayExtension } from "./PathDisplaySystem.js";
|
|
7
|
+
import { TrailExtension } from "./Trail3DSystem.js";
|
|
8
|
+
import { FramePhase } from "../../shade/renderer/extension/FramePhase.js";
|
|
9
|
+
import { RenderExtension } from "../../shade/renderer/extension/RenderExtension.js";
|
|
10
|
+
import { SceneColor } from "../../shade/renderer/extension/SceneColor.js";
|
|
11
|
+
import { ViewTextures } from "../../shade/renderer/extension/ViewTextures.js";
|
|
12
|
+
import { FogOfWar } from "../ecs/fow/FogOfWar.js";
|
|
13
|
+
import { FogOfWarEdgeMode } from "../ecs/fow/FogOfWarEdgeMode.js";
|
|
14
|
+
import { computeUvTransformFromFogOfWar } from "../ecs/fow/fog_of_war_uv_transform.js";
|
|
15
|
+
import Terrain from "../ecs/terrain/ecs/Terrain.js";
|
|
16
|
+
import { System } from "../ecs/System.js";
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Draws the level's fog of war under Shade.
|
|
20
|
+
*
|
|
21
|
+
* **The mask stays where it was.** `FogOfWar` owns a CPU `Sampler2D` and a distance field, and every
|
|
22
|
+
* gameplay query — what a unit can see, what the AI may know, whether an entity is drawn at all —
|
|
23
|
+
* reads them. None of that moves to the GPU; the renderer is handed the same array, as a texture.
|
|
24
|
+
*
|
|
25
|
+
* **The composite is a pass at {@link FramePhase.AfterTransparency}.** That is the last phase where
|
|
26
|
+
* the frame's colour and its depth are the same size — after it the image is upscaled to the output
|
|
27
|
+
* resolution while the depth buffer stays at the internal one — and the fog is a screen-space read
|
|
28
|
+
* of depth, so the two have to agree texel for texel. It also puts the fog inside the tonemapper
|
|
29
|
+
* rather than over it, which is what the phase is for.
|
|
30
|
+
*/
|
|
31
|
+
export class FogOfWarSystem extends System {
|
|
32
|
+
dependencies = [FogOfWar, Terrain];
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* @type {GraphicsEngine}
|
|
36
|
+
*/
|
|
37
|
+
#graphics;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* @type {GPUFogOfWarRenderer}
|
|
41
|
+
*/
|
|
42
|
+
#renderer = new GPUFogOfWarRenderer();
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* What the pass draws. A level has one fog field; the array is what makes "none" a state rather
|
|
46
|
+
* than a special case.
|
|
47
|
+
*
|
|
48
|
+
* @type {FogField[]}
|
|
49
|
+
*/
|
|
50
|
+
#fields = [];
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* @type {Map<number, FogField>}
|
|
54
|
+
*/
|
|
55
|
+
#entries = new Map();
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* @type {RenderExtension|null}
|
|
59
|
+
*/
|
|
60
|
+
#extension = null;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* What the pass draws. Read-only — the fields follow the entities.
|
|
64
|
+
*
|
|
65
|
+
* @returns {FogField[]}
|
|
66
|
+
*/
|
|
67
|
+
get fields() {
|
|
68
|
+
return this.#fields;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* @param {GraphicsEngine} graphics
|
|
73
|
+
*/
|
|
74
|
+
constructor(graphics) {
|
|
75
|
+
super();
|
|
76
|
+
|
|
77
|
+
assert.defined(graphics, 'graphics');
|
|
78
|
+
|
|
79
|
+
this.#graphics = graphics;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
async startup(entityManager) {
|
|
83
|
+
this.entityManager = entityManager;
|
|
84
|
+
|
|
85
|
+
this.#extension = this.#graphics.add_extension(new FogOfWarExtension(this));
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
async shutdown(entityManager) {
|
|
89
|
+
if (this.#extension !== null) {
|
|
90
|
+
this.#graphics.remove_extension(this.#extension);
|
|
91
|
+
|
|
92
|
+
this.#extension = null;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
for (const field of this.#entries.values()) {
|
|
96
|
+
field.binding.unlink();
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
this.#fields.length = 0;
|
|
100
|
+
this.#entries.clear();
|
|
101
|
+
|
|
102
|
+
this.#renderer.destroy();
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* @param {FrameContext} frame
|
|
107
|
+
*/
|
|
108
|
+
record(frame) {
|
|
109
|
+
const fields = this.#fields;
|
|
110
|
+
|
|
111
|
+
if (fields.length === 0) {
|
|
112
|
+
// nothing to conceal, and the frame's colour is left exactly as it was
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
const scene = frame.get(SceneColor);
|
|
117
|
+
const depth = frame.get(ViewTextures).depth;
|
|
118
|
+
|
|
119
|
+
let color = scene.color;
|
|
120
|
+
|
|
121
|
+
for (let i = 0; i < fields.length; i++) {
|
|
122
|
+
color = this.#renderer.graph_draw({
|
|
123
|
+
graph: frame.graph,
|
|
124
|
+
color,
|
|
125
|
+
depth,
|
|
126
|
+
camera: frame.view.camera.buffer,
|
|
127
|
+
field: fields[i]
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
scene.color = color;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* @param {FogOfWar} fow
|
|
136
|
+
* @param {Terrain} terrain
|
|
137
|
+
* @param {number} entity
|
|
138
|
+
*/
|
|
139
|
+
link(fow, terrain, entity) {
|
|
140
|
+
// the fog covers the terrain, cell for cell — the same sizing the legacy system does
|
|
141
|
+
fow.resize(terrain.size.x, terrain.size.y, terrain.gridScale);
|
|
142
|
+
|
|
143
|
+
const field = {
|
|
144
|
+
sampler: fow.sampler,
|
|
145
|
+
uv_transform: new Float32Array(4),
|
|
146
|
+
color: new Float32Array(4),
|
|
147
|
+
edge_extend: 0,
|
|
148
|
+
// nothing has been uploaded yet, so the first frame is a change by definition
|
|
149
|
+
dirty: true,
|
|
150
|
+
component: fow,
|
|
151
|
+
binding: null
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
/*
|
|
155
|
+
The component announces a changed mask rather than the mask being polled for one: it writes
|
|
156
|
+
into its sampler's array in place — a fill for a conceal, a cell at a time for a fade — so
|
|
157
|
+
there is nothing about the array itself that moves when the field does.
|
|
158
|
+
*/
|
|
159
|
+
field.binding = SignalBinding.bind(fow.on.textureChanged, () => {
|
|
160
|
+
field.dirty = true;
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
this.#refresh(field, fow);
|
|
164
|
+
|
|
165
|
+
this.#entries.set(entity, field);
|
|
166
|
+
this.#fields.push(field);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* @param {FogOfWar} fow
|
|
171
|
+
* @param {Terrain} terrain
|
|
172
|
+
* @param {number} entity
|
|
173
|
+
*/
|
|
174
|
+
unlink(fow, terrain, entity) {
|
|
175
|
+
const field = this.#entries.get(entity);
|
|
176
|
+
|
|
177
|
+
if (field === undefined) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
field.binding.unlink();
|
|
182
|
+
|
|
183
|
+
const index = this.#fields.indexOf(field);
|
|
184
|
+
|
|
185
|
+
if (index !== -1) {
|
|
186
|
+
this.#fields.splice(index, 1);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
this.#entries.delete(entity);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
update(timeDelta) {
|
|
193
|
+
for (const field of this.#entries.values()) {
|
|
194
|
+
const fow = field.component;
|
|
195
|
+
|
|
196
|
+
// advances the reveal fades and rebuilds the mask when one moved
|
|
197
|
+
fow.update(timeDelta);
|
|
198
|
+
|
|
199
|
+
this.#refresh(field, fow);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Copy the component's authored values across.
|
|
205
|
+
*
|
|
206
|
+
* @param {FogField} field
|
|
207
|
+
* @param {FogOfWar} fow
|
|
208
|
+
*/
|
|
209
|
+
#refresh(field, fow) {
|
|
210
|
+
// the sampler is reallocated by `resize`, so the field follows it rather than holding one
|
|
211
|
+
field.sampler = fow.sampler;
|
|
212
|
+
|
|
213
|
+
computeUvTransformFromFogOfWar(fow, (offset_x, offset_y, scale_x, scale_y) => {
|
|
214
|
+
field.uv_transform[0] = offset_x;
|
|
215
|
+
field.uv_transform[1] = offset_y;
|
|
216
|
+
field.uv_transform[2] = scale_x;
|
|
217
|
+
field.uv_transform[3] = scale_y;
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
const color = fow.color;
|
|
221
|
+
|
|
222
|
+
field.color[0] = color.x;
|
|
223
|
+
field.color[1] = color.y;
|
|
224
|
+
field.color[2] = color.z;
|
|
225
|
+
field.color[3] = color.w;
|
|
226
|
+
|
|
227
|
+
field.edge_extend = fow.edge_mode === FogOfWarEdgeMode.Extend ? 1 : 0;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* **Last among the content extensions**, because the fog conceals and therefore belongs over
|
|
233
|
+
* everything it is meant to conceal — particles, trails, the path display and the selection
|
|
234
|
+
* highlight all draw before it and are all subject to it. Written down here rather than being a
|
|
235
|
+
* property of where a registration call happened to sit, which is how it came to be wrong.
|
|
236
|
+
*
|
|
237
|
+
* The declaration is stated from this side, over the content extensions, so that adding another one
|
|
238
|
+
* is a change to that extension and not to this list. {@link DebugDrawExtension} is the one thing
|
|
239
|
+
* that goes after the fog, and it says so itself.
|
|
240
|
+
*/
|
|
241
|
+
export class FogOfWarExtension extends RenderExtension {
|
|
242
|
+
name = "fog of war";
|
|
243
|
+
|
|
244
|
+
phase = FramePhase.AfterTransparency;
|
|
245
|
+
|
|
246
|
+
after = [ParticleExtension, PathDisplayExtension, TrailExtension, HighlightExtension];
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* @type {FogOfWarSystem}
|
|
250
|
+
*/
|
|
251
|
+
#system;
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* @param {FogOfWarSystem} system
|
|
255
|
+
*/
|
|
256
|
+
constructor(system) {
|
|
257
|
+
super();
|
|
258
|
+
|
|
259
|
+
this.#system = system;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
record(frame) {
|
|
263
|
+
this.#system.record(frame);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
@@ -1,74 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* @deprecated Renamed to {@link FogOfWarSystem}. 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
|
-
* reads them. None of that moves to the GPU; the renderer is handed the same array, as a texture.
|
|
7
|
-
*
|
|
8
|
-
* **The composite is a pass at {@link FramePhase.AfterTransparency}.** That is the last phase where
|
|
9
|
-
* the frame's colour and its depth are the same size — after it the image is upscaled to the output
|
|
10
|
-
* resolution while the depth buffer stays at the internal one — and the fog is a screen-space read
|
|
11
|
-
* of depth, so the two have to agree texel for texel. It also puts the fog inside the tonemapper
|
|
12
|
-
* rather than over it, which is what the phase is for.
|
|
13
|
-
*/
|
|
14
|
-
export class FogOfWarSystem3 extends System<any> {
|
|
15
|
-
/**
|
|
16
|
-
* @param {GraphicsEngine3} graphics
|
|
17
|
-
*/
|
|
18
|
-
constructor(graphics: GraphicsEngine3);
|
|
19
|
-
dependencies: (typeof Terrain | typeof FogOfWar)[];
|
|
20
|
-
/**
|
|
21
|
-
* What the pass draws. Read-only — the fields follow the entities.
|
|
22
|
-
*
|
|
23
|
-
* @returns {FogField[]}
|
|
24
|
-
*/
|
|
25
|
-
get fields(): FogField[];
|
|
26
|
-
startup(entityManager: any): Promise<void>;
|
|
27
|
-
shutdown(entityManager: any): Promise<void>;
|
|
28
|
-
/**
|
|
29
|
-
* @param {FrameContext} frame
|
|
30
|
-
*/
|
|
31
|
-
record(frame: FrameContext): void;
|
|
32
|
-
/**
|
|
33
|
-
* @param {FogOfWar} fow
|
|
34
|
-
* @param {Terrain} terrain
|
|
35
|
-
* @param {number} entity
|
|
36
|
-
*/
|
|
37
|
-
link(fow: FogOfWar, terrain: Terrain, entity: number): void;
|
|
38
|
-
/**
|
|
39
|
-
* @param {FogOfWar} fow
|
|
40
|
-
* @param {Terrain} terrain
|
|
41
|
-
* @param {number} entity
|
|
42
|
-
*/
|
|
43
|
-
unlink(fow: FogOfWar, terrain: Terrain, entity: number): void;
|
|
44
|
-
update(timeDelta: any): void;
|
|
45
|
-
#private;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* **Last among the content extensions**, because the fog conceals and therefore belongs over
|
|
49
|
-
* everything it is meant to conceal — particles, trails, the path display and the selection
|
|
50
|
-
* highlight all draw before it and are all subject to it. Written down here rather than being a
|
|
51
|
-
* property of where a registration call happened to sit, which is how it came to be wrong.
|
|
52
|
-
*
|
|
53
|
-
* The declaration is stated from this side, over the content extensions, so that adding another one
|
|
54
|
-
* is a change to that extension and not to this list. {@link DebugDrawExtension} is the one thing
|
|
55
|
-
* that goes after the fog, and it says so itself.
|
|
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.
|
|
56
7
|
*/
|
|
57
|
-
export
|
|
58
|
-
|
|
59
|
-
* @param {FogOfWarSystem3} system
|
|
60
|
-
*/
|
|
61
|
-
constructor(system: FogOfWarSystem3);
|
|
62
|
-
after: (typeof HighlightExtension | typeof ParticleExtension | typeof PathDisplayExtension | typeof TrailExtension)[];
|
|
63
|
-
record(frame: any): void;
|
|
64
|
-
#private;
|
|
65
|
-
}
|
|
66
|
-
import { System } from "../ecs/System.js";
|
|
67
|
-
import Terrain from "../ecs/terrain/ecs/Terrain.js";
|
|
68
|
-
import { FogOfWar } from "../ecs/fow/FogOfWar.js";
|
|
69
|
-
import { RenderExtension } from "../../shade/renderer/extension/RenderExtension.js";
|
|
70
|
-
import { HighlightExtension } from "./HighlightSystem3.js";
|
|
71
|
-
import { ParticleExtension } from "./ParticleEmitterSystem3.js";
|
|
72
|
-
import { PathDisplayExtension } from "./PathDisplaySystem3.js";
|
|
73
|
-
import { TrailExtension } from "./Trail3DSystem3.js";
|
|
8
|
+
export const FogOfWarSystem3: typeof FogOfWarSystem;
|
|
9
|
+
import { FogOfWarSystem } from "./FogOfWarSystem.js";
|
|
74
10
|
//# sourceMappingURL=FogOfWarSystem3.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FogOfWarSystem3.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/FogOfWarSystem3.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FogOfWarSystem3.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/FogOfWarSystem3.js"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,oDAA8C;+BATf,qBAAqB"}
|
|
@@ -1,265 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { SignalBinding } from "../../core/events/signal/SignalBinding.js";
|
|
3
|
-
import { GPUFogOfWarRenderer } from "../../shade/renderer/fow/GPUFogOfWarRenderer.js";
|
|
4
|
-
import { HighlightExtension } from "./HighlightSystem3.js";
|
|
5
|
-
import { ParticleExtension } from "./ParticleEmitterSystem3.js";
|
|
6
|
-
import { PathDisplayExtension } from "./PathDisplaySystem3.js";
|
|
7
|
-
import { TrailExtension } from "./Trail3DSystem3.js";
|
|
8
|
-
import { FramePhase } from "../../shade/renderer/extension/FramePhase.js";
|
|
9
|
-
import { RenderExtension } from "../../shade/renderer/extension/RenderExtension.js";
|
|
10
|
-
import { SceneColor } from "../../shade/renderer/extension/SceneColor.js";
|
|
11
|
-
import { ViewTextures } from "../../shade/renderer/extension/ViewTextures.js";
|
|
12
|
-
import { FogOfWar } from "../ecs/fow/FogOfWar.js";
|
|
13
|
-
import { FogOfWarEdgeMode } from "../ecs/fow/FogOfWarEdgeMode.js";
|
|
14
|
-
import { computeUvTransformFromFogOfWar } from "../ecs/fow/fog_of_war_uv_transform.js";
|
|
15
|
-
import Terrain from "../ecs/terrain/ecs/Terrain.js";
|
|
16
|
-
import { System } from "../ecs/System.js";
|
|
1
|
+
import { FogOfWarSystem } from "./FogOfWarSystem.js";
|
|
17
2
|
|
|
18
3
|
/**
|
|
19
|
-
*
|
|
4
|
+
* @deprecated Renamed to {@link FogOfWarSystem}. 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.
|
|
20
6
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* reads them. None of that moves to the GPU; the renderer is handed the same array, as a texture.
|
|
24
|
-
*
|
|
25
|
-
* **The composite is a pass at {@link FramePhase.AfterTransparency}.** That is the last phase where
|
|
26
|
-
* the frame's colour and its depth are the same size — after it the image is upscaled to the output
|
|
27
|
-
* resolution while the depth buffer stays at the internal one — and the fog is a screen-space read
|
|
28
|
-
* of depth, so the two have to agree texel for texel. It also puts the fog inside the tonemapper
|
|
29
|
-
* rather than over it, which is what the phase is for.
|
|
30
|
-
*/
|
|
31
|
-
export class FogOfWarSystem3 extends System {
|
|
32
|
-
dependencies = [FogOfWar, Terrain];
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* @type {GraphicsEngine3}
|
|
36
|
-
*/
|
|
37
|
-
#graphics;
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* @type {GPUFogOfWarRenderer}
|
|
41
|
-
*/
|
|
42
|
-
#renderer = new GPUFogOfWarRenderer();
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* What the pass draws. A level has one fog field; the array is what makes "none" a state rather
|
|
46
|
-
* than a special case.
|
|
47
|
-
*
|
|
48
|
-
* @type {FogField[]}
|
|
49
|
-
*/
|
|
50
|
-
#fields = [];
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* @type {Map<number, FogField>}
|
|
54
|
-
*/
|
|
55
|
-
#entries = new Map();
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* @type {RenderExtension|null}
|
|
59
|
-
*/
|
|
60
|
-
#extension = null;
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* What the pass draws. Read-only — the fields follow the entities.
|
|
64
|
-
*
|
|
65
|
-
* @returns {FogField[]}
|
|
66
|
-
*/
|
|
67
|
-
get fields() {
|
|
68
|
-
return this.#fields;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* @param {GraphicsEngine3} graphics
|
|
73
|
-
*/
|
|
74
|
-
constructor(graphics) {
|
|
75
|
-
super();
|
|
76
|
-
|
|
77
|
-
assert.defined(graphics, 'graphics');
|
|
78
|
-
|
|
79
|
-
this.#graphics = graphics;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
async startup(entityManager) {
|
|
83
|
-
this.entityManager = entityManager;
|
|
84
|
-
|
|
85
|
-
this.#extension = this.#graphics.add_extension(new FogOfWarExtension(this));
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
async shutdown(entityManager) {
|
|
89
|
-
if (this.#extension !== null) {
|
|
90
|
-
this.#graphics.remove_extension(this.#extension);
|
|
91
|
-
|
|
92
|
-
this.#extension = null;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
for (const field of this.#entries.values()) {
|
|
96
|
-
field.binding.unlink();
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
this.#fields.length = 0;
|
|
100
|
-
this.#entries.clear();
|
|
101
|
-
|
|
102
|
-
this.#renderer.destroy();
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* @param {FrameContext} frame
|
|
107
|
-
*/
|
|
108
|
-
record(frame) {
|
|
109
|
-
const fields = this.#fields;
|
|
110
|
-
|
|
111
|
-
if (fields.length === 0) {
|
|
112
|
-
// nothing to conceal, and the frame's colour is left exactly as it was
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
const scene = frame.get(SceneColor);
|
|
117
|
-
const depth = frame.get(ViewTextures).depth;
|
|
118
|
-
|
|
119
|
-
let color = scene.color;
|
|
120
|
-
|
|
121
|
-
for (let i = 0; i < fields.length; i++) {
|
|
122
|
-
color = this.#renderer.graph_draw({
|
|
123
|
-
graph: frame.graph,
|
|
124
|
-
color,
|
|
125
|
-
depth,
|
|
126
|
-
camera: frame.view.camera.buffer,
|
|
127
|
-
field: fields[i]
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
scene.color = color;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* @param {FogOfWar} fow
|
|
136
|
-
* @param {Terrain} terrain
|
|
137
|
-
* @param {number} entity
|
|
138
|
-
*/
|
|
139
|
-
link(fow, terrain, entity) {
|
|
140
|
-
// the fog covers the terrain, cell for cell — the same sizing the legacy system does
|
|
141
|
-
fow.resize(terrain.size.x, terrain.size.y, terrain.gridScale);
|
|
142
|
-
|
|
143
|
-
const field = {
|
|
144
|
-
sampler: fow.sampler,
|
|
145
|
-
uv_transform: new Float32Array(4),
|
|
146
|
-
color: new Float32Array(4),
|
|
147
|
-
edge_extend: 0,
|
|
148
|
-
// nothing has been uploaded yet, so the first frame is a change by definition
|
|
149
|
-
dirty: true,
|
|
150
|
-
component: fow,
|
|
151
|
-
binding: null
|
|
152
|
-
};
|
|
153
|
-
|
|
154
|
-
/*
|
|
155
|
-
The component announces a changed mask rather than the mask being polled for one: it writes
|
|
156
|
-
into its sampler's array in place — a fill for a conceal, a cell at a time for a fade — so
|
|
157
|
-
there is nothing about the array itself that moves when the field does.
|
|
158
|
-
*/
|
|
159
|
-
field.binding = SignalBinding.bind(fow.on.textureChanged, () => {
|
|
160
|
-
field.dirty = true;
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
this.#refresh(field, fow);
|
|
164
|
-
|
|
165
|
-
this.#entries.set(entity, field);
|
|
166
|
-
this.#fields.push(field);
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
/**
|
|
170
|
-
* @param {FogOfWar} fow
|
|
171
|
-
* @param {Terrain} terrain
|
|
172
|
-
* @param {number} entity
|
|
173
|
-
*/
|
|
174
|
-
unlink(fow, terrain, entity) {
|
|
175
|
-
const field = this.#entries.get(entity);
|
|
176
|
-
|
|
177
|
-
if (field === undefined) {
|
|
178
|
-
return;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
field.binding.unlink();
|
|
182
|
-
|
|
183
|
-
const index = this.#fields.indexOf(field);
|
|
184
|
-
|
|
185
|
-
if (index !== -1) {
|
|
186
|
-
this.#fields.splice(index, 1);
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
this.#entries.delete(entity);
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
update(timeDelta) {
|
|
193
|
-
for (const field of this.#entries.values()) {
|
|
194
|
-
const fow = field.component;
|
|
195
|
-
|
|
196
|
-
// advances the reveal fades and rebuilds the mask when one moved
|
|
197
|
-
fow.update(timeDelta);
|
|
198
|
-
|
|
199
|
-
this.#refresh(field, fow);
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
/**
|
|
204
|
-
* Copy the component's authored values across.
|
|
205
|
-
*
|
|
206
|
-
* @param {FogField} field
|
|
207
|
-
* @param {FogOfWar} fow
|
|
208
|
-
*/
|
|
209
|
-
#refresh(field, fow) {
|
|
210
|
-
// the sampler is reallocated by `resize`, so the field follows it rather than holding one
|
|
211
|
-
field.sampler = fow.sampler;
|
|
212
|
-
|
|
213
|
-
computeUvTransformFromFogOfWar(fow, (offset_x, offset_y, scale_x, scale_y) => {
|
|
214
|
-
field.uv_transform[0] = offset_x;
|
|
215
|
-
field.uv_transform[1] = offset_y;
|
|
216
|
-
field.uv_transform[2] = scale_x;
|
|
217
|
-
field.uv_transform[3] = scale_y;
|
|
218
|
-
});
|
|
219
|
-
|
|
220
|
-
const color = fow.color;
|
|
221
|
-
|
|
222
|
-
field.color[0] = color.x;
|
|
223
|
-
field.color[1] = color.y;
|
|
224
|
-
field.color[2] = color.z;
|
|
225
|
-
field.color[3] = color.w;
|
|
226
|
-
|
|
227
|
-
field.edge_extend = fow.edge_mode === FogOfWarEdgeMode.Extend ? 1 : 0;
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
/**
|
|
232
|
-
* **Last among the content extensions**, because the fog conceals and therefore belongs over
|
|
233
|
-
* everything it is meant to conceal — particles, trails, the path display and the selection
|
|
234
|
-
* highlight all draw before it and are all subject to it. Written down here rather than being a
|
|
235
|
-
* property of where a registration call happened to sit, which is how it came to be wrong.
|
|
236
|
-
*
|
|
237
|
-
* The declaration is stated from this side, over the content extensions, so that adding another one
|
|
238
|
-
* is a change to that extension and not to this list. {@link DebugDrawExtension} is the one thing
|
|
239
|
-
* that goes after the fog, and it says so itself.
|
|
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.
|
|
240
9
|
*/
|
|
241
|
-
export
|
|
242
|
-
name = "fog of war";
|
|
243
|
-
|
|
244
|
-
phase = FramePhase.AfterTransparency;
|
|
245
|
-
|
|
246
|
-
after = [ParticleExtension, PathDisplayExtension, TrailExtension, HighlightExtension];
|
|
247
|
-
|
|
248
|
-
/**
|
|
249
|
-
* @type {FogOfWarSystem3}
|
|
250
|
-
*/
|
|
251
|
-
#system;
|
|
252
|
-
|
|
253
|
-
/**
|
|
254
|
-
* @param {FogOfWarSystem3} system
|
|
255
|
-
*/
|
|
256
|
-
constructor(system) {
|
|
257
|
-
super();
|
|
258
|
-
|
|
259
|
-
this.#system = system;
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
record(frame) {
|
|
263
|
-
this.#system.record(frame);
|
|
264
|
-
}
|
|
265
|
-
}
|
|
10
|
+
export const FogOfWarSystem3 = FogOfWarSystem;
|