@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
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { assert } from "../../../core/assert.js";
|
|
2
|
-
import { skin_joint_matrix } from "./skin_joint_matrix.js";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* The transform that maps this skin's mesh-space geometry into the world at rest.
|
|
6
|
-
*
|
|
7
|
-
* `compute_skin_world_bounds` already names the thing: *"with every joint at its bind pose
|
|
8
|
-
* `joint.global × inverse_bind` collapses to one and the same matrix, the character's placement in
|
|
9
|
-
* the world"*. This returns that matrix. It is the frame a skinned mesh's vertices belong in, and
|
|
10
|
-
* under {@link skin_normalize_mesh_frame} it becomes the mesh node's transform — see
|
|
11
|
-
* `SKINNING_FRAME_PLAN.md`.
|
|
12
|
-
*
|
|
13
|
-
* **Joint 0's is the one taken.** In a file whose rest pose is its bind pose every joint answers the
|
|
14
|
-
* same matrix, so which one is asked is not a choice; in a file where they differ there is no single
|
|
15
|
-
* answer and no amount of averaging makes one. What matters is not that they agree but that
|
|
16
|
-
* `frame⁻¹ · joint_matrix` comes out rigid for every joint, which is a weaker condition and a
|
|
17
|
-
* different question — {@link skin_frame_defect} is that question, and it is the one to ask.
|
|
18
|
-
*
|
|
19
|
-
* Reads the joints' `transform_global`, so the skeleton has to have been walked
|
|
20
|
-
* ({@link Node3D#updateMatrices}) since it was last moved. Joints under
|
|
21
|
-
* {@link TransformAuthority.GPU} hold the rest pose there, which is what this wants.
|
|
22
|
-
*
|
|
23
|
-
* @param {Float64Array|Float32Array|number[]} out 16 elements, column-major
|
|
24
|
-
* @param {Skin} skin
|
|
25
|
-
* @returns {Float64Array|Float32Array|number[]} `out`
|
|
26
|
-
*/
|
|
27
|
-
export function skin_bind_transform(out, skin) {
|
|
28
|
-
assert.defined(skin, 'skin');
|
|
29
|
-
assert.equal(skin.isSkin, true, 'skin.isSkin !== true');
|
|
30
|
-
assert.greaterThanOrEqual(skin.joints.length, 1, 'skin.joints.length');
|
|
31
|
-
|
|
32
|
-
return skin_joint_matrix(out, skin, 0);
|
|
33
|
-
}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Whether a frame is one this skin can be deformed in — and if not, by how much it is not.
|
|
3
|
-
*
|
|
4
|
-
* The skinning pass converts `frame⁻¹ × joint.global × inverse_bind` to a dual quaternion, and a
|
|
5
|
-
* dual quaternion carries a rotation and a translation and nothing else. So that product must be
|
|
6
|
-
* rigid for every joint. This is that condition as a number: zero when the frame works, and growing
|
|
7
|
-
* with whatever the conversion would have to throw away. `SKINNING_FRAME_PLAN.md` §1 is what
|
|
8
|
-
* happens when it does.
|
|
9
|
-
*
|
|
10
|
-
* **This, and not "do the joints agree", is the precondition.** A file whose rest pose is not its
|
|
11
|
-
* bind pose has joints whose skin matrices differ — by *rigid* motions, which cost nothing here.
|
|
12
|
-
* What cannot be absorbed is a scale or a shear, and this sees exactly that.
|
|
13
|
-
*
|
|
14
|
-
* Reads the joints' `transform_global`, so it answers for whatever pose the skeleton is standing in.
|
|
15
|
-
* At rest that is the registration-time question. Handed a posed skeleton it answers the runtime one
|
|
16
|
-
* — a clip that scales a joint, which no frame can fix (§4).
|
|
17
|
-
*
|
|
18
|
-
* @param {Skin} skin
|
|
19
|
-
* @param {ArrayLike<number>} frame 16 elements, column-major — the transform the renderer re-applies
|
|
20
|
-
* @returns {number} the largest {@link m4_rigidity_defect} over the skin's joints; `Infinity` if
|
|
21
|
-
* `frame` has no inverse, or if any joint's fold comes out a reflection — which scores zero
|
|
22
|
-
* on the defect and is unrepresentable all the same
|
|
23
|
-
*/
|
|
24
|
-
export function skin_frame_defect(skin: Skin, frame: ArrayLike<number>): number;
|
|
25
|
-
/**
|
|
26
|
-
* The same question of one joint, freshly allocated — for a caller that wants to say *which* joint
|
|
27
|
-
* and by how much rather than only the worst of them.
|
|
28
|
-
*
|
|
29
|
-
* @param {Skin} skin
|
|
30
|
-
* @param {ArrayLike<number>} frame
|
|
31
|
-
* @returns {number[]} one defect per joint, in joint order
|
|
32
|
-
*/
|
|
33
|
-
export function skin_frame_defect_by_joint(skin: Skin, frame: ArrayLike<number>): number[];
|
|
34
|
-
//# sourceMappingURL=skin_frame_defect.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skin_frame_defect.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/animation/skin_frame_defect.js"],"names":[],"mappings":"AAcA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qDALW,UAAU,MAAM,CAAC,GACf,MAAM,CA6ClB;AAiBD;;;;;;;GAOG;AACH,8DAHW,UAAU,MAAM,CAAC,GACf,MAAM,EAAE,CA8BpB"}
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import { assert } from "../../../core/assert.js";
|
|
2
|
-
import { m4_invert } from "../../../core/geom/3d/mat4/m4_invert.js";
|
|
3
|
-
import { m4_multiply } from "../../../core/geom/3d/mat4/m4_multiply.js";
|
|
4
|
-
import { m4_rigidity_defect } from "../../../core/geom/3d/mat4/m4_rigidity_defect.js";
|
|
5
|
-
import { skin_joint_matrix } from "./skin_joint_matrix.js";
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Scratch, so that walking a sixty-five-joint skeleton does not allocate per joint. Nothing here
|
|
9
|
-
* re-enters, and none of it outlives the call.
|
|
10
|
-
*/
|
|
11
|
-
const _inverse_frame = new Float64Array(16);
|
|
12
|
-
const _joint_matrix = new Float64Array(16);
|
|
13
|
-
const _folded = new Float64Array(16);
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Whether a frame is one this skin can be deformed in — and if not, by how much it is not.
|
|
17
|
-
*
|
|
18
|
-
* The skinning pass converts `frame⁻¹ × joint.global × inverse_bind` to a dual quaternion, and a
|
|
19
|
-
* dual quaternion carries a rotation and a translation and nothing else. So that product must be
|
|
20
|
-
* rigid for every joint. This is that condition as a number: zero when the frame works, and growing
|
|
21
|
-
* with whatever the conversion would have to throw away. `SKINNING_FRAME_PLAN.md` §1 is what
|
|
22
|
-
* happens when it does.
|
|
23
|
-
*
|
|
24
|
-
* **This, and not "do the joints agree", is the precondition.** A file whose rest pose is not its
|
|
25
|
-
* bind pose has joints whose skin matrices differ — by *rigid* motions, which cost nothing here.
|
|
26
|
-
* What cannot be absorbed is a scale or a shear, and this sees exactly that.
|
|
27
|
-
*
|
|
28
|
-
* Reads the joints' `transform_global`, so it answers for whatever pose the skeleton is standing in.
|
|
29
|
-
* At rest that is the registration-time question. Handed a posed skeleton it answers the runtime one
|
|
30
|
-
* — a clip that scales a joint, which no frame can fix (§4).
|
|
31
|
-
*
|
|
32
|
-
* @param {Skin} skin
|
|
33
|
-
* @param {ArrayLike<number>} frame 16 elements, column-major — the transform the renderer re-applies
|
|
34
|
-
* @returns {number} the largest {@link m4_rigidity_defect} over the skin's joints; `Infinity` if
|
|
35
|
-
* `frame` has no inverse, or if any joint's fold comes out a reflection — which scores zero
|
|
36
|
-
* on the defect and is unrepresentable all the same
|
|
37
|
-
*/
|
|
38
|
-
export function skin_frame_defect(skin, frame) {
|
|
39
|
-
assert.defined(skin, 'skin');
|
|
40
|
-
assert.equal(skin.isSkin, true, 'skin.isSkin !== true');
|
|
41
|
-
assert.isArrayLike(frame, 'frame');
|
|
42
|
-
|
|
43
|
-
if (!m4_invert(_inverse_frame, frame)) {
|
|
44
|
-
// a frame with no inverse is not a frame; the skinning pass would divide by that determinant
|
|
45
|
-
return Infinity;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
const joint_count = skin.joints.length;
|
|
49
|
-
|
|
50
|
-
let worst = 0;
|
|
51
|
-
|
|
52
|
-
for (let j = 0; j < joint_count; j++) {
|
|
53
|
-
skin_joint_matrix(_joint_matrix, skin, j);
|
|
54
|
-
|
|
55
|
-
m4_multiply(_folded, _inverse_frame, _joint_matrix);
|
|
56
|
-
|
|
57
|
-
if (m4_linear_determinant(_folded) < 0) {
|
|
58
|
-
/*
|
|
59
|
-
A reflection. {@link m4_rigidity_defect} reads zero for one — it measures orthonormality,
|
|
60
|
-
and a reflection is orthonormal — so this is the one way a fold can be unrepresentable
|
|
61
|
-
and still score perfectly. `quat_from_m3` would answer with a *rotation*, silently, which
|
|
62
|
-
is precisely the class of failure this check exists to end.
|
|
63
|
-
|
|
64
|
-
Not fixable by a frame either: a reflection shared by the frame and every joint cancels
|
|
65
|
-
and never reaches here, so one that does reach here is a skeleton whose joints disagree
|
|
66
|
-
about handedness.
|
|
67
|
-
*/
|
|
68
|
-
return Infinity;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
const defect = m4_rigidity_defect(_folded);
|
|
72
|
-
|
|
73
|
-
if (defect > worst) {
|
|
74
|
-
worst = defect;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
return worst;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* The determinant of a matrix's upper 3×3 — negative exactly when the transform turns a
|
|
83
|
-
* right-handed basis left-handed.
|
|
84
|
-
*
|
|
85
|
-
* @param {ArrayLike<number>} mat4 column-major
|
|
86
|
-
* @returns {number}
|
|
87
|
-
*/
|
|
88
|
-
function m4_linear_determinant(mat4) {
|
|
89
|
-
const a = mat4[0], b = mat4[4], c = mat4[8];
|
|
90
|
-
const d = mat4[1], e = mat4[5], f = mat4[9];
|
|
91
|
-
const g = mat4[2], h = mat4[6], i = mat4[10];
|
|
92
|
-
|
|
93
|
-
return a * (e * i - f * h) - b * (d * i - f * g) + c * (d * h - e * g);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* The same question of one joint, freshly allocated — for a caller that wants to say *which* joint
|
|
98
|
-
* and by how much rather than only the worst of them.
|
|
99
|
-
*
|
|
100
|
-
* @param {Skin} skin
|
|
101
|
-
* @param {ArrayLike<number>} frame
|
|
102
|
-
* @returns {number[]} one defect per joint, in joint order
|
|
103
|
-
*/
|
|
104
|
-
export function skin_frame_defect_by_joint(skin, frame) {
|
|
105
|
-
assert.defined(skin, 'skin');
|
|
106
|
-
assert.equal(skin.isSkin, true, 'skin.isSkin !== true');
|
|
107
|
-
|
|
108
|
-
// f64 throughout: a 100× frame inverted in f32 reports a defect of its own rounding, and this
|
|
109
|
-
// number is read against a tolerance small enough to see one
|
|
110
|
-
const inverse_frame = new Float64Array(16);
|
|
111
|
-
|
|
112
|
-
if (!m4_invert(inverse_frame, frame)) {
|
|
113
|
-
return skin.joints.map(() => Infinity);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
const joint_matrix = new Float64Array(16);
|
|
117
|
-
const folded = new Float64Array(16);
|
|
118
|
-
|
|
119
|
-
return skin.joints.map((_joint, j) => {
|
|
120
|
-
skin_joint_matrix(joint_matrix, skin, j);
|
|
121
|
-
|
|
122
|
-
m4_multiply(folded, inverse_frame, joint_matrix);
|
|
123
|
-
|
|
124
|
-
// the same refusal {@link skin_frame_defect} makes, so that the gate and the diagnostic
|
|
125
|
-
// that explains it cannot disagree about which joints are the problem
|
|
126
|
-
if (m4_linear_determinant(folded) < 0) {
|
|
127
|
-
return Infinity;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
return m4_rigidity_defect(folded);
|
|
131
|
-
});
|
|
132
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* One joint's skin matrix, in the pose its node currently holds: `joint.global × inverse_bind`.
|
|
3
|
-
*
|
|
4
|
-
* The same quantity `shader_skin_matrix_prep` writes to the GPU's `skin_matrices` buffer, and the
|
|
5
|
-
* same one `compute_skin_world_bounds` composes its box out of — kept here so the CPU-side callers
|
|
6
|
-
* that reason about a skin's geometry all read it from one place rather than three.
|
|
7
|
-
*
|
|
8
|
-
* It maps a vertex from the skin's mesh space into **world** space. The mesh node's own transform
|
|
9
|
-
* does not appear and must not: glTF says a skinned mesh's node transform is ignored, and this
|
|
10
|
-
* engine's arrangement is that the skinning pass folds its inverse in and the rasterizer re-applies
|
|
11
|
-
* it, so the two cancel. See `SKINNING_FRAME_PLAN.md` for what that fold requires of an asset.
|
|
12
|
-
*
|
|
13
|
-
* Not a per-frame path. Joints the pose accumulator drives are {@link TransformAuthority.GPU} and
|
|
14
|
-
* their `transform_global` holds the rest pose the CPU seeded, so what this answers for an animated
|
|
15
|
-
* character is the rest-pose matrix — which is exactly what the frame arithmetic wants, and is not
|
|
16
|
-
* what a renderer wants.
|
|
17
|
-
*
|
|
18
|
-
* @param {Float64Array|Float32Array|number[]} out 16 elements, column-major
|
|
19
|
-
* @param {Skin} skin
|
|
20
|
-
* @param {number} joint_index
|
|
21
|
-
* @returns {Float64Array|Float32Array|number[]} `out`
|
|
22
|
-
*/
|
|
23
|
-
export function skin_joint_matrix(out: Float64Array | Float32Array | number[], skin: Skin, joint_index: number): Float64Array | Float32Array | number[];
|
|
24
|
-
//# sourceMappingURL=skin_joint_matrix.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skin_joint_matrix.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/animation/skin_joint_matrix.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,uCALW,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,2BAElC,MAAM,GACJ,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,CAsB9C"}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { assert } from "../../../core/assert.js";
|
|
2
|
-
import { m4_multiply } from "../../../core/geom/3d/mat4/m4_multiply.js";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* One joint's skin matrix, in the pose its node currently holds: `joint.global × inverse_bind`.
|
|
6
|
-
*
|
|
7
|
-
* The same quantity `shader_skin_matrix_prep` writes to the GPU's `skin_matrices` buffer, and the
|
|
8
|
-
* same one `compute_skin_world_bounds` composes its box out of — kept here so the CPU-side callers
|
|
9
|
-
* that reason about a skin's geometry all read it from one place rather than three.
|
|
10
|
-
*
|
|
11
|
-
* It maps a vertex from the skin's mesh space into **world** space. The mesh node's own transform
|
|
12
|
-
* does not appear and must not: glTF says a skinned mesh's node transform is ignored, and this
|
|
13
|
-
* engine's arrangement is that the skinning pass folds its inverse in and the rasterizer re-applies
|
|
14
|
-
* it, so the two cancel. See `SKINNING_FRAME_PLAN.md` for what that fold requires of an asset.
|
|
15
|
-
*
|
|
16
|
-
* Not a per-frame path. Joints the pose accumulator drives are {@link TransformAuthority.GPU} and
|
|
17
|
-
* their `transform_global` holds the rest pose the CPU seeded, so what this answers for an animated
|
|
18
|
-
* character is the rest-pose matrix — which is exactly what the frame arithmetic wants, and is not
|
|
19
|
-
* what a renderer wants.
|
|
20
|
-
*
|
|
21
|
-
* @param {Float64Array|Float32Array|number[]} out 16 elements, column-major
|
|
22
|
-
* @param {Skin} skin
|
|
23
|
-
* @param {number} joint_index
|
|
24
|
-
* @returns {Float64Array|Float32Array|number[]} `out`
|
|
25
|
-
*/
|
|
26
|
-
export function skin_joint_matrix(out, skin, joint_index) {
|
|
27
|
-
assert.isArrayLike(out, 'out');
|
|
28
|
-
assert.defined(skin, 'skin');
|
|
29
|
-
assert.equal(skin.isSkin, true, 'skin.isSkin !== true');
|
|
30
|
-
assert.isNonNegativeInteger(joint_index, 'joint_index');
|
|
31
|
-
assert.lessThan(joint_index, skin.joints.length, 'joint_index');
|
|
32
|
-
|
|
33
|
-
const offset = joint_index * 16;
|
|
34
|
-
|
|
35
|
-
assert.greaterThanOrEqual(
|
|
36
|
-
skin.inverse_bind_matrices.length, offset + 16,
|
|
37
|
-
'skin.inverse_bind_matrices.length'
|
|
38
|
-
);
|
|
39
|
-
|
|
40
|
-
// a Transform64's matrix starts at element 0, so the transform is its own mat4 argument
|
|
41
|
-
return m4_multiply(
|
|
42
|
-
out,
|
|
43
|
-
skin.joints[joint_index].transform_global,
|
|
44
|
-
skin.inverse_bind_matrices.subarray(offset, offset + 16)
|
|
45
|
-
);
|
|
46
|
-
}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Put a skin's meshes into the frame the skin actually deforms in.
|
|
3
|
-
*
|
|
4
|
-
* ## What it does and why
|
|
5
|
-
*
|
|
6
|
-
* The skinning pass writes each clone's vertices in `inverse(mesh.global)` space and the rasterizer
|
|
7
|
-
* re-applies `mesh.global`, so `mesh.global` is the *frame* a skinned mesh's vertices live in. The
|
|
8
|
-
* pass gets there by converting `inverse(mesh.global) × joint.global × inverse_bind` to a dual
|
|
9
|
-
* quaternion, which carries a rotation and a translation and **nothing else** — so that product has
|
|
10
|
-
* to be rigid, and whether it is depends entirely on `mesh.global`.
|
|
11
|
-
*
|
|
12
|
-
* glTF says a skinned mesh's node transform is ignored, so it is not the asset's to choose. This
|
|
13
|
-
* makes it the engine's, and sets it to the one frame that is guaranteed to work: the skin's own
|
|
14
|
-
* bind transform, `joint.global × inverse_bind` at rest — see {@link skin_bind_transform}. After
|
|
15
|
-
* this, `inverse(mesh.global) × joint.global × inverse_bind` is the joint's **displacement from
|
|
16
|
-
* bind**, which is rigid whenever the clip rotates and translates and does not scale. That is the
|
|
17
|
-
* honest precondition of dual-quaternion skinning, and it is a property of the animation rather than
|
|
18
|
-
* of the exporter's unit conventions.
|
|
19
|
-
*
|
|
20
|
-
* `SKINNING_FRAME_PLAN.md` is the whole argument, including what a violation looks like on screen.
|
|
21
|
-
*
|
|
22
|
-
* ## Properties worth knowing
|
|
23
|
-
*
|
|
24
|
-
* - **Idempotent.** Afterwards `mesh.global` *is* the bind transform, so a second call computes the
|
|
25
|
-
* identity and changes nothing. Re-registering a skin is free.
|
|
26
|
-
* - **Placement-invariant.** The correction is `mesh.global⁻¹ × bind`, and anything applied above
|
|
27
|
-
* both the mesh node and the joints — a placement, a walk cycle moving the character — multiplies
|
|
28
|
-
* both on the left and cancels. Computed once, correct forever.
|
|
29
|
-
* - **A no-op for an asset that already agrees.** A file whose inverse-bind matrices are authored
|
|
30
|
-
* before its root's unit conversion has `bind == mesh.global` already and is not touched. That is
|
|
31
|
-
* the shape this engine's creature models are said to have, and it is what keeps this from being
|
|
32
|
-
* a change to them.
|
|
33
|
-
*
|
|
34
|
-
* ## What it cannot fix
|
|
35
|
-
*
|
|
36
|
-
* A skin whose *own* bind frame does not work — a rest pose carrying a non-uniform scale or a shear,
|
|
37
|
-
* or joints that disagree about more than a rigid motion. No choice of frame fixes those; a dual
|
|
38
|
-
* quaternion cannot represent them at all. `frame_defect` in the report is that case, and when it
|
|
39
|
-
* fires nothing is written: the mesh is left as the asset had it rather than moved somewhere equally
|
|
40
|
-
* wrong. See `SKINNING_FRAME_PLAN.md` §4 for the ladder out.
|
|
41
|
-
*
|
|
42
|
-
* @param {Skin} skin its joints and meshes must have been walked — this reads `transform_global`,
|
|
43
|
-
* which is derived. A skin that has never been walked at all is refused rather than
|
|
44
|
-
* measured; one walked and then moved is the caller's to walk again, and the residual
|
|
45
|
-
* below is what notices if the mesh half of that was missed
|
|
46
|
-
* @returns {{
|
|
47
|
-
* frame_defect: number,
|
|
48
|
-
* absorbed: number,
|
|
49
|
-
* corrected: number,
|
|
50
|
-
* unchanged: number,
|
|
51
|
-
* residual: number,
|
|
52
|
-
* obstructed: Node3D[],
|
|
53
|
-
* unwalked: Node3D[],
|
|
54
|
-
* }} `frame_defect` — how far the skin is from being deformable in *any* frame, zero when it is
|
|
55
|
-
* fine and `NaN` when `unwalked` stopped it being asked; `absorbed` — how far from rigid the largest correction was, which for a violation is the
|
|
56
|
-
* number the soup was made of; `corrected` and `unchanged` — meshes moved and meshes already
|
|
57
|
-
* right; `residual` — the worst `|mesh.global − bind|` left afterwards; `obstructed` — corrected
|
|
58
|
-
* mesh nodes that had children, which have been scaled along with them; `unwalked` — joints or
|
|
59
|
-
* meshes whose `transform_global` has never been derived, which stops everything else
|
|
60
|
-
*/
|
|
61
|
-
export function skin_normalize_mesh_frame(skin: Skin): {
|
|
62
|
-
frame_defect: number;
|
|
63
|
-
absorbed: number;
|
|
64
|
-
corrected: number;
|
|
65
|
-
unchanged: number;
|
|
66
|
-
residual: number;
|
|
67
|
-
obstructed: Node3D[];
|
|
68
|
-
unwalked: Node3D[];
|
|
69
|
-
};
|
|
70
|
-
//# sourceMappingURL=skin_normalize_mesh_frame.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skin_normalize_mesh_frame.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/animation/skin_normalize_mesh_frame.js"],"names":[],"mappings":"AAoBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AACH,uDAfa;IACZ,YAAkB,EAAE,MAAM,CAAC;IAC3B,QAAc,EAAE,MAAM,CAAC;IACvB,SAAe,EAAE,MAAM,CAAC;IACxB,SAAe,EAAE,MAAM,CAAC;IACxB,QAAc,EAAE,MAAM,CAAC;IACvB,UAAgB,EAAE,QAAQ,CAAC;IAC3B,QAAc,EAAE,QAAQ,CAAC;CACtB,CA2GH"}
|
|
@@ -1,216 +0,0 @@
|
|
|
1
|
-
import { assert } from "../../../core/assert.js";
|
|
2
|
-
import { m4_invert } from "../../../core/geom/3d/mat4/m4_invert.js";
|
|
3
|
-
import { m4_multiply } from "../../../core/geom/3d/mat4/m4_multiply.js";
|
|
4
|
-
import { m4_rigidity_defect } from "../../../core/geom/3d/mat4/m4_rigidity_defect.js";
|
|
5
|
-
import { Transform64 } from "../../../engine/ecs/transform/Transform64.js";
|
|
6
|
-
import { skin_bind_transform } from "./skin_bind_transform.js";
|
|
7
|
-
import { skin_frame_defect } from "./skin_frame_defect.js";
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* How far from the bind transform a mesh node may sit and still be left alone, and how large a
|
|
11
|
-
* residual counts as landed.
|
|
12
|
-
*
|
|
13
|
-
* A `Transform64` recomposes its local matrix from f32-ish components, and the correction is applied
|
|
14
|
-
* through that round trip, so the frame arrives with rounding on it. `1e-4` is far below anything
|
|
15
|
-
* that shows — the smallest real violation seen is `99` — and far above the noise.
|
|
16
|
-
*
|
|
17
|
-
* @type {number}
|
|
18
|
-
*/
|
|
19
|
-
const TOLERANCE = 1e-4;
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Put a skin's meshes into the frame the skin actually deforms in.
|
|
23
|
-
*
|
|
24
|
-
* ## What it does and why
|
|
25
|
-
*
|
|
26
|
-
* The skinning pass writes each clone's vertices in `inverse(mesh.global)` space and the rasterizer
|
|
27
|
-
* re-applies `mesh.global`, so `mesh.global` is the *frame* a skinned mesh's vertices live in. The
|
|
28
|
-
* pass gets there by converting `inverse(mesh.global) × joint.global × inverse_bind` to a dual
|
|
29
|
-
* quaternion, which carries a rotation and a translation and **nothing else** — so that product has
|
|
30
|
-
* to be rigid, and whether it is depends entirely on `mesh.global`.
|
|
31
|
-
*
|
|
32
|
-
* glTF says a skinned mesh's node transform is ignored, so it is not the asset's to choose. This
|
|
33
|
-
* makes it the engine's, and sets it to the one frame that is guaranteed to work: the skin's own
|
|
34
|
-
* bind transform, `joint.global × inverse_bind` at rest — see {@link skin_bind_transform}. After
|
|
35
|
-
* this, `inverse(mesh.global) × joint.global × inverse_bind` is the joint's **displacement from
|
|
36
|
-
* bind**, which is rigid whenever the clip rotates and translates and does not scale. That is the
|
|
37
|
-
* honest precondition of dual-quaternion skinning, and it is a property of the animation rather than
|
|
38
|
-
* of the exporter's unit conventions.
|
|
39
|
-
*
|
|
40
|
-
* `SKINNING_FRAME_PLAN.md` is the whole argument, including what a violation looks like on screen.
|
|
41
|
-
*
|
|
42
|
-
* ## Properties worth knowing
|
|
43
|
-
*
|
|
44
|
-
* - **Idempotent.** Afterwards `mesh.global` *is* the bind transform, so a second call computes the
|
|
45
|
-
* identity and changes nothing. Re-registering a skin is free.
|
|
46
|
-
* - **Placement-invariant.** The correction is `mesh.global⁻¹ × bind`, and anything applied above
|
|
47
|
-
* both the mesh node and the joints — a placement, a walk cycle moving the character — multiplies
|
|
48
|
-
* both on the left and cancels. Computed once, correct forever.
|
|
49
|
-
* - **A no-op for an asset that already agrees.** A file whose inverse-bind matrices are authored
|
|
50
|
-
* before its root's unit conversion has `bind == mesh.global` already and is not touched. That is
|
|
51
|
-
* the shape this engine's creature models are said to have, and it is what keeps this from being
|
|
52
|
-
* a change to them.
|
|
53
|
-
*
|
|
54
|
-
* ## What it cannot fix
|
|
55
|
-
*
|
|
56
|
-
* A skin whose *own* bind frame does not work — a rest pose carrying a non-uniform scale or a shear,
|
|
57
|
-
* or joints that disagree about more than a rigid motion. No choice of frame fixes those; a dual
|
|
58
|
-
* quaternion cannot represent them at all. `frame_defect` in the report is that case, and when it
|
|
59
|
-
* fires nothing is written: the mesh is left as the asset had it rather than moved somewhere equally
|
|
60
|
-
* wrong. See `SKINNING_FRAME_PLAN.md` §4 for the ladder out.
|
|
61
|
-
*
|
|
62
|
-
* @param {Skin} skin its joints and meshes must have been walked — this reads `transform_global`,
|
|
63
|
-
* which is derived. A skin that has never been walked at all is refused rather than
|
|
64
|
-
* measured; one walked and then moved is the caller's to walk again, and the residual
|
|
65
|
-
* below is what notices if the mesh half of that was missed
|
|
66
|
-
* @returns {{
|
|
67
|
-
* frame_defect: number,
|
|
68
|
-
* absorbed: number,
|
|
69
|
-
* corrected: number,
|
|
70
|
-
* unchanged: number,
|
|
71
|
-
* residual: number,
|
|
72
|
-
* obstructed: Node3D[],
|
|
73
|
-
* unwalked: Node3D[],
|
|
74
|
-
* }} `frame_defect` — how far the skin is from being deformable in *any* frame, zero when it is
|
|
75
|
-
* fine and `NaN` when `unwalked` stopped it being asked; `absorbed` — how far from rigid the largest correction was, which for a violation is the
|
|
76
|
-
* number the soup was made of; `corrected` and `unchanged` — meshes moved and meshes already
|
|
77
|
-
* right; `residual` — the worst `|mesh.global − bind|` left afterwards; `obstructed` — corrected
|
|
78
|
-
* mesh nodes that had children, which have been scaled along with them; `unwalked` — joints or
|
|
79
|
-
* meshes whose `transform_global` has never been derived, which stops everything else
|
|
80
|
-
*/
|
|
81
|
-
export function skin_normalize_mesh_frame(skin) {
|
|
82
|
-
assert.defined(skin, 'skin');
|
|
83
|
-
assert.equal(skin.isSkin, true, 'skin.isSkin !== true');
|
|
84
|
-
|
|
85
|
-
const unwalked = skin.joints.filter(joint => joint.version === 0)
|
|
86
|
-
.concat(skin.meshes.filter(mesh => mesh.version === 0));
|
|
87
|
-
|
|
88
|
-
const report = {
|
|
89
|
-
// not measured until there is something worth measuring — see the refusal below
|
|
90
|
-
frame_defect: Number.NaN,
|
|
91
|
-
absorbed: 0,
|
|
92
|
-
corrected: 0,
|
|
93
|
-
unchanged: 0,
|
|
94
|
-
residual: 0,
|
|
95
|
-
obstructed: [],
|
|
96
|
-
unwalked,
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
if (unwalked.length > 0) {
|
|
100
|
-
/*
|
|
101
|
-
Everything below reads `transform_global`, which is derived and starts at the **identity** —
|
|
102
|
-
not at zero. A skeleton nobody has walked therefore answers "every joint is at the origin"
|
|
103
|
-
rather than answering with a singular matrix, and that answer is well-formed enough to pass
|
|
104
|
-
every check here: the folds come out `inverse_bind_0⁻¹ × inverse_bind_j`, which for a real
|
|
105
|
-
character differ by rigid motions and so read as perfectly rigid. A correction would then be
|
|
106
|
-
computed from nothing and applied, and the residual below would agree with itself, because
|
|
107
|
-
both halves of it come from the same unwalked state.
|
|
108
|
-
|
|
109
|
-
`version` is the one thing that tells the two apart: `updateMatrices` bumps it, and nothing
|
|
110
|
-
else does. Refusing here rather than asserting because a caller who has not walked has a
|
|
111
|
-
scene that is not ready, not a bug in this.
|
|
112
|
-
*/
|
|
113
|
-
return report;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
const bind = new Float64Array(16);
|
|
117
|
-
|
|
118
|
-
skin_bind_transform(bind, skin);
|
|
119
|
-
|
|
120
|
-
report.frame_defect = skin_frame_defect(skin, bind);
|
|
121
|
-
|
|
122
|
-
if (!(report.frame_defect <= TOLERANCE)) {
|
|
123
|
-
// `!(x <= t)` rather than `x > t` so that a NaN — a singular joint matrix — lands here too
|
|
124
|
-
return report;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
const inverse_global = new Float64Array(16);
|
|
128
|
-
const correction_matrix = new Float64Array(16);
|
|
129
|
-
|
|
130
|
-
const correction = new Transform64();
|
|
131
|
-
|
|
132
|
-
const meshes = skin.meshes;
|
|
133
|
-
|
|
134
|
-
for (let i = 0; i < meshes.length; i++) {
|
|
135
|
-
const mesh = meshes[i];
|
|
136
|
-
|
|
137
|
-
if (!m4_invert(inverse_global, mesh.transform_global)) {
|
|
138
|
-
// a mesh node with no inverse is not a frame either; the skinning pass inverts this
|
|
139
|
-
report.residual = Infinity;
|
|
140
|
-
continue;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
m4_multiply(correction_matrix, inverse_global, bind);
|
|
144
|
-
|
|
145
|
-
const absorbed = m4_rigidity_defect(correction_matrix);
|
|
146
|
-
|
|
147
|
-
report.absorbed = Math.max(report.absorbed, absorbed);
|
|
148
|
-
|
|
149
|
-
if (matrix_distance(correction_matrix, IDENTITY) <= TOLERANCE) {
|
|
150
|
-
report.unchanged++;
|
|
151
|
-
continue;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
/*
|
|
155
|
-
The correction goes on the **local** transform, on the right. `transform_global` is derived —
|
|
156
|
-
`updateMatrices` recomputes it from the local and the parent chain — so a frame written
|
|
157
|
-
there is discarded by the next walk; and the mesh node is the last node on the mesh-only
|
|
158
|
-
path, so this is the one place a correction reaches the mesh without reaching the joints.
|
|
159
|
-
*/
|
|
160
|
-
correction.fromMatrix(correction_matrix);
|
|
161
|
-
|
|
162
|
-
mesh.transform_local.multiply(correction);
|
|
163
|
-
|
|
164
|
-
mesh.updateMatrices();
|
|
165
|
-
|
|
166
|
-
report.corrected++;
|
|
167
|
-
report.residual = Math.max(report.residual, matrix_distance(mesh.transform_global, bind));
|
|
168
|
-
|
|
169
|
-
if (mesh.children.length > 0) {
|
|
170
|
-
/*
|
|
171
|
-
Children of a skinned mesh node inherit the correction, and it is not a transform they
|
|
172
|
-
asked for. In this engine sockets, effect anchors and projectile spawns are authored as
|
|
173
|
-
bones, so a skinned mesh node should have none — but that is a convention, and this is
|
|
174
|
-
where it would be broken silently.
|
|
175
|
-
*/
|
|
176
|
-
report.obstructed.push(mesh);
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
return report;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
/**
|
|
184
|
-
* @type {Float64Array}
|
|
185
|
-
*/
|
|
186
|
-
const IDENTITY = new Float64Array([
|
|
187
|
-
1, 0, 0, 0,
|
|
188
|
-
0, 1, 0, 0,
|
|
189
|
-
0, 0, 1, 0,
|
|
190
|
-
0, 0, 0, 1,
|
|
191
|
-
]);
|
|
192
|
-
|
|
193
|
-
/**
|
|
194
|
-
* The largest element-wise difference between two matrices.
|
|
195
|
-
*
|
|
196
|
-
* Element-wise rather than a norm because it is read against a tolerance, and because the two things
|
|
197
|
-
* it has to catch — a linear part that did not land and a translation that did not — are both
|
|
198
|
-
* element-wise. Mixing units is the point: any of them being wrong is the same answer.
|
|
199
|
-
*
|
|
200
|
-
* @param {ArrayLike<number>} a
|
|
201
|
-
* @param {ArrayLike<number>} b
|
|
202
|
-
* @returns {number}
|
|
203
|
-
*/
|
|
204
|
-
function matrix_distance(a, b) {
|
|
205
|
-
let worst = 0;
|
|
206
|
-
|
|
207
|
-
for (let i = 0; i < 16; i++) {
|
|
208
|
-
const difference = Math.abs(a[i] - b[i]);
|
|
209
|
-
|
|
210
|
-
if (difference > worst) {
|
|
211
|
-
worst = difference;
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
return worst;
|
|
216
|
-
}
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @typedef {import("../material/ShadeMaterial.js").ShadeMaterial} ShadeMaterial
|
|
3
|
-
* @typedef {import("./Mesh.js").Mesh} Mesh
|
|
4
|
-
* @typedef {import("./Node3D.js").Node3D} Node3D
|
|
5
|
-
*/
|
|
6
|
-
/**
|
|
7
|
-
* The renderable side of a {@link Scene} — every {@link Node3D} that the
|
|
8
|
-
* GPU's `transforms` table needs a row for, plus the cached mesh-only
|
|
9
|
-
* filter rendering iterates.
|
|
10
|
-
*
|
|
11
|
-
* Storage is a flat `Node3D[]`. Anything `Mesh`-shaped feeds the
|
|
12
|
-
* {@link instances} view (the renderable subset); everything else (anchor
|
|
13
|
-
* rigs, attachment points, future skeleton joints) still earns a row in
|
|
14
|
-
* the GPU scene-graph because the propagation pass needs to walk the
|
|
15
|
-
* whole hierarchy regardless of which nodes happen to carry geometry.
|
|
16
|
-
*
|
|
17
|
-
* Lights live in {@link Scene.lights}, separately, and are not added
|
|
18
|
-
* here — they have their own GPU pipeline that doesn't share the
|
|
19
|
-
* `transforms` table.
|
|
20
|
-
*/
|
|
21
|
-
export class InstanceBatch {
|
|
22
|
-
/**
|
|
23
|
-
* Set of all materials used in this scene.
|
|
24
|
-
* Primarily useful for rendering.
|
|
25
|
-
* @type {ShadeMaterial[]}
|
|
26
|
-
*/
|
|
27
|
-
get materials(): import("../material/ShadeMaterial.js").ShadeMaterial[];
|
|
28
|
-
/**
|
|
29
|
-
*
|
|
30
|
-
* @param {boolean} v
|
|
31
|
-
*/
|
|
32
|
-
set needsUpdate(v: boolean);
|
|
33
|
-
/**
|
|
34
|
-
*
|
|
35
|
-
* @return {number}
|
|
36
|
-
*/
|
|
37
|
-
get version(): number;
|
|
38
|
-
/**
|
|
39
|
-
* The mesh-only subset of {@link nodes} — what the rasterization
|
|
40
|
-
* pipeline iterates. Cached so repeated calls within the same
|
|
41
|
-
* version are O(1).
|
|
42
|
-
*
|
|
43
|
-
* @returns {Mesh[]}
|
|
44
|
-
*/
|
|
45
|
-
get instances(): import("./Mesh.js").Mesh[];
|
|
46
|
-
/**
|
|
47
|
-
* Every node in the batch — the input the GPU scene-graph propagation
|
|
48
|
-
* pass iterates. Order is insertion order; {@link instances} is
|
|
49
|
-
* a stable subset.
|
|
50
|
-
*
|
|
51
|
-
* @returns {Node3D[]}
|
|
52
|
-
*/
|
|
53
|
-
get nodes(): import("./Node3D.js").Node3D[];
|
|
54
|
-
/**
|
|
55
|
-
* Add a node. Accepts any {@link Node3D} — meshes, anchors, future
|
|
56
|
-
* skeleton joints. Meshes will additionally appear in
|
|
57
|
-
* {@link instances} (cached).
|
|
58
|
-
*
|
|
59
|
-
* @param {Node3D} node
|
|
60
|
-
*/
|
|
61
|
-
add(node: Node3D): void;
|
|
62
|
-
/**
|
|
63
|
-
*
|
|
64
|
-
* @return {AABB3}
|
|
65
|
-
*/
|
|
66
|
-
get bounding_box(): AABB3;
|
|
67
|
-
/**
|
|
68
|
-
*
|
|
69
|
-
* @returns {number}
|
|
70
|
-
*/
|
|
71
|
-
computeTriangleCount(): number;
|
|
72
|
-
/**
|
|
73
|
-
* Remove a node (mesh or otherwise). Returns true if the node was
|
|
74
|
-
* found and dropped.
|
|
75
|
-
*
|
|
76
|
-
* @param {Node3D} node
|
|
77
|
-
* @returns {boolean}
|
|
78
|
-
*/
|
|
79
|
-
remove(node: Node3D): boolean;
|
|
80
|
-
hash(): number;
|
|
81
|
-
/**
|
|
82
|
-
*
|
|
83
|
-
* @param {InstanceBatch} other
|
|
84
|
-
*/
|
|
85
|
-
equals(other: InstanceBatch): boolean;
|
|
86
|
-
#private;
|
|
87
|
-
}
|
|
88
|
-
export type ShadeMaterial = import("../material/ShadeMaterial.js").ShadeMaterial;
|
|
89
|
-
export type Mesh = import("./Mesh.js").Mesh;
|
|
90
|
-
export type Node3D = import("./Node3D.js").Node3D;
|
|
91
|
-
import { AABB3 } from "../../../core/geom/3d/aabb/AABB3.js";
|
|
92
|
-
//# sourceMappingURL=InstanceBatch.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"InstanceBatch.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/InstanceBatch.js"],"names":[],"mappings":"AAKA;;;;GAIG;AAEH;;;;;;;;;;;;;;GAcG;AACH;IAyCI;;;;OAIG;IACH,wEAcC;IAED;;;OAGG;IACH,4BAMC;IAED;;;OAGG;IACH,sBAEC;IAED;;;;;;OAMG;IACH,4CAeC;IAED;;;;;;OAMG;IACH,4CAEC;IAGD;;;;;;OAMG;IACH,UAFW,MAAM,QAShB;IAED;;;OAGG;IACH,0BAoBC;IAED;;;OAGG;IACH,wBAFa,MAAM,CAclB;IAED;;;;;;OAMG;IACH,aAHW,MAAM,GACJ,OAAO,CAWnB;IAED,eAEC;IAED;;;OAGG;IACH,cAFW,aAAa,WAIvB;;CAEJ;4BApOY,OAAO,8BAA8B,EAAE,aAAa;mBACpD,OAAO,WAAW,EAAE,IAAI;qBACxB,OAAO,aAAa,EAAE,MAAM;sBALnB,qCAAqC"}
|