@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,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mirrors light entities into Shade's scene.
|
|
3
|
+
*
|
|
4
|
+
* The same shape as {@link MeshSystem} and for the same reason: the ECS says what exists and where,
|
|
5
|
+
* and this keeps the renderer's own objects in step. A Shade light **is** a `Node3D`, so `Scene.add`
|
|
6
|
+
* routes it into the light collection on its own and placement is the same transform copy meshes
|
|
7
|
+
* get — which for a directional light is also what aims it, since the engine's convention is that a
|
|
8
|
+
* light shines along its forward.
|
|
9
|
+
*
|
|
10
|
+
* **Ambient lights are deliberately not carried over.** Shade lights indirect from the environment
|
|
11
|
+
* by default, and that environment is the ambient term — a separate flat ambient light would be
|
|
12
|
+
* double-counting it. An entity asking for one is served better by the environment it already has.
|
|
13
|
+
*/
|
|
14
|
+
export class LightSystem extends System<any> {
|
|
15
|
+
/**
|
|
16
|
+
* @param {GraphicsEngine} graphics
|
|
17
|
+
* @param {Scene} scene
|
|
18
|
+
*/
|
|
19
|
+
constructor(graphics: GraphicsEngine, scene: Scene);
|
|
20
|
+
dependencies: (typeof Transform | typeof Light)[];
|
|
21
|
+
startup(entityManager: any): Promise<void>;
|
|
22
|
+
shutdown(entityManager: any): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* @param {Light} component
|
|
25
|
+
* @param {Transform} transform
|
|
26
|
+
* @param {number} entity
|
|
27
|
+
*/
|
|
28
|
+
link(component: Light, transform: Transform, entity: number): void;
|
|
29
|
+
/**
|
|
30
|
+
* @param {Light} component
|
|
31
|
+
* @param {Transform} transform
|
|
32
|
+
* @param {number} entity
|
|
33
|
+
*/
|
|
34
|
+
unlink(component: Light, transform: Transform, entity: number): void;
|
|
35
|
+
#private;
|
|
36
|
+
}
|
|
37
|
+
import { System } from "../ecs/System.js";
|
|
38
|
+
import { Transform } from "../ecs/transform/Transform.js";
|
|
39
|
+
import { Light } from "../graphics/ecs/light/Light.js";
|
|
40
|
+
//# sourceMappingURL=LightSystem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LightSystem.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/LightSystem.js"],"names":[],"mappings":"AAWA;;;;;;;;;;;;GAYG;AACH;IAgBI;;;OAGG;IACH,oDAUC;IADG,kDAAsC;IAG1C,2CAIC;IAED,4CAIC;IAED;;;;OAIG;IACH,gBAJW,KAAK,aACL,SAAS,UACT,MAAM,QAqEhB;IAED;;;;OAIG;IACH,kBAJW,KAAK,aACL,SAAS,UACT,MAAM,QAIhB;;CAoBJ;uBApKsB,kBAAkB;0BACf,+BAA+B;sBAEnC,gCAAgC"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { assert } from "../../core/assert.js";
|
|
2
|
+
import { SignalBinding } from "../../core/events/signal/SignalBinding.js";
|
|
3
|
+
import { DirectionalLight } from "../../shade/renderer/light/model/DirectionalLight.js";
|
|
4
|
+
import { PointLight } from "../../shade/renderer/light/model/PointLight.js";
|
|
5
|
+
import { SpotLight } from "../../shade/renderer/light/model/SpotLight.js";
|
|
6
|
+
import { System } from "../ecs/System.js";
|
|
7
|
+
import { Transform } from "../ecs/transform/Transform.js";
|
|
8
|
+
import { t64_copy_from_transform } from "../ecs/transform/t64_copy_from_transform.js";
|
|
9
|
+
import { Light } from "../graphics/ecs/light/Light.js";
|
|
10
|
+
import { LightType } from "../graphics/ecs/light/LightType.js";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Mirrors light entities into Shade's scene.
|
|
14
|
+
*
|
|
15
|
+
* The same shape as {@link MeshSystem} and for the same reason: the ECS says what exists and where,
|
|
16
|
+
* and this keeps the renderer's own objects in step. A Shade light **is** a `Node3D`, so `Scene.add`
|
|
17
|
+
* routes it into the light collection on its own and placement is the same transform copy meshes
|
|
18
|
+
* get — which for a directional light is also what aims it, since the engine's convention is that a
|
|
19
|
+
* light shines along its forward.
|
|
20
|
+
*
|
|
21
|
+
* **Ambient lights are deliberately not carried over.** Shade lights indirect from the environment
|
|
22
|
+
* by default, and that environment is the ambient term — a separate flat ambient light would be
|
|
23
|
+
* double-counting it. An entity asking for one is served better by the environment it already has.
|
|
24
|
+
*/
|
|
25
|
+
export class LightSystem extends System {
|
|
26
|
+
/**
|
|
27
|
+
* @type {GraphicsEngine}
|
|
28
|
+
*/
|
|
29
|
+
#graphics;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* @type {Scene}
|
|
33
|
+
*/
|
|
34
|
+
#scene;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* @type {Map<number, {light: Light, bindings: SignalBinding[]}>}
|
|
38
|
+
*/
|
|
39
|
+
#entries = new Map();
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* @param {GraphicsEngine} graphics
|
|
43
|
+
* @param {Scene} scene
|
|
44
|
+
*/
|
|
45
|
+
constructor(graphics, scene) {
|
|
46
|
+
super();
|
|
47
|
+
|
|
48
|
+
assert.defined(graphics, 'graphics');
|
|
49
|
+
assert.equal(scene.isScene, true, 'scene.isScene !== true');
|
|
50
|
+
|
|
51
|
+
this.#graphics = graphics;
|
|
52
|
+
this.#scene = scene;
|
|
53
|
+
|
|
54
|
+
this.dependencies = [Light, Transform];
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
async startup(entityManager) {
|
|
58
|
+
this.entityManager = entityManager;
|
|
59
|
+
|
|
60
|
+
this.#graphics.set_scene(this.#scene);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
async shutdown(entityManager) {
|
|
64
|
+
for (const entity of Array.from(this.#entries.keys())) {
|
|
65
|
+
this.#drop(entity);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* @param {Light} component
|
|
71
|
+
* @param {Transform} transform
|
|
72
|
+
* @param {number} entity
|
|
73
|
+
*/
|
|
74
|
+
link(component, transform, entity) {
|
|
75
|
+
const light = make_shade_light(component.type.getValue());
|
|
76
|
+
|
|
77
|
+
if (light === null) {
|
|
78
|
+
// ambient, or a type Shade has no object for — see the class note
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
apply_light_properties(light, component);
|
|
83
|
+
|
|
84
|
+
t64_copy_from_transform(light.transform_local, transform);
|
|
85
|
+
light.updateMatrices();
|
|
86
|
+
|
|
87
|
+
this.#scene.add(light);
|
|
88
|
+
|
|
89
|
+
const entry = { light, bindings: [] };
|
|
90
|
+
|
|
91
|
+
this.#entries.set(entity, entry);
|
|
92
|
+
|
|
93
|
+
/*
|
|
94
|
+
Adding and removing a light invalidates the collection on its own, but **changing one in
|
|
95
|
+
place does not** — the GPU light table is rebuilt only when the collection's version moves,
|
|
96
|
+
so a light that is recoloured, re-aimed or dimmed keeps rendering with the values it was
|
|
97
|
+
uploaded with. `needsUpdate` is what says otherwise, and both paths below go through it.
|
|
98
|
+
|
|
99
|
+
Worth knowing because it is invisible from the CPU side: the light object holds the new
|
|
100
|
+
value, everything reads back correctly, and only the picture is stale.
|
|
101
|
+
*/
|
|
102
|
+
const place = () => {
|
|
103
|
+
t64_copy_from_transform(light.transform_local, transform);
|
|
104
|
+
light.updateMatrices();
|
|
105
|
+
|
|
106
|
+
this.#scene.lights.needsUpdate = true;
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
const refresh = () => {
|
|
110
|
+
apply_light_properties(light, component);
|
|
111
|
+
|
|
112
|
+
this.#scene.lights.needsUpdate = true;
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
for (const component_value of [transform.position, transform.rotation, transform.scale]) {
|
|
116
|
+
const binding = new SignalBinding(component_value.onChanged, place);
|
|
117
|
+
|
|
118
|
+
binding.link();
|
|
119
|
+
|
|
120
|
+
entry.bindings.push(binding);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// A light's properties are gameplay-driven — a torch guttering, a spell charging, a
|
|
124
|
+
// searchlight narrowing — so they are followed rather than sampled once at spawn.
|
|
125
|
+
const observed_properties = [
|
|
126
|
+
component.color,
|
|
127
|
+
component.intensity,
|
|
128
|
+
component.castShadow,
|
|
129
|
+
component.angle,
|
|
130
|
+
component.penumbra,
|
|
131
|
+
component.distance
|
|
132
|
+
];
|
|
133
|
+
|
|
134
|
+
for (const observed of observed_properties) {
|
|
135
|
+
const binding = new SignalBinding(observed.onChanged, refresh);
|
|
136
|
+
|
|
137
|
+
binding.link();
|
|
138
|
+
|
|
139
|
+
entry.bindings.push(binding);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* @param {Light} component
|
|
145
|
+
* @param {Transform} transform
|
|
146
|
+
* @param {number} entity
|
|
147
|
+
*/
|
|
148
|
+
unlink(component, transform, entity) {
|
|
149
|
+
this.#drop(entity);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* @param {number} entity
|
|
154
|
+
*/
|
|
155
|
+
#drop(entity) {
|
|
156
|
+
const entry = this.#entries.get(entity);
|
|
157
|
+
|
|
158
|
+
if (entry === undefined) {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
for (let i = 0; i < entry.bindings.length; i++) {
|
|
163
|
+
entry.bindings[i].unlink();
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
this.#scene.remove(entry.light);
|
|
167
|
+
|
|
168
|
+
this.#entries.delete(entity);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* @param {LightType} type
|
|
174
|
+
* @returns {Light|null} null when Shade has no object for it
|
|
175
|
+
*/
|
|
176
|
+
function make_shade_light(type) {
|
|
177
|
+
switch (type) {
|
|
178
|
+
case LightType.DIRECTION:
|
|
179
|
+
return new DirectionalLight();
|
|
180
|
+
case LightType.SPOT:
|
|
181
|
+
return new SpotLight();
|
|
182
|
+
case LightType.POINT:
|
|
183
|
+
return new PointLight();
|
|
184
|
+
default:
|
|
185
|
+
// AMBIENT: the environment is the ambient term
|
|
186
|
+
return null;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Copy what the component says onto the light Shade will render.
|
|
192
|
+
*
|
|
193
|
+
* `maxShadowDistance` has no counterpart here on purpose: it caps the frustum the legacy renderer
|
|
194
|
+
* fits a cascade against, and Shade fits its own shadows.
|
|
195
|
+
*
|
|
196
|
+
* @param {Light} light Shade's
|
|
197
|
+
* @param {Light} component meep's
|
|
198
|
+
*/
|
|
199
|
+
function apply_light_properties(light, component) {
|
|
200
|
+
light.color.copy(component.color);
|
|
201
|
+
light.intensity = component.intensity.getValue();
|
|
202
|
+
light.casts_shadow = component.castShadow.getValue();
|
|
203
|
+
|
|
204
|
+
if (light.isSpotLight === true) {
|
|
205
|
+
light.angle = component.angle.getValue();
|
|
206
|
+
light.penumbra = component.penumbra.getValue();
|
|
207
|
+
light.distance = component.distance.getValue();
|
|
208
|
+
} else if (light.isPointLight === true) {
|
|
209
|
+
light.distance = component.distance.getValue();
|
|
210
|
+
}
|
|
211
|
+
}
|
|
@@ -1,40 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* @deprecated Renamed to {@link LightSystem}. 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
|
-
* routes it into the light collection on its own and placement is the same transform copy meshes
|
|
7
|
-
* get — which for a directional light is also what aims it, since the engine's convention is that a
|
|
8
|
-
* light shines along its forward.
|
|
9
|
-
*
|
|
10
|
-
* **Ambient lights are deliberately not carried over.** Shade lights indirect from the environment
|
|
11
|
-
* by default, and that environment is the ambient term — a separate flat ambient light would be
|
|
12
|
-
* double-counting it. An entity asking for one is served better by the environment it already has.
|
|
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.
|
|
13
7
|
*/
|
|
14
|
-
export
|
|
15
|
-
|
|
16
|
-
* @param {GraphicsEngine3} graphics
|
|
17
|
-
* @param {Scene} scene
|
|
18
|
-
*/
|
|
19
|
-
constructor(graphics: GraphicsEngine3, scene: Scene);
|
|
20
|
-
dependencies: (typeof Transform | typeof Light)[];
|
|
21
|
-
startup(entityManager: any): Promise<void>;
|
|
22
|
-
shutdown(entityManager: any): Promise<void>;
|
|
23
|
-
/**
|
|
24
|
-
* @param {Light} component
|
|
25
|
-
* @param {Transform} transform
|
|
26
|
-
* @param {number} entity
|
|
27
|
-
*/
|
|
28
|
-
link(component: Light, transform: Transform, entity: number): void;
|
|
29
|
-
/**
|
|
30
|
-
* @param {Light} component
|
|
31
|
-
* @param {Transform} transform
|
|
32
|
-
* @param {number} entity
|
|
33
|
-
*/
|
|
34
|
-
unlink(component: Light, transform: Transform, entity: number): void;
|
|
35
|
-
#private;
|
|
36
|
-
}
|
|
37
|
-
import { System } from "../ecs/System.js";
|
|
38
|
-
import { Transform } from "../ecs/transform/Transform.js";
|
|
39
|
-
import { Light } from "../graphics/ecs/light/Light.js";
|
|
8
|
+
export const LightSystem3: typeof LightSystem;
|
|
9
|
+
import { LightSystem } from "./LightSystem.js";
|
|
40
10
|
//# sourceMappingURL=LightSystem3.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LightSystem3.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/LightSystem3.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LightSystem3.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/LightSystem3.js"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,8CAAwC;4BATZ,kBAAkB"}
|
|
@@ -1,211 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { SignalBinding } from "../../core/events/signal/SignalBinding.js";
|
|
3
|
-
import { DirectionalLight } from "../../shade/renderer/light/model/DirectionalLight.js";
|
|
4
|
-
import { PointLight } from "../../shade/renderer/light/model/PointLight.js";
|
|
5
|
-
import { SpotLight } from "../../shade/renderer/light/model/SpotLight.js";
|
|
6
|
-
import { System } from "../ecs/System.js";
|
|
7
|
-
import { Transform } from "../ecs/transform/Transform.js";
|
|
8
|
-
import { t64_copy_from_transform } from "../ecs/transform/t64_copy_from_transform.js";
|
|
9
|
-
import { Light } from "../graphics/ecs/light/Light.js";
|
|
10
|
-
import { LightType } from "../graphics/ecs/light/LightType.js";
|
|
1
|
+
import { LightSystem } from "./LightSystem.js";
|
|
11
2
|
|
|
12
3
|
/**
|
|
13
|
-
*
|
|
4
|
+
* @deprecated Renamed to {@link LightSystem}. 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.
|
|
14
6
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* routes it into the light collection on its own and placement is the same transform copy meshes
|
|
18
|
-
* get — which for a directional light is also what aims it, since the engine's convention is that a
|
|
19
|
-
* light shines along its forward.
|
|
20
|
-
*
|
|
21
|
-
* **Ambient lights are deliberately not carried over.** Shade lights indirect from the environment
|
|
22
|
-
* by default, and that environment is the ambient term — a separate flat ambient light would be
|
|
23
|
-
* double-counting it. An entity asking for one is served better by the environment it already has.
|
|
24
|
-
*/
|
|
25
|
-
export class LightSystem3 extends System {
|
|
26
|
-
/**
|
|
27
|
-
* @type {GraphicsEngine3}
|
|
28
|
-
*/
|
|
29
|
-
#graphics;
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* @type {Scene}
|
|
33
|
-
*/
|
|
34
|
-
#scene;
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* @type {Map<number, {light: Light, bindings: SignalBinding[]}>}
|
|
38
|
-
*/
|
|
39
|
-
#entries = new Map();
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* @param {GraphicsEngine3} graphics
|
|
43
|
-
* @param {Scene} scene
|
|
44
|
-
*/
|
|
45
|
-
constructor(graphics, scene) {
|
|
46
|
-
super();
|
|
47
|
-
|
|
48
|
-
assert.defined(graphics, 'graphics');
|
|
49
|
-
assert.equal(scene.isScene, true, 'scene.isScene !== true');
|
|
50
|
-
|
|
51
|
-
this.#graphics = graphics;
|
|
52
|
-
this.#scene = scene;
|
|
53
|
-
|
|
54
|
-
this.dependencies = [Light, Transform];
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
async startup(entityManager) {
|
|
58
|
-
this.entityManager = entityManager;
|
|
59
|
-
|
|
60
|
-
this.#graphics.set_scene(this.#scene);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
async shutdown(entityManager) {
|
|
64
|
-
for (const entity of Array.from(this.#entries.keys())) {
|
|
65
|
-
this.#drop(entity);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* @param {Light} component
|
|
71
|
-
* @param {Transform} transform
|
|
72
|
-
* @param {number} entity
|
|
73
|
-
*/
|
|
74
|
-
link(component, transform, entity) {
|
|
75
|
-
const light = make_shade_light(component.type.getValue());
|
|
76
|
-
|
|
77
|
-
if (light === null) {
|
|
78
|
-
// ambient, or a type Shade has no object for — see the class note
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
apply_light_properties(light, component);
|
|
83
|
-
|
|
84
|
-
t64_copy_from_transform(light.transform_local, transform);
|
|
85
|
-
light.updateMatrices();
|
|
86
|
-
|
|
87
|
-
this.#scene.add(light);
|
|
88
|
-
|
|
89
|
-
const entry = { light, bindings: [] };
|
|
90
|
-
|
|
91
|
-
this.#entries.set(entity, entry);
|
|
92
|
-
|
|
93
|
-
/*
|
|
94
|
-
Adding and removing a light invalidates the collection on its own, but **changing one in
|
|
95
|
-
place does not** — the GPU light table is rebuilt only when the collection's version moves,
|
|
96
|
-
so a light that is recoloured, re-aimed or dimmed keeps rendering with the values it was
|
|
97
|
-
uploaded with. `needsUpdate` is what says otherwise, and both paths below go through it.
|
|
98
|
-
|
|
99
|
-
Worth knowing because it is invisible from the CPU side: the light object holds the new
|
|
100
|
-
value, everything reads back correctly, and only the picture is stale.
|
|
101
|
-
*/
|
|
102
|
-
const place = () => {
|
|
103
|
-
t64_copy_from_transform(light.transform_local, transform);
|
|
104
|
-
light.updateMatrices();
|
|
105
|
-
|
|
106
|
-
this.#scene.lights.needsUpdate = true;
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
const refresh = () => {
|
|
110
|
-
apply_light_properties(light, component);
|
|
111
|
-
|
|
112
|
-
this.#scene.lights.needsUpdate = true;
|
|
113
|
-
};
|
|
114
|
-
|
|
115
|
-
for (const component_value of [transform.position, transform.rotation, transform.scale]) {
|
|
116
|
-
const binding = new SignalBinding(component_value.onChanged, place);
|
|
117
|
-
|
|
118
|
-
binding.link();
|
|
119
|
-
|
|
120
|
-
entry.bindings.push(binding);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
// A light's properties are gameplay-driven — a torch guttering, a spell charging, a
|
|
124
|
-
// searchlight narrowing — so they are followed rather than sampled once at spawn.
|
|
125
|
-
const observed_properties = [
|
|
126
|
-
component.color,
|
|
127
|
-
component.intensity,
|
|
128
|
-
component.castShadow,
|
|
129
|
-
component.angle,
|
|
130
|
-
component.penumbra,
|
|
131
|
-
component.distance
|
|
132
|
-
];
|
|
133
|
-
|
|
134
|
-
for (const observed of observed_properties) {
|
|
135
|
-
const binding = new SignalBinding(observed.onChanged, refresh);
|
|
136
|
-
|
|
137
|
-
binding.link();
|
|
138
|
-
|
|
139
|
-
entry.bindings.push(binding);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* @param {Light} component
|
|
145
|
-
* @param {Transform} transform
|
|
146
|
-
* @param {number} entity
|
|
147
|
-
*/
|
|
148
|
-
unlink(component, transform, entity) {
|
|
149
|
-
this.#drop(entity);
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* @param {number} entity
|
|
154
|
-
*/
|
|
155
|
-
#drop(entity) {
|
|
156
|
-
const entry = this.#entries.get(entity);
|
|
157
|
-
|
|
158
|
-
if (entry === undefined) {
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
for (let i = 0; i < entry.bindings.length; i++) {
|
|
163
|
-
entry.bindings[i].unlink();
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
this.#scene.remove(entry.light);
|
|
167
|
-
|
|
168
|
-
this.#entries.delete(entity);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
/**
|
|
173
|
-
* @param {LightType} type
|
|
174
|
-
* @returns {Light|null} null when Shade has no object for it
|
|
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.
|
|
175
9
|
*/
|
|
176
|
-
|
|
177
|
-
switch (type) {
|
|
178
|
-
case LightType.DIRECTION:
|
|
179
|
-
return new DirectionalLight();
|
|
180
|
-
case LightType.SPOT:
|
|
181
|
-
return new SpotLight();
|
|
182
|
-
case LightType.POINT:
|
|
183
|
-
return new PointLight();
|
|
184
|
-
default:
|
|
185
|
-
// AMBIENT: the environment is the ambient term
|
|
186
|
-
return null;
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
/**
|
|
191
|
-
* Copy what the component says onto the light Shade will render.
|
|
192
|
-
*
|
|
193
|
-
* `maxShadowDistance` has no counterpart here on purpose: it caps the frustum the legacy renderer
|
|
194
|
-
* fits a cascade against, and Shade fits its own shadows.
|
|
195
|
-
*
|
|
196
|
-
* @param {Light} light Shade's
|
|
197
|
-
* @param {Light} component meep's
|
|
198
|
-
*/
|
|
199
|
-
function apply_light_properties(light, component) {
|
|
200
|
-
light.color.copy(component.color);
|
|
201
|
-
light.intensity = component.intensity.getValue();
|
|
202
|
-
light.casts_shadow = component.castShadow.getValue();
|
|
203
|
-
|
|
204
|
-
if (light.isSpotLight === true) {
|
|
205
|
-
light.angle = component.angle.getValue();
|
|
206
|
-
light.penumbra = component.penumbra.getValue();
|
|
207
|
-
light.distance = component.distance.getValue();
|
|
208
|
-
} else if (light.isPointLight === true) {
|
|
209
|
-
light.distance = component.distance.getValue();
|
|
210
|
-
}
|
|
211
|
-
}
|
|
10
|
+
export const LightSystem3 = LightSystem;
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Puts entities into Shade's scene and keeps them where the ECS says they are.
|
|
3
|
+
*
|
|
4
|
+
* **It owns the scene and tells the facade to draw it**, rather than the facade handing a graph out
|
|
5
|
+
* for anyone to write into — that coupling is what §2.1 retires along with `GraphicsEngine.scene`.
|
|
6
|
+
*
|
|
7
|
+
* Placement is a `Transform` copied into `Node3D.transform_local`, through
|
|
8
|
+
* {@link t64_copy_from_transform} because the node's transform is a `Transform64` since S2 and the
|
|
9
|
+
* two types stay deliberately distinct. `transform_global` is **derived** — `updateMatrices`
|
|
10
|
+
* recomputes it from the local transform and the parent chain — so writing it directly would be
|
|
11
|
+
* undone by the next refresh, and the entity is placed through the local one.
|
|
12
|
+
*
|
|
13
|
+
* What makes this affordable is S1: the scene database takes row-level updates, so moving one
|
|
14
|
+
* entity writes one row. Nothing here rebuilds anything.
|
|
15
|
+
*
|
|
16
|
+
* **It also hands each instance to the GPU's animation manager** ({@link update}), because it is
|
|
17
|
+
* what builds instances and therefore the only thing that knows when one exists. Driving those
|
|
18
|
+
* clips is not its business — that is the animation systems' — but a clip nothing has registered
|
|
19
|
+
* cannot be driven by anyone.
|
|
20
|
+
*/
|
|
21
|
+
export class MeshSystem extends System<any> {
|
|
22
|
+
/**
|
|
23
|
+
* @param {GraphicsEngine} graphics
|
|
24
|
+
* @param {Scene} scene
|
|
25
|
+
* @param {function(string): Promise<SceneBundle>} load
|
|
26
|
+
*/
|
|
27
|
+
constructor(graphics: GraphicsEngine, scene: Scene, load: (arg0: string) => Promise<SceneBundle>);
|
|
28
|
+
dependencies: (typeof Transform | typeof SGMesh)[];
|
|
29
|
+
/**
|
|
30
|
+
* @returns {Scene}
|
|
31
|
+
*/
|
|
32
|
+
get scene(): Scene;
|
|
33
|
+
/**
|
|
34
|
+
* Visit every node of an entity's model that carries geometry.
|
|
35
|
+
*
|
|
36
|
+
* The nodes are what the scene database keys on, so anything that has to say something about a
|
|
37
|
+
* particular entity's meshes — which rows they occupy, which of them the visibility buffer will
|
|
38
|
+
* name — starts here. A grouping node is skipped, because it has no geometry and therefore no
|
|
39
|
+
* row of its own.
|
|
40
|
+
*
|
|
41
|
+
* @param {number} entity
|
|
42
|
+
* @param {function(SGMesh): void} visitor
|
|
43
|
+
* @returns {boolean} `false` when the entity has nothing in the scene — never seen, or still
|
|
44
|
+
* loading, and neither is an error
|
|
45
|
+
*/
|
|
46
|
+
traverse_meshes(entity: number, visitor: (arg0: SGMesh) => void): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* The private copy of the model an entity is showing — its clips among other things, which is
|
|
49
|
+
* where their names and their durations come from.
|
|
50
|
+
*
|
|
51
|
+
* Handed out rather than copied because an animation driver has to know *which* instance it is
|
|
52
|
+
* bound to: a model swap builds a new one, and a driver still holding the old one would be
|
|
53
|
+
* driving nodes that left the scene. The object's identity is the only signal that says so.
|
|
54
|
+
*
|
|
55
|
+
* @param {number} entity
|
|
56
|
+
* @returns {SceneBundleInstance|null} `null` for an entity this system has never seen, or one
|
|
57
|
+
* whose model has not finished loading
|
|
58
|
+
*/
|
|
59
|
+
instance_of(entity: number): SceneBundleInstance | null;
|
|
60
|
+
/**
|
|
61
|
+
* What the GPU's animation manager gave back for that instance — the skin and clip ids, in the
|
|
62
|
+
* instance's own order.
|
|
63
|
+
*
|
|
64
|
+
* Same reasoning as {@link instance_of} and a stronger version of it: these ids belong to one
|
|
65
|
+
* renderer, and a restart voids every one of them. The object is replaced when that happens, so
|
|
66
|
+
* a driver that compares it against what it bound against notices in the same frame.
|
|
67
|
+
*
|
|
68
|
+
* @param {number} entity
|
|
69
|
+
* @returns {InstanceAnimationRegistration|null} `null` while there is nothing registered — no
|
|
70
|
+
* model yet, no device yet, or a renderer restart that has not been drained
|
|
71
|
+
*/
|
|
72
|
+
animation_of(entity: number): InstanceAnimationRegistration | null;
|
|
73
|
+
/**
|
|
74
|
+
* Where an entity's model is, in world space.
|
|
75
|
+
*
|
|
76
|
+
* This is what makes picking possible without a second copy of the geometry: Shade already keeps
|
|
77
|
+
* a world bounding box per mesh, refreshed as part of the `updateMatrices` that places it, so the
|
|
78
|
+
* answer is a walk over what the entity has in the scene and nothing is recomputed.
|
|
79
|
+
*
|
|
80
|
+
* @param {ArrayLike<number>|number[]|Float32Array} target aabb3, order `x0,y0,z0,x1,y1,z1`
|
|
81
|
+
* @param {number} entity
|
|
82
|
+
* @returns {boolean} `false` when the entity has nothing in the scene — it may be an entity this
|
|
83
|
+
* system has never seen, or one whose model is still loading, and neither is an error
|
|
84
|
+
*/
|
|
85
|
+
compute_world_bounds(target: ArrayLike<number> | number[] | Float32Array, entity: number): boolean;
|
|
86
|
+
startup(entityManager: any): Promise<void>;
|
|
87
|
+
shutdown(entityManager: any): Promise<void>;
|
|
88
|
+
/**
|
|
89
|
+
* @param {SGMesh} model
|
|
90
|
+
* @param {Transform} transform
|
|
91
|
+
* @param {number} entity
|
|
92
|
+
*/
|
|
93
|
+
link(model: SGMesh, transform: Transform, entity: number): void;
|
|
94
|
+
/**
|
|
95
|
+
* @param {SGMesh} model
|
|
96
|
+
* @param {Transform} transform
|
|
97
|
+
* @param {number} entity
|
|
98
|
+
*/
|
|
99
|
+
unlink(model: SGMesh, transform: Transform, entity: number): void;
|
|
100
|
+
#private;
|
|
101
|
+
}
|
|
102
|
+
import { System } from "../ecs/System.js";
|
|
103
|
+
import { Transform } from "../ecs/transform/Transform.js";
|
|
104
|
+
import { SGMesh } from "../graphics/ecs/mesh-v2/aggregate/SGMesh.js";
|
|
105
|
+
import { Scene } from "../../shade/renderer/scene/Scene.js";
|
|
106
|
+
//# sourceMappingURL=MeshSystem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MeshSystem.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/MeshSystem.js"],"names":[],"mappings":"AAiBA;;;;;;;;;;;;;;;;;;;GAmBG;AACH;IAmFI;;;;OAIG;IACH,6CAHW,KAAK,eACI,MAAM,KAAG,oBAAoB,EAchD;IADG,mDAAuC;IAG3C;;OAEG;IACH,mBAEC;IAED;;;;;;;;;;;;OAYG;IACH,wBALW,MAAM,kBACG,MAAM,KAAG,IAAI,GACpB,OAAO,CAqBnB;IAoCD;;;;;;;;;;;OAWG;IACH,oBAJW,MAAM,GACJ,sBAAoB,IAAI,CAWpC;IAED;;;;;;;;;;;OAWG;IACH,qBAJW,MAAM,GACJ,gCAA8B,IAAI,CAW9C;IAED;;;;;;;;;;;OAWG;IACH,6BALW,UAAU,MAAM,CAAC,GAAC,MAAM,EAAE,GAAC,YAAY,UACvC,MAAM,GACJ,OAAO,CAuCnB;IAED,2CAIC;IAED,4CASC;IA6GD;;;;OAIG;IACH,YAJW,MAAM,aACN,SAAS,UACT,MAAM,QA2BhB;IAED;;;;OAIG;IACH,cAJW,MAAM,aACN,SAAS,UACT,MAAM,QAIhB;;CAgLJ;uBA7nBsB,kBAAkB;0BACf,+BAA+B;uBAIlC,6CAA6C;sBAX9C,qCAAqC"}
|