@woosh/meep-engine 3.11.3 → 3.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -18
- package/editor/SelectionVisualizer.js +127 -127
- package/editor/entity_world_bounds.js +27 -27
- package/editor/particles/rebuildParticleEmitter.js +31 -31
- package/editor/process/SymbolicDisplayProcess.js +1 -1
- package/editor/process/symbolic/CameraSymbolicDisplay.js +146 -146
- package/editor/process/symbolic/LightSymbolicDisplay.js +172 -172
- package/editor/prototypeEditorShell.js +156 -156
- package/editor/selection/editor_pick.js +130 -130
- package/editor/selection/screen_rect_frustum.js +119 -119
- package/editor/tools/v2/TransformControls.js +971 -971
- package/package.json +1 -1
- package/src/engine/Engine.d.ts +3 -3
- package/src/engine/Engine.d.ts.map +1 -1
- package/src/engine/Engine.js +726 -726
- package/src/engine/EngineHarness.d.ts +1 -1
- package/src/engine/EngineHarness.js +590 -590
- package/src/engine/ecs/HIERARCHY_REVIEW.md +717 -717
- package/src/engine/ecs/terrain/ecs/BuildLightTexture.d.ts +1 -1
- package/src/engine/ecs/terrain/ecs/BuildLightTexture.js +27 -27
- package/src/engine/ecs/terrain/ecs/Terrain.d.ts +1 -5
- package/src/engine/ecs/terrain/ecs/Terrain.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/Terrain.js +790 -790
- package/src/engine/ecs/terrain/util/loadVisibleTerrainTiles.js +129 -129
- package/src/engine/graphics/ecs/camera/camera_find_active.d.ts +1 -1
- package/src/engine/graphics/ecs/camera/camera_find_active.js +28 -28
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +1 -1
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +428 -428
- package/src/engine/graphics/ecs/water/Water.d.ts +1 -1
- package/src/engine/graphics/ecs/water/Water.js +104 -104
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +1 -1
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +1 -1
- package/src/engine/graphics3/AnimationGraphSystem.d.ts +65 -0
- package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -0
- package/src/engine/graphics3/AnimationGraphSystem.js +329 -0
- package/src/engine/graphics3/AnimationGraphSystem3.d.ts +6 -61
- package/src/engine/graphics3/AnimationGraphSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationGraphSystem3.js +6 -325
- package/src/engine/graphics3/AnimationSystem.d.ts +76 -0
- package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -0
- package/src/engine/graphics3/AnimationSystem.js +352 -0
- package/src/engine/graphics3/AnimationSystem3.d.ts +6 -72
- package/src/engine/graphics3/AnimationSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationSystem3.js +6 -348
- package/src/engine/graphics3/CameraSystem.d.ts +49 -0
- package/src/engine/graphics3/CameraSystem.d.ts.map +1 -0
- package/src/engine/graphics3/CameraSystem.js +170 -0
- package/src/engine/graphics3/CameraSystem3.d.ts +6 -45
- package/src/engine/graphics3/CameraSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/CameraSystem3.js +6 -166
- package/src/engine/graphics3/DebugDrawSystem.d.ts +72 -0
- package/src/engine/graphics3/DebugDrawSystem.d.ts.map +1 -0
- package/src/engine/graphics3/DebugDrawSystem.js +205 -0
- package/src/engine/graphics3/DebugDrawSystem3.d.ts +6 -68
- package/src/engine/graphics3/DebugDrawSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/DebugDrawSystem3.js +6 -201
- package/src/engine/graphics3/DecalSystem.d.ts +81 -0
- package/src/engine/graphics3/DecalSystem.d.ts.map +1 -0
- package/src/engine/graphics3/DecalSystem.js +441 -0
- package/src/engine/graphics3/DecalSystem3.d.ts +6 -77
- package/src/engine/graphics3/DecalSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/DecalSystem3.js +6 -437
- package/src/engine/graphics3/FogOfWarSystem.d.ts +74 -0
- package/src/engine/graphics3/FogOfWarSystem.d.ts.map +1 -0
- package/src/engine/graphics3/FogOfWarSystem.js +265 -0
- package/src/engine/graphics3/FogOfWarSystem3.d.ts +6 -70
- package/src/engine/graphics3/FogOfWarSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/FogOfWarSystem3.js +6 -261
- package/src/engine/graphics3/GraphicsEngine.d.ts +340 -0
- package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -0
- package/src/engine/graphics3/GraphicsEngine.js +790 -0
- package/src/engine/graphics3/GraphicsEngine3.d.ts +6 -336
- package/src/engine/graphics3/GraphicsEngine3.d.ts.map +1 -1
- package/src/engine/graphics3/GraphicsEngine3.js +6 -786
- package/src/engine/graphics3/HighlightSystem.d.ts +82 -0
- package/src/engine/graphics3/HighlightSystem.d.ts.map +1 -0
- package/src/engine/graphics3/HighlightSystem.js +241 -0
- package/src/engine/graphics3/HighlightSystem3.d.ts +6 -78
- package/src/engine/graphics3/HighlightSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/HighlightSystem3.js +6 -237
- package/src/engine/graphics3/LightSystem.d.ts +40 -0
- package/src/engine/graphics3/LightSystem.d.ts.map +1 -0
- package/src/engine/graphics3/LightSystem.js +211 -0
- package/src/engine/graphics3/LightSystem3.d.ts +6 -36
- package/src/engine/graphics3/LightSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/LightSystem3.js +6 -207
- package/src/engine/graphics3/MeshSystem.d.ts +106 -0
- package/src/engine/graphics3/MeshSystem.d.ts.map +1 -0
- package/src/engine/graphics3/MeshSystem.js +647 -0
- package/src/engine/graphics3/MeshSystem3.d.ts +6 -102
- package/src/engine/graphics3/MeshSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/MeshSystem3.js +6 -642
- package/src/engine/graphics3/ParticipatingMedia.d.ts +2 -2
- package/src/engine/graphics3/ParticipatingMedia.js +203 -203
- package/src/engine/graphics3/ParticipatingMediaSystem.d.ts +87 -0
- package/src/engine/graphics3/ParticipatingMediaSystem.d.ts.map +1 -0
- package/src/engine/graphics3/ParticipatingMediaSystem.js +184 -0
- package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts +6 -83
- package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/ParticipatingMediaSystem3.js +6 -180
- package/src/engine/graphics3/ParticleEmitterSystem.d.ts +76 -0
- package/src/engine/graphics3/ParticleEmitterSystem.d.ts.map +1 -0
- package/src/engine/graphics3/ParticleEmitterSystem.js +289 -0
- package/src/engine/graphics3/ParticleEmitterSystem3.d.ts +6 -72
- package/src/engine/graphics3/ParticleEmitterSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/ParticleEmitterSystem3.js +6 -285
- package/src/engine/graphics3/PathDisplaySystem.d.ts +70 -0
- package/src/engine/graphics3/PathDisplaySystem.d.ts.map +1 -0
- package/src/engine/graphics3/PathDisplaySystem.js +309 -0
- package/src/engine/graphics3/PathDisplaySystem3.d.ts +6 -66
- package/src/engine/graphics3/PathDisplaySystem3.d.ts.map +1 -1
- package/src/engine/graphics3/PathDisplaySystem3.js +6 -305
- package/src/engine/graphics3/Pickable.d.ts +1 -1
- package/src/engine/graphics3/Pickable.js +65 -65
- package/src/engine/graphics3/PickingQuery.d.ts +1 -1
- package/src/engine/graphics3/PickingQuery.js +48 -48
- package/src/engine/graphics3/PickingSystem.d.ts +67 -0
- package/src/engine/graphics3/PickingSystem.d.ts.map +1 -0
- package/src/engine/graphics3/PickingSystem.js +273 -0
- package/src/engine/graphics3/PickingSystem3.d.ts +6 -63
- package/src/engine/graphics3/PickingSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/PickingSystem3.js +6 -269
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts +47 -0
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -0
- package/src/engine/graphics3/ShadedGeometrySystem.js +169 -0
- package/src/engine/graphics3/ShadedGeometrySystem3.d.ts +6 -43
- package/src/engine/graphics3/ShadedGeometrySystem3.d.ts.map +1 -1
- package/src/engine/graphics3/ShadedGeometrySystem3.js +6 -165
- package/src/engine/graphics3/TerrainSystem.d.ts +80 -0
- package/src/engine/graphics3/TerrainSystem.d.ts.map +1 -0
- package/src/engine/graphics3/TerrainSystem.js +566 -0
- package/src/engine/graphics3/TerrainSystem3.d.ts +6 -76
- package/src/engine/graphics3/TerrainSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/TerrainSystem3.js +6 -562
- package/src/engine/graphics3/TooltipComponentSystem.d.ts +65 -0
- package/src/engine/graphics3/TooltipComponentSystem.d.ts.map +1 -0
- package/src/engine/graphics3/TooltipComponentSystem.js +328 -0
- package/src/engine/graphics3/TooltipComponentSystem3.d.ts +6 -61
- package/src/engine/graphics3/TooltipComponentSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/TooltipComponentSystem3.js +6 -324
- package/src/engine/graphics3/Trail3DSystem.d.ts +73 -0
- package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -0
- package/src/engine/graphics3/Trail3DSystem.js +221 -0
- package/src/engine/graphics3/Trail3DSystem3.d.ts +6 -69
- package/src/engine/graphics3/Trail3DSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/Trail3DSystem3.js +6 -217
- package/src/engine/graphics3/VolumetricLightMap.d.ts +2 -2
- package/src/engine/graphics3/VolumetricLightMap.js +2 -2
- package/src/engine/graphics3/VolumetricLightMapSystem.d.ts +98 -0
- package/src/engine/graphics3/VolumetricLightMapSystem.d.ts.map +1 -0
- package/src/engine/graphics3/VolumetricLightMapSystem.js +261 -0
- package/src/engine/graphics3/VolumetricLightMapSystem3.d.ts +6 -94
- package/src/engine/graphics3/VolumetricLightMapSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/VolumetricLightMapSystem3.js +10 -261
- package/src/engine/graphics3/WaterSystem.d.ts +59 -0
- package/src/engine/graphics3/WaterSystem.d.ts.map +1 -0
- package/src/engine/graphics3/WaterSystem.js +293 -0
- package/src/engine/graphics3/WaterSystem3.d.ts +6 -55
- package/src/engine/graphics3/WaterSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/WaterSystem3.js +6 -289
- package/src/engine/graphics3/animation/AnimationGraphController.d.ts +1 -1
- package/src/engine/graphics3/animation/AnimationGraphController.js +518 -518
- package/src/engine/graphics3/animation/ClipListPlayer.d.ts +1 -1
- package/src/engine/graphics3/animation/ClipListPlayer.js +263 -263
- package/src/engine/graphics3/animation/ClipPlayback.d.ts +2 -2
- package/src/engine/graphics3/animation/ClipPlayback.js +84 -84
- package/src/engine/graphics3/decal/GPUDecalRenderer.js +3 -3
- package/src/engine/graphics3/decal/graph_build_decal_clusters.d.ts.map +1 -1
- package/src/engine/graphics3/decal/graph_build_decal_clusters.js +6 -8
- package/src/engine/graphics3/decal/shader_cluster_assign_decals.d.ts +0 -7
- package/src/engine/graphics3/decal/shader_cluster_assign_decals.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_cluster_assign_decals.js +1 -1
- package/src/engine/graphics3/decal/shader_cull_decals_frustum.d.ts +0 -4
- package/src/engine/graphics3/decal/shader_cull_decals_frustum.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_cull_decals_frustum.js +1 -1
- package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_decal_composite.js +4 -2
- package/src/engine/graphics3/highlight/GPUHighlightRenderer.d.ts.map +1 -1
- package/src/engine/graphics3/highlight/GPUHighlightRenderer.js +2 -3
- package/src/engine/graphics3/highlight/pack_highlight_table.d.ts +2 -2
- package/src/engine/graphics3/highlight/pack_highlight_table.d.ts.map +1 -1
- package/src/engine/graphics3/highlight/pack_highlight_table.js +74 -74
- package/src/engine/graphics3/highlight/shader_highlight_outline.js +150 -150
- package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts +1 -1
- package/src/engine/graphics3/pose/query_entity_node_world_pose.js +101 -101
- package/src/engine/graphics3/preview/make_model_thumbnail.d.ts +3 -3
- package/src/engine/graphics3/preview/make_model_thumbnail.d.ts.map +1 -1
- package/src/engine/graphics3/preview/make_model_thumbnail.js +48 -48
- package/src/engine/graphics3/shade_camera_projection_ray.d.ts +1 -1
- package/src/engine/graphics3/shade_camera_projection_ray.js +77 -77
- package/src/engine/graphics3/shade_node_to_entity_composition.d.ts +1 -1
- package/src/engine/graphics3/shade_node_to_entity_composition.js +84 -84
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/shade/RENDERER_CONTRACT.md +2 -1
- package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts +18 -0
- package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js +73 -0
- package/src/shade/device/PASS_ENCODER_PROPOSAL_2026_08_31.md +750 -0
- package/src/shade/device/ShadeGPUCommandContext.d.ts +10 -16
- package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
- package/src/shade/device/ShadeGPUCommandContext.js +801 -994
- package/src/shade/device/pass/ShadeGPUComputePassEncoder.d.ts +107 -0
- package/src/shade/device/pass/ShadeGPUComputePassEncoder.d.ts.map +1 -0
- package/src/shade/device/pass/ShadeGPUComputePassEncoder.js +222 -0
- package/src/shade/device/pass/ShadeGPURenderPassEncoder.d.ts +168 -0
- package/src/shade/device/pass/ShadeGPURenderPassEncoder.d.ts.map +1 -0
- package/src/shade/device/pass/ShadeGPURenderPassEncoder.js +317 -0
- package/src/shade/device/timing/GPUTimerArray.d.ts +4 -9
- package/src/shade/device/timing/GPUTimerArray.d.ts.map +1 -1
- package/src/shade/device/timing/GPUTimerArray.js +261 -289
- package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +20 -2
- package/src/shade/device/timing/ShadeGPUContextProfiler.d.ts +59 -0
- package/src/shade/device/timing/ShadeGPUContextProfiler.d.ts.map +1 -0
- package/src/shade/device/timing/ShadeGPUContextProfiler.js +182 -0
- package/src/shade/device/timing/profile/GPUProfileSession.d.ts +4 -4
- package/src/shade/device/timing/profile/GPUProfileSession.js +4 -4
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +3 -2
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +3 -2
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +135 -134
- package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +202 -202
- package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +249 -249
- package/src/shade/renderer/Renderer.d.ts +0 -6
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +0 -29
- package/src/shade/renderer/STATIC_GRAPHICS_ENGINE_ASSETS.js +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.js +1 -3
- package/src/shade/renderer/animation/pose/PosePlayback.d.ts +2 -1
- package/src/shade/renderer/animation/pose/PosePlayback.d.ts.map +1 -1
- package/src/shade/renderer/animation/pose/PosePlayback.js +2 -1
- package/src/shade/renderer/animation/shader_animation_apply.d.ts.map +1 -1
- package/src/shade/renderer/animation/shader_animation_apply.js +128 -129
- package/src/shade/renderer/animation/shader_animation_pose_resolve.d.ts.map +1 -1
- package/src/shade/renderer/animation/shader_animation_pose_resolve.js +176 -177
- package/src/shade/renderer/animation/shader_animation_tick.d.ts.map +1 -1
- package/src/shade/renderer/animation/shader_animation_tick.js +4 -2
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +8 -18
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.js +3 -2
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.js +4 -2
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.js +24 -10
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.js +3 -2
- package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.js +5 -2
- package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.js +104 -105
- package/src/shade/renderer/atmosphere/shader_multiscatter_lut.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/shader_multiscatter_lut.js +0 -1
- package/src/shade/renderer/atmosphere/shader_transmittance_lut.js +3 -3
- package/src/shade/renderer/buffer/graph_inspect_gpu_buffer.js +136 -136
- package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUDatabase.js +16 -22
- package/src/shade/renderer/buffer/table/gpu_table_element_upload_shader.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/gpu_table_element_upload_shader.js +7 -2
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +11 -5
- package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.d.ts.map +1 -1
- package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.js +43 -42
- package/src/shade/renderer/buffer/util/shader_buffer_intra_copy_regions.d.ts.map +1 -1
- package/src/shade/renderer/buffer/util/shader_buffer_intra_copy_regions.js +83 -84
- package/src/shade/renderer/deferred/shader_tonemap_HDR.d.ts.map +1 -1
- package/src/shade/renderer/deferred/shader_tonemap_HDR.js +4 -1
- package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts +2 -2
- package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts.map +1 -1
- package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +167 -167
- package/src/shade/renderer/dynamic/shader_dynamic_mesh.d.ts.map +1 -1
- package/src/shade/renderer/dynamic/shader_dynamic_mesh.js +177 -170
- package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +918 -918
- package/src/shade/renderer/fow/GPUFogOfWarRenderer.js +3 -3
- package/src/shade/renderer/fow/shader_fog_of_war.d.ts.map +1 -1
- package/src/shade/renderer/fow/shader_fog_of_war.js +3 -1
- package/src/shade/renderer/geometry/bvh/record_blas_refit.js +102 -102
- package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.js +5 -2
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +3 -11
- package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts +1 -1
- package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.js +6 -4
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +5 -10
- package/src/shade/renderer/geometry/sdf/shader_build_sdf.js +129 -129
- package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.js +5 -3
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.js +4 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_resolve_probes.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_resolve_probes.js +3 -1
- package/src/shade/renderer/global_illumination/clipmap/shader_update_clipmap_cascade.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/clipmap/shader_update_clipmap_cascade.js +114 -112
- package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +367 -367
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lpv_store_sh.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lpv_store_sh.js +4 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.js +9 -6
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.js +4 -1
- package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.js +6 -8
- package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.js +3 -1
- package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_update.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_update.js +3 -1
- package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +1115 -1115
- package/src/shade/renderer/gpu_primitive/bvh/PHASE1_HANDOVER.md +3 -3
- package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +10 -10
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +4 -2
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js +87 -83
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.js +4 -2
- package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.d.ts +2 -2
- package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.js +43 -8
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.js +4 -5
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js +88 -85
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js +194 -192
- package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
- package/src/shade/renderer/hiz/HierarchicalZBuffer.js +33 -69
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts.map +1 -1
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.js +6 -1
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts.map +1 -1
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.js +23 -7
- package/src/shade/renderer/light/cluster/cull/graph_cull_lights.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/cull/graph_cull_lights.js +191 -198
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts +0 -6
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.js +120 -120
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.d.ts +0 -4
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.js +112 -112
- package/src/shade/renderer/light/cluster/graph_assign_clsuters.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/graph_assign_clsuters.js +4 -7
- package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.d.ts +0 -6
- package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.js +1 -1
- package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/execute_filter_environment_map.js +1 -2
- package/src/shade/renderer/light/environment/shader_convolve_reflection_map.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/shader_convolve_reflection_map.js +6 -1
- package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.js +234 -219
- package/src/shade/renderer/lightmap/bake/raster/shader_lightmap_to_viz_buffer.js +222 -222
- package/src/shade/renderer/lightmap/bake/shader_lightmap_denoise_sh.js +191 -191
- package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_accummulate_tile.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_accummulate_tile.js +85 -82
- package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_tile_composit.js +81 -81
- package/src/shade/renderer/material/GPUMaterialContext.js +380 -380
- package/src/shade/renderer/material/standard/fragment_gbuffer_vt.js +169 -169
- package/src/shade/renderer/object_property/shader_object_property_process.d.ts.map +1 -1
- package/src/shade/renderer/object_property/shader_object_property_process.js +83 -84
- package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.d.ts.map +1 -1
- package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.js +57 -58
- package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles.js +5 -3
- package/src/shade/renderer/particles/prototypeParticleSystem.js +5 -7
- package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_emit.js +27 -13
- package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +4 -4
- package/src/shade/renderer/particles/shaders/shader_particle_render.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_render.js +190 -183
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +18 -7
- package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
- package/src/shade/renderer/particles/sort/shader_particle_sort.js +47 -21
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +7 -10
- package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.js +4 -1
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +184 -184
- package/src/shade/renderer/postprocess/bloom/shader_bloom_mix.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/bloom/shader_bloom_mix.js +3 -1
- package/src/shade/renderer/postprocess/cas/shader_ffx_rcas.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/cas/shader_ffx_rcas.js +4 -2
- package/src/shade/renderer/postprocess/denoise/fragment_shader_denoise_ao.js +147 -147
- package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.js +19 -17
- package/src/shade/renderer/postprocess/dof/gather/graph_postprocess_dof2.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/gather/graph_postprocess_dof2.js +1 -2
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_far.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_far.js +4 -1
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_near.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_near.js +4 -1
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_recombine.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_recombine.js +4 -1
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_setup.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_setup.js +4 -1
- package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.js +5 -8
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_composite.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_composite.js +4 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_prefilter.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_prefilter.js +4 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch.js +4 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.js +4 -2
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.js +4 -2
- package/src/shade/renderer/postprocess/dof/shader_dof_autofocus.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/shader_dof_autofocus.js +4 -1
- package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.js +8 -11
- package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.js +5 -1
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +11 -8
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.js +7 -8
- package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.js +3 -1
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_concat.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_concat.js +3 -2
- package/src/shade/renderer/postprocess/nss/shader_nss_conv_layer.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_conv_layer.js +225 -226
- package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.js +49 -50
- package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.js +291 -292
- package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.js +230 -231
- package/src/shade/renderer/postprocess/ssr/depth_max_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/depth_max_shader.js +70 -68
- package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts +16 -2
- package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.js +12 -12
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.js +3 -1
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.js +4 -1
- package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.js +103 -101
- package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.js +4 -2
- package/src/shade/renderer/postprocess/ssr/ssr_trace_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/ssr_trace_shader.js +3 -1
- package/src/shade/renderer/postprocess/taa/shader_taa.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/shader_taa.js +4 -1
- package/src/shade/renderer/postprocess/upscale-dither/fragment_shader_upscale_dither.js +5 -5
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +339 -341
- package/src/shade/renderer/rasterize/bucket/shader_count_meshlets_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_count_meshlets_by_material.js +68 -69
- package/src/shade/renderer/rasterize/bucket/shader_make_meshlet_indirect_draw_commands_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_make_meshlet_indirect_draw_commands_by_material.js +59 -60
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js +0 -1
- package/src/shade/renderer/rasterize/bucket/shader_sort_meshlets_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_sort_meshlets_by_material.js +64 -65
- package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.js +168 -169
- package/src/shade/renderer/rasterize/compute/graph_mesh_sphere_cull.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/compute/graph_mesh_sphere_cull.js +160 -161
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +6 -2
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +4 -2
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_classify_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_classify_bucket.js +139 -140
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_count_by_rasterization_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_count_by_rasterization_bucket.js +91 -92
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_rasterization_bucket_sort.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_rasterization_bucket_sort.js +88 -89
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.js +90 -91
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +5 -2
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.js +89 -90
- package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.js +169 -170
- package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.js +89 -90
- package/src/shade/renderer/rasterize/expand/mesh/shader_meshes_to_meshlet_counts.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/mesh/shader_meshes_to_meshlet_counts.js +61 -62
- package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.js +153 -154
- package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.js +144 -144
- package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_pass_descriptor.js +88 -88
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +722 -722
- package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js +217 -217
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +179 -179
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.js +178 -178
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +194 -194
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_opaque_pass_descriptor.js +76 -76
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +1 -9
- package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +1 -6
- package/src/shade/renderer/restir/di/graph_restir_di.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/graph_restir_di.js +2 -3
- package/src/shade/renderer/restir/di/graph_restir_di_denoise.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/graph_restir_di_denoise.js +1 -2
- package/src/shade/renderer/restir/di/shader_restir_di_denoise.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_denoise.js +5 -3
- package/src/shade/renderer/restir/di/shader_restir_di_resample.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_resample.js +4 -3
- package/src/shade/renderer/restir/di/shader_restir_di_resolve.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_resolve.js +4 -3
- package/src/shade/renderer/restir/di/shader_restir_di_spatial.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_spatial.js +116 -117
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +3 -7
- package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy_naive.js +123 -123
- package/src/shade/renderer/scene/hierarchy/shader_nodes_record_input_positions.d.ts.map +1 -1
- package/src/shade/renderer/scene/hierarchy/shader_nodes_record_input_positions.js +64 -65
- package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy.d.ts.map +1 -1
- package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy.js +372 -373
- package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy_naive.d.ts.map +1 -1
- package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy_naive.js +111 -112
- package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.d.ts.map +1 -1
- package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.js +147 -145
- package/src/shade/renderer/shader/ComputeShader.d.ts +26 -5
- package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
- package/src/shade/renderer/shader/ComputeShader.js +347 -296
- package/src/shade/renderer/shader/ImageShader.js +217 -217
- package/src/shade/renderer/shader/ShaderDescriptor.d.ts +5 -0
- package/src/shade/renderer/shader/ShaderDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/ShaderDescriptor.js +20 -0
- package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts +2 -2
- package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/pass/RenderPassDescriptor.js +189 -189
- package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +3 -1
- package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.d.ts +47 -0
- package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.d.ts.map +1 -0
- package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.js +448 -0
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +14 -18
- package/src/shade/renderer/shadow/map/csm/graph_csm_setup_cascades.js +3 -3
- package/src/shade/renderer/shadow/map/shader/shader_shadowmap_remap_cube_to_octahedral.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/shader/shader_shadowmap_remap_cube_to_octahedral.js +5 -1
- package/src/shade/renderer/shadow/ray/shader_shadow_upscale.d.ts.map +1 -1
- package/src/shade/renderer/shadow/ray/shader_shadow_upscale.js +3 -1
- package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.js +73 -73
- package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.d.ts.map +1 -1
- package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.js +151 -148
- package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.d.ts.map +1 -1
- package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +6 -4
- package/src/shade/renderer/shadow/ray/staged/trace/shader_trace_rays.d.ts.map +1 -1
- package/src/shade/renderer/shadow/ray/staged/trace/shader_trace_rays.js +18 -4
- package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +11 -12
- package/src/shade/renderer/shadow/sdf/cascade/shader_build_scene_sdf_f32.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/cascade/shader_build_scene_sdf_f32.js +6 -2
- package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_debug_viz.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_debug_viz.js +129 -127
- package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.js +5 -3
- package/src/shade/renderer/texture/virtual/VirtualTextureManager.d.ts.map +1 -1
- package/src/shade/renderer/texture/virtual/VirtualTextureManager.js +2 -5
- package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.d.ts.map +1 -1
- package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.js +3 -2
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +14 -19
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts +3 -2
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +3 -2
- package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts +0 -2
- package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.js +17 -6
- package/src/shade/renderer/water/shader_water.js +246 -246
- package/src/shade/vitest.setup.mjs +1 -1
- package/src/shade/wgsl/emulator/ComputeShaderEmulator.js +291 -291
- package/src/shade/wgsl/validate_wgsl_source.d.ts.map +1 -1
- package/src/shade/wgsl/validate_wgsl_source.js +8 -3
- package/src/view/minimap/Minimap.d.ts +2 -2
- package/src/view/minimap/Minimap.d.ts.map +1 -1
- package/src/view/minimap/Minimap.js +225 -225
- package/src/view/minimap/dom/MinimapCameraView.d.ts +3 -3
- package/src/view/minimap/dom/MinimapCameraView.d.ts.map +1 -1
- package/src/view/minimap/dom/MinimapCameraView.js +206 -206
- package/src/shade/device/timing/profile/make_profiling_pass_encoder.d.ts +0 -21
- package/src/shade/device/timing/profile/make_profiling_pass_encoder.d.ts.map +0 -1
- package/src/shade/device/timing/profile/make_profiling_pass_encoder.js +0 -114
- package/src/shade/device/timing/profile/parse_workgroup_size.d.ts +0 -20
- package/src/shade/device/timing/profile/parse_workgroup_size.d.ts.map +0 -1
- package/src/shade/device/timing/profile/parse_workgroup_size.js +0 -43
- package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.d.ts +0 -3
- package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.d.ts.map +0 -1
- package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.js +0 -20
|
@@ -0,0 +1,566 @@
|
|
|
1
|
+
import { assert } from "../../core/assert.js";
|
|
2
|
+
import {
|
|
3
|
+
bvh_query_user_data_intersects_frustum
|
|
4
|
+
} from "../../core/bvh2/bvh3/query/bvh_query_user_data_intersects_frustum.js";
|
|
5
|
+
import { SignalBinding } from "../../core/events/signal/SignalBinding.js";
|
|
6
|
+
import { noop } from "../../core/function/noop.js";
|
|
7
|
+
import { m4_invert } from "../../core/geom/3d/mat4/m4_invert.js";
|
|
8
|
+
import { GameAssetType } from "../asset/GameAssetType.js";
|
|
9
|
+
import { ImageRGBADataLoader } from "../asset/loaders/image/ImageRGBADataLoader.js";
|
|
10
|
+
import { System } from "../ecs/System.js";
|
|
11
|
+
import Terrain from "../ecs/terrain/ecs/Terrain.js";
|
|
12
|
+
import { TerrainFlags } from "../ecs/terrain/ecs/TerrainFlags.js";
|
|
13
|
+
import { tile_geometry_to_meshlets } from "../ecs/terrain/tiles/tile_geometry_to_meshlets.js";
|
|
14
|
+
import { Transform } from "../ecs/transform/Transform.js";
|
|
15
|
+
import { t64_copy_from_transform } from "../ecs/transform/t64_copy_from_transform.js";
|
|
16
|
+
import { t64_equals_transform } from "../ecs/transform/t64_equals_transform.js";
|
|
17
|
+
import { sampler2d_ensure_uint8_RGBA } from "../graphics/texture/sampler/sampler2d_ensure_uint8_RGBA.js";
|
|
18
|
+
import { Sampler2D } from "../graphics/texture/sampler/Sampler2D.js";
|
|
19
|
+
import { WHITE_PIXEL_DATA_URL } from "../graphics/WHITE_PIXEL_DATA_URL.js";
|
|
20
|
+
import { FramePhase } from "../../shade/renderer/extension/FramePhase.js";
|
|
21
|
+
import { RenderExtension } from "../../shade/renderer/extension/RenderExtension.js";
|
|
22
|
+
import { StandardShadeMaterial } from "../../shade/renderer/material/StandardShadeMaterial.js";
|
|
23
|
+
import { Mesh } from "../../shade/renderer/scene/Mesh.js";
|
|
24
|
+
import { GPUTerrainSplatRenderer } from "./terrain/GPUTerrainSplatRenderer.js";
|
|
25
|
+
import { pack_terrain_row_table } from "./terrain/pack_terrain_row_table.js";
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Tile indices a frustum query answers with. Module-static because the query runs every frame and
|
|
29
|
+
* every terrain shares one shape of answer.
|
|
30
|
+
*
|
|
31
|
+
* @type {number[]}
|
|
32
|
+
*/
|
|
33
|
+
const SCRATCH_TILE_INDICES = [];
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* What the overlay's sprite is until an authored one loads — the same white pixel the component's
|
|
37
|
+
* own default URL names, held as pixels so nothing has to decode a data URL to draw a grid.
|
|
38
|
+
*
|
|
39
|
+
* @type {Sampler2D}
|
|
40
|
+
*/
|
|
41
|
+
const WHITE_SPRITE = Sampler2D.uint8(4, 1, 1);
|
|
42
|
+
WHITE_SPRITE.data.fill(255);
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Draws terrain under Shade: each built tile becomes one meshlet-encoded mesh in the scene, and a
|
|
46
|
+
* pass after the opaque geometry textures the lot.
|
|
47
|
+
*
|
|
48
|
+
* **The tile is the unit, not the terrain.** Tiles are built on demand as the camera sees them and
|
|
49
|
+
* destroyed as it leaves, which is the streaming the tile manager already does; this system follows
|
|
50
|
+
* that with scene membership rather than deciding anything about it.
|
|
51
|
+
*
|
|
52
|
+
* **Tile vertices are already in terrain space** — the height-field builder positions each tile
|
|
53
|
+
* within the whole grid rather than at its own origin — so every tile mesh carries the terrain
|
|
54
|
+
* entity's transform and nothing else. That is also why the tile's own raycast inverts the same
|
|
55
|
+
* matrix.
|
|
56
|
+
*
|
|
57
|
+
* **Texturing is a full-screen pass, not a material** (U3b, D40): the tiles draw with one flat
|
|
58
|
+
* material, and at {@link FramePhase.AfterGBuffer} the splat mix and grid overlay are painted over
|
|
59
|
+
* every pixel the visibility buffer attributes to a tile — the architecture decals built (D23),
|
|
60
|
+
* keyed on mesh rows rather than froxels. Registered before `DecalSystem` in the profile, which
|
|
61
|
+
* is what puts scorch marks on top of the textured ground rather than under it.
|
|
62
|
+
*
|
|
63
|
+
* **It does not call `Terrain.link`.** That method binds a three `ShaderMaterial` through
|
|
64
|
+
* `graphics.getMaterialManager()`, which `GraphicsEngine` does not have and will not; the parts of
|
|
65
|
+
* linking that are not about three — starting the tile build service — are done here directly.
|
|
66
|
+
*/
|
|
67
|
+
export class TerrainSystem extends System {
|
|
68
|
+
dependencies = [Terrain];
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* @type {GraphicsEngine}
|
|
72
|
+
*/
|
|
73
|
+
#graphics;
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* @type {RenderExtension|null}
|
|
77
|
+
*/
|
|
78
|
+
#extension = null;
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* The scene this system writes into, received rather than created so terrain, meshes and lights
|
|
82
|
+
* all land in the one the facade draws.
|
|
83
|
+
*
|
|
84
|
+
* @type {Scene}
|
|
85
|
+
*/
|
|
86
|
+
#scene;
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* @type {AssetManager}
|
|
90
|
+
*/
|
|
91
|
+
#assetManager;
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* What each terrain entity has in the scene.
|
|
95
|
+
*
|
|
96
|
+
* @type {Map<number, {terrain: Terrain, material: StandardShadeMaterial, meshes: Map<TerrainTile, Mesh>, bindings: SignalBinding[]}>}
|
|
97
|
+
*/
|
|
98
|
+
#entries = new Map();
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* @param {GraphicsEngine} graphics
|
|
102
|
+
* @param {Scene} scene
|
|
103
|
+
* @param {AssetManager} assetManager
|
|
104
|
+
*/
|
|
105
|
+
constructor(graphics, scene, assetManager) {
|
|
106
|
+
super();
|
|
107
|
+
|
|
108
|
+
assert.defined(graphics, 'graphics');
|
|
109
|
+
assert.defined(scene, 'scene');
|
|
110
|
+
assert.defined(assetManager, 'assetManager');
|
|
111
|
+
|
|
112
|
+
this.#graphics = graphics;
|
|
113
|
+
this.#scene = scene;
|
|
114
|
+
this.#assetManager = assetManager;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
async startup(entityManager) {
|
|
118
|
+
this.entityManager = entityManager;
|
|
119
|
+
|
|
120
|
+
this.#extension = this.#graphics.add_extension(new TerrainExtension(this));
|
|
121
|
+
|
|
122
|
+
// the terrain's own layer loading decodes images; the decoder is renderer-neutral and the
|
|
123
|
+
// legacy system registers the same one
|
|
124
|
+
await this.#assetManager.tryRegisterLoader(GameAssetType.Image, new ImageRGBADataLoader());
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
async shutdown(entityManager) {
|
|
128
|
+
if (this.#extension !== null) {
|
|
129
|
+
this.#graphics.remove_extension(this.#extension);
|
|
130
|
+
|
|
131
|
+
this.#extension = null;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
for (const entity of Array.from(this.#entries.keys())) {
|
|
135
|
+
this.#drop(entity);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* @param {Terrain} terrain
|
|
141
|
+
* @param {number} entity
|
|
142
|
+
*/
|
|
143
|
+
link(terrain, entity) {
|
|
144
|
+
if (!terrain.getFlag(TerrainFlags.Built)) {
|
|
145
|
+
terrain.build(this.#assetManager);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
const entry = {
|
|
149
|
+
terrain,
|
|
150
|
+
/*
|
|
151
|
+
One material for the whole terrain, and a flat one on purpose: the splat pass rewrites
|
|
152
|
+
the albedo after the G-buffer is drawn (U3b), so what the material contributes is the
|
|
153
|
+
other three channels — roughness 1 and metalness 0, which is exactly what the legacy
|
|
154
|
+
splat shader forced.
|
|
155
|
+
*/
|
|
156
|
+
material: new StandardShadeMaterial(),
|
|
157
|
+
meshes: new Map(),
|
|
158
|
+
bindings: [],
|
|
159
|
+
renderer: new GPUTerrainSplatRenderer(),
|
|
160
|
+
/**
|
|
161
|
+
* The pass's per-frame tables and settings, reused between frames.
|
|
162
|
+
*/
|
|
163
|
+
rows: new Uint32Array(0),
|
|
164
|
+
scales: new Float32Array(0),
|
|
165
|
+
world_to_terrain: new Float32Array(16),
|
|
166
|
+
inv_world_size: new Float32Array(2),
|
|
167
|
+
grid_transform: new Float32Array(4),
|
|
168
|
+
grid_resolution: new Float32Array(2),
|
|
169
|
+
sprite: WHITE_SPRITE
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
entry.material.name = 'terrain';
|
|
173
|
+
entry.material.roughness_factor = 1;
|
|
174
|
+
entry.material.metallic_factor = 0;
|
|
175
|
+
|
|
176
|
+
this.#entries.set(entity, entry);
|
|
177
|
+
|
|
178
|
+
const manager = terrain.tiles;
|
|
179
|
+
|
|
180
|
+
const built = new SignalBinding(manager.on.tileBuilt, tile => this.#add_tile(entity, tile));
|
|
181
|
+
const destroyed = new SignalBinding(manager.on.tileDestroyed, tile => this.#remove_tile(entity, tile));
|
|
182
|
+
const sprite = new SignalBinding(terrain.overlay.tileImage.onChanged, () => this.#load_sprite(entity, terrain));
|
|
183
|
+
|
|
184
|
+
built.link();
|
|
185
|
+
destroyed.link();
|
|
186
|
+
sprite.link();
|
|
187
|
+
|
|
188
|
+
entry.bindings.push(built, destroyed, sprite);
|
|
189
|
+
|
|
190
|
+
this.#load_sprite(entity, terrain);
|
|
191
|
+
|
|
192
|
+
terrain.startBuildService();
|
|
193
|
+
|
|
194
|
+
// tiles that were already standing before this system saw the entity
|
|
195
|
+
for (const tile of manager.tiles) {
|
|
196
|
+
if (tile.isBuilt) {
|
|
197
|
+
this.#add_tile(entity, tile);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* @param {Terrain} terrain
|
|
204
|
+
* @param {number} entity
|
|
205
|
+
*/
|
|
206
|
+
unlink(terrain, entity) {
|
|
207
|
+
terrain.stopBuildService();
|
|
208
|
+
|
|
209
|
+
this.#drop(entity);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
update(timeDelta) {
|
|
213
|
+
const em = this.entityManager;
|
|
214
|
+
|
|
215
|
+
if (em === null) {
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
const ecd = em.dataset;
|
|
220
|
+
|
|
221
|
+
if (ecd === null) {
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
ecd.traverseComponents(Terrain, (terrain, entity) => {
|
|
226
|
+
const transform = ecd.getComponent(entity, Transform);
|
|
227
|
+
|
|
228
|
+
if (transform !== undefined) {
|
|
229
|
+
// the raycast inverts this to bring a ray into terrain space, so it has to track
|
|
230
|
+
// the entity whether or not anything is drawn
|
|
231
|
+
terrain.transform = transform.matrix;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
this.#place(entity, transform);
|
|
235
|
+
|
|
236
|
+
this.#build_visible_tiles(terrain);
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Ask for the tiles the camera can see. The manager owns what that costs — a tile already built
|
|
242
|
+
* or already building is not requested again.
|
|
243
|
+
*
|
|
244
|
+
* @param {Terrain} terrain
|
|
245
|
+
*/
|
|
246
|
+
#build_visible_tiles(terrain) {
|
|
247
|
+
const camera = this.#graphics.camera.camera;
|
|
248
|
+
|
|
249
|
+
const manager = terrain.tiles;
|
|
250
|
+
|
|
251
|
+
const hit_count = bvh_query_user_data_intersects_frustum(
|
|
252
|
+
SCRATCH_TILE_INDICES, 0,
|
|
253
|
+
manager.bvh, camera.frustum
|
|
254
|
+
);
|
|
255
|
+
|
|
256
|
+
for (let i = 0; i < hit_count; i++) {
|
|
257
|
+
const tile = manager.tiles[SCRATCH_TILE_INDICES[i]];
|
|
258
|
+
|
|
259
|
+
if (tile.isBuilt || tile.isBuildInProgress) {
|
|
260
|
+
continue;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
const position = tile.gridPosition;
|
|
264
|
+
|
|
265
|
+
manager.build(position.x, position.y, noop, noop);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* @param {number} entity
|
|
271
|
+
* @param {TerrainTile} tile
|
|
272
|
+
*/
|
|
273
|
+
#add_tile(entity, tile) {
|
|
274
|
+
const entry = this.#entries.get(entity);
|
|
275
|
+
|
|
276
|
+
if (entry === undefined) {
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
if (entry.meshes.has(tile)) {
|
|
281
|
+
// a rebuilt tile replaces what it had rather than accumulating
|
|
282
|
+
this.#remove_tile(entity, tile);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
const geometry = tile_geometry_to_meshlets({
|
|
286
|
+
vertices: tile.vertices,
|
|
287
|
+
normals: tile.normals,
|
|
288
|
+
uvs: tile.uvs,
|
|
289
|
+
indices: tile.indices
|
|
290
|
+
}, `terrain tile ${tile.gridPosition.x},${tile.gridPosition.y}`);
|
|
291
|
+
|
|
292
|
+
const mesh = Mesh.from(geometry, entry.material);
|
|
293
|
+
|
|
294
|
+
entry.meshes.set(tile, mesh);
|
|
295
|
+
|
|
296
|
+
this.#scene.add(mesh);
|
|
297
|
+
|
|
298
|
+
const ecd = this.entityManager === null ? null : this.entityManager.dataset;
|
|
299
|
+
|
|
300
|
+
if (ecd !== null) {
|
|
301
|
+
this.#place(entity, ecd.getComponent(entity, Transform));
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* @param {number} entity
|
|
307
|
+
* @param {TerrainTile} tile
|
|
308
|
+
*/
|
|
309
|
+
#remove_tile(entity, tile) {
|
|
310
|
+
const entry = this.#entries.get(entity);
|
|
311
|
+
|
|
312
|
+
if (entry === undefined) {
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
const mesh = entry.meshes.get(tile);
|
|
317
|
+
|
|
318
|
+
if (mesh === undefined) {
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
this.#scene.remove(mesh);
|
|
323
|
+
|
|
324
|
+
entry.meshes.delete(tile);
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* @param {number} entity
|
|
329
|
+
* @param {Transform|undefined} transform
|
|
330
|
+
*/
|
|
331
|
+
#place(entity, transform) {
|
|
332
|
+
if (transform === undefined) {
|
|
333
|
+
return;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
const entry = this.#entries.get(entity);
|
|
337
|
+
|
|
338
|
+
if (entry === undefined) {
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
for (const mesh of entry.meshes.values()) {
|
|
343
|
+
/*
|
|
344
|
+
A tile already standing where it belongs is left alone, and it is the common case:
|
|
345
|
+
{@link update} places on a poll rather than on the entity's transform signals, because a
|
|
346
|
+
terrain may be linked before it has a `Transform` at all. `updateMatrices` bumps a
|
|
347
|
+
version whether or not anything moved, and downstream that version is what makes the
|
|
348
|
+
scene database upload a row and the top-level acceleration structure rebuild itself —
|
|
349
|
+
a whole-tree treelet optimisation and a fresh GPU buffer, once a frame, for a ground
|
|
350
|
+
that has not moved since the level loaded (E19).
|
|
351
|
+
*/
|
|
352
|
+
if (t64_equals_transform(mesh.transform_local, transform)) {
|
|
353
|
+
continue;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
t64_copy_from_transform(mesh.transform_local, transform);
|
|
357
|
+
|
|
358
|
+
mesh.updateMatrices();
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* @param {number} entity
|
|
364
|
+
*/
|
|
365
|
+
#drop(entity) {
|
|
366
|
+
const entry = this.#entries.get(entity);
|
|
367
|
+
|
|
368
|
+
if (entry === undefined) {
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
for (let i = 0; i < entry.bindings.length; i++) {
|
|
373
|
+
entry.bindings[i].unlink();
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
for (const mesh of entry.meshes.values()) {
|
|
377
|
+
this.#scene.remove(mesh);
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
entry.renderer.destroy();
|
|
381
|
+
|
|
382
|
+
this.#entries.delete(entity);
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
/**
|
|
386
|
+
* Fetch the overlay's cell sprite. The default is the white pixel the component names by data
|
|
387
|
+
* URL, held here as pixels — a grid with no authored sprite is the cell colours themselves,
|
|
388
|
+
* and nothing decodes a data URL to get there.
|
|
389
|
+
*
|
|
390
|
+
* @param {number} entity
|
|
391
|
+
* @param {Terrain} terrain
|
|
392
|
+
*/
|
|
393
|
+
#load_sprite(entity, terrain) {
|
|
394
|
+
const entry = this.#entries.get(entity);
|
|
395
|
+
|
|
396
|
+
if (entry === undefined) {
|
|
397
|
+
return;
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
const url = terrain.overlay.baseTileImage;
|
|
401
|
+
|
|
402
|
+
if (url === WHITE_PIXEL_DATA_URL) {
|
|
403
|
+
entry.sprite = WHITE_SPRITE;
|
|
404
|
+
|
|
405
|
+
return;
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
this.#assetManager.promise(url, GameAssetType.Image).then(asset => {
|
|
409
|
+
if (this.#entries.get(entity) !== entry || terrain.overlay.baseTileImage !== url) {
|
|
410
|
+
// unlinked, or re-authored while the image was in flight
|
|
411
|
+
return;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
entry.sprite = sampler2d_ensure_uint8_RGBA(asset.create());
|
|
415
|
+
});
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
/**
|
|
419
|
+
* Everything the splat pass draws one terrain from, assembled against the scene that will be
|
|
420
|
+
* asked for the rows. What the pass consumes and what a gate inspects are deliberately the
|
|
421
|
+
* same object — the same reason `DecalSystem` exposes its packed records.
|
|
422
|
+
*
|
|
423
|
+
* @param {number} entity
|
|
424
|
+
* @param {GPUSceneContext} scene
|
|
425
|
+
* @returns {object|null} `null` when this terrain has nothing on screen to texture — no tiles
|
|
426
|
+
* built, or none of them in the scene database yet
|
|
427
|
+
*/
|
|
428
|
+
splat_frame(entity, scene) {
|
|
429
|
+
const entry = this.#entries.get(entity);
|
|
430
|
+
|
|
431
|
+
if (entry === undefined || entry.meshes.size === 0) {
|
|
432
|
+
return null;
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
const packed = pack_terrain_row_table({ meshes: entry.meshes, scene, table: entry.rows });
|
|
436
|
+
|
|
437
|
+
entry.rows = packed.table;
|
|
438
|
+
|
|
439
|
+
if (packed.size === 0) {
|
|
440
|
+
return null;
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
const terrain = entry.terrain;
|
|
444
|
+
|
|
445
|
+
const invertible = m4_invert(entry.world_to_terrain, terrain.transform);
|
|
446
|
+
|
|
447
|
+
assert.equal(invertible, true, 'terrain transform is not invertible');
|
|
448
|
+
|
|
449
|
+
const world_x = terrain.size.x * terrain.gridScale;
|
|
450
|
+
const world_y = terrain.size.y * terrain.gridScale;
|
|
451
|
+
|
|
452
|
+
entry.inv_world_size[0] = 1 / world_x;
|
|
453
|
+
entry.inv_world_size[1] = 1 / world_y;
|
|
454
|
+
|
|
455
|
+
const grid_transform = terrain.gridTransform;
|
|
456
|
+
|
|
457
|
+
entry.grid_transform[0] = grid_transform.scale_x;
|
|
458
|
+
entry.grid_transform[1] = grid_transform.scale_y;
|
|
459
|
+
entry.grid_transform[2] = grid_transform.offset_x;
|
|
460
|
+
entry.grid_transform[3] = grid_transform.offset_y;
|
|
461
|
+
|
|
462
|
+
entry.grid_resolution[0] = terrain.size.x;
|
|
463
|
+
entry.grid_resolution[1] = terrain.size.y;
|
|
464
|
+
|
|
465
|
+
const layers = terrain.layers;
|
|
466
|
+
const layer_count = layers.count();
|
|
467
|
+
|
|
468
|
+
if (entry.scales.length < layer_count * 2) {
|
|
469
|
+
entry.scales = new Float32Array(layer_count * 2);
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
// the legacy `updateLayerScales`, computed at the source instead of read off a texture
|
|
473
|
+
for (let i = 0; i < layer_count; i++) {
|
|
474
|
+
const layer = layers.get(i);
|
|
475
|
+
|
|
476
|
+
entry.scales[i * 2] = world_x / layer.size.x;
|
|
477
|
+
entry.scales[i * 2 + 1] = world_y / layer.size.y;
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
const splat = terrain.splat;
|
|
481
|
+
const layer_image = layers.sampler;
|
|
482
|
+
|
|
483
|
+
if (layer_count > 0) {
|
|
484
|
+
// `Terrain.build` and `addLayer` keep all three in step; a mismatch is an upstream bug
|
|
485
|
+
// that would draw the wrong layer, silently
|
|
486
|
+
assert.equal(splat.depth, layer_count, 'splat weight layers disagree with the layer list');
|
|
487
|
+
assert.equal(layer_image.depth, layer_count, 'layer texture depth disagrees with the layer list');
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
return {
|
|
491
|
+
rows: entry.rows,
|
|
492
|
+
row_count: packed.size,
|
|
493
|
+
scales: entry.scales,
|
|
494
|
+
layer_count,
|
|
495
|
+
world_to_terrain: entry.world_to_terrain,
|
|
496
|
+
inv_world_size: entry.inv_world_size,
|
|
497
|
+
grid_transform: entry.grid_transform,
|
|
498
|
+
grid_resolution: entry.grid_resolution,
|
|
499
|
+
weights: {
|
|
500
|
+
data: splat.weightData,
|
|
501
|
+
width: splat.size.x,
|
|
502
|
+
height: splat.size.y,
|
|
503
|
+
depth: splat.depth,
|
|
504
|
+
version: splat.weights.version
|
|
505
|
+
},
|
|
506
|
+
layer_image: {
|
|
507
|
+
data: layer_image.data,
|
|
508
|
+
width: layer_image.width,
|
|
509
|
+
height: layer_image.height,
|
|
510
|
+
depth: layer_image.depth,
|
|
511
|
+
version: layer_image.version
|
|
512
|
+
},
|
|
513
|
+
overlay: terrain.overlay.sampler,
|
|
514
|
+
sprite: entry.sprite
|
|
515
|
+
};
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
/**
|
|
519
|
+
* @param {FrameContext} frame
|
|
520
|
+
*/
|
|
521
|
+
record(frame) {
|
|
522
|
+
for (const entity of this.#entries.keys()) {
|
|
523
|
+
const splat = this.splat_frame(entity, frame.view.scene);
|
|
524
|
+
|
|
525
|
+
if (splat === null) {
|
|
526
|
+
// nothing of this terrain on screen; the frame keeps the albedo it already had
|
|
527
|
+
continue;
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
splat.frame = frame;
|
|
531
|
+
|
|
532
|
+
this.#entries.get(entity).renderer.graph_draw(splat);
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
/**
|
|
538
|
+
* The splat and the grid overlay are a full-screen pass writing a replacement albedo, so this is
|
|
539
|
+
* {@link FramePhase.AfterGBuffer} — the one phase where the G-buffer may be published into.
|
|
540
|
+
*
|
|
541
|
+
* Everything that paints on top of the ground declares itself after this rather than being
|
|
542
|
+
* registered after it; {@link DecalExtension} is the one that does.
|
|
543
|
+
*/
|
|
544
|
+
export class TerrainExtension extends RenderExtension {
|
|
545
|
+
name = "terrain";
|
|
546
|
+
|
|
547
|
+
phase = FramePhase.AfterGBuffer;
|
|
548
|
+
|
|
549
|
+
/**
|
|
550
|
+
* @type {TerrainSystem}
|
|
551
|
+
*/
|
|
552
|
+
#system;
|
|
553
|
+
|
|
554
|
+
/**
|
|
555
|
+
* @param {TerrainSystem} system
|
|
556
|
+
*/
|
|
557
|
+
constructor(system) {
|
|
558
|
+
super();
|
|
559
|
+
|
|
560
|
+
this.#system = system;
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
record(frame) {
|
|
564
|
+
this.#system.record(frame);
|
|
565
|
+
}
|
|
566
|
+
}
|
|
@@ -1,80 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* @deprecated Renamed to {@link TerrainSystem}. 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.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* that with scene membership rather than deciding anything about it.
|
|
8
|
-
*
|
|
9
|
-
* **Tile vertices are already in terrain space** — the height-field builder positions each tile
|
|
10
|
-
* within the whole grid rather than at its own origin — so every tile mesh carries the terrain
|
|
11
|
-
* entity's transform and nothing else. That is also why the tile's own raycast inverts the same
|
|
12
|
-
* matrix.
|
|
13
|
-
*
|
|
14
|
-
* **Texturing is a full-screen pass, not a material** (U3b, D40): the tiles draw with one flat
|
|
15
|
-
* material, and at {@link FramePhase.AfterGBuffer} the splat mix and grid overlay are painted over
|
|
16
|
-
* every pixel the visibility buffer attributes to a tile — the architecture decals built (D23),
|
|
17
|
-
* keyed on mesh rows rather than froxels. Registered before `DecalSystem3` in the profile, which
|
|
18
|
-
* is what puts scorch marks on top of the textured ground rather than under it.
|
|
19
|
-
*
|
|
20
|
-
* **It does not call `Terrain.link`.** That method binds a three `ShaderMaterial` through
|
|
21
|
-
* `graphics.getMaterialManager()`, which `GraphicsEngine3` does not have and will not; the parts of
|
|
22
|
-
* linking that are not about three — starting the tile build service — are done here directly.
|
|
23
|
-
*/
|
|
24
|
-
export class TerrainSystem3 extends System<any> {
|
|
25
|
-
/**
|
|
26
|
-
* @param {GraphicsEngine3} graphics
|
|
27
|
-
* @param {Scene} scene
|
|
28
|
-
* @param {AssetManager} assetManager
|
|
29
|
-
*/
|
|
30
|
-
constructor(graphics: GraphicsEngine3, scene: Scene, assetManager: AssetManager);
|
|
31
|
-
dependencies: (typeof Terrain)[];
|
|
32
|
-
startup(entityManager: any): Promise<void>;
|
|
33
|
-
shutdown(entityManager: any): Promise<void>;
|
|
34
|
-
/**
|
|
35
|
-
* @param {Terrain} terrain
|
|
36
|
-
* @param {number} entity
|
|
37
|
-
*/
|
|
38
|
-
link(terrain: Terrain, entity: number): void;
|
|
39
|
-
/**
|
|
40
|
-
* @param {Terrain} terrain
|
|
41
|
-
* @param {number} entity
|
|
42
|
-
*/
|
|
43
|
-
unlink(terrain: Terrain, entity: number): void;
|
|
44
|
-
update(timeDelta: any): void;
|
|
45
|
-
/**
|
|
46
|
-
* Everything the splat pass draws one terrain from, assembled against the scene that will be
|
|
47
|
-
* asked for the rows. What the pass consumes and what a gate inspects are deliberately the
|
|
48
|
-
* same object — the same reason `DecalSystem3` exposes its packed records.
|
|
49
|
-
*
|
|
50
|
-
* @param {number} entity
|
|
51
|
-
* @param {GPUSceneContext} scene
|
|
52
|
-
* @returns {object|null} `null` when this terrain has nothing on screen to texture — no tiles
|
|
53
|
-
* built, or none of them in the scene database yet
|
|
54
|
-
*/
|
|
55
|
-
splat_frame(entity: number, scene: GPUSceneContext): object | null;
|
|
56
|
-
/**
|
|
57
|
-
* @param {FrameContext} frame
|
|
58
|
-
*/
|
|
59
|
-
record(frame: FrameContext): void;
|
|
60
|
-
#private;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* The splat and the grid overlay are a full-screen pass writing a replacement albedo, so this is
|
|
64
|
-
* {@link FramePhase.AfterGBuffer} — the one phase where the G-buffer may be published into.
|
|
65
|
-
*
|
|
66
|
-
* Everything that paints on top of the ground declares itself after this rather than being
|
|
67
|
-
* registered after it; {@link DecalExtension} is the one that does.
|
|
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.
|
|
68
7
|
*/
|
|
69
|
-
export
|
|
70
|
-
|
|
71
|
-
* @param {TerrainSystem3} system
|
|
72
|
-
*/
|
|
73
|
-
constructor(system: TerrainSystem3);
|
|
74
|
-
record(frame: any): void;
|
|
75
|
-
#private;
|
|
76
|
-
}
|
|
77
|
-
import { System } from "../ecs/System.js";
|
|
78
|
-
import Terrain from "../ecs/terrain/ecs/Terrain.js";
|
|
79
|
-
import { RenderExtension } from "../../shade/renderer/extension/RenderExtension.js";
|
|
8
|
+
export const TerrainSystem3: typeof TerrainSystem;
|
|
9
|
+
import { TerrainSystem } from "./TerrainSystem.js";
|
|
80
10
|
//# sourceMappingURL=TerrainSystem3.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TerrainSystem3.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/TerrainSystem3.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TerrainSystem3.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/TerrainSystem3.js"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,kDAA4C;8BATd,oBAAoB"}
|