@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
|
@@ -1,150 +1,150 @@
|
|
|
1
|
-
import { BlendState } from "../../../shade/descriptor/blend/BlendState.js";
|
|
2
|
-
import { CodeChunk } from "../../../shade/renderer/shader/compiler/CodeChunk.js";
|
|
3
|
-
import { ImageShader } from "../../../shade/renderer/shader/ImageShader.js";
|
|
4
|
-
import {
|
|
5
|
-
ShaderResourceSetDescriptor
|
|
6
|
-
} from "../../../shade/renderer/shader/resource/ShaderResourceSetDescriptor.js";
|
|
7
|
-
import { ShaderDescriptor } from "../../../shade/renderer/shader/ShaderDescriptor.js";
|
|
8
|
-
import { f32, u32, vec2u } from "../../../shade/renderer/shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
9
|
-
import { WebGPUArray } from "../../../shade/renderer/shader/type/WebGPUArray.js";
|
|
10
|
-
import { WebGPUStruct } from "../../../shade/renderer/shader/type/WebGPUStruct.js";
|
|
11
|
-
import { chunk_highlight_lookup } from "./chunk_highlight_lookup.js";
|
|
12
|
-
|
|
13
|
-
export const HIGHLIGHT_OUTLINE_SETTINGS = WebGPUStruct.from({
|
|
14
|
-
screen_resolution: vec2u,
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* How many rows the lookup table has, which is one past the highest mesh row that was
|
|
18
|
-
* highlighted when it was packed.
|
|
19
|
-
*/
|
|
20
|
-
table_size: u32,
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Outline width in pixels.
|
|
24
|
-
*/
|
|
25
|
-
thickness: f32,
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
const resources = new ShaderResourceSetDescriptor();
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
resources.createGroup()
|
|
34
|
-
.addTexture("viz_mesh", "uint");
|
|
35
|
-
|
|
36
|
-
resources.createGroup()
|
|
37
|
-
.addStorageBuffer("highlight_table", WebGPUArray.u32);
|
|
38
|
-
|
|
39
|
-
const body = CodeChunk.from(
|
|
40
|
-
//language=WGSL
|
|
41
|
-
`
|
|
42
|
-
@fragment
|
|
43
|
-
fn main(
|
|
44
|
-
@builtin(position) coord : vec4<f32>,
|
|
45
|
-
) -> @location(0) vec4<f32> {
|
|
46
|
-
|
|
47
|
-
let here = vec2<i32>(coord.xy);
|
|
48
|
-
|
|
49
|
-
let resolution = vec2<i32>(settings.screen_resolution);
|
|
50
|
-
|
|
51
|
-
let table_size = settings.table_size;
|
|
52
|
-
|
|
53
|
-
let own = highlight_of_mesh(&highlight_table, textureLoad(viz_mesh, here, 0).r, table_size);
|
|
54
|
-
|
|
55
|
-
/*
|
|
56
|
-
The outline sits **outside** the silhouette. A pixel that is itself the highlighted mesh is left
|
|
57
|
-
alone — a highlight marks a unit without painting over it, which is the whole reason the legacy
|
|
58
|
-
path dilated its mask outwards before compositing.
|
|
59
|
-
*/
|
|
60
|
-
if (own.a > 0.0) {
|
|
61
|
-
discard;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
let thickness = settings.thickness;
|
|
65
|
-
|
|
66
|
-
let radius = i32(ceil(thickness));
|
|
67
|
-
|
|
68
|
-
/*
|
|
69
|
-
The strongest highlight within reach, by coverage. Nearest would need a second comparison and
|
|
70
|
-
would look the same: two highlights close enough to overlap an outline this thin are the same
|
|
71
|
-
size on screen, and the brighter one is the one the eye follows.
|
|
72
|
-
*/
|
|
73
|
-
var found = vec4<f32>(0.0);
|
|
74
|
-
|
|
75
|
-
for (var dy = -radius; dy <= radius; dy++) {
|
|
76
|
-
for (var dx = -radius; dx <= radius; dx++) {
|
|
77
|
-
let offset = vec2<f32>(f32(dx), f32(dy));
|
|
78
|
-
|
|
79
|
-
// a disc rather than a square, so the outline is the same width in every direction
|
|
80
|
-
if (dot(offset, offset) > thickness * thickness) {
|
|
81
|
-
continue;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
let at = here + vec2<i32>(dx, dy);
|
|
85
|
-
|
|
86
|
-
if (any(at < vec2<i32>(0)) || any(at >= resolution)) {
|
|
87
|
-
continue;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
let neighbour = highlight_of_mesh(&highlight_table, textureLoad(viz_mesh, at, 0).r, table_size);
|
|
91
|
-
|
|
92
|
-
if (neighbour.a > found.a) {
|
|
93
|
-
found = neighbour;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
if (found.a <= 0.0) {
|
|
99
|
-
discard;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// premultiplied, which is how the table stores it and how the blend state consumes it
|
|
103
|
-
return found;
|
|
104
|
-
}
|
|
105
|
-
`, [
|
|
106
|
-
chunk_highlight_lookup
|
|
107
|
-
]
|
|
108
|
-
);
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* Paints an outline around every highlighted mesh, straight off the visibility buffer.
|
|
112
|
-
*
|
|
113
|
-
* **There is no second geometry pass, no dilation and no blur.** The renderer this replaces drew
|
|
114
|
-
* every highlighted object again into an id target of its own, ping-ponged two render targets to
|
|
115
|
-
* dilate the mask, blurred it, and decoded ids back to colours to composite — five render targets, a
|
|
116
|
-
* duplicated scene graph and its own skinned material variant. Shade already writes a per-pixel mesh
|
|
117
|
-
* id while drawing the frame, so an outline is a neighbourhood test on an integer texture and
|
|
118
|
-
* nothing more.
|
|
119
|
-
*
|
|
120
|
-
* **What that costs is the contract change in D27**: the visibility buffer knows only what was
|
|
121
|
-
* rasterized, so a unit standing behind a building is outlined where it can be seen and nowhere
|
|
122
|
-
* else. The old mask was drawn with the depth buffer cleared and showed through everything.
|
|
123
|
-
*
|
|
124
|
-
* @type {ImageShader}
|
|
125
|
-
*/
|
|
126
|
-
export const shader_highlight_outline = ImageShader.from({
|
|
127
|
-
descriptor: ShaderDescriptor.from({
|
|
128
|
-
label: "Highlight outline",
|
|
129
|
-
resources,
|
|
130
|
-
body
|
|
131
|
-
}),
|
|
132
|
-
targets: [
|
|
133
|
-
{
|
|
134
|
-
label: "outlined",
|
|
135
|
-
format: "rgba16float",
|
|
136
|
-
blend: BlendState.from({
|
|
137
|
-
color: {
|
|
138
|
-
operation: "add",
|
|
139
|
-
srcFactor: "one",
|
|
140
|
-
dstFactor: "one-minus-src-alpha"
|
|
141
|
-
},
|
|
142
|
-
alpha: {
|
|
143
|
-
operation: "add",
|
|
144
|
-
srcFactor: "one",
|
|
145
|
-
dstFactor: "one-minus-src-alpha"
|
|
146
|
-
}
|
|
147
|
-
})
|
|
148
|
-
}
|
|
149
|
-
]
|
|
150
|
-
});
|
|
1
|
+
import { BlendState } from "../../../shade/descriptor/blend/BlendState.js";
|
|
2
|
+
import { CodeChunk } from "../../../shade/renderer/shader/compiler/CodeChunk.js";
|
|
3
|
+
import { ImageShader } from "../../../shade/renderer/shader/ImageShader.js";
|
|
4
|
+
import {
|
|
5
|
+
ShaderResourceSetDescriptor
|
|
6
|
+
} from "../../../shade/renderer/shader/resource/ShaderResourceSetDescriptor.js";
|
|
7
|
+
import { ShaderDescriptor } from "../../../shade/renderer/shader/ShaderDescriptor.js";
|
|
8
|
+
import { f32, u32, vec2u } from "../../../shade/renderer/shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
9
|
+
import { WebGPUArray } from "../../../shade/renderer/shader/type/WebGPUArray.js";
|
|
10
|
+
import { WebGPUStruct } from "../../../shade/renderer/shader/type/WebGPUStruct.js";
|
|
11
|
+
import { chunk_highlight_lookup } from "./chunk_highlight_lookup.js";
|
|
12
|
+
|
|
13
|
+
export const HIGHLIGHT_OUTLINE_SETTINGS = WebGPUStruct.from({
|
|
14
|
+
screen_resolution: vec2u,
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* How many rows the lookup table has, which is one past the highest mesh row that was
|
|
18
|
+
* highlighted when it was packed.
|
|
19
|
+
*/
|
|
20
|
+
table_size: u32,
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Outline width in pixels.
|
|
24
|
+
*/
|
|
25
|
+
thickness: f32,
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
29
|
+
|
|
30
|
+
// per-draw, 16 bytes, read-only: immediate data rather than a uniform buffer
|
|
31
|
+
resources.setImmediate("settings", HIGHLIGHT_OUTLINE_SETTINGS);
|
|
32
|
+
|
|
33
|
+
resources.createGroup()
|
|
34
|
+
.addTexture("viz_mesh", "uint");
|
|
35
|
+
|
|
36
|
+
resources.createGroup()
|
|
37
|
+
.addStorageBuffer("highlight_table", WebGPUArray.u32);
|
|
38
|
+
|
|
39
|
+
const body = CodeChunk.from(
|
|
40
|
+
//language=WGSL
|
|
41
|
+
`
|
|
42
|
+
@fragment
|
|
43
|
+
fn main(
|
|
44
|
+
@builtin(position) coord : vec4<f32>,
|
|
45
|
+
) -> @location(0) vec4<f32> {
|
|
46
|
+
|
|
47
|
+
let here = vec2<i32>(coord.xy);
|
|
48
|
+
|
|
49
|
+
let resolution = vec2<i32>(settings.screen_resolution);
|
|
50
|
+
|
|
51
|
+
let table_size = settings.table_size;
|
|
52
|
+
|
|
53
|
+
let own = highlight_of_mesh(&highlight_table, textureLoad(viz_mesh, here, 0).r, table_size);
|
|
54
|
+
|
|
55
|
+
/*
|
|
56
|
+
The outline sits **outside** the silhouette. A pixel that is itself the highlighted mesh is left
|
|
57
|
+
alone — a highlight marks a unit without painting over it, which is the whole reason the legacy
|
|
58
|
+
path dilated its mask outwards before compositing.
|
|
59
|
+
*/
|
|
60
|
+
if (own.a > 0.0) {
|
|
61
|
+
discard;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
let thickness = settings.thickness;
|
|
65
|
+
|
|
66
|
+
let radius = i32(ceil(thickness));
|
|
67
|
+
|
|
68
|
+
/*
|
|
69
|
+
The strongest highlight within reach, by coverage. Nearest would need a second comparison and
|
|
70
|
+
would look the same: two highlights close enough to overlap an outline this thin are the same
|
|
71
|
+
size on screen, and the brighter one is the one the eye follows.
|
|
72
|
+
*/
|
|
73
|
+
var found = vec4<f32>(0.0);
|
|
74
|
+
|
|
75
|
+
for (var dy = -radius; dy <= radius; dy++) {
|
|
76
|
+
for (var dx = -radius; dx <= radius; dx++) {
|
|
77
|
+
let offset = vec2<f32>(f32(dx), f32(dy));
|
|
78
|
+
|
|
79
|
+
// a disc rather than a square, so the outline is the same width in every direction
|
|
80
|
+
if (dot(offset, offset) > thickness * thickness) {
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
let at = here + vec2<i32>(dx, dy);
|
|
85
|
+
|
|
86
|
+
if (any(at < vec2<i32>(0)) || any(at >= resolution)) {
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
let neighbour = highlight_of_mesh(&highlight_table, textureLoad(viz_mesh, at, 0).r, table_size);
|
|
91
|
+
|
|
92
|
+
if (neighbour.a > found.a) {
|
|
93
|
+
found = neighbour;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (found.a <= 0.0) {
|
|
99
|
+
discard;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// premultiplied, which is how the table stores it and how the blend state consumes it
|
|
103
|
+
return found;
|
|
104
|
+
}
|
|
105
|
+
`, [
|
|
106
|
+
chunk_highlight_lookup
|
|
107
|
+
]
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Paints an outline around every highlighted mesh, straight off the visibility buffer.
|
|
112
|
+
*
|
|
113
|
+
* **There is no second geometry pass, no dilation and no blur.** The renderer this replaces drew
|
|
114
|
+
* every highlighted object again into an id target of its own, ping-ponged two render targets to
|
|
115
|
+
* dilate the mask, blurred it, and decoded ids back to colours to composite — five render targets, a
|
|
116
|
+
* duplicated scene graph and its own skinned material variant. Shade already writes a per-pixel mesh
|
|
117
|
+
* id while drawing the frame, so an outline is a neighbourhood test on an integer texture and
|
|
118
|
+
* nothing more.
|
|
119
|
+
*
|
|
120
|
+
* **What that costs is the contract change in D27**: the visibility buffer knows only what was
|
|
121
|
+
* rasterized, so a unit standing behind a building is outlined where it can be seen and nowhere
|
|
122
|
+
* else. The old mask was drawn with the depth buffer cleared and showed through everything.
|
|
123
|
+
*
|
|
124
|
+
* @type {ImageShader}
|
|
125
|
+
*/
|
|
126
|
+
export const shader_highlight_outline = ImageShader.from({
|
|
127
|
+
descriptor: ShaderDescriptor.from({
|
|
128
|
+
label: "Highlight outline",
|
|
129
|
+
resources,
|
|
130
|
+
body
|
|
131
|
+
}),
|
|
132
|
+
targets: [
|
|
133
|
+
{
|
|
134
|
+
label: "outlined",
|
|
135
|
+
format: "rgba16float",
|
|
136
|
+
blend: BlendState.from({
|
|
137
|
+
color: {
|
|
138
|
+
operation: "add",
|
|
139
|
+
srcFactor: "one",
|
|
140
|
+
dstFactor: "one-minus-src-alpha"
|
|
141
|
+
},
|
|
142
|
+
alpha: {
|
|
143
|
+
operation: "add",
|
|
144
|
+
srcFactor: "one",
|
|
145
|
+
dstFactor: "one-minus-src-alpha"
|
|
146
|
+
}
|
|
147
|
+
})
|
|
148
|
+
}
|
|
149
|
+
]
|
|
150
|
+
});
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* where does this projectile leave from, where does that effect anchor, where does the floating UI
|
|
6
6
|
* hang. **The answer is computed, never read back** — GPU readback is a frame late and asynchronous,
|
|
7
7
|
* so an outcome that depended on it would depend on frame pacing, and determinism and replay would
|
|
8
|
-
* go with it
|
|
8
|
+
* go with it: no GPU readback on a gameplay-affecting path.
|
|
9
9
|
*
|
|
10
10
|
* The pose is {@link pose_evaluate_world} over the clips the animation systems are driving: a pure
|
|
11
11
|
* function of (clip set, time, weights), off the same clock the renderer is written from, which is
|
|
@@ -1,101 +1,101 @@
|
|
|
1
|
-
import { assert } from "../../../core/assert.js";
|
|
2
|
-
import { PosePlayback } from "../../../shade/renderer/animation/pose/PosePlayback.js";
|
|
3
|
-
import { pose_evaluate_world } from "../../../shade/renderer/animation/pose/pose_evaluate_world.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* The clip set handed to the evaluator, rebuilt per call from the systems' own entries. Nothing in
|
|
10
|
-
* here outlives the call — the query is on a per-frame path and allocates nothing.
|
|
11
|
-
*
|
|
12
|
-
* @type {PosePlayback[]}
|
|
13
|
-
*/
|
|
14
|
-
const PLAYBACKS = [];
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Where a named part of an entity's model is, in world space.
|
|
18
|
-
*
|
|
19
|
-
* This is the question gameplay asks of an animated model and the only sanctioned way to ask it:
|
|
20
|
-
* where does this projectile leave from, where does that effect anchor, where does the floating UI
|
|
21
|
-
* hang. **The answer is computed, never read back** — GPU readback is a frame late and asynchronous,
|
|
22
|
-
* so an outcome that depended on it would depend on frame pacing, and determinism and replay would
|
|
23
|
-
* go with it
|
|
24
|
-
*
|
|
25
|
-
* The pose is {@link pose_evaluate_world} over the clips the animation systems are driving: a pure
|
|
26
|
-
* function of (clip set, time, weights), off the same clock the renderer is written from, which is
|
|
27
|
-
* what keeps a socket on the mesh that is drawn.
|
|
28
|
-
*
|
|
29
|
-
* The result carries both its matrix and its components.
|
|
30
|
-
*
|
|
31
|
-
* @param {Transform64} result
|
|
32
|
-
* @param {EntityManager} entity_manager
|
|
33
|
-
* @param {number} entity
|
|
34
|
-
* @param {string} node_name name the asset gave the node — a bone, a socket's bone, an effector
|
|
35
|
-
* @returns {boolean} `false` when there is no such node to answer about: no mesh system is
|
|
36
|
-
* registered, the model has not loaded yet, the entity has none, or the name is not in it. None of
|
|
37
|
-
* the four is an error
|
|
38
|
-
*/
|
|
39
|
-
export function query_entity_node_world_pose(result, entity_manager, entity, node_name) {
|
|
40
|
-
assert.defined(result, 'result');
|
|
41
|
-
assert.defined(entity_manager, 'entity_manager');
|
|
42
|
-
assert.isNonNegativeInteger(entity, 'entity');
|
|
43
|
-
assert.isString(node_name, 'node_name');
|
|
44
|
-
|
|
45
|
-
const meshes = entity_manager.getSystem(
|
|
46
|
-
|
|
47
|
-
if (meshes === null) {
|
|
48
|
-
// nothing draws models here, so nothing holds one to answer about
|
|
49
|
-
return false;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
const instance = meshes.instance_of(entity);
|
|
53
|
-
|
|
54
|
-
if (instance === null) {
|
|
55
|
-
return false;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
const node = instance.nodes.get(node_name);
|
|
59
|
-
|
|
60
|
-
if (node === undefined) {
|
|
61
|
-
return false;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
const playbacks = PLAYBACKS;
|
|
65
|
-
|
|
66
|
-
playbacks.length = 0;
|
|
67
|
-
|
|
68
|
-
write_playbacks(playbacks, entity_manager, entity);
|
|
69
|
-
|
|
70
|
-
pose_evaluate_world(result, node, playbacks);
|
|
71
|
-
|
|
72
|
-
playbacks.length = 0;
|
|
73
|
-
|
|
74
|
-
return true;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Collect what every animation driver is playing on the entity.
|
|
79
|
-
*
|
|
80
|
-
* Both are asked because either may be the one driving it — a combat unit runs a state machine, a
|
|
81
|
-
* building runs a clip list — and an entity has one of them, so the two sets do not overlap in
|
|
82
|
-
* practice. What they hand back is one entry per clip of the model, silent clips included, because
|
|
83
|
-
* that is what the GPU's accumulator is summing.
|
|
84
|
-
*
|
|
85
|
-
* @param {PosePlayback[]} target
|
|
86
|
-
* @param {EntityManager} entity_manager
|
|
87
|
-
* @param {number} entity
|
|
88
|
-
*/
|
|
89
|
-
function write_playbacks(target, entity_manager, entity) {
|
|
90
|
-
const graphs = entity_manager.getSystem(
|
|
91
|
-
|
|
92
|
-
if (graphs !== null) {
|
|
93
|
-
graphs.write_pose_playbacks(target, entity);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
const clips = entity_manager.getSystem(
|
|
97
|
-
|
|
98
|
-
if (clips !== null) {
|
|
99
|
-
clips.write_pose_playbacks(target, entity);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
1
|
+
import { assert } from "../../../core/assert.js";
|
|
2
|
+
import { PosePlayback } from "../../../shade/renderer/animation/pose/PosePlayback.js";
|
|
3
|
+
import { pose_evaluate_world } from "../../../shade/renderer/animation/pose/pose_evaluate_world.js";
|
|
4
|
+
import { AnimationGraphSystem } from "../AnimationGraphSystem.js";
|
|
5
|
+
import { AnimationSystem } from "../AnimationSystem.js";
|
|
6
|
+
import { MeshSystem } from "../MeshSystem.js";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* The clip set handed to the evaluator, rebuilt per call from the systems' own entries. Nothing in
|
|
10
|
+
* here outlives the call — the query is on a per-frame path and allocates nothing.
|
|
11
|
+
*
|
|
12
|
+
* @type {PosePlayback[]}
|
|
13
|
+
*/
|
|
14
|
+
const PLAYBACKS = [];
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Where a named part of an entity's model is, in world space.
|
|
18
|
+
*
|
|
19
|
+
* This is the question gameplay asks of an animated model and the only sanctioned way to ask it:
|
|
20
|
+
* where does this projectile leave from, where does that effect anchor, where does the floating UI
|
|
21
|
+
* hang. **The answer is computed, never read back** — GPU readback is a frame late and asynchronous,
|
|
22
|
+
* so an outcome that depended on it would depend on frame pacing, and determinism and replay would
|
|
23
|
+
* go with it: no GPU readback on a gameplay-affecting path.
|
|
24
|
+
*
|
|
25
|
+
* The pose is {@link pose_evaluate_world} over the clips the animation systems are driving: a pure
|
|
26
|
+
* function of (clip set, time, weights), off the same clock the renderer is written from, which is
|
|
27
|
+
* what keeps a socket on the mesh that is drawn.
|
|
28
|
+
*
|
|
29
|
+
* The result carries both its matrix and its components.
|
|
30
|
+
*
|
|
31
|
+
* @param {Transform64} result
|
|
32
|
+
* @param {EntityManager} entity_manager
|
|
33
|
+
* @param {number} entity
|
|
34
|
+
* @param {string} node_name name the asset gave the node — a bone, a socket's bone, an effector
|
|
35
|
+
* @returns {boolean} `false` when there is no such node to answer about: no mesh system is
|
|
36
|
+
* registered, the model has not loaded yet, the entity has none, or the name is not in it. None of
|
|
37
|
+
* the four is an error
|
|
38
|
+
*/
|
|
39
|
+
export function query_entity_node_world_pose(result, entity_manager, entity, node_name) {
|
|
40
|
+
assert.defined(result, 'result');
|
|
41
|
+
assert.defined(entity_manager, 'entity_manager');
|
|
42
|
+
assert.isNonNegativeInteger(entity, 'entity');
|
|
43
|
+
assert.isString(node_name, 'node_name');
|
|
44
|
+
|
|
45
|
+
const meshes = entity_manager.getSystem(MeshSystem);
|
|
46
|
+
|
|
47
|
+
if (meshes === null) {
|
|
48
|
+
// nothing draws models here, so nothing holds one to answer about
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const instance = meshes.instance_of(entity);
|
|
53
|
+
|
|
54
|
+
if (instance === null) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const node = instance.nodes.get(node_name);
|
|
59
|
+
|
|
60
|
+
if (node === undefined) {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const playbacks = PLAYBACKS;
|
|
65
|
+
|
|
66
|
+
playbacks.length = 0;
|
|
67
|
+
|
|
68
|
+
write_playbacks(playbacks, entity_manager, entity);
|
|
69
|
+
|
|
70
|
+
pose_evaluate_world(result, node, playbacks);
|
|
71
|
+
|
|
72
|
+
playbacks.length = 0;
|
|
73
|
+
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Collect what every animation driver is playing on the entity.
|
|
79
|
+
*
|
|
80
|
+
* Both are asked because either may be the one driving it — a combat unit runs a state machine, a
|
|
81
|
+
* building runs a clip list — and an entity has one of them, so the two sets do not overlap in
|
|
82
|
+
* practice. What they hand back is one entry per clip of the model, silent clips included, because
|
|
83
|
+
* that is what the GPU's accumulator is summing.
|
|
84
|
+
*
|
|
85
|
+
* @param {PosePlayback[]} target
|
|
86
|
+
* @param {EntityManager} entity_manager
|
|
87
|
+
* @param {number} entity
|
|
88
|
+
*/
|
|
89
|
+
function write_playbacks(target, entity_manager, entity) {
|
|
90
|
+
const graphs = entity_manager.getSystem(AnimationGraphSystem);
|
|
91
|
+
|
|
92
|
+
if (graphs !== null) {
|
|
93
|
+
graphs.write_pose_playbacks(target, entity);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const clips = entity_manager.getSystem(AnimationSystem);
|
|
97
|
+
|
|
98
|
+
if (clips !== null) {
|
|
99
|
+
clips.write_pose_playbacks(target, entity);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
@@ -3,19 +3,19 @@
|
|
|
3
3
|
*
|
|
4
4
|
* The four steps are each somebody's: where the model is (`shade_bundle_bounds`), how to frame it
|
|
5
5
|
* (`model_preview_framing`), what a scene of one model looks like (`make_model_preview_scene`), and
|
|
6
|
-
* how a frame becomes pixels (`
|
|
6
|
+
* how a frame becomes pixels (`GraphicsEngine.render_to_sampler`). This is only the order.
|
|
7
7
|
*
|
|
8
8
|
* **A model with nothing to draw has no picture, and that is data rather than a fault**: a glTF of
|
|
9
9
|
* empties, or one whose every mesh is skinned — a preview scene registers no skin, so a skinned
|
|
10
10
|
* mesh is not in it. The answer then is `null`, and a caller showing icons shows none for that
|
|
11
11
|
* asset rather than a blank square that reads as a broken renderer.
|
|
12
12
|
*
|
|
13
|
-
* @param {
|
|
13
|
+
* @param {GraphicsEngine} graphics
|
|
14
14
|
* @param {SceneBundle} bundle
|
|
15
15
|
* @param {number} width texels
|
|
16
16
|
* @param {number} height texels
|
|
17
17
|
* @param {number} [margin] fraction of the frame's height left clear around the model
|
|
18
18
|
* @returns {Promise<Sampler2D|null>}
|
|
19
19
|
*/
|
|
20
|
-
export function make_model_thumbnail(graphics:
|
|
20
|
+
export function make_model_thumbnail(graphics: GraphicsEngine, bundle: SceneBundle, width: number, height: number, margin?: number): Promise<Sampler2D | null>;
|
|
21
21
|
//# sourceMappingURL=make_model_thumbnail.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"make_model_thumbnail.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/preview/make_model_thumbnail.js"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;;;;GAkBG;AACH,
|
|
1
|
+
{"version":3,"file":"make_model_thumbnail.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/preview/make_model_thumbnail.js"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;;;;GAkBG;AACH,2FALW,MAAM,UACN,MAAM,WACN,MAAM,GACJ,QAAQ,YAAU,IAAI,CAAC,CAuBnC"}
|
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
import { assert } from "../../../core/assert.js";
|
|
2
|
-
import { AABB3 } from "../../../core/geom/3d/aabb/AABB3.js";
|
|
3
|
-
import { shade_bundle_bounds } from "../shade_bundle_bounds.js";
|
|
4
|
-
import { make_model_preview_scene, MODEL_PREVIEW_FOV } from "./make_model_preview_scene.js";
|
|
5
|
-
import { model_preview_framing } from "./model_preview_framing.js";
|
|
6
|
-
import { ModelPreviewFraming } from "./ModelPreviewFraming.js";
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* A picture of a loaded model, framed on itself.
|
|
10
|
-
*
|
|
11
|
-
* The four steps are each somebody's: where the model is (`shade_bundle_bounds`), how to frame it
|
|
12
|
-
* (`model_preview_framing`), what a scene of one model looks like (`make_model_preview_scene`), and
|
|
13
|
-
* how a frame becomes pixels (`
|
|
14
|
-
*
|
|
15
|
-
* **A model with nothing to draw has no picture, and that is data rather than a fault**: a glTF of
|
|
16
|
-
* empties, or one whose every mesh is skinned — a preview scene registers no skin, so a skinned
|
|
17
|
-
* mesh is not in it. The answer then is `null`, and a caller showing icons shows none for that
|
|
18
|
-
* asset rather than a blank square that reads as a broken renderer.
|
|
19
|
-
*
|
|
20
|
-
* @param {
|
|
21
|
-
* @param {SceneBundle} bundle
|
|
22
|
-
* @param {number} width texels
|
|
23
|
-
* @param {number} height texels
|
|
24
|
-
* @param {number} [margin] fraction of the frame's height left clear around the model
|
|
25
|
-
* @returns {Promise<Sampler2D|null>}
|
|
26
|
-
*/
|
|
27
|
-
export async function make_model_thumbnail(graphics, bundle, width, height, margin = 0) {
|
|
28
|
-
assert.defined(graphics, 'graphics');
|
|
29
|
-
assert.defined(bundle, 'bundle');
|
|
30
|
-
|
|
31
|
-
// held locally rather than in module scratch: a caller may have several thumbnails in flight,
|
|
32
|
-
// and what each of them is framing must not be what the last one was
|
|
33
|
-
const bounds = new AABB3();
|
|
34
|
-
|
|
35
|
-
if (!shade_bundle_bounds(bounds, bundle)) {
|
|
36
|
-
return null;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const framing = model_preview_framing(new ModelPreviewFraming(), bounds, MODEL_PREVIEW_FOV, margin);
|
|
40
|
-
|
|
41
|
-
const { scene, camera, drawn } = make_model_preview_scene(bundle, framing, width / height);
|
|
42
|
-
|
|
43
|
-
if (drawn === 0) {
|
|
44
|
-
return null;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
return graphics.render_to_sampler(scene, camera, width, height);
|
|
48
|
-
}
|
|
1
|
+
import { assert } from "../../../core/assert.js";
|
|
2
|
+
import { AABB3 } from "../../../core/geom/3d/aabb/AABB3.js";
|
|
3
|
+
import { shade_bundle_bounds } from "../shade_bundle_bounds.js";
|
|
4
|
+
import { make_model_preview_scene, MODEL_PREVIEW_FOV } from "./make_model_preview_scene.js";
|
|
5
|
+
import { model_preview_framing } from "./model_preview_framing.js";
|
|
6
|
+
import { ModelPreviewFraming } from "./ModelPreviewFraming.js";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* A picture of a loaded model, framed on itself.
|
|
10
|
+
*
|
|
11
|
+
* The four steps are each somebody's: where the model is (`shade_bundle_bounds`), how to frame it
|
|
12
|
+
* (`model_preview_framing`), what a scene of one model looks like (`make_model_preview_scene`), and
|
|
13
|
+
* how a frame becomes pixels (`GraphicsEngine.render_to_sampler`). This is only the order.
|
|
14
|
+
*
|
|
15
|
+
* **A model with nothing to draw has no picture, and that is data rather than a fault**: a glTF of
|
|
16
|
+
* empties, or one whose every mesh is skinned — a preview scene registers no skin, so a skinned
|
|
17
|
+
* mesh is not in it. The answer then is `null`, and a caller showing icons shows none for that
|
|
18
|
+
* asset rather than a blank square that reads as a broken renderer.
|
|
19
|
+
*
|
|
20
|
+
* @param {GraphicsEngine} graphics
|
|
21
|
+
* @param {SceneBundle} bundle
|
|
22
|
+
* @param {number} width texels
|
|
23
|
+
* @param {number} height texels
|
|
24
|
+
* @param {number} [margin] fraction of the frame's height left clear around the model
|
|
25
|
+
* @returns {Promise<Sampler2D|null>}
|
|
26
|
+
*/
|
|
27
|
+
export async function make_model_thumbnail(graphics, bundle, width, height, margin = 0) {
|
|
28
|
+
assert.defined(graphics, 'graphics');
|
|
29
|
+
assert.defined(bundle, 'bundle');
|
|
30
|
+
|
|
31
|
+
// held locally rather than in module scratch: a caller may have several thumbnails in flight,
|
|
32
|
+
// and what each of them is framing must not be what the last one was
|
|
33
|
+
const bounds = new AABB3();
|
|
34
|
+
|
|
35
|
+
if (!shade_bundle_bounds(bounds, bundle)) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const framing = model_preview_framing(new ModelPreviewFraming(), bounds, MODEL_PREVIEW_FOV, margin);
|
|
40
|
+
|
|
41
|
+
const { scene, camera, drawn } = make_model_preview_scene(bundle, framing, width / height);
|
|
42
|
+
|
|
43
|
+
if (drawn === 0) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return graphics.render_to_sampler(scene, camera, width, height);
|
|
48
|
+
}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* where it used to be.
|
|
7
7
|
*
|
|
8
8
|
* `x` and `y` are **clip-space**, in −1…1 with +Y up, which is what
|
|
9
|
-
* `
|
|
9
|
+
* `GraphicsEngine.normalizeViewportPoint` produces from pixels.
|
|
10
10
|
*
|
|
11
11
|
* The origin is the camera's own position, which is right for a perspective camera and is also what
|
|
12
12
|
* the three-based engine did for both kinds. A true orthographic pick wants parallel rays from the
|