@woosh/meep-engine 3.23.0 → 3.25.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/editor/entity_world_bounds.d.ts +9 -3
- package/editor/entity_world_bounds.d.ts.map +1 -1
- package/editor/entity_world_bounds.js +61 -4
- package/package.json +1 -1
- package/src/core/binary/allocator/OffsetAllocator.d.ts +40 -2
- package/src/core/binary/allocator/OffsetAllocator.d.ts.map +1 -1
- package/src/core/binary/allocator/OffsetAllocator.js +124 -29
- package/src/core/collection/map/u32_index.d.ts +83 -0
- package/src/core/collection/map/u32_index.d.ts.map +1 -0
- package/src/core/collection/map/u32_index.js +247 -0
- package/src/engine/asset/loaders/GLTFSceneBundleAssetLoader.d.ts +2 -2
- package/src/engine/asset/loaders/GLTFSceneBundleAssetLoader.js +2 -2
- package/src/engine/asset/loaders/USDSceneBundleAssetLoader.d.ts +1 -2
- package/src/engine/asset/loaders/USDSceneBundleAssetLoader.d.ts.map +1 -1
- package/src/engine/asset/loaders/USDSceneBundleAssetLoader.js +4 -12
- package/src/engine/ecs/gpu/GPUStateAuthority.d.ts +55 -0
- package/src/engine/ecs/gpu/GPUStateAuthority.d.ts.map +1 -0
- package/src/engine/ecs/gpu/GPUStateAuthority.js +72 -0
- package/src/engine/ecs/gpu/GPUStateAuthorityFlags.d.ts +40 -0
- package/src/engine/ecs/gpu/GPUStateAuthorityFlags.d.ts.map +1 -0
- package/src/engine/ecs/gpu/GPUStateAuthorityFlags.js +79 -0
- package/src/engine/ecs/gpu/gpu_authority_assert_cpu.d.ts +18 -0
- package/src/engine/ecs/gpu/gpu_authority_assert_cpu.d.ts.map +1 -0
- package/src/engine/ecs/gpu/gpu_authority_assert_cpu.js +27 -0
- package/src/engine/ecs/gpu/gpu_authority_declare.d.ts +23 -0
- package/src/engine/ecs/gpu/gpu_authority_declare.d.ts.map +1 -0
- package/src/engine/ecs/gpu/gpu_authority_declare.js +39 -0
- package/src/engine/ecs/gpu/gpu_authority_grant.d.ts +15 -0
- package/src/engine/ecs/gpu/gpu_authority_grant.d.ts.map +1 -0
- package/src/engine/ecs/gpu/gpu_authority_grant.js +38 -0
- package/src/engine/ecs/gpu/gpu_authority_has.d.ts +18 -0
- package/src/engine/ecs/gpu/gpu_authority_has.d.ts.map +1 -0
- package/src/engine/ecs/gpu/gpu_authority_has.js +28 -0
- package/src/engine/ecs/gpu/gpu_authority_revoke.d.ts +24 -0
- package/src/engine/ecs/gpu/gpu_authority_revoke.d.ts.map +1 -0
- package/src/engine/ecs/gpu/gpu_authority_revoke.js +49 -0
- package/src/engine/ecs/ik/IKProblem.d.ts +14 -0
- package/src/engine/ecs/ik/IKProblem.d.ts.map +1 -1
- package/src/engine/ecs/ik/IKProblem.js +16 -0
- package/src/engine/ecs/ik/InverseKinematicsSystem.d.ts.map +1 -1
- package/src/engine/ecs/ik/InverseKinematicsSystem.js +19 -0
- package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.js +2 -2
- package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.js +2 -2
- package/src/engine/ecs/ik/ik_bone_chain.d.ts +11 -2
- package/src/engine/ecs/ik/ik_bone_chain.d.ts.map +1 -1
- package/src/engine/ecs/ik/ik_bone_chain.js +47 -2
- package/src/engine/ecs/ik/ik_write_local_rotation.d.ts.map +1 -1
- package/src/engine/ecs/ik/ik_write_local_rotation.js +6 -0
- package/src/engine/ecs/speaker/VoiceSystem.d.ts.map +1 -1
- package/src/engine/ecs/speaker/VoiceSystem.js +6 -0
- package/src/engine/ecs/transform/T64WorldCache.d.ts +50 -0
- package/src/engine/ecs/transform/T64WorldCache.d.ts.map +1 -0
- package/src/engine/ecs/transform/T64WorldCache.js +139 -0
- package/src/engine/ecs/transform/t64_evaluate_world.d.ts +31 -0
- package/src/engine/ecs/transform/t64_evaluate_world.d.ts.map +1 -0
- package/src/engine/ecs/transform/t64_evaluate_world.js +126 -0
- package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts +8 -0
- package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts.map +1 -1
- package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.js +59 -30
- package/src/engine/graphics/ecs/highlight/system/ShadedGeometryHighlightSystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/highlight/system/ShadedGeometryHighlightSystem.js +4 -11
- package/src/engine/graphics/ecs/mesh-v2/SHADED_GEOMETRY_EVENT_CHANGE.d.ts +14 -0
- package/src/engine/graphics/ecs/mesh-v2/SHADED_GEOMETRY_EVENT_CHANGE.d.ts.map +1 -0
- package/src/engine/graphics/ecs/mesh-v2/SHADED_GEOMETRY_EVENT_CHANGE.js +13 -0
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +2 -14
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts.map +1 -1
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +11 -21
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometryFlags.d.ts +1 -0
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometryFlags.js +7 -0
- package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshHighlightSystem.d.ts +5 -6
- package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshHighlightSystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshHighlightSystem.js +13 -11
- package/src/engine/graphics/ecs/mesh-v2/shaded_geometry_announce_change.d.ts +14 -0
- package/src/engine/graphics/ecs/mesh-v2/shaded_geometry_announce_change.d.ts.map +1 -0
- package/src/engine/graphics/ecs/mesh-v2/shaded_geometry_announce_change.js +21 -0
- package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts +1 -1
- package/src/engine/graphics/ecs/particles/ParticleEffect.js +1 -1
- package/src/engine/graphics/sh3/path_tracer/populate_path_traced_scene_from_ecd.d.ts +1 -1
- package/src/engine/graphics/sh3/path_tracer/populate_path_traced_scene_from_ecd.js +1 -1
- package/src/engine/graphics3/AnimationGraphSystem.js +3 -3
- package/src/engine/graphics3/AnimationSystem.js +2 -2
- package/src/engine/graphics3/DebugDrawSystem.d.ts.map +1 -1
- package/src/engine/graphics3/DebugDrawSystem.js +2 -4
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +34 -27
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/GPUParticleEmitterSystem.js +185 -85
- package/src/engine/graphics3/HighlightOutlineSystem.d.ts +4 -3
- package/src/engine/graphics3/HighlightOutlineSystem.d.ts.map +1 -1
- package/src/engine/graphics3/HighlightOutlineSystem.js +7 -9
- package/src/engine/graphics3/LightSystem.d.ts +7 -5
- package/src/engine/graphics3/LightSystem.d.ts.map +1 -1
- package/src/engine/graphics3/LightSystem.js +36 -22
- package/src/engine/graphics3/MeshSystem.d.ts +43 -39
- package/src/engine/graphics3/MeshSystem.d.ts.map +1 -1
- package/src/engine/graphics3/MeshSystem.js +324 -331
- package/src/engine/graphics3/PathDisplaySystem.d.ts.map +1 -1
- package/src/engine/graphics3/PathDisplaySystem.js +2 -4
- package/src/engine/graphics3/PickingQuery.d.ts +15 -21
- package/src/engine/graphics3/PickingQuery.d.ts.map +1 -1
- package/src/engine/graphics3/PickingQuery.js +21 -25
- package/src/engine/graphics3/PickingSystem.d.ts +60 -31
- package/src/engine/graphics3/PickingSystem.d.ts.map +1 -1
- package/src/engine/graphics3/PickingSystem.js +413 -273
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts +22 -12
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -1
- package/src/engine/graphics3/ShadedGeometrySystem.js +309 -174
- package/src/engine/graphics3/TerrainSystem.d.ts +19 -11
- package/src/engine/graphics3/TerrainSystem.d.ts.map +1 -1
- package/src/engine/graphics3/TerrainSystem.js +102 -53
- package/src/engine/graphics3/TooltipComponentSystem.d.ts.map +1 -1
- package/src/engine/graphics3/TooltipComponentSystem.js +2 -14
- package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -1
- package/src/engine/graphics3/Trail3DSystem.js +2 -4
- package/src/engine/graphics3/animation/ClipListPlayer.d.ts +4 -4
- package/src/engine/graphics3/animation/ClipListPlayer.d.ts.map +1 -1
- package/src/engine/graphics3/animation/ClipListPlayer.js +2 -2
- package/src/engine/graphics3/highlight/pack_highlight_table.d.ts +9 -11
- package/src/engine/graphics3/highlight/pack_highlight_table.d.ts.map +1 -1
- package/src/engine/graphics3/highlight/pack_highlight_table.js +11 -18
- package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts +4 -3
- package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts.map +1 -1
- package/src/engine/graphics3/pose/query_entity_node_world_pose.js +75 -74
- package/src/engine/graphics3/prefab/Prefab.d.ts +130 -0
- package/src/engine/graphics3/prefab/Prefab.d.ts.map +1 -0
- package/src/engine/graphics3/prefab/Prefab.js +162 -0
- package/src/engine/graphics3/prefab/PrefabInstance.d.ts +72 -0
- package/src/engine/graphics3/prefab/PrefabInstance.d.ts.map +1 -0
- package/src/engine/graphics3/prefab/PrefabInstance.js +80 -0
- package/src/engine/graphics3/prefab/prefab_compile.d.ts +23 -0
- package/src/engine/graphics3/prefab/prefab_compile.d.ts.map +1 -0
- package/src/engine/graphics3/prefab/prefab_compile.js +334 -0
- package/src/engine/graphics3/prefab/prefab_instantiate.d.ts +46 -0
- package/src/engine/graphics3/prefab/prefab_instantiate.d.ts.map +1 -0
- package/src/engine/graphics3/prefab/prefab_instantiate.js +230 -0
- package/src/engine/graphics3/prefab/prefab_normalize_skin_frames.d.ts +70 -0
- package/src/engine/graphics3/prefab/prefab_normalize_skin_frames.d.ts.map +1 -0
- package/src/engine/graphics3/prefab/prefab_normalize_skin_frames.js +210 -0
- package/src/engine/graphics3/prefab/prefab_place.d.ts +60 -0
- package/src/engine/graphics3/prefab/prefab_place.d.ts.map +1 -0
- package/src/engine/graphics3/prefab/prefab_place.js +130 -0
- package/src/engine/graphics3/prefab/prefab_skin_clip_scale_conflicts.d.ts +60 -0
- package/src/engine/graphics3/prefab/prefab_skin_clip_scale_conflicts.d.ts.map +1 -0
- package/src/engine/graphics3/prefab/prefab_skin_clip_scale_conflicts.js +128 -0
- package/src/engine/graphics3/prefab/prefab_skin_frame.d.ts +40 -0
- package/src/engine/graphics3/prefab/prefab_skin_frame.d.ts.map +1 -0
- package/src/engine/graphics3/prefab/prefab_skin_frame.js +116 -0
- package/src/engine/graphics3/preview/make_model_preview_scene.d.ts +16 -14
- package/src/engine/graphics3/preview/make_model_preview_scene.d.ts.map +1 -1
- package/src/engine/graphics3/preview/make_model_preview_scene.js +126 -154
- package/src/engine/graphics3/preview/make_model_thumbnail.js +1 -1
- package/src/engine/graphics3/register_instance_animation.d.ts +6 -6
- package/src/engine/graphics3/register_instance_animation.d.ts.map +1 -1
- package/src/engine/graphics3/register_instance_animation.js +4 -4
- package/src/engine/graphics3/shade_bundle_bounds.d.ts +2 -6
- package/src/engine/graphics3/shade_bundle_bounds.d.ts.map +1 -1
- package/src/engine/graphics3/shade_bundle_bounds.js +47 -55
- package/src/engine/graphics3/shader_picking_gather.d.ts +40 -0
- package/src/engine/graphics3/shader_picking_gather.d.ts.map +1 -0
- package/src/engine/graphics3/shader_picking_gather.js +120 -0
- package/src/engine/graphics3/terrain/pack_terrain_row_table.d.ts +11 -18
- package/src/engine/graphics3/terrain/pack_terrain_row_table.d.ts.map +1 -1
- package/src/engine/graphics3/terrain/pack_terrain_row_table.js +48 -53
- package/src/engine/physics/cloth/MEASUREMENTS.md +1050 -0
- package/src/engine/physics/cloth/PLAN.md +411 -49
- package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts +17 -2
- package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts.map +1 -1
- package/src/engine/physics/cloth/build/cloth_proxy_from_joints.js +284 -256
- package/src/engine/physics/cloth/ecs/ClothColliderSerializationAdapter.d.ts +52 -0
- package/src/engine/physics/cloth/ecs/ClothColliderSerializationAdapter.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/ClothColliderSerializationAdapter.js +70 -0
- package/src/engine/physics/cloth/ecs/ClothDynamics.d.ts +12 -3
- package/src/engine/physics/cloth/ecs/ClothDynamics.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothDynamics.js +340 -331
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +49 -37
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothInstance.js +50 -37
- package/src/engine/physics/cloth/ecs/ClothRig.d.ts +7 -8
- package/src/engine/physics/cloth/ecs/ClothRig.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothRig.js +7 -8
- package/src/engine/physics/cloth/ecs/ClothSerializationAdapter.d.ts +84 -0
- package/src/engine/physics/cloth/ecs/ClothSerializationAdapter.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/ClothSerializationAdapter.js +141 -0
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts +51 -81
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothSystem.js +81 -870
- package/src/engine/physics/cloth/ecs/ClothWorkerCore.d.ts +48 -0
- package/src/engine/physics/cloth/ecs/ClothWorkerCore.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/ClothWorkerCore.js +107 -0
- package/src/engine/physics/cloth/ecs/ClothWorld.d.ts +286 -0
- package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/ClothWorld.js +1104 -0
- package/src/engine/physics/cloth/ecs/WorkerClothSystem.d.ts +182 -0
- package/src/engine/physics/cloth/ecs/WorkerClothSystem.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/WorkerClothSystem.js +562 -0
- package/src/engine/physics/cloth/ecs/cloth.worker.d.ts +2 -0
- package/src/engine/physics/cloth/ecs/cloth.worker.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/cloth.worker.js +12 -0
- package/src/engine/physics/cloth/ecs/cloth_build_rows.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_build_rows.js +2 -1
- package/src/engine/physics/cloth/ecs/cloth_dynamics_map.d.ts +58 -0
- package/src/engine/physics/cloth/ecs/cloth_dynamics_map.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_dynamics_map.js +341 -271
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts +20 -2
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.js +39 -15
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts +19 -23
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.js +201 -199
- package/src/engine/physics/cloth/ecs/cloth_seed_subtree.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_seed_subtree.js +8 -0
- package/src/engine/physics/cloth/ecs/cloth_worker_protocol.d.ts +29 -0
- package/src/engine/physics/cloth/ecs/cloth_worker_protocol.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/cloth_worker_protocol.js +78 -0
- package/src/engine/physics/cloth/ecs/cloth_write_back_rig.d.ts +18 -34
- package/src/engine/physics/cloth/ecs/cloth_write_back_rig.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_write_back_rig.js +58 -115
- package/src/engine/physics/cloth/ecs/makeClothWorker.d.ts +17 -0
- package/src/engine/physics/cloth/ecs/makeClothWorker.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/makeClothWorker.js +18 -0
- package/src/engine/physics/cloth/playground/README.md +84 -13
- package/src/engine/physics/cloth/playground/garment_build.d.ts +0 -1
- package/src/engine/physics/cloth/playground/garment_build.d.ts.map +1 -1
- package/src/engine/physics/cloth/playground/garment_build.js +64 -58
- package/src/engine/physics/cloth/playground/garment_main.js +59 -33
- package/src/engine/physics/cloth/playground/wind.html +166 -0
- package/src/engine/physics/cloth/playground/wind_build.d.ts +81 -0
- package/src/engine/physics/cloth/playground/wind_build.d.ts.map +1 -0
- package/src/engine/physics/cloth/playground/wind_build.js +141 -0
- package/src/engine/physics/cloth/playground/wind_main.d.ts +2 -0
- package/src/engine/physics/cloth/playground/wind_main.d.ts.map +1 -0
- package/src/engine/physics/cloth/playground/wind_main.js +681 -0
- package/src/engine/physics/cloth/solver/ClothState.d.ts +134 -79
- package/src/engine/physics/cloth/solver/ClothState.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/ClothState.js +273 -12
- package/src/engine/physics/cloth/solver/cloth_solver_constants.d.ts +33 -0
- package/src/engine/physics/cloth/solver/cloth_solver_constants.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_solver_constants.js +34 -0
- package/src/engine/physics/cloth/solver/cloth_step.d.ts +21 -2
- package/src/engine/physics/cloth/solver/cloth_step.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_step.js +173 -4
- package/src/engine/physics/cloth/solver/cloth_step_instance.d.ts +40 -0
- package/src/engine/physics/cloth/solver/cloth_step_instance.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_step_instance.js +284 -0
- package/src/engine/physics/cloth/solver/cloth_wind_accelerate.d.ts +107 -0
- package/src/engine/physics/cloth/solver/cloth_wind_accelerate.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_wind_accelerate.js +263 -0
- package/src/engine/physics/cloth/wind/AbstractClothWind.d.ts +88 -0
- package/src/engine/physics/cloth/wind/AbstractClothWind.d.ts.map +1 -0
- package/src/engine/physics/cloth/wind/AbstractClothWind.js +100 -0
- package/src/engine/physics/cloth/wind/ClothAmbientWind.d.ts +85 -0
- package/src/engine/physics/cloth/wind/ClothAmbientWind.d.ts.map +1 -0
- package/src/engine/physics/cloth/wind/ClothAmbientWind.js +182 -0
- package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts +79 -0
- package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts.map +1 -0
- package/src/engine/physics/cloth/wind/ClothFluidWind.js +210 -0
- package/src/engine/physics/cloth/wind/cloth_sample_air.d.ts +101 -0
- package/src/engine/physics/cloth/wind/cloth_sample_air.d.ts.map +1 -0
- package/src/engine/physics/cloth/wind/cloth_sample_air.js +290 -0
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/shade/RENDERER_CONTRACT.md +85 -53
- package/src/shade/device/ShadeGPUCommandContext.d.ts +23 -0
- package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
- package/src/shade/device/ShadeGPUCommandContext.js +36 -0
- package/src/shade/device/mock/texture_copy.d.ts.map +1 -1
- package/src/shade/device/mock/texture_copy.js +28 -0
- package/src/shade/playground/add_random_meshes.d.ts +4 -4
- package/src/shade/playground/add_random_meshes.d.ts.map +1 -1
- package/src/shade/playground/add_random_meshes.js +20 -16
- package/src/shade/playground/avboit/main.d.ts +1 -0
- package/src/shade/playground/avboit/main.d.ts.map +1 -1
- package/src/shade/playground/avboit/main.js +916 -875
- package/src/shade/playground/basis_textures/main.d.ts.map +1 -1
- package/src/shade/playground/basis_textures/main.js +22 -8
- package/src/shade/playground/basis_textures/texture_inventory.d.ts +2 -2
- package/src/shade/playground/basis_textures/texture_inventory.d.ts.map +1 -1
- package/src/shade/playground/basis_textures/texture_inventory.js +6 -7
- package/src/shade/playground/ground_seam/main.d.ts.map +1 -1
- package/src/shade/playground/ground_seam/main.js +13 -4
- package/src/shade/playground/ground_seam/make_ground.d.ts +13 -4
- package/src/shade/playground/ground_seam/make_ground.d.ts.map +1 -1
- package/src/shade/playground/ground_seam/make_ground.js +21 -16
- package/src/shade/playground/particle_ecs/bonfire_editor.js +3 -3
- package/src/shade/playground/particle_system/main.js +11 -10
- package/src/shade/playground/particle_system/particle_prototype.d.ts +15 -10
- package/src/shade/playground/particle_system/particle_prototype.d.ts.map +1 -1
- package/src/shade/playground/particle_system/particle_prototype.js +56 -15
- package/src/shade/playground/particle_system/particle_scene.d.ts +68 -28
- package/src/shade/playground/particle_system/particle_scene.d.ts.map +1 -1
- package/src/shade/playground/particle_system/particle_scene.js +149 -53
- package/src/shade/playground/readback_crossover/index.html +41 -0
- package/src/shade/playground/readback_crossover/main.d.ts +2 -0
- package/src/shade/playground/readback_crossover/main.d.ts.map +1 -0
- package/src/shade/playground/readback_crossover/main.js +372 -0
- package/src/shade/playground/skinned_blas_refit/README.md +11 -7
- package/src/shade/playground/skinned_blas_refit/add_floor.d.ts +13 -44
- package/src/shade/playground/skinned_blas_refit/add_floor.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/add_floor.js +19 -59
- package/src/shade/playground/skinned_blas_refit/main.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/main.js +67 -58
- package/src/shade/playground/skinned_blas_refit/place_character.d.ts +40 -54
- package/src/shade/playground/skinned_blas_refit/place_character.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/place_character.js +47 -74
- package/src/shade/playground/skinned_blas_refit/sweep_views.d.ts +3 -3
- package/src/shade/playground/skinned_blas_refit/sweep_views.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/sweep_views.js +4 -3
- package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts +3 -3
- package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.js +11 -4
- package/src/shade/playground/skinned_blas_refit/verify_instance_bounds.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/verify_instance_bounds.js +38 -9
- package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts +3 -3
- package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.js +9 -6
- package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts +3 -3
- package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +3 -3
- package/src/shade/playground/skinned_mesh_soup/README.md +6 -6
- package/src/shade/playground/skinned_mesh_soup/main.d.ts.map +1 -1
- package/src/shade/playground/skinned_mesh_soup/main.js +44 -102
- package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.d.ts +5 -5
- package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.d.ts.map +1 -1
- package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.js +42 -33
- package/src/shade/playground/sponza_path_trace/main.d.ts +1 -0
- package/src/shade/playground/sponza_path_trace/main.d.ts.map +1 -1
- package/src/shade/playground/sponza_path_trace/main.js +393 -363
- package/src/shade/playground/ssr_reprojection/main.js +11 -9
- package/src/shade/playground/ssr_reprojection/scene.d.ts +15 -4
- package/src/shade/playground/ssr_reprojection/scene.d.ts.map +1 -1
- package/src/shade/playground/ssr_reprojection/scene.js +32 -11
- package/src/shade/playground/ssr_variance/main.js +1 -1
- package/src/shade/playground/ssr_variance/scene.d.ts +10 -4
- package/src/shade/playground/ssr_variance/scene.d.ts.map +1 -1
- package/src/shade/playground/ssr_variance/scene.js +39 -15
- package/src/shade/playground/vgeo_runtime/README.md +94 -0
- package/src/shade/playground/vgeo_runtime/index.html +62 -0
- package/src/shade/playground/vgeo_runtime/main.d.ts +2 -0
- package/src/shade/playground/vgeo_runtime/main.d.ts.map +1 -0
- package/src/shade/playground/vgeo_runtime/main.js +399 -0
- package/src/shade/playground/vgeo_viewer/main.js +6 -2
- package/src/shade/playground/vgeo_viewer/sample_asset.js +1 -1
- package/src/shade/playground/volumetrics_froxel/main.d.ts.map +1 -1
- package/src/shade/playground/volumetrics_froxel/main.js +936 -922
- package/src/shade/renderer/GraphicsContext.d.ts +7 -0
- package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
- package/src/shade/renderer/GraphicsContext.js +11 -0
- package/src/shade/renderer/Renderer.d.ts +3 -2
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +3 -2
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts +39 -47
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.js +319 -256
- package/src/shade/renderer/animation/ShadeAnimationChannel.d.ts +26 -22
- package/src/shade/renderer/animation/ShadeAnimationChannel.d.ts.map +1 -1
- package/src/shade/renderer/animation/ShadeAnimationChannel.js +28 -23
- package/src/shade/renderer/animation/ShadeAnimationClip.d.ts +14 -6
- package/src/shade/renderer/animation/ShadeAnimationClip.d.ts.map +1 -1
- package/src/shade/renderer/animation/ShadeAnimationClip.js +20 -8
- package/src/shade/renderer/animation/Skin.d.ts +19 -19
- package/src/shade/renderer/animation/Skin.d.ts.map +1 -1
- package/src/shade/renderer/animation/Skin.js +15 -13
- package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts +6 -5
- package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts.map +1 -1
- package/src/shade/renderer/animation/pose/pose_evaluate_local.js +9 -9
- package/src/shade/renderer/animation/skin_clip_scale_conflicts.d.ts +5 -59
- package/src/shade/renderer/animation/skin_clip_scale_conflicts.d.ts.map +1 -1
- package/src/shade/renderer/animation/skin_clip_scale_conflicts.js +8 -132
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts +65 -62
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +148 -194
- package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.js +4 -7
- package/src/shade/renderer/animation/skinning/chunk_skin_blend_mesh_local.d.ts +2 -2
- package/src/shade/renderer/animation/skinning/chunk_skin_blend_mesh_local.js +2 -2
- package/src/shade/renderer/buffer/GPUBufferReadbackAllocator.d.ts +74 -0
- package/src/shade/renderer/buffer/GPUBufferReadbackAllocator.d.ts.map +1 -0
- package/src/shade/renderer/buffer/GPUBufferReadbackAllocator.js +240 -0
- package/src/shade/renderer/buffer/table/GPUDatabase.d.ts +14 -0
- package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUDatabase.js +64 -6
- package/src/shade/renderer/buffer/table/GPUDatabaseReadback.d.ts +190 -0
- package/src/shade/renderer/buffer/table/GPUDatabaseReadback.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/GPUDatabaseReadback.js +1323 -0
- package/src/shade/renderer/buffer/table/GPUPageMetadata.d.ts +10 -0
- package/src/shade/renderer/buffer/table/GPUPageMetadata.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUPageMetadata.js +12 -0
- package/src/shade/renderer/buffer/table/GPUReadbackStatus.d.ts +15 -0
- package/src/shade/renderer/buffer/table/GPUReadbackStatus.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/GPUReadbackStatus.js +34 -0
- package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts +75 -7
- package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUTypedTable.js +518 -135
- package/src/shade/renderer/buffer/table/GPU_TABLE_GATHER_DESCRIPTOR_WORDS.d.ts +19 -0
- package/src/shade/renderer/buffer/table/GPU_TABLE_GATHER_DESCRIPTOR_WORDS.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/GPU_TABLE_GATHER_DESCRIPTOR_WORDS.js +18 -0
- package/src/shade/renderer/buffer/table/WordViews.d.ts +39 -0
- package/src/shade/renderer/buffer/table/WordViews.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/WordViews.js +62 -0
- package/src/shade/renderer/buffer/table/gpu_table_gather_shader.d.ts +27 -0
- package/src/shade/renderer/buffer/table/gpu_table_gather_shader.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/gpu_table_gather_shader.js +117 -0
- package/src/shade/renderer/buffer/table/serde/generate_record_writer.d.ts +121 -0
- package/src/shade/renderer/buffer/table/serde/generate_record_writer.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/serde/generate_record_writer.js +395 -0
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +70 -20
- package/src/shade/renderer/camera/Camera.d.ts +14 -0
- package/src/shade/renderer/camera/Camera.d.ts.map +1 -1
- package/src/shade/renderer/camera/Camera.js +7 -1
- package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +1 -1
- package/src/shade/renderer/geometry/GEOMETRY_METADATA_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/geometry/GEOMETRY_METADATA_STRUCT.js +16 -1
- package/src/shade/renderer/geometry/GPUGeometryManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/GPUGeometryManager.js +29 -9
- package/src/shade/renderer/geometry/GPUGeometryMetadata.d.ts +10 -0
- package/src/shade/renderer/geometry/GPUGeometryMetadata.d.ts.map +1 -1
- package/src/shade/renderer/geometry/GPUGeometryMetadata.js +13 -0
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +6 -5
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts +3 -3
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +15 -11
- package/src/shade/renderer/geometry/virtual/VGEO_FORMAT.md +46 -18
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_DESIGN.md +70 -22
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_PLAN.md +97 -19
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts +12 -2
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.js +14 -3
- package/src/shade/renderer/geometry/virtual/build/vgeo_assemble_pages.d.ts +2 -2
- package/src/shade/renderer/geometry/virtual/build/vgeo_assemble_pages.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_assemble_pages.js +124 -6
- package/src/shade/renderer/geometry/virtual/build/vgeo_page_node_count.d.ts +22 -0
- package/src/shade/renderer/geometry/virtual/build/vgeo_page_node_count.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/vgeo_page_node_count.js +53 -0
- package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.d.ts +8 -1
- package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.js +8 -1
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_FEATURE_IGNORABLE_BOUNDED_PAGES.d.ts +16 -0
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_FEATURE_IGNORABLE_BOUNDED_PAGES.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_FEATURE_IGNORABLE_BOUNDED_PAGES.js +15 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_DEFAULT_PAGE_SIZE.d.ts +54 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_DEFAULT_PAGE_SIZE.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_DEFAULT_PAGE_SIZE.js +53 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.d.ts +13 -2
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.js +14 -2
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts +100 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.js +113 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_header.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_header.js +5 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.js +108 -0
- package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.js +23 -0
- package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.js +40 -0
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.d.ts +228 -0
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.js +932 -0
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts +176 -0
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +425 -0
- package/src/shade/renderer/geometry/virtual/runtime/REVIEW_LEDGER.md +241 -0
- package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN.md +574 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts +120 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.js +674 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.d.ts +287 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.js +976 -0
- package/src/shade/renderer/geometry/virtual/runtime/VirtualGeometry.d.ts +42 -0
- package/src/shade/renderer/geometry/virtual/runtime/VirtualGeometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/VirtualGeometry.js +96 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_FLAG_CULL.d.ts +16 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_FLAG_CULL.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_FLAG_CULL.js +15 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.d.ts +19 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.js +83 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_WORKGROUP_SIZE.d.ts +9 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_WORKGROUP_SIZE.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_WORKGROUP_SIZE.js +8 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.d.ts +19 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.js +160 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.d.ts +3 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.js +255 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_prepare.d.ts +3 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_prepare.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_prepare.js +80 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.d.ts +3 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.js +144 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.d.ts +3 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.js +530 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.d.ts +39 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.js +54 -0
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_if_enabled.d.ts +41 -0
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_if_enabled.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_if_enabled.js +56 -0
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts +49 -0
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js +328 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_OFFSET.d.ts +10 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_OFFSET.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_OFFSET.js +51 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_WORDS.d.ts +13 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_WORDS.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_WORDS.js +12 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT.d.ts +17 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT.js +99 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT_COUNT.d.ts +9 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT_COUNT.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT_COUNT.js +8 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_FEEDBACK_OFFSET.d.ts +7 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_FEEDBACK_OFFSET.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_FEEDBACK_OFFSET.js +27 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GEOMETRY_ROW_NONE.d.ts +14 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GEOMETRY_ROW_NONE.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GEOMETRY_ROW_NONE.js +13 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GEOMETRY_ROW_OFFSET.d.ts +7 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GEOMETRY_ROW_OFFSET.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GEOMETRY_ROW_OFFSET.js +35 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GEOMETRY_ROW_WORDS.d.ts +9 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GEOMETRY_ROW_WORDS.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GEOMETRY_ROW_WORDS.js +8 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_FLAG_SELECTABLE.d.ts +15 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_FLAG_SELECTABLE.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_FLAG_SELECTABLE.js +14 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_OFFSET.d.ts +7 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_OFFSET.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_OFFSET.js +36 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_WORDS.d.ts +10 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_WORDS.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_WORDS.js +9 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_INSTANCE_OFFSET.d.ts +11 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_INSTANCE_OFFSET.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_INSTANCE_OFFSET.js +54 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_INSTANCE_WORDS.d.ts +9 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_INSTANCE_WORDS.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_INSTANCE_WORDS.js +8 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NODE_ROW_LEAF_BIT.d.ts +11 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NODE_ROW_LEAF_BIT.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NODE_ROW_LEAF_BIT.js +10 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NODE_ROW_OFFSET.d.ts +7 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NODE_ROW_OFFSET.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NODE_ROW_OFFSET.js +30 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NODE_ROW_WORDS.d.ts +9 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NODE_ROW_WORDS.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NODE_ROW_WORDS.js +8 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NO_CHILD_PAGE.d.ts +13 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NO_CHILD_PAGE.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_NO_CHILD_PAGE.js +12 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_NONE.d.ts +14 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_NONE.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_NONE.js +13 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_OFFSET.d.ts +11 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_OFFSET.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_OFFSET.js +61 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_WORDS.d.ts +9 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_WORDS.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_WORDS.js +8 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_ITEM_WORDS.d.ts +13 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_ITEM_WORDS.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_ITEM_WORDS.js +12 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_TARGET_GROUP_BIT.d.ts +9 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_TARGET_GROUP_BIT.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_TARGET_GROUP_BIT.js +8 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_WANT_WORDS.d.ts +20 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_WANT_WORDS.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_WANT_WORDS.js +19 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.d.ts +23 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.js +70 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.d.ts +18 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.js +25 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_slot_words.d.ts +35 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_slot_words.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_slot_words.js +41 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.d.ts +32 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.js +138 -0
- package/src/shade/renderer/global_illumination/brick4/cpu/brick4_bake_for_scene.d.ts +1 -1
- package/src/shade/renderer/global_illumination/brick4/cpu/brick4_bake_for_scene.js +4 -4
- package/src/shade/renderer/global_illumination/brick4/cpu/brick4_generate_tree_from_scene.d.ts +1 -3
- package/src/shade/renderer/global_illumination/brick4/cpu/brick4_generate_tree_from_scene.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/cpu/brick4_generate_tree_from_scene.js +5 -4
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.js +1 -1
- package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.js +1 -4
- package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.d.ts +8 -3
- package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.js +19 -14
- package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +9 -1
- package/src/shade/renderer/global_illumination/lpv/placement/software/lpv_generate_probe_locations2.d.ts +3 -3
- package/src/shade/renderer/global_illumination/lpv/placement/software/lpv_generate_probe_locations2.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/placement/software/lpv_generate_probe_locations2.js +12 -5
- package/src/shade/renderer/global_illumination/probe/octahedral/GPUProbeAtlas.js +1 -1
- package/src/shade/renderer/light/GPULightCollection.d.ts +29 -0
- package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
- package/src/shade/renderer/light/GPULightCollection.js +444 -329
- package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.d.ts.map +1 -1
- package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.js +7 -1
- package/src/shade/renderer/light/LightCollection.d.ts +29 -1
- package/src/shade/renderer/light/LightCollection.d.ts.map +1 -1
- package/src/shade/renderer/light/LightCollection.js +50 -1
- package/src/shade/renderer/light/make_sunlight.js +2 -2
- package/src/shade/renderer/light/model/Light.d.ts +29 -2
- package/src/shade/renderer/light/model/Light.d.ts.map +1 -1
- package/src/shade/renderer/light/model/Light.js +30 -2
- package/src/shade/renderer/light/model/io/light_record_directional.d.ts +3 -1
- package/src/shade/renderer/light/model/io/light_record_directional.d.ts.map +1 -1
- package/src/shade/renderer/light/model/io/light_record_directional.js +8 -5
- package/src/shade/renderer/light/model/io/light_record_point.d.ts +3 -1
- package/src/shade/renderer/light/model/io/light_record_point.d.ts.map +1 -1
- package/src/shade/renderer/light/model/io/light_record_point.js +5 -2
- package/src/shade/renderer/light/model/io/light_record_spot.d.ts +4 -1
- package/src/shade/renderer/light/model/io/light_record_spot.d.ts.map +1 -1
- package/src/shade/renderer/light/model/io/light_record_spot.js +10 -6
- package/src/shade/renderer/light/place_light.d.ts +16 -0
- package/src/shade/renderer/light/place_light.d.ts.map +1 -0
- package/src/shade/renderer/light/place_light.js +36 -0
- package/src/shade/renderer/light/shader_refresh_light_poses.d.ts +44 -0
- package/src/shade/renderer/light/shader_refresh_light_poses.d.ts.map +1 -0
- package/src/shade/renderer/light/shader_refresh_light_poses.js +154 -0
- package/src/shade/renderer/lightmap/GPULightMap.js +1 -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 +12 -14
- package/src/shade/renderer/loader/SceneBundle.d.ts +53 -28
- package/src/shade/renderer/loader/SceneBundle.d.ts.map +1 -1
- package/src/shade/renderer/loader/SceneBundle.js +111 -56
- package/src/shade/renderer/loader/SceneNode.d.ts +81 -0
- package/src/shade/renderer/loader/SceneNode.d.ts.map +1 -0
- package/src/shade/renderer/loader/SceneNode.js +114 -0
- package/src/shade/renderer/loader/gltf/load_gltf.d.ts +3 -2
- package/src/shade/renderer/loader/gltf/load_gltf.d.ts.map +1 -1
- package/src/shade/renderer/loader/gltf/load_gltf.js +110 -142
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/loader/usd/UsdExtensionRegistry.d.ts +4 -4
- package/src/shade/renderer/loader/usd/UsdExtensionRegistry.d.ts.map +1 -1
- package/src/shade/renderer/loader/usd/UsdExtensionRegistry.js +2 -2
- package/src/shade/renderer/loader/usd/load_usd.d.ts +3 -2
- package/src/shade/renderer/loader/usd/load_usd.d.ts.map +1 -1
- package/src/shade/renderer/loader/usd/load_usd.js +4 -5
- package/src/shade/renderer/loader/usd/usd_build_scene.d.ts +3 -3
- package/src/shade/renderer/loader/usd/usd_build_scene.d.ts.map +1 -1
- package/src/shade/renderer/loader/usd/usd_build_scene.js +47 -55
- package/src/shade/renderer/material/GPUMaterialManager.js +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts +5 -4
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +8 -15
- package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.d.ts +15 -13
- 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 +40 -21
- package/src/shade/renderer/particles/DESIGN.md +53 -50
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts +31 -17
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
- package/src/shade/renderer/particles/GPUParticleSystem.js +54 -91
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +12 -11
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/EmitterRegistry.js +12 -11
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts +13 -19
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.js +19 -25
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +34 -24
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/ParticleEmitter.js +53 -40
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +1 -1
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- 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 +9 -0
- package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.js +2 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_scene_meshes_cull_and_classify_buckets.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_scene_meshes_cull_and_classify_buckets.js +5 -2
- package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.js +13 -2
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +1 -1
- package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.js +1 -1
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +1 -1
- 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 +12 -1
- 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 +10 -0
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +1 -1
- package/src/shade/renderer/scene/DynamicMesh.d.ts +13 -4
- package/src/shade/renderer/scene/DynamicMesh.d.ts.map +1 -1
- package/src/shade/renderer/scene/DynamicMesh.js +14 -4
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts +38 -18
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +112 -60
- package/src/shade/renderer/scene/GPUSceneContext.d.ts +69 -44
- package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.js +244 -525
- package/src/shade/renderer/scene/NODE3D_STRUCT.d.ts +5 -5
- package/src/shade/renderer/scene/NODE3D_STRUCT.js +5 -5
- package/src/shade/renderer/scene/Scene.d.ts +18 -60
- package/src/shade/renderer/scene/Scene.d.ts.map +1 -1
- package/src/shade/renderer/scene/Scene.js +53 -146
- package/src/shade/renderer/scene/bvh/StaticSceneBVH.d.ts +24 -3
- package/src/shade/renderer/scene/bvh/StaticSceneBVH.d.ts.map +1 -1
- package/src/shade/renderer/scene/bvh/StaticSceneBVH.js +53 -13
- package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.d.ts +5 -6
- package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.d.ts.map +1 -1
- package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.js +5 -6
- package/src/shade/renderer/scene/optimization/scene_optimize.d.ts +10 -2
- package/src/shade/renderer/scene/optimization/scene_optimize.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/scene_optimize.js +266 -230
- package/src/shade/renderer/scene/rows/GPUEntityBoundsReadback.d.ts +53 -0
- package/src/shade/renderer/scene/rows/GPUEntityBoundsReadback.d.ts.map +1 -0
- package/src/shade/renderer/scene/rows/GPUEntityBoundsReadback.js +144 -0
- package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts +227 -0
- package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -0
- package/src/shade/renderer/scene/rows/GPUSceneRows.js +1158 -0
- package/src/shade/renderer/scene/rows/place_primitive.d.ts +48 -0
- package/src/shade/renderer/scene/rows/place_primitive.d.ts.map +1 -0
- package/src/shade/renderer/scene/rows/place_primitive.js +98 -0
- package/src/shade/renderer/scene/serialization/deserialize_scene.d.ts +10 -8
- package/src/shade/renderer/scene/serialization/deserialize_scene.d.ts.map +1 -1
- package/src/shade/renderer/scene/serialization/deserialize_scene.js +24 -27
- package/src/shade/renderer/scene/serialization/serialize_scene.d.ts +9 -2
- package/src/shade/renderer/scene/serialization/serialize_scene.d.ts.map +1 -1
- package/src/shade/renderer/scene/serialization/serialize_scene.js +25 -4
- package/src/shade/renderer/scene/verify_gpu_tlas_build.js +2 -2
- package/src/shade/renderer/shader/chunk/geometry/mat3/chunk_mat3_singular_values.d.ts +35 -0
- package/src/shade/renderer/shader/chunk/geometry/mat3/chunk_mat3_singular_values.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/mat3/chunk_mat3_singular_values.js +91 -0
- package/src/shade/renderer/shader/chunk/light/DIRECTIONAL_LIGHT_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/DIRECTIONAL_LIGHT_STRUCT.js +5 -0
- package/src/shade/renderer/shader/chunk/light/POINT_LIGHT_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/POINT_LIGHT_STRUCT.js +5 -0
- package/src/shade/renderer/shader/chunk/light/SPOT_LIGHT_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/SPOT_LIGHT_STRUCT.js +5 -0
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts +39 -0
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.js +112 -64
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +7 -0
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +1541 -1352
- package/src/shade/renderer/shadow/map/PointLightShadowmap.js +1 -1
- package/src/shade/renderer/shadow/map/SpotLightShadowmap.js +1 -1
- package/src/shade/renderer/shadow/map/TetrahedronPointLightShadowmap.js +1 -1
- package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.d.ts +29 -0
- package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.js +43 -0
- package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION.d.ts +13 -0
- package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION.js +12 -0
- package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.d.ts +49 -0
- package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.js +194 -0
- package/src/shade/renderer/shadow/map/csm_debug_draw_preview.js +1 -1
- package/src/shade/renderer/shadow/map/shadowmap_update_score.js +1 -1
- package/src/shade/renderer/shadow/ray/RTXShadows.js +1 -1
- package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +1 -1
- package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +3 -1
- package/src/shade/renderer/texture/bindless/GPUBindlessTextureManager.js +8 -8
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +4 -3
- package/src/engine/graphics3/instantiate_scene_bundle.d.ts +0 -54
- package/src/engine/graphics3/instantiate_scene_bundle.d.ts.map +0 -1
- package/src/engine/graphics3/instantiate_scene_bundle.js +0 -164
- package/src/engine/graphics3/shade_node_to_entity_composition.d.ts +0 -39
- package/src/engine/graphics3/shade_node_to_entity_composition.d.ts.map +0 -1
- package/src/engine/graphics3/shade_node_to_entity_composition.js +0 -88
- package/src/shade/renderer/animation/compute_skin_world_bounds.d.ts +0 -35
- package/src/shade/renderer/animation/compute_skin_world_bounds.d.ts.map +0 -1
- package/src/shade/renderer/animation/compute_skin_world_bounds.js +0 -146
- package/src/shade/renderer/animation/compute_skinned_mesh_clip_bounding_sphere.d.ts +0 -96
- package/src/shade/renderer/animation/compute_skinned_mesh_clip_bounding_sphere.d.ts.map +0 -1
- package/src/shade/renderer/animation/compute_skinned_mesh_clip_bounding_sphere.js +0 -531
- package/src/shade/renderer/animation/pose/pose_evaluate_world.d.ts +0 -20
- package/src/shade/renderer/animation/pose/pose_evaluate_world.d.ts.map +0 -1
- package/src/shade/renderer/animation/pose/pose_evaluate_world.js +0 -76
- package/src/shade/renderer/animation/skin_bind_transform.d.ts +0 -25
- package/src/shade/renderer/animation/skin_bind_transform.d.ts.map +0 -1
- package/src/shade/renderer/animation/skin_bind_transform.js +0 -33
- package/src/shade/renderer/animation/skin_frame_defect.d.ts +0 -34
- package/src/shade/renderer/animation/skin_frame_defect.d.ts.map +0 -1
- package/src/shade/renderer/animation/skin_frame_defect.js +0 -132
- package/src/shade/renderer/animation/skin_joint_matrix.d.ts +0 -24
- package/src/shade/renderer/animation/skin_joint_matrix.d.ts.map +0 -1
- package/src/shade/renderer/animation/skin_joint_matrix.js +0 -46
- package/src/shade/renderer/animation/skin_normalize_mesh_frame.d.ts +0 -70
- package/src/shade/renderer/animation/skin_normalize_mesh_frame.d.ts.map +0 -1
- package/src/shade/renderer/animation/skin_normalize_mesh_frame.js +0 -216
- package/src/shade/renderer/scene/InstanceBatch.d.ts +0 -92
- package/src/shade/renderer/scene/InstanceBatch.d.ts.map +0 -1
- package/src/shade/renderer/scene/InstanceBatch.js +0 -235
- package/src/shade/renderer/scene/Mesh.d.ts +0 -55
- package/src/shade/renderer/scene/Mesh.d.ts.map +0 -1
- package/src/shade/renderer/scene/Mesh.js +0 -168
- package/src/shade/renderer/scene/Node3D.d.ts +0 -140
- package/src/shade/renderer/scene/Node3D.d.ts.map +0 -1
- package/src/shade/renderer/scene/Node3D.js +0 -263
- package/src/shade/renderer/scene/SceneNodeBinding.d.ts +0 -52
- package/src/shade/renderer/scene/SceneNodeBinding.d.ts.map +0 -1
- package/src/shade/renderer/scene/SceneNodeBinding.js +0 -56
- package/src/shade/renderer/scene/SkinnedMesh.d.ts +0 -110
- package/src/shade/renderer/scene/SkinnedMesh.d.ts.map +0 -1
- package/src/shade/renderer/scene/SkinnedMesh.js +0 -170
- package/src/shade/renderer/scene/TransformAuthority.d.ts +0 -19
- package/src/shade/renderer/scene/TransformAuthority.d.ts.map +0 -1
- package/src/shade/renderer/scene/TransformAuthority.js +0 -33
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { graph_vgeo_expand_instances_to_meshlets } from "./graph_vgeo_expand_instances_to_meshlets.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The seam, at a call site that does not want to know whether this scene has virtual geometry in it.
|
|
5
|
+
*
|
|
6
|
+
* Four rasterization paths call `graph_expand_meshes_to_meshlets`, and each of them gains exactly
|
|
7
|
+
* one line. That line has to be a no-op in the overwhelmingly common case — a scene of ordinary
|
|
8
|
+
* meshes — and it has to be a no-op *cheaply*: not a cut over an empty instance list, but no passes
|
|
9
|
+
* at all, because a wavefront is sixty-odd dispatches whose only output would be zero.
|
|
10
|
+
*
|
|
11
|
+
* The frame check is the second half of that. A runtime exists from the moment somebody enables it,
|
|
12
|
+
* but its feedback buffer exists only between `begin_frame` and `end_frame`; a path that runs
|
|
13
|
+
* outside a frame — a shadow view built before the main pass opens one, say — skips rather than
|
|
14
|
+
* writing into a resource that is not there.
|
|
15
|
+
*
|
|
16
|
+
* **And the graph check is the third.** `GPUSceneShadowmapContext` records through
|
|
17
|
+
* `graph_rasterize_scene_fast_raw`, which carries this seam, on a `FrameGraph` of its own — so a
|
|
18
|
+
* cube or tetra face inside an open frame would run a whole cut, at the *main camera's* projection
|
|
19
|
+
* scale, writing into a resource handle that belongs to another graph. Design §4 pins one cut per
|
|
20
|
+
* view and RUNTIME_PLAN §9 scopes shadow cuts out of v1; a graph that is not the one the frame was
|
|
21
|
+
* opened on is therefore not a graph this seam belongs in (REVIEW_LEDGER M13). When shadow views do
|
|
22
|
+
* get cuts, they get their own `begin_frame` and their own τ, and this check is what makes that a
|
|
23
|
+
* change rather than a discovery.
|
|
24
|
+
*
|
|
25
|
+
* @param {Object} options
|
|
26
|
+
* @param {FrameGraph} options.graph
|
|
27
|
+
* @param {number} options.input_meshes
|
|
28
|
+
* @param {number} options.output_meshlets
|
|
29
|
+
* @param {GPUViewContext} options.view
|
|
30
|
+
* @param {GPUCollectionLimits} options.limits
|
|
31
|
+
* @returns {number} `output_meshlets`, cut records appended or not
|
|
32
|
+
*
|
|
33
|
+
* @author Alex Goldring
|
|
34
|
+
* @copyright Company Named Limited (c) 2026
|
|
35
|
+
*/
|
|
36
|
+
export function graph_vgeo_expand_if_enabled({
|
|
37
|
+
graph,
|
|
38
|
+
input_meshes,
|
|
39
|
+
output_meshlets,
|
|
40
|
+
view,
|
|
41
|
+
limits,
|
|
42
|
+
}) {
|
|
43
|
+
const runtime = view?.scene?.virtual_geometry;
|
|
44
|
+
|
|
45
|
+
if (runtime === undefined || runtime.feedback === -1) {
|
|
46
|
+
return output_meshlets;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (runtime.frame_graph !== graph) {
|
|
50
|
+
return output_meshlets;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return graph_vgeo_expand_instances_to_meshlets({
|
|
54
|
+
graph, input_meshes, output_meshlets, view, runtime, limits
|
|
55
|
+
});
|
|
56
|
+
}
|
package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* **The seam.**
|
|
3
|
+
*
|
|
4
|
+
* `VIRTUAL_GEOMETRY_DESIGN.md` §10 records M0's one engine-facing criterion as the piece that was
|
|
5
|
+
* never built: "nothing has yet entered the meshlet pipeline through a VG-shaped door". This is
|
|
6
|
+
* that door, and its whole shape is one call beside `graph_expand_meshes_to_meshlets`:
|
|
7
|
+
*
|
|
8
|
+
* const meshlets = graph_expand_meshes_to_meshlets({ graph, input_meshes, ... });
|
|
9
|
+
*
|
|
10
|
+
* graph_vgeo_expand_instances_to_meshlets({
|
|
11
|
+
* graph, input_meshes, output_meshlets: meshlets, view, runtime, limits
|
|
12
|
+
* });
|
|
13
|
+
*
|
|
14
|
+
* Three things make that enough, and none of them is an accident of this function:
|
|
15
|
+
*
|
|
16
|
+
* - **The instance list is already the right one.** Each expansion site is handed the visible
|
|
17
|
+
* instances of one bucket in one HZB pass, and those sets are disjoint — the two-way filter
|
|
18
|
+
* splits positive from maybe — so running a cut over each of them costs one cut per view in
|
|
19
|
+
* total and no instance can be cut twice.
|
|
20
|
+
* - **A VG mesh expands to zero static meshlets.** `meshlets_count` is zero for a virtual geometry,
|
|
21
|
+
* so `shader_meshes_to_meshlet_counts` contributes nothing for one without knowing what one is.
|
|
22
|
+
* - **The record type is unchanged.** The cut appends `MESHLET_DEFINITION_STRUCT` into the same
|
|
23
|
+
* collection, naming rows of the same metadata pool, so the HZB meshlet filter, the material
|
|
24
|
+
* bucket, the indirect draw and the G-buffer are untouched.
|
|
25
|
+
*
|
|
26
|
+
* What happens inside is design §7's cut pass: collect the VG instances into object space, scan
|
|
27
|
+
* their claim widths, seed one item per instance, and run the wavefront until it empties.
|
|
28
|
+
*
|
|
29
|
+
* @param {Object} options
|
|
30
|
+
* @param {FrameGraph} options.graph
|
|
31
|
+
* @param {number} options.input_meshes collection of visible mesh row indices
|
|
32
|
+
* @param {number} options.output_meshlets collection the cut appends into
|
|
33
|
+
* @param {GPUViewContext} options.view
|
|
34
|
+
* @param {GPUVirtualGeometryRuntime} options.runtime inside an open frame
|
|
35
|
+
* @param {GPUCollectionLimits} options.limits
|
|
36
|
+
* @returns {number} `output_meshlets`, for chaining
|
|
37
|
+
*
|
|
38
|
+
* @author Alex Goldring
|
|
39
|
+
* @copyright Company Named Limited (c) 2026
|
|
40
|
+
*/
|
|
41
|
+
export function graph_vgeo_expand_instances_to_meshlets({ graph, input_meshes, output_meshlets, view, runtime, limits, }: {
|
|
42
|
+
graph: FrameGraph;
|
|
43
|
+
input_meshes: number;
|
|
44
|
+
output_meshlets: number;
|
|
45
|
+
view: GPUViewContext;
|
|
46
|
+
runtime: GPUVirtualGeometryRuntime;
|
|
47
|
+
limits: GPUCollectionLimits;
|
|
48
|
+
}): number;
|
|
49
|
+
//# sourceMappingURL=graph_vgeo_expand_instances_to_meshlets.d.ts.map
|
package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph_vgeo_expand_instances_to_meshlets.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js"],"names":[],"mappings":"AAiBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH;IAX+B,KAAK;IACT,YAAY,EAA5B,MAAM;IACU,eAAe,EAA/B,MAAM;IACkB,IAAI;IACO,OAAO;IACb,MAAM;IACjC,MAAM,CAmRlB"}
|
package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js
ADDED
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
import { assert } from "../../../../../core/assert.js";
|
|
2
|
+
import { noop } from "../../../../../core/function/noop.js";
|
|
3
|
+
import { BufferResourceDescriptor } from "../../../../device/graph/BufferResourceDescriptor.js";
|
|
4
|
+
import {
|
|
5
|
+
graph_build_indirect_dispatch_command,
|
|
6
|
+
INDIRECT_COMPUTE_COMMAND_DESCRIPTOR
|
|
7
|
+
} from "../../../gpu_primitive/indirect/IndirectComputeCommandBuildPass.js";
|
|
8
|
+
import { graph_prefix_scan_csdldf } from "../../../gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.js";
|
|
9
|
+
import { RasterizationCollectionType } from "../../../rasterize/expand/RasterizationCollectionType.js";
|
|
10
|
+
import { shader_vgeo_cut_collect } from "./cut/shader_vgeo_cut_collect.js";
|
|
11
|
+
import { shader_vgeo_cut_queue_prepare } from "./cut/shader_vgeo_cut_queue_prepare.js";
|
|
12
|
+
import { shader_vgeo_cut_seed } from "./cut/shader_vgeo_cut_seed.js";
|
|
13
|
+
import { shader_vgeo_cut_traverse } from "./cut/shader_vgeo_cut_traverse.js";
|
|
14
|
+
import { VGEO_CUT_WORKGROUP_SIZE } from "./cut/VGEO_CUT_WORKGROUP_SIZE.js";
|
|
15
|
+
import { VGEO_INSTANCE_WORDS } from "./layout/VGEO_INSTANCE_WORDS.js";
|
|
16
|
+
import { VGEO_QUEUE_ITEM_WORDS } from "./layout/VGEO_QUEUE_ITEM_WORDS.js";
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* **The seam.**
|
|
20
|
+
*
|
|
21
|
+
* `VIRTUAL_GEOMETRY_DESIGN.md` §10 records M0's one engine-facing criterion as the piece that was
|
|
22
|
+
* never built: "nothing has yet entered the meshlet pipeline through a VG-shaped door". This is
|
|
23
|
+
* that door, and its whole shape is one call beside `graph_expand_meshes_to_meshlets`:
|
|
24
|
+
*
|
|
25
|
+
* const meshlets = graph_expand_meshes_to_meshlets({ graph, input_meshes, ... });
|
|
26
|
+
*
|
|
27
|
+
* graph_vgeo_expand_instances_to_meshlets({
|
|
28
|
+
* graph, input_meshes, output_meshlets: meshlets, view, runtime, limits
|
|
29
|
+
* });
|
|
30
|
+
*
|
|
31
|
+
* Three things make that enough, and none of them is an accident of this function:
|
|
32
|
+
*
|
|
33
|
+
* - **The instance list is already the right one.** Each expansion site is handed the visible
|
|
34
|
+
* instances of one bucket in one HZB pass, and those sets are disjoint — the two-way filter
|
|
35
|
+
* splits positive from maybe — so running a cut over each of them costs one cut per view in
|
|
36
|
+
* total and no instance can be cut twice.
|
|
37
|
+
* - **A VG mesh expands to zero static meshlets.** `meshlets_count` is zero for a virtual geometry,
|
|
38
|
+
* so `shader_meshes_to_meshlet_counts` contributes nothing for one without knowing what one is.
|
|
39
|
+
* - **The record type is unchanged.** The cut appends `MESHLET_DEFINITION_STRUCT` into the same
|
|
40
|
+
* collection, naming rows of the same metadata pool, so the HZB meshlet filter, the material
|
|
41
|
+
* bucket, the indirect draw and the G-buffer are untouched.
|
|
42
|
+
*
|
|
43
|
+
* What happens inside is design §7's cut pass: collect the VG instances into object space, scan
|
|
44
|
+
* their claim widths, seed one item per instance, and run the wavefront until it empties.
|
|
45
|
+
*
|
|
46
|
+
* @param {Object} options
|
|
47
|
+
* @param {FrameGraph} options.graph
|
|
48
|
+
* @param {number} options.input_meshes collection of visible mesh row indices
|
|
49
|
+
* @param {number} options.output_meshlets collection the cut appends into
|
|
50
|
+
* @param {GPUViewContext} options.view
|
|
51
|
+
* @param {GPUVirtualGeometryRuntime} options.runtime inside an open frame
|
|
52
|
+
* @param {GPUCollectionLimits} options.limits
|
|
53
|
+
* @returns {number} `output_meshlets`, for chaining
|
|
54
|
+
*
|
|
55
|
+
* @author Alex Goldring
|
|
56
|
+
* @copyright Company Named Limited (c) 2026
|
|
57
|
+
*/
|
|
58
|
+
export function graph_vgeo_expand_instances_to_meshlets({
|
|
59
|
+
graph,
|
|
60
|
+
input_meshes,
|
|
61
|
+
output_meshlets,
|
|
62
|
+
view,
|
|
63
|
+
runtime,
|
|
64
|
+
limits,
|
|
65
|
+
}) {
|
|
66
|
+
assert.defined(graph, 'graph');
|
|
67
|
+
assert.isNonNegativeInteger(input_meshes, 'input_meshes');
|
|
68
|
+
assert.isNonNegativeInteger(output_meshlets, 'output_meshlets');
|
|
69
|
+
assert.defined(runtime, 'runtime');
|
|
70
|
+
assert.notEqual(runtime.feedback, -1, 'runtime.feedback — begin_frame must have run');
|
|
71
|
+
|
|
72
|
+
const scene = view.scene;
|
|
73
|
+
const pool = runtime.pool;
|
|
74
|
+
|
|
75
|
+
graph.push_scope("virtual geometry cut");
|
|
76
|
+
|
|
77
|
+
const instance_capacity = Math.max(1, limits.get_limit(RasterizationCollectionType.Meshes));
|
|
78
|
+
|
|
79
|
+
/*
|
|
80
|
+
What this site was handed, before any pass of it is recorded. Both numbers bound an append in
|
|
81
|
+
the kernel, and both are properties of a collection rather than of the frame — `meshlet_capacity`
|
|
82
|
+
was a constant 1 << 20 against a collection whose engine default is 2e5, so the draw-record
|
|
83
|
+
bound was five times the buffer it was checking.
|
|
84
|
+
*/
|
|
85
|
+
runtime.declare_collections({
|
|
86
|
+
instance_capacity,
|
|
87
|
+
meshlet_capacity: Math.max(1, limits.get_limit(RasterizationCollectionType.Meshlets)),
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
// ----- collect: which of these instances are virtual, and where is the camera in each one -----
|
|
91
|
+
|
|
92
|
+
const collect_command = graph_build_indirect_dispatch_command(
|
|
93
|
+
graph, input_meshes, VGEO_CUT_WORKGROUP_SIZE
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
const collect_data = {};
|
|
97
|
+
|
|
98
|
+
const collect_pass = graph.add("collect vg instances", collect_data, (data, resources, context) => {
|
|
99
|
+
shader_vgeo_cut_collect.dispatchIndirect({
|
|
100
|
+
encoder: context.encoder,
|
|
101
|
+
command: resources.get(data.command),
|
|
102
|
+
bindings: {
|
|
103
|
+
params: runtime.params_buffer,
|
|
104
|
+
camera: view.camera.buffer,
|
|
105
|
+
scene_database: scene.scene_database_buffer,
|
|
106
|
+
geometries: scene.geometries.buffer_metadata,
|
|
107
|
+
vg_geometries: pool.buffer_geometries,
|
|
108
|
+
input_meshes: resources.get(data.input_meshes),
|
|
109
|
+
instances: resources.get(data.instances),
|
|
110
|
+
claim_widths: resources.get(data.claim_widths),
|
|
111
|
+
feedback: resources.get(data.feedback),
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
collect_data.command = collect_pass.read(collect_command);
|
|
117
|
+
collect_data.input_meshes = collect_pass.read(input_meshes);
|
|
118
|
+
|
|
119
|
+
collect_data.instances = collect_pass.create("vg instances", BufferResourceDescriptor.from(
|
|
120
|
+
instance_capacity * VGEO_INSTANCE_WORDS * 4,
|
|
121
|
+
GPUBufferUsage.STORAGE,
|
|
122
|
+
0, 16
|
|
123
|
+
));
|
|
124
|
+
|
|
125
|
+
collect_data.claim_widths = collect_pass.create("vg claim widths", BufferResourceDescriptor.from(
|
|
126
|
+
16 + instance_capacity * 4,
|
|
127
|
+
GPUBufferUsage.STORAGE,
|
|
128
|
+
0, 16
|
|
129
|
+
));
|
|
130
|
+
|
|
131
|
+
// the first writer of the frame's counters, so the version chain starts here
|
|
132
|
+
collect_data.feedback = collect_pass.write(runtime.feedback);
|
|
133
|
+
|
|
134
|
+
/*
|
|
135
|
+
The scan turns each instance's claim width into the first bit of its slice. It is the same
|
|
136
|
+
primitive and the same shape `graph_expand_meshes_to_meshlets` uses to size its own output, and
|
|
137
|
+
for the same reason: a dense base per element, computed on the device, out of counts only the
|
|
138
|
+
device knows.
|
|
139
|
+
*/
|
|
140
|
+
const prefix_sums = graph_prefix_scan_csdldf({
|
|
141
|
+
graph,
|
|
142
|
+
data: collect_data.claim_widths,
|
|
143
|
+
element_max_count: instance_capacity,
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
// ----- seed: one item per instance, naming its root page's node 0 -----
|
|
147
|
+
|
|
148
|
+
const seed_command = graph_build_indirect_dispatch_command(
|
|
149
|
+
graph, prefix_sums, VGEO_CUT_WORKGROUP_SIZE
|
|
150
|
+
);
|
|
151
|
+
|
|
152
|
+
const queue_descriptor = BufferResourceDescriptor.from(
|
|
153
|
+
16 + runtime.queue_capacity * VGEO_QUEUE_ITEM_WORDS * 4,
|
|
154
|
+
GPUBufferUsage.STORAGE,
|
|
155
|
+
0, 16
|
|
156
|
+
);
|
|
157
|
+
|
|
158
|
+
const seed_data = {};
|
|
159
|
+
|
|
160
|
+
const seed_pass = graph.add("seed vg wavefront", seed_data, (data, resources, context) => {
|
|
161
|
+
shader_vgeo_cut_seed.dispatchIndirect({
|
|
162
|
+
encoder: context.encoder,
|
|
163
|
+
command: resources.get(data.command),
|
|
164
|
+
bindings: {
|
|
165
|
+
params: runtime.params_buffer,
|
|
166
|
+
vg_arena: pool.buffer_arena,
|
|
167
|
+
prefix_sums: resources.get(data.prefix_sums),
|
|
168
|
+
instances: resources.get(data.instances),
|
|
169
|
+
queue_out: resources.get(data.queue_out),
|
|
170
|
+
claim: resources.get(data.claim),
|
|
171
|
+
feedback: resources.get(data.feedback),
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
seed_data.command = seed_pass.read(seed_command);
|
|
177
|
+
seed_data.prefix_sums = seed_pass.read(prefix_sums);
|
|
178
|
+
seed_data.instances = seed_pass.write(collect_data.instances);
|
|
179
|
+
|
|
180
|
+
/*
|
|
181
|
+
Cleared per invocation, and that is not an optimization that could be traded away: each
|
|
182
|
+
expansion site sees a different instance set, so a claim carried over from the previous site
|
|
183
|
+
would make every page of this one look already visited. The stamps in the feedback buffer are
|
|
184
|
+
the opposite case — per frame, shared, and not cleared here.
|
|
185
|
+
*/
|
|
186
|
+
seed_data.claim = seed_pass.create("vg claim", BufferResourceDescriptor.empty(
|
|
187
|
+
runtime.claim_word_capacity * 4,
|
|
188
|
+
GPUBufferUsage.STORAGE
|
|
189
|
+
));
|
|
190
|
+
|
|
191
|
+
seed_data.feedback = seed_pass.write(collect_data.feedback);
|
|
192
|
+
seed_data.queue_out = seed_pass.create("vg queue a", queue_descriptor);
|
|
193
|
+
|
|
194
|
+
const spare_spawn = graph.add("vg queue b", {}, noop);
|
|
195
|
+
|
|
196
|
+
/*
|
|
197
|
+
The two queues ping-pong, so *which* of them holds work is not a property of either buffer —
|
|
198
|
+
it moves every iteration. Carrying the roles rather than the buffers is what makes the tail
|
|
199
|
+
pass below correct at any `max_iterations`: it was written as `queue_a`, which is the produced
|
|
200
|
+
queue only when the iteration count is even, and the default of 64 is (REVIEW_LEDGER M8).
|
|
201
|
+
*/
|
|
202
|
+
let ready_queue = seed_data.queue_out;
|
|
203
|
+
let spare_queue = spare_spawn.create("vg queue b", queue_descriptor);
|
|
204
|
+
|
|
205
|
+
let claim = seed_data.claim;
|
|
206
|
+
let feedback = seed_data.feedback;
|
|
207
|
+
let meshlets = output_meshlets;
|
|
208
|
+
|
|
209
|
+
const instances = seed_data.instances;
|
|
210
|
+
|
|
211
|
+
// ----- the wavefront -----
|
|
212
|
+
|
|
213
|
+
for (let iteration = 0; iteration < runtime.max_iterations; iteration++) {
|
|
214
|
+
const prepare_data = {};
|
|
215
|
+
|
|
216
|
+
const prepare_pass = graph.add(
|
|
217
|
+
`vg prepare ${iteration}`, prepare_data, (data, resources, context) => {
|
|
218
|
+
shader_vgeo_cut_queue_prepare.dispatch({
|
|
219
|
+
encoder: context.encoder,
|
|
220
|
+
bindings: {
|
|
221
|
+
params: runtime.params_buffer,
|
|
222
|
+
queue_ready: resources.get(data.queue_ready),
|
|
223
|
+
queue_spare: resources.get(data.queue_spare),
|
|
224
|
+
command: resources.get(data.command),
|
|
225
|
+
feedback: resources.get(data.feedback),
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
);
|
|
230
|
+
|
|
231
|
+
/*
|
|
232
|
+
Both queues, because this pass does two things at once and they belong together: it clamps
|
|
233
|
+
what the last wavefront produced — the count runs past capacity by design, and handing
|
|
234
|
+
*that* to an indirect dispatch would dispatch lanes over the end of a pooled buffer — and
|
|
235
|
+
it empties the one the next wavefront will write. There is exactly one moment when neither
|
|
236
|
+
wavefront is touching either, and this is it.
|
|
237
|
+
*/
|
|
238
|
+
const ready = prepare_data.queue_ready = prepare_pass.write(ready_queue);
|
|
239
|
+
const spare = prepare_data.queue_spare = prepare_pass.write(spare_queue);
|
|
240
|
+
|
|
241
|
+
feedback = prepare_data.feedback = prepare_pass.write(feedback);
|
|
242
|
+
|
|
243
|
+
prepare_data.command = prepare_pass.create(
|
|
244
|
+
`vg command ${iteration}`, INDIRECT_COMPUTE_COMMAND_DESCRIPTOR
|
|
245
|
+
);
|
|
246
|
+
|
|
247
|
+
const traverse_data = {};
|
|
248
|
+
|
|
249
|
+
const traverse_pass = graph.add(
|
|
250
|
+
`vg traverse ${iteration}`, traverse_data, (data, resources, context) => {
|
|
251
|
+
shader_vgeo_cut_traverse.dispatchIndirect({
|
|
252
|
+
encoder: context.encoder,
|
|
253
|
+
command: resources.get(data.command),
|
|
254
|
+
bindings: {
|
|
255
|
+
params: runtime.params_buffer,
|
|
256
|
+
vg_lookup: pool.buffer_lookup,
|
|
257
|
+
vg_arena: pool.buffer_arena,
|
|
258
|
+
instances: resources.get(data.instances),
|
|
259
|
+
queue_in: resources.get(data.queue_in),
|
|
260
|
+
queue_out: resources.get(data.queue_out),
|
|
261
|
+
claim: resources.get(data.claim),
|
|
262
|
+
feedback: resources.get(data.feedback),
|
|
263
|
+
out_meshlets: resources.get(data.out_meshlets),
|
|
264
|
+
}
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
);
|
|
268
|
+
|
|
269
|
+
traverse_data.command = traverse_pass.read(prepare_data.command);
|
|
270
|
+
traverse_data.instances = traverse_pass.read(instances);
|
|
271
|
+
traverse_data.queue_in = traverse_pass.read(ready);
|
|
272
|
+
|
|
273
|
+
const produced = traverse_data.queue_out = traverse_pass.write(spare);
|
|
274
|
+
|
|
275
|
+
claim = traverse_data.claim = traverse_pass.write(claim);
|
|
276
|
+
feedback = traverse_data.feedback = traverse_pass.write(feedback);
|
|
277
|
+
meshlets = traverse_data.out_meshlets = traverse_pass.write(meshlets);
|
|
278
|
+
|
|
279
|
+
// what this wavefront produced is what the next one consumes, and the drained one is spare
|
|
280
|
+
ready_queue = produced;
|
|
281
|
+
spare_queue = ready;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/*
|
|
285
|
+
One more prepare, for its counters alone. The loop above records a fixed number of
|
|
286
|
+
prepare/traverse pairs and the queue can still hold work when the last of them finishes — a
|
|
287
|
+
subtree never descended, which is a hole rather than a coarse stand-in, and the one degradation
|
|
288
|
+
§4.5 admits. Nothing recorded it. This pass leaves the outstanding count in
|
|
289
|
+
`VGEO_CUT_STAT.QUEUE_REMAINING`, and the dispatch command it also produces is simply not used.
|
|
290
|
+
|
|
291
|
+
`ready_queue` and not `queue_a`: the prepare pass reports the count of `queue_ready` and
|
|
292
|
+
*zeroes* `queue_spare`, so binding the drained queue as ready would report a count of work
|
|
293
|
+
already done and destroy the count of the work that was left. Which buffer holds which
|
|
294
|
+
alternates per iteration, so the roles are carried through the loop rather than named here.
|
|
295
|
+
*/
|
|
296
|
+
const tail_data = {};
|
|
297
|
+
|
|
298
|
+
const tail_pass = graph.add("vg queue tail", tail_data, (data, resources, context) => {
|
|
299
|
+
shader_vgeo_cut_queue_prepare.dispatch({
|
|
300
|
+
encoder: context.encoder,
|
|
301
|
+
bindings: {
|
|
302
|
+
params: runtime.params_buffer,
|
|
303
|
+
queue_ready: resources.get(data.queue_ready),
|
|
304
|
+
queue_spare: resources.get(data.queue_spare),
|
|
305
|
+
command: resources.get(data.command),
|
|
306
|
+
feedback: resources.get(data.feedback),
|
|
307
|
+
}
|
|
308
|
+
});
|
|
309
|
+
});
|
|
310
|
+
|
|
311
|
+
tail_data.queue_ready = tail_pass.write(ready_queue);
|
|
312
|
+
tail_data.queue_spare = tail_pass.write(spare_queue);
|
|
313
|
+
tail_data.command = tail_pass.create("vg command tail", INDIRECT_COMPUTE_COMMAND_DESCRIPTOR);
|
|
314
|
+
|
|
315
|
+
feedback = tail_data.feedback = tail_pass.write(feedback);
|
|
316
|
+
|
|
317
|
+
/*
|
|
318
|
+
Every expansion of this frame writes into one feedback buffer, so the next one has to start
|
|
319
|
+
from the version this one produced rather than from the version `begin_frame` created — and so
|
|
320
|
+
does the readback. The graph catches the alternative outright, which is the best kind of
|
|
321
|
+
invariant to have.
|
|
322
|
+
*/
|
|
323
|
+
runtime.publish_feedback(feedback);
|
|
324
|
+
|
|
325
|
+
graph.pop_scope();
|
|
326
|
+
|
|
327
|
+
return meshlets;
|
|
328
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export namespace VGEO_CLUSTER_ROW_OFFSET {
|
|
2
|
+
let SELF_SPHERE: number;
|
|
3
|
+
let PARENT_SPHERE: number;
|
|
4
|
+
let SELF_ERROR: number;
|
|
5
|
+
let PARENT_ERROR: number;
|
|
6
|
+
let CHILD_PAGE_INDEX: number;
|
|
7
|
+
let CHILD_GROUP: number;
|
|
8
|
+
let CHILD_REF: number;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=VGEO_CLUSTER_ROW_OFFSET.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VGEO_CLUSTER_ROW_OFFSET.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_OFFSET.js"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Word offsets within one cluster row of the **selection buffer** — the VG-owned table the cut pass
|
|
3
|
+
* reads and nothing else writes.
|
|
4
|
+
*
|
|
5
|
+
* `VIRTUAL_GEOMETRY_DESIGN.md` §7 says why it exists rather than the cut reading the meshlet
|
|
6
|
+
* metadata pool: freed slices of that pool hold garbage, and it carries no error pairs at all.
|
|
7
|
+
*
|
|
8
|
+
* The row is the cut rule's operands and its edge, and nothing more. Culling bounds
|
|
9
|
+
* (`bounds_sphere`, `aabb`) are deliberately absent — the `aabb` becomes the meshlet metadata's
|
|
10
|
+
* `bounds_box` at install and is culled downstream by the HZB filter, so carrying it here would be
|
|
11
|
+
* a second copy read by nobody.
|
|
12
|
+
*
|
|
13
|
+
* `child_page_index` is **resolved at install**: a `SAME_PAGE` reference stores the owning page's
|
|
14
|
+
* own global index, so the kernel's lookup path is uniform and there is no `SAME_PAGE` branch
|
|
15
|
+
* anywhere in it. A leaf stores {@link VGEO_NO_CHILD_PAGE}.
|
|
16
|
+
*
|
|
17
|
+
* @author Alex Goldring
|
|
18
|
+
* @copyright Company Named Limited (c) 2026
|
|
19
|
+
*/
|
|
20
|
+
export const VGEO_CLUSTER_ROW_OFFSET = {
|
|
21
|
+
/**
|
|
22
|
+
* The LOD-metric sphere of the step that created this cluster, `cx cy cz r`.
|
|
23
|
+
*/
|
|
24
|
+
SELF_SPHERE: 0,
|
|
25
|
+
/**
|
|
26
|
+
* The LOD-metric sphere of the step that consumed it; a root's duplicates its own.
|
|
27
|
+
*/
|
|
28
|
+
PARENT_SPHERE: 4,
|
|
29
|
+
/**
|
|
30
|
+
* Object-space `r_e`. Zero exactly for leaves, and `project((s, 0)) ≡ 0` unconditionally.
|
|
31
|
+
*/
|
|
32
|
+
SELF_ERROR: 8,
|
|
33
|
+
/**
|
|
34
|
+
* `+∞` for the one root.
|
|
35
|
+
*/
|
|
36
|
+
PARENT_ERROR: 9,
|
|
37
|
+
/**
|
|
38
|
+
* Global page index of the child group's page, or {@link VGEO_NO_CHILD_PAGE}.
|
|
39
|
+
*/
|
|
40
|
+
CHILD_PAGE_INDEX: 10,
|
|
41
|
+
/**
|
|
42
|
+
* Group index within that page.
|
|
43
|
+
*/
|
|
44
|
+
CHILD_GROUP: 11,
|
|
45
|
+
/**
|
|
46
|
+
* Index into the *owning* page's child table. A want names it, which is what lets the CPU
|
|
47
|
+
* resolve a byte range without a directory — and what names the page the want was discovered
|
|
48
|
+
* *through*, which `VGEO_FORMAT.md` §10 wants for in-flight pinning.
|
|
49
|
+
*/
|
|
50
|
+
CHILD_REF: 12,
|
|
51
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Words in one selection-buffer cluster row.
|
|
3
|
+
*
|
|
4
|
+
* Not rounded up to a power of two. At the million resident clusters
|
|
5
|
+
* `VIRTUAL_GEOMETRY_DESIGN.md` §4 targets, thirteen words is 52 MB and sixteen is 64 — and the
|
|
6
|
+
* addressing is a multiply either way, so the padding would buy nothing and cost twelve megabytes.
|
|
7
|
+
*
|
|
8
|
+
* @author Alex Goldring
|
|
9
|
+
* @copyright Company Named Limited (c) 2026
|
|
10
|
+
* @type {number}
|
|
11
|
+
*/
|
|
12
|
+
export const VGEO_CLUSTER_ROW_WORDS: number;
|
|
13
|
+
//# sourceMappingURL=VGEO_CLUSTER_ROW_WORDS.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VGEO_CLUSTER_ROW_WORDS.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_WORDS.js"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,qCAFU,MAAM,CAEyB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Words in one selection-buffer cluster row.
|
|
3
|
+
*
|
|
4
|
+
* Not rounded up to a power of two. At the million resident clusters
|
|
5
|
+
* `VIRTUAL_GEOMETRY_DESIGN.md` §4 targets, thirteen words is 52 MB and sixteen is 64 — and the
|
|
6
|
+
* addressing is a multiply either way, so the padding would buy nothing and cost twelve megabytes.
|
|
7
|
+
*
|
|
8
|
+
* @author Alex Goldring
|
|
9
|
+
* @copyright Company Named Limited (c) 2026
|
|
10
|
+
* @type {number}
|
|
11
|
+
*/
|
|
12
|
+
export const VGEO_CLUSTER_ROW_WORDS = 13;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export namespace VGEO_CUT_STAT {
|
|
2
|
+
let DRAWN: number;
|
|
3
|
+
let CLAMPED: number;
|
|
4
|
+
let CLAMPED_ON_ACTIVATION: number;
|
|
5
|
+
let ITEMS: number;
|
|
6
|
+
let PAGES: number;
|
|
7
|
+
let CLUSTERS_TESTED: number;
|
|
8
|
+
let CULLED_FRUSTUM: number;
|
|
9
|
+
let CULLED_LOD: number;
|
|
10
|
+
let MESHLETS_DROPPED: number;
|
|
11
|
+
let WANTS_DROPPED: number;
|
|
12
|
+
let QUEUE_DROPPED: number;
|
|
13
|
+
let INSTANCES_DROPPED: number;
|
|
14
|
+
let WAVEFRONTS: number;
|
|
15
|
+
let QUEUE_REMAINING: number;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=VGEO_CUT_STAT.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VGEO_CUT_STAT.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT.js"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Counter slots in the feedback buffer's stat block — the cut telling the truth about itself.
|
|
3
|
+
*
|
|
4
|
+
* Design §10 asks M1 for "selection cost measured"; these are what measures it, and several are
|
|
5
|
+
* correctness signals rather than performance ones. {@link CLAMPED} at rest above zero means the
|
|
6
|
+
* cut on screen is standing in for something finer, and the want list says what to fetch to fix it.
|
|
7
|
+
* Any `*_DROPPED` above zero means a bound was hit, and every bound in this runtime is arranged to
|
|
8
|
+
* degrade the same way — coarser or missing, never doubled.
|
|
9
|
+
*
|
|
10
|
+
* @author Alex Goldring
|
|
11
|
+
* @copyright Company Named Limited (c) 2026
|
|
12
|
+
*/
|
|
13
|
+
export const VGEO_CUT_STAT = {
|
|
14
|
+
/**
|
|
15
|
+
* Clusters that passed the whole predicate and emitted a draw record.
|
|
16
|
+
*/
|
|
17
|
+
DRAWN: 0,
|
|
18
|
+
/**
|
|
19
|
+
* Clusters drawn above the threshold because the page holding their refinement is not
|
|
20
|
+
* VRAM-resident.
|
|
21
|
+
*/
|
|
22
|
+
CLAMPED: 1,
|
|
23
|
+
/**
|
|
24
|
+
* Of those, the ones whose child page **is** here and whose child group is merely not
|
|
25
|
+
* selectable yet, because a page holding one of that group's other parents is not.
|
|
26
|
+
*
|
|
27
|
+
* They carry no want: there is nothing to fetch from a cluster that already has the bytes it
|
|
28
|
+
* points at. So this is not a second streaming frontier — it is how much of the coarseness on
|
|
29
|
+
* screen is the activation rule holding a group back rather than bandwidth.
|
|
30
|
+
*/
|
|
31
|
+
CLAMPED_ON_ACTIVATION: 2,
|
|
32
|
+
/**
|
|
33
|
+
* Queue items popped, summed over every iteration.
|
|
34
|
+
*/
|
|
35
|
+
ITEMS: 3,
|
|
36
|
+
/**
|
|
37
|
+
* Page visits that won their claim — the cut's real page working set, per view.
|
|
38
|
+
*/
|
|
39
|
+
PAGES: 4,
|
|
40
|
+
/**
|
|
41
|
+
* Cluster rows the predicate was evaluated against.
|
|
42
|
+
*/
|
|
43
|
+
CLUSTERS_TESTED: 5,
|
|
44
|
+
/**
|
|
45
|
+
* Subtrees discarded by the frustum, at a node rather than at a cluster.
|
|
46
|
+
*/
|
|
47
|
+
CULLED_FRUSTUM: 6,
|
|
48
|
+
/**
|
|
49
|
+
* Subtrees discarded because nothing under them could satisfy `project(parent) > tau`.
|
|
50
|
+
*/
|
|
51
|
+
CULLED_LOD: 7,
|
|
52
|
+
/**
|
|
53
|
+
* Draw records that did not fit the meshlet collection.
|
|
54
|
+
*/
|
|
55
|
+
MESHLETS_DROPPED: 8,
|
|
56
|
+
/**
|
|
57
|
+
* Wants that did not fit their list.
|
|
58
|
+
*/
|
|
59
|
+
WANTS_DROPPED: 9,
|
|
60
|
+
/**
|
|
61
|
+
* Queue items that did not fit the next wavefront.
|
|
62
|
+
*
|
|
63
|
+
* Unlike the others this one **can** cost correctness: a dropped item is a subtree never
|
|
64
|
+
* descended, and the parent that would have stood in over it was not drawn either — so it is a
|
|
65
|
+
* hole rather than a coarse stand-in. It is bounded by the queue's size, which is a host-side
|
|
66
|
+
* option, and it is the one counter worth alarming on.
|
|
67
|
+
*/
|
|
68
|
+
QUEUE_DROPPED: 10,
|
|
69
|
+
/**
|
|
70
|
+
* Instances refused because their slice of the claim bitmask did not fit.
|
|
71
|
+
*
|
|
72
|
+
* Refusing the instance is the point. An instance run *without* a claim visits every page once
|
|
73
|
+
* per parent page that reaches it — 82 of 91 pages on a measured sphere have more than one
|
|
74
|
+
* parent — and draws its whole cut that many times over, which reads as corrupt geometry rather
|
|
75
|
+
* than as a missing instance.
|
|
76
|
+
*/
|
|
77
|
+
INSTANCES_DROPPED: 11,
|
|
78
|
+
/**
|
|
79
|
+
* Wavefronts that actually ran — one per iteration whose queue was not empty.
|
|
80
|
+
*
|
|
81
|
+
* The descent is a fixed number of indirect dispatches, of zero workgroups once the work runs
|
|
82
|
+
* out, so this is the only way to know how deep it went. RUNTIME_PLAN §4.7 measures depth at
|
|
83
|
+
* about 48 against a default budget of 64; this reaching the budget means the measurement no
|
|
84
|
+
* longer holds for the asset on screen.
|
|
85
|
+
*/
|
|
86
|
+
WAVEFRONTS: 12,
|
|
87
|
+
/**
|
|
88
|
+
* Items still queued when the descent stopped.
|
|
89
|
+
*
|
|
90
|
+
* **The one degradation that costs a hole rather than coarseness**, and it was silent. §4.5
|
|
91
|
+
* promises every bound "degrades in one direction" and §4.7 promises the exhaustion is
|
|
92
|
+
* recorded; neither counter existed (REVIEW_LEDGER M8, D1).
|
|
93
|
+
*
|
|
94
|
+
* Written by the prepare pass with a plain store rather than an add, so the last prepare of the
|
|
95
|
+
* frame — one extra, recorded after the wavefront loop for exactly this — leaves behind the
|
|
96
|
+
* number that was outstanding at the end.
|
|
97
|
+
*/
|
|
98
|
+
QUEUE_REMAINING: 13,
|
|
99
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VGEO_CUT_STAT_COUNT.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT_COUNT.js"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,kCAFU,MAAM,CAEsB"}
|