@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,247 @@
|
|
|
1
|
+
import { assert } from "../../assert.js";
|
|
2
|
+
import { isPowerOfTwo } from "../../math/isPowerOfTwo.js";
|
|
3
|
+
import { lowbias32 } from "../../math/hash/lowbias32.js";
|
|
4
|
+
import { generate_next_linear_congruential_index } from "./generate_next_linear_congruential_index.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* What {@link u32_index_get} returns for a key the index does not hold.
|
|
8
|
+
*
|
|
9
|
+
* Also what a key holding the value `-1` reads back as — the two are deliberately
|
|
10
|
+
* indistinguishable, which is what lets a caller retire a key without the index needing tombstones.
|
|
11
|
+
* See {@link u32_index_set}.
|
|
12
|
+
*
|
|
13
|
+
* @type {number}
|
|
14
|
+
*/
|
|
15
|
+
export const U32_INDEX_MISS = -1;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* `[count, slots]`, then `slots` pairs of `[encoded_key, value]`. Two words rather than one so the
|
|
19
|
+
* pairs stay 8-byte aligned.
|
|
20
|
+
* @type {number}
|
|
21
|
+
*/
|
|
22
|
+
const HEADER_WORDS = 2;
|
|
23
|
+
|
|
24
|
+
const COUNT_WORD = 0;
|
|
25
|
+
const SLOTS_WORD = 1;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Smallest table. Small enough that a table holding a handful of keys is not mostly hole, large
|
|
29
|
+
* enough that {@link MAX_LOAD_NUMERATOR} leaves slack at this size too.
|
|
30
|
+
* @type {number}
|
|
31
|
+
*/
|
|
32
|
+
const MIN_SLOTS = 16;
|
|
33
|
+
|
|
34
|
+
// Grow past 3/5 occupancy. The slack is not only about probe cost: it is what makes the probe
|
|
35
|
+
// terminate at all — see the module docs on u32_index_get.
|
|
36
|
+
const MAX_LOAD_NUMERATOR = 3;
|
|
37
|
+
const MAX_LOAD_DENOMINATOR = 5;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* An open-addressed `u32 -> i32` index in a single `Uint32Array`, as free functions over the array
|
|
41
|
+
* rather than an object wrapping it. Nothing per entry is allocated, so an index that has reached
|
|
42
|
+
* its working size costs the garbage collector nothing at all; a `Map<number,number>` doing the
|
|
43
|
+
* same work allocates a fresh backing store every time it is cleared.
|
|
44
|
+
*
|
|
45
|
+
* **Keys** are `u32` and stored as `key + 1`, so a zero word is an empty slot and a freshly
|
|
46
|
+
* allocated array is already a valid empty index — {@link u32_index_clear} is one `fill(0)`, and
|
|
47
|
+
* creation needs no fill at all. `0xFFFFFFFF` is therefore not a usable key.
|
|
48
|
+
*
|
|
49
|
+
* **Values** are `i32`. A caller storing `-1` makes the key read back as {@link U32_INDEX_MISS},
|
|
50
|
+
* which is how a key is retired: the slot stays claimed, and no tombstone state has to exist for
|
|
51
|
+
* the probe to step over. Values are not otherwise interpreted.
|
|
52
|
+
*
|
|
53
|
+
* The probe is {@link generate_next_linear_congruential_index}, which is full-cycle over a
|
|
54
|
+
* power-of-two table — it visits every slot before repeating. Combined with the load factor, which
|
|
55
|
+
* guarantees at least one empty slot at all times, **the probe terminates by construction** and
|
|
56
|
+
* neither lookup nor insert carries a step limit. Both properties are load-bearing: a table
|
|
57
|
+
* allowed to fill would let a lookup for an absent key run forever.
|
|
58
|
+
*
|
|
59
|
+
* Sized for a key set that turns over completely each frame — build it up, clear it, build it
|
|
60
|
+
* again — which is what the GPU table upload streams do with it.
|
|
61
|
+
*
|
|
62
|
+
* @see cpu_build_hash_table for the same layout in a table the GPU also reads, where the probe
|
|
63
|
+
* count is instead bounded to match a WGSL twin that cannot grow.
|
|
64
|
+
*/
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* A new empty index.
|
|
68
|
+
*
|
|
69
|
+
* @param {number} [slots] power of two, rounded up to {@link MIN_SLOTS}
|
|
70
|
+
* @returns {Uint32Array}
|
|
71
|
+
*/
|
|
72
|
+
export function u32_index_create(slots = MIN_SLOTS) {
|
|
73
|
+
assert.isNonNegativeInteger(slots, 'slots');
|
|
74
|
+
assert.ok(isPowerOfTwo(slots), `slots must be a power of two, got ${slots}`);
|
|
75
|
+
|
|
76
|
+
const size = Math.max(MIN_SLOTS, slots);
|
|
77
|
+
|
|
78
|
+
// zero-filled by construction, and a zero key word means empty
|
|
79
|
+
const table = new Uint32Array(HEADER_WORDS + size * 2);
|
|
80
|
+
|
|
81
|
+
table[SLOTS_WORD] = size;
|
|
82
|
+
|
|
83
|
+
return table;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* How many keys the index holds, retired ones included.
|
|
88
|
+
*
|
|
89
|
+
* @param {Uint32Array} table
|
|
90
|
+
* @returns {number}
|
|
91
|
+
*/
|
|
92
|
+
export function u32_index_count(table) {
|
|
93
|
+
return table[COUNT_WORD];
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* The value stored for a key, or {@link U32_INDEX_MISS} if the index does not hold it — or holds
|
|
98
|
+
* it retired.
|
|
99
|
+
*
|
|
100
|
+
* @param {Uint32Array} table
|
|
101
|
+
* @param {number} key
|
|
102
|
+
* @returns {number} i32
|
|
103
|
+
*/
|
|
104
|
+
export function u32_index_get(table, key) {
|
|
105
|
+
const mask = table[SLOTS_WORD] - 1;
|
|
106
|
+
const encoded = key + 1;
|
|
107
|
+
|
|
108
|
+
let slot = lowbias32(key) & mask;
|
|
109
|
+
|
|
110
|
+
for (; ;) {
|
|
111
|
+
const address = HEADER_WORDS + slot * 2;
|
|
112
|
+
const candidate = table[address];
|
|
113
|
+
|
|
114
|
+
if (candidate === 0) {
|
|
115
|
+
// an empty slot is always reached, because the table is never full
|
|
116
|
+
return U32_INDEX_MISS;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
if (candidate === encoded) {
|
|
120
|
+
return table[address + 1] | 0;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
slot = generate_next_linear_congruential_index(slot, mask);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Store a value for a key, replacing whatever the key held.
|
|
129
|
+
*
|
|
130
|
+
* Storing `-1` retires the key: it keeps its slot, and {@link u32_index_get} reports it as
|
|
131
|
+
* {@link U32_INDEX_MISS} from then on. That is the whole of the delete story — an open-addressed
|
|
132
|
+
* table cannot simply blank a slot without cutting the probe chains that run through it, and the
|
|
133
|
+
* callers that need removal only ever need the key to stop being found.
|
|
134
|
+
*
|
|
135
|
+
* Returns the index to store back: growing reallocates, so the array this hands back is not always
|
|
136
|
+
* the one it was given. Passing `null` creates one.
|
|
137
|
+
*
|
|
138
|
+
* @param {Uint32Array|null} table
|
|
139
|
+
* @param {number} key
|
|
140
|
+
* @param {number} value i32
|
|
141
|
+
* @returns {Uint32Array} the index to keep
|
|
142
|
+
*/
|
|
143
|
+
export function u32_index_set(table, key, value) {
|
|
144
|
+
if (table === null) {
|
|
145
|
+
table = u32_index_create();
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
const slots = table[SLOTS_WORD];
|
|
149
|
+
const mask = slots - 1;
|
|
150
|
+
const encoded = key + 1;
|
|
151
|
+
|
|
152
|
+
let slot = lowbias32(key) & mask;
|
|
153
|
+
|
|
154
|
+
for (; ;) {
|
|
155
|
+
const address = HEADER_WORDS + slot * 2;
|
|
156
|
+
const candidate = table[address];
|
|
157
|
+
|
|
158
|
+
if (candidate === encoded) {
|
|
159
|
+
table[address + 1] = value;
|
|
160
|
+
|
|
161
|
+
return table;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
if (candidate === 0) {
|
|
165
|
+
table[address] = encoded;
|
|
166
|
+
table[address + 1] = value;
|
|
167
|
+
|
|
168
|
+
const count = table[COUNT_WORD] + 1;
|
|
169
|
+
|
|
170
|
+
table[COUNT_WORD] = count;
|
|
171
|
+
|
|
172
|
+
if (count * MAX_LOAD_DENOMINATOR > slots * MAX_LOAD_NUMERATOR) {
|
|
173
|
+
return u32_index_grow(table);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// the invariant every probe above rests on
|
|
177
|
+
assert.ok(count < slots, `index is full — a lookup for an absent key would not terminate`);
|
|
178
|
+
|
|
179
|
+
return table;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
slot = generate_next_linear_congruential_index(slot, mask);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Drop every key, keeping the allocation. The index is reusable immediately.
|
|
188
|
+
*
|
|
189
|
+
* @param {Uint32Array} table
|
|
190
|
+
*/
|
|
191
|
+
export function u32_index_clear(table) {
|
|
192
|
+
const slots = table[SLOTS_WORD];
|
|
193
|
+
|
|
194
|
+
table.fill(0);
|
|
195
|
+
|
|
196
|
+
table[SLOTS_WORD] = slots;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Twice the slots, every live key rehashed into them.
|
|
201
|
+
*
|
|
202
|
+
* @param {Uint32Array} table
|
|
203
|
+
* @returns {Uint32Array}
|
|
204
|
+
*/
|
|
205
|
+
function u32_index_grow(table) {
|
|
206
|
+
const slots = table[SLOTS_WORD];
|
|
207
|
+
|
|
208
|
+
const grown = u32_index_create(slots * 2);
|
|
209
|
+
|
|
210
|
+
for (let i = 0; i < slots; i++) {
|
|
211
|
+
const address = HEADER_WORDS + i * 2;
|
|
212
|
+
const encoded = table[address];
|
|
213
|
+
|
|
214
|
+
if (encoded !== 0) {
|
|
215
|
+
// the raw word, not `| 0` — a retired key stays retired across a rehash
|
|
216
|
+
u32_index_place(grown, encoded, table[address + 1]);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
return grown;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Claim a slot for a key known to be absent, without touching the load factor check. Only safe
|
|
225
|
+
* during a rehash, where the destination is half empty by construction and the source held no
|
|
226
|
+
* duplicates.
|
|
227
|
+
*
|
|
228
|
+
* @param {Uint32Array} table
|
|
229
|
+
* @param {number} encoded already `key + 1`
|
|
230
|
+
* @param {number} value raw word
|
|
231
|
+
*/
|
|
232
|
+
function u32_index_place(table, encoded, value) {
|
|
233
|
+
const mask = table[SLOTS_WORD] - 1;
|
|
234
|
+
|
|
235
|
+
let slot = lowbias32(encoded - 1) & mask;
|
|
236
|
+
|
|
237
|
+
while (table[HEADER_WORDS + slot * 2] !== 0) {
|
|
238
|
+
slot = generate_next_linear_congruential_index(slot, mask);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
const address = HEADER_WORDS + slot * 2;
|
|
242
|
+
|
|
243
|
+
table[address] = encoded;
|
|
244
|
+
table[address + 1] = value;
|
|
245
|
+
|
|
246
|
+
table[COUNT_WORD] = table[COUNT_WORD] + 1;
|
|
247
|
+
}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* holding the scene roots, the skins and the clips that came out of the one file.
|
|
4
4
|
*
|
|
5
5
|
* The asset hands out **that same bundle** to every caller rather than a copy. A bundle is the model
|
|
6
|
-
* as loaded, not a placement of it
|
|
7
|
-
*
|
|
6
|
+
* as loaded, not a placement of it: a placement is `prefab_instantiate` over the `Prefab` compiled
|
|
7
|
+
* from it once — which is what makes two of one model possible at all. A level
|
|
8
8
|
* places the same model hundreds of times over, and copying at this level would be the dominant cost
|
|
9
9
|
* of opening one.
|
|
10
10
|
*
|
|
@@ -7,8 +7,8 @@ import { AssetLoader } from "./AssetLoader.js";
|
|
|
7
7
|
* holding the scene roots, the skins and the clips that came out of the one file.
|
|
8
8
|
*
|
|
9
9
|
* The asset hands out **that same bundle** to every caller rather than a copy. A bundle is the model
|
|
10
|
-
* as loaded, not a placement of it
|
|
11
|
-
*
|
|
10
|
+
* as loaded, not a placement of it: a placement is `prefab_instantiate` over the `Prefab` compiled
|
|
11
|
+
* from it once — which is what makes two of one model possible at all. A level
|
|
12
12
|
* places the same model hundreds of times over, and copying at this level would be the dominant cost
|
|
13
13
|
* of opening one.
|
|
14
14
|
*
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
*
|
|
15
15
|
* The asset hands out **that same bundle** to every caller rather than a copy, for the reason
|
|
16
16
|
* {@link GLTFSceneBundleAssetLoader} gives: a bundle is the model as loaded, not a placement of it,
|
|
17
|
-
* and
|
|
17
|
+
* and `prefab_instantiate` over the prefab compiled from it is what makes a placement.
|
|
18
18
|
*
|
|
19
19
|
* @extends AssetLoader<*, SceneBundle>
|
|
20
20
|
*/
|
|
@@ -41,7 +41,6 @@ export class USDSceneBundleAssetLoader extends AssetLoader<any, SceneBundle> {
|
|
|
41
41
|
*/
|
|
42
42
|
load(scope: AssetRequestScope, path: string, success: (arg0: Asset<any>) => void, failure: Function, progress: (arg0: number, arg1: number) => void): Promise<Asset<any>>;
|
|
43
43
|
}
|
|
44
|
-
import { SceneBundle } from "../../../shade/renderer/loader/SceneBundle.js";
|
|
45
44
|
import { AssetLoader } from "./AssetLoader.js";
|
|
46
45
|
import { Asset } from "../Asset.js";
|
|
47
46
|
//# sourceMappingURL=USDSceneBundleAssetLoader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"USDSceneBundleAssetLoader.d.ts","sourceRoot":"","sources":["../../../../../src/engine/asset/loaders/USDSceneBundleAssetLoader.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"USDSceneBundleAssetLoader.d.ts","sourceRoot":"","sources":["../../../../../src/engine/asset/loaders/USDSceneBundleAssetLoader.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;GAmBG;AACH;;IAEI;;;;;;;;OAQG;IACH,6DAOC;IAED;;;;;;;;OAQG;IACH,qCAPW,MAAM,iCACW,IAAI,sCAEZ,MAAM,QAAE,MAAM,KAAG,IAAI,GAE5B,mBAAc,CAyC1B;CACJ;4BA3F2B,kBAAkB;sBAHxB,aAAa"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { load_usd } from "../../../shade/renderer/loader/usd/load_usd.js";
|
|
2
|
-
import { SceneBundle } from "../../../shade/renderer/loader/SceneBundle.js";
|
|
3
2
|
import { Asset } from "../Asset.js";
|
|
4
3
|
import { GameAssetType } from "../GameAssetType.js";
|
|
5
4
|
import { ArrayBufferLoader } from "./ArrayBufferLoader.js";
|
|
@@ -21,7 +20,7 @@ import { AssetLoader } from "./AssetLoader.js";
|
|
|
21
20
|
*
|
|
22
21
|
* The asset hands out **that same bundle** to every caller rather than a copy, for the reason
|
|
23
22
|
* {@link GLTFSceneBundleAssetLoader} gives: a bundle is the model as loaded, not a placement of it,
|
|
24
|
-
* and
|
|
23
|
+
* and `prefab_instantiate` over the prefab compiled from it is what makes a placement.
|
|
25
24
|
*
|
|
26
25
|
* @extends AssetLoader<*, SceneBundle>
|
|
27
26
|
*/
|
|
@@ -76,19 +75,12 @@ export class USDSceneBundleAssetLoader extends AssetLoader {
|
|
|
76
75
|
when none of them match: a text layer behind a byte order mark, or a `.usd` that is text by
|
|
77
76
|
convention. Passing the whole path is fine, the detection takes the extension off it.
|
|
78
77
|
*/
|
|
79
|
-
const roots = await load_usd(buffer, { fileName: path });
|
|
80
|
-
|
|
81
|
-
const bundle = new SceneBundle();
|
|
82
|
-
|
|
83
|
-
bundle.scenes = roots;
|
|
84
|
-
|
|
85
78
|
/*
|
|
86
79
|
`usd_build_scene` produces neither skins nor clips: UsdSkel and the time-sampled attributes a
|
|
87
|
-
clip would come from are not read.
|
|
88
|
-
placeholder — when USD animation lands, it lands by filling
|
|
80
|
+
clip would come from are not read. The bundle's empty lists are the truth about what came
|
|
81
|
+
out of the file, not a placeholder — when USD animation lands, it lands by filling them in.
|
|
89
82
|
*/
|
|
90
|
-
bundle
|
|
91
|
-
bundle.clips = [];
|
|
83
|
+
const bundle = await load_usd(buffer, { fileName: path });
|
|
92
84
|
|
|
93
85
|
/*
|
|
94
86
|
There is no honest byte size to report, for the reason {@link GLTFSceneBundleAssetLoader}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which side computes which of an entity's components.
|
|
3
|
+
*
|
|
4
|
+
* One `u32`. A set bit means the GPU is authoritative for the component that bit names; a clear bit,
|
|
5
|
+
* or no component at all, means the CPU is. The bits are assigned in
|
|
6
|
+
* {@link GPUStateAuthorityFlags}, one per component type.
|
|
7
|
+
*
|
|
8
|
+
* **Nothing infers this.** Ownership used to be read off the shape of the world — an entity with an
|
|
9
|
+
* attachment and an animation binding was taken to be GPU-driven — which makes every reader
|
|
10
|
+
* re-derive a rule that a bit can simply state, and makes two readers free to disagree. This is the
|
|
11
|
+
* one statement of it: the rows read it, and infer nothing.
|
|
12
|
+
*
|
|
13
|
+
* **Authority decides who computes a value, never what a value is.** Meep's netcode is a
|
|
14
|
+
* deterministic per-tick rollback on a server-authoritative orchestrator, and a headless server has
|
|
15
|
+
* no device: it sets no bits, composes every chain itself, and must arrive at the same numbers as a
|
|
16
|
+
* client that renders. So a component any simulation system reads stays CPU-authoritative, and what
|
|
17
|
+
* a bit may cover is the reverse direction only — values the GPU produces that no CPU system reads.
|
|
18
|
+
* Where the simulation does want a GPU-owned pose it evaluates the chain exactly, on the CPU, from
|
|
19
|
+
* clip state; it never reads one back.
|
|
20
|
+
*
|
|
21
|
+
* **Attach it at creation, with zero flags, to anything that may ever be flagged.** Adding and
|
|
22
|
+
* removing a component is a structural change that relinks systems, and animation starts and stops
|
|
23
|
+
* constantly — so an authority change has to be a bit write. Absence still means CPU authority, for
|
|
24
|
+
* the entities that will never be flagged at all.
|
|
25
|
+
*
|
|
26
|
+
* **Not simulation state.** It describes a local rendering arrangement: which of two machines in
|
|
27
|
+
* this process holds a number. It is therefore neither saved nor replicated, on the same footing as
|
|
28
|
+
* {@link ParentEntity} — a flag that travelled would make a rendering client and a headless server
|
|
29
|
+
* disagree about a world they are required to agree about.
|
|
30
|
+
*
|
|
31
|
+
* @see GPUStateAuthorityFlags
|
|
32
|
+
* @see gpu_authority_has
|
|
33
|
+
*/
|
|
34
|
+
export class GPUStateAuthority {
|
|
35
|
+
/**
|
|
36
|
+
* @param {number} [flags]
|
|
37
|
+
* @returns {GPUStateAuthority}
|
|
38
|
+
*/
|
|
39
|
+
static from(flags?: number): GPUStateAuthority;
|
|
40
|
+
/**
|
|
41
|
+
* Bitwise OR of {@link GPUStateAuthorityFlags} values.
|
|
42
|
+
*
|
|
43
|
+
* Read it through {@link gpu_authority_has} and write it through {@link gpu_authority_grant} /
|
|
44
|
+
* {@link gpu_authority_revoke}; those check the bit against the assigned set, which a raw `|=`
|
|
45
|
+
* does not.
|
|
46
|
+
*
|
|
47
|
+
* @type {number}
|
|
48
|
+
*/
|
|
49
|
+
flags: number;
|
|
50
|
+
}
|
|
51
|
+
export namespace GPUStateAuthority {
|
|
52
|
+
let typeName: string;
|
|
53
|
+
let serializable: boolean;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=GPUStateAuthority.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GPUStateAuthority.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/gpu/GPUStateAuthority.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH;IAYI;;;OAGG;IACH,oBAHW,MAAM,GACJ,iBAAiB,CAQ7B;IArBD;;;;;;;;OAQG;IACH,OAFU,MAAM,CAEN;CAab;;kBAIS,MAAM;sBASN,OAAO"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which side computes which of an entity's components.
|
|
3
|
+
*
|
|
4
|
+
* One `u32`. A set bit means the GPU is authoritative for the component that bit names; a clear bit,
|
|
5
|
+
* or no component at all, means the CPU is. The bits are assigned in
|
|
6
|
+
* {@link GPUStateAuthorityFlags}, one per component type.
|
|
7
|
+
*
|
|
8
|
+
* **Nothing infers this.** Ownership used to be read off the shape of the world — an entity with an
|
|
9
|
+
* attachment and an animation binding was taken to be GPU-driven — which makes every reader
|
|
10
|
+
* re-derive a rule that a bit can simply state, and makes two readers free to disagree. This is the
|
|
11
|
+
* one statement of it: the rows read it, and infer nothing.
|
|
12
|
+
*
|
|
13
|
+
* **Authority decides who computes a value, never what a value is.** Meep's netcode is a
|
|
14
|
+
* deterministic per-tick rollback on a server-authoritative orchestrator, and a headless server has
|
|
15
|
+
* no device: it sets no bits, composes every chain itself, and must arrive at the same numbers as a
|
|
16
|
+
* client that renders. So a component any simulation system reads stays CPU-authoritative, and what
|
|
17
|
+
* a bit may cover is the reverse direction only — values the GPU produces that no CPU system reads.
|
|
18
|
+
* Where the simulation does want a GPU-owned pose it evaluates the chain exactly, on the CPU, from
|
|
19
|
+
* clip state; it never reads one back.
|
|
20
|
+
*
|
|
21
|
+
* **Attach it at creation, with zero flags, to anything that may ever be flagged.** Adding and
|
|
22
|
+
* removing a component is a structural change that relinks systems, and animation starts and stops
|
|
23
|
+
* constantly — so an authority change has to be a bit write. Absence still means CPU authority, for
|
|
24
|
+
* the entities that will never be flagged at all.
|
|
25
|
+
*
|
|
26
|
+
* **Not simulation state.** It describes a local rendering arrangement: which of two machines in
|
|
27
|
+
* this process holds a number. It is therefore neither saved nor replicated, on the same footing as
|
|
28
|
+
* {@link ParentEntity} — a flag that travelled would make a rendering client and a headless server
|
|
29
|
+
* disagree about a world they are required to agree about.
|
|
30
|
+
*
|
|
31
|
+
* @see GPUStateAuthorityFlags
|
|
32
|
+
* @see gpu_authority_has
|
|
33
|
+
*/
|
|
34
|
+
export class GPUStateAuthority {
|
|
35
|
+
/**
|
|
36
|
+
* Bitwise OR of {@link GPUStateAuthorityFlags} values.
|
|
37
|
+
*
|
|
38
|
+
* Read it through {@link gpu_authority_has} and write it through {@link gpu_authority_grant} /
|
|
39
|
+
* {@link gpu_authority_revoke}; those check the bit against the assigned set, which a raw `|=`
|
|
40
|
+
* does not.
|
|
41
|
+
*
|
|
42
|
+
* @type {number}
|
|
43
|
+
*/
|
|
44
|
+
flags = 0;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* @param {number} [flags]
|
|
48
|
+
* @returns {GPUStateAuthority}
|
|
49
|
+
*/
|
|
50
|
+
static from(flags = 0) {
|
|
51
|
+
const r = new GPUStateAuthority();
|
|
52
|
+
|
|
53
|
+
r.flags = flags;
|
|
54
|
+
|
|
55
|
+
return r;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* @readonly
|
|
61
|
+
* @type {string}
|
|
62
|
+
*/
|
|
63
|
+
GPUStateAuthority.typeName = "GPUStateAuthority";
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Which machine holds a value is a property of this process, not of the world — see the class
|
|
67
|
+
* docblock. A saved game that carried it would reload claiming the GPU owns transforms that no
|
|
68
|
+
* device has ever seen.
|
|
69
|
+
*
|
|
70
|
+
* @type {boolean}
|
|
71
|
+
*/
|
|
72
|
+
GPUStateAuthority.serializable = false;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Names of the bits set in `flags`, for assertion messages and debug output.
|
|
3
|
+
*
|
|
4
|
+
* @param {number} flags
|
|
5
|
+
* @returns {string}
|
|
6
|
+
*/
|
|
7
|
+
export function gpu_state_authority_flag_names(flags: number): string;
|
|
8
|
+
/**
|
|
9
|
+
* One bit per component type the GPU can be authoritative for, and the only place those bits are
|
|
10
|
+
* assigned.
|
|
11
|
+
*
|
|
12
|
+
* A set bit in {@link GPUStateAuthorityflags } means the GPU computes that component's value for
|
|
13
|
+
* that entity and the CPU does not. A clear bit — or no {@link GPUStateAuthority } at all — means the
|
|
14
|
+
* CPU does, which is what every entity means until something says otherwise.
|
|
15
|
+
*
|
|
16
|
+
* **Every component type gets its own bit, however related two of them look.** {@link Transform64 }
|
|
17
|
+
* and {@link TransformAttachment } are the case that forces it: an entity's world transform can be
|
|
18
|
+
* composed on the GPU while its local offset is still authored on the CPU, and a single "transform"
|
|
19
|
+
* bit could not say that. The pair is not a special case; it is what one-bit-per-component is for.
|
|
20
|
+
*
|
|
21
|
+
* **Adding a bit.** Take the next power of two, name it after the component class exactly, and add
|
|
22
|
+
* it to {@link GPU_STATE_AUTHORITY_FLAGS_ALL }. Do not renumber: nothing persists these values —
|
|
23
|
+
* {@link GPUStateAuthority } is neither serialized nor replicated — but two names sharing a bit is a
|
|
24
|
+
* silent aliasing bug that no test outside this file can see.
|
|
25
|
+
*/
|
|
26
|
+
export type GPUStateAuthorityFlags = number;
|
|
27
|
+
export namespace GPUStateAuthorityFlags {
|
|
28
|
+
let Transform64: number;
|
|
29
|
+
let TransformAttachment: number;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Every bit {@link GPUStateAuthorityFlags} assigns, as one mask.
|
|
33
|
+
*
|
|
34
|
+
* The grant and revoke helpers check against it so that a mistyped or stale flag fails where it is
|
|
35
|
+
* written rather than turning into an authority claim nobody named.
|
|
36
|
+
*
|
|
37
|
+
* @type {number}
|
|
38
|
+
*/
|
|
39
|
+
export const GPU_STATE_AUTHORITY_FLAGS_ALL: number;
|
|
40
|
+
//# sourceMappingURL=GPUStateAuthorityFlags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GPUStateAuthorityFlags.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/gpu/GPUStateAuthorityFlags.js"],"names":[],"mappings":"AAoDA;;;;;GAKG;AACH,sDAHW,MAAM,GACJ,MAAM,CAsBlB;;;;;;;;;;;;;;;;;;;qCA5DS,MAAM;;qBAOF,MAAM;6BASN,MAAM;;AAKpB;;;;;;;GAOG;AACH,4CAFU,MAAM,CAKd"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One bit per component type the GPU can be authoritative for, and the only place those bits are
|
|
3
|
+
* assigned.
|
|
4
|
+
*
|
|
5
|
+
* A set bit in {@link GPUStateAuthority#flags} means the GPU computes that component's value for
|
|
6
|
+
* that entity and the CPU does not. A clear bit — or no {@link GPUStateAuthority} at all — means the
|
|
7
|
+
* CPU does, which is what every entity means until something says otherwise.
|
|
8
|
+
*
|
|
9
|
+
* **Every component type gets its own bit, however related two of them look.** {@link Transform64}
|
|
10
|
+
* and {@link TransformAttachment} are the case that forces it: an entity's world transform can be
|
|
11
|
+
* composed on the GPU while its local offset is still authored on the CPU, and a single "transform"
|
|
12
|
+
* bit could not say that. The pair is not a special case; it is what one-bit-per-component is for.
|
|
13
|
+
*
|
|
14
|
+
* **Adding a bit.** Take the next power of two, name it after the component class exactly, and add
|
|
15
|
+
* it to {@link GPU_STATE_AUTHORITY_FLAGS_ALL}. Do not renumber: nothing persists these values —
|
|
16
|
+
* {@link GPUStateAuthority} is neither serialized nor replicated — but two names sharing a bit is a
|
|
17
|
+
* silent aliasing bug that no test outside this file can see.
|
|
18
|
+
*
|
|
19
|
+
* @enum {number}
|
|
20
|
+
*/
|
|
21
|
+
export const GPUStateAuthorityFlags = {
|
|
22
|
+
/**
|
|
23
|
+
* The world transform — {@link Transform64} — is composed on the GPU, by the hierarchy pass over
|
|
24
|
+
* the entity's row and its parent chain.
|
|
25
|
+
*
|
|
26
|
+
* @type {number}
|
|
27
|
+
*/
|
|
28
|
+
Transform64: 1,
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* The local offset — {@link TransformAttachment}'s own `transform` — is written on the GPU. This
|
|
32
|
+
* is what an animation clip drives: the pose accumulator resolves a joint's local TRS into its
|
|
33
|
+
* row, and a CPU that also wrote it would race the animation it is trying to show.
|
|
34
|
+
*
|
|
35
|
+
* @type {number}
|
|
36
|
+
*/
|
|
37
|
+
TransformAttachment: 2,
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Every bit {@link GPUStateAuthorityFlags} assigns, as one mask.
|
|
42
|
+
*
|
|
43
|
+
* The grant and revoke helpers check against it so that a mistyped or stale flag fails where it is
|
|
44
|
+
* written rather than turning into an authority claim nobody named.
|
|
45
|
+
*
|
|
46
|
+
* @type {number}
|
|
47
|
+
*/
|
|
48
|
+
export const GPU_STATE_AUTHORITY_FLAGS_ALL = (
|
|
49
|
+
GPUStateAuthorityFlags.Transform64
|
|
50
|
+
| GPUStateAuthorityFlags.TransformAttachment
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Names of the bits set in `flags`, for assertion messages and debug output.
|
|
55
|
+
*
|
|
56
|
+
* @param {number} flags
|
|
57
|
+
* @returns {string}
|
|
58
|
+
*/
|
|
59
|
+
export function gpu_state_authority_flag_names(flags) {
|
|
60
|
+
const names = [];
|
|
61
|
+
|
|
62
|
+
for (const name in GPUStateAuthorityFlags) {
|
|
63
|
+
if ((flags & GPUStateAuthorityFlags[name]) !== 0) {
|
|
64
|
+
names.push(name);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const unknown = flags & ~GPU_STATE_AUTHORITY_FLAGS_ALL;
|
|
69
|
+
|
|
70
|
+
if (unknown !== 0) {
|
|
71
|
+
names.push(`<unassigned bits 0x${unknown.toString(16)}>`);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (names.length === 0) {
|
|
75
|
+
return '<none>';
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return names.join('|');
|
|
79
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Assert, before reading a component off an entity, that the CPU is the one who wrote it.
|
|
3
|
+
*
|
|
4
|
+
* A component the GPU is authoritative for holds whatever the CPU last composed — for the joints
|
|
5
|
+
* of a playing character, the rest pose under wherever the placement stood when the clip began.
|
|
6
|
+
* Reading it as if it were current is the failure the whole authority scheme exists to name, and
|
|
7
|
+
* it is silent: the value is a valid transform, just not this frame's. The simulation gets a
|
|
8
|
+
* current answer by exact evaluation (`t64_evaluate_world`); a tool or a sound gets one by
|
|
9
|
+
* readback. Neither goes through the component, so a read that does go through it says so here.
|
|
10
|
+
*
|
|
11
|
+
* An `assert.*` call, so a consumer that strips assertions pays nothing.
|
|
12
|
+
*
|
|
13
|
+
* @param {EntityComponentDataset} dataset
|
|
14
|
+
* @param {number} entity
|
|
15
|
+
* @param {number} flags the {@link GPUStateAuthorityFlags} bit of the component about to be read
|
|
16
|
+
*/
|
|
17
|
+
export function gpu_authority_assert_cpu(dataset: EntityComponentDataset, entity: number, flags: number): void;
|
|
18
|
+
//# sourceMappingURL=gpu_authority_assert_cpu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gpu_authority_assert_cpu.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/gpu/gpu_authority_assert_cpu.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AACH,kFAHW,MAAM,SACN,MAAM,QAQhB"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { assert } from "../../../core/assert.js";
|
|
2
|
+
import { gpu_state_authority_flag_names } from "./GPUStateAuthorityFlags.js";
|
|
3
|
+
import { gpu_authority_has } from "./gpu_authority_has.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Assert, before reading a component off an entity, that the CPU is the one who wrote it.
|
|
7
|
+
*
|
|
8
|
+
* A component the GPU is authoritative for holds whatever the CPU last composed — for the joints
|
|
9
|
+
* of a playing character, the rest pose under wherever the placement stood when the clip began.
|
|
10
|
+
* Reading it as if it were current is the failure the whole authority scheme exists to name, and
|
|
11
|
+
* it is silent: the value is a valid transform, just not this frame's. The simulation gets a
|
|
12
|
+
* current answer by exact evaluation (`t64_evaluate_world`); a tool or a sound gets one by
|
|
13
|
+
* readback. Neither goes through the component, so a read that does go through it says so here.
|
|
14
|
+
*
|
|
15
|
+
* An `assert.*` call, so a consumer that strips assertions pays nothing.
|
|
16
|
+
*
|
|
17
|
+
* @param {EntityComponentDataset} dataset
|
|
18
|
+
* @param {number} entity
|
|
19
|
+
* @param {number} flags the {@link GPUStateAuthorityFlags} bit of the component about to be read
|
|
20
|
+
*/
|
|
21
|
+
export function gpu_authority_assert_cpu(dataset, entity, flags) {
|
|
22
|
+
assert.ok(
|
|
23
|
+
!gpu_authority_has(dataset, entity, flags),
|
|
24
|
+
`entity ${entity} is GPU-owned for ${gpu_state_authority_flag_names(flags)}; it holds what the CPU`
|
|
25
|
+
+ ` last composed, not this frame's value — evaluate it exactly (t64_evaluate_world) or read it back`
|
|
26
|
+
);
|
|
27
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Give an entity a {@link GPUStateAuthority} with nothing claimed, so that every later authority
|
|
3
|
+
* change is a bit write.
|
|
4
|
+
*
|
|
5
|
+
* **This is the only place the component is added, and it belongs at creation** — in the bulk build
|
|
6
|
+
* that makes the entity, or at the moment the one system that may flag it first links. Adding and
|
|
7
|
+
* removing a component is a structural dataset change that relinks systems, and the thing being
|
|
8
|
+
* described starts and stops constantly: a clip beginning and ending would otherwise churn the
|
|
9
|
+
* dataset once per transition, for a bit.
|
|
10
|
+
*
|
|
11
|
+
* Zero flags is not the same as no component. Both mean the CPU owns everything today; the
|
|
12
|
+
* difference is that this one is ready to change its mind.
|
|
13
|
+
*
|
|
14
|
+
* Idempotent: an entity that already carries the component keeps the flags it has. Two systems may
|
|
15
|
+
* both know an entity is flaggable, and neither is wrong.
|
|
16
|
+
*
|
|
17
|
+
* @param {EntityComponentDataset} dataset
|
|
18
|
+
* @param {number} entity
|
|
19
|
+
* @returns {GPUStateAuthority} the entity's component, existing or newly attached
|
|
20
|
+
*/
|
|
21
|
+
export function gpu_authority_declare(dataset: EntityComponentDataset, entity: number): GPUStateAuthority;
|
|
22
|
+
import { GPUStateAuthority } from "./GPUStateAuthority.js";
|
|
23
|
+
//# sourceMappingURL=gpu_authority_declare.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gpu_authority_declare.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/gpu/gpu_authority_declare.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,+EAHW,MAAM,GACJ,iBAAiB,CAiB7B;kCArCiC,wBAAwB"}
|