@woosh/meep-engine 3.42.0 → 3.44.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/prototypeEditorShell.d.ts.map +1 -1
- package/editor/prototypeEditorShell.js +4 -2
- package/package.json +91 -96
- package/src/engine/Clock.d.ts +15 -0
- package/src/engine/Clock.d.ts.map +1 -1
- package/src/engine/Clock.js +29 -5
- package/src/engine/Engine.d.ts.map +1 -1
- package/src/engine/Engine.js +11 -19
- package/src/engine/graphics/ecs/mesh-v2/MeshSkin.d.ts +57 -0
- package/src/engine/graphics/ecs/mesh-v2/MeshSkin.d.ts.map +1 -0
- package/src/engine/graphics/ecs/mesh-v2/MeshSkin.js +84 -0
- package/src/engine/graphics3/AnimationGraphSystem.d.ts +23 -13
- package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationGraphSystem.js +61 -64
- package/src/engine/graphics3/AnimationSystem.d.ts +24 -15
- package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationSystem.js +67 -61
- package/src/engine/graphics3/MeshSkinSystem.d.ts +56 -0
- package/src/engine/graphics3/MeshSkinSystem.d.ts.map +1 -0
- package/src/engine/graphics3/MeshSkinSystem.js +317 -0
- package/src/engine/graphics3/MeshSystem.d.ts +15 -35
- package/src/engine/graphics3/MeshSystem.d.ts.map +1 -1
- package/src/engine/graphics3/MeshSystem.js +21 -298
- package/src/engine/graphics3/RowChains.d.ts +76 -0
- package/src/engine/graphics3/RowChains.d.ts.map +1 -0
- package/src/engine/graphics3/RowChains.js +347 -0
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts +6 -0
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -1
- package/src/engine/graphics3/ShadedGeometrySystem.js +329 -309
- package/src/engine/graphics3/animation/AnimationClips.d.ts +56 -0
- package/src/engine/graphics3/animation/AnimationClips.d.ts.map +1 -0
- package/src/engine/graphics3/animation/AnimationClips.js +79 -0
- package/src/engine/graphics3/animation/ClipListPlayer.d.ts +13 -14
- package/src/engine/graphics3/animation/ClipListPlayer.d.ts.map +1 -1
- package/src/engine/graphics3/animation/ClipListPlayer.js +262 -263
- package/src/engine/graphics3/animation/write_clip_playback.d.ts +3 -3
- package/src/engine/graphics3/animation/write_clip_playback.js +4 -4
- package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts +5 -0
- 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 +80 -75
- package/src/engine/graphics3/prefab/PrefabInstance.d.ts +4 -24
- package/src/engine/graphics3/prefab/PrefabInstance.d.ts.map +1 -1
- package/src/engine/graphics3/prefab/PrefabInstance.js +60 -80
- package/src/engine/graphics3/prefab/prefab_instantiate.d.ts +16 -3
- package/src/engine/graphics3/prefab/prefab_instantiate.d.ts.map +1 -1
- package/src/engine/graphics3/prefab/prefab_instantiate.js +49 -12
- package/src/engine/graphics3/prefab/prefab_place.d.ts +31 -17
- package/src/engine/graphics3/prefab/prefab_place.d.ts.map +1 -1
- package/src/engine/graphics3/prefab/prefab_place.js +175 -130
- package/src/engine/graphics3/register_clips.d.ts +64 -0
- package/src/engine/graphics3/register_clips.d.ts.map +1 -0
- package/src/engine/graphics3/register_clips.js +114 -0
- package/src/engine/physics/cloth/MEASUREMENTS.md +795 -0
- package/src/engine/physics/cloth/PLAN.md +339 -9
- package/src/engine/physics/cloth/build/ClothProxy.d.ts +113 -61
- package/src/engine/physics/cloth/build/ClothProxy.d.ts.map +1 -1
- package/src/engine/physics/cloth/build/ClothProxy.js +142 -77
- package/src/engine/physics/cloth/build/cloth_bind_in_frame.d.ts +22 -0
- package/src/engine/physics/cloth/build/cloth_bind_in_frame.d.ts.map +1 -0
- package/src/engine/physics/cloth/build/cloth_bind_in_frame.js +75 -0
- package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts +43 -30
- 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 +357 -284
- package/src/engine/physics/cloth/build/cloth_proxy_from_mesh.d.ts +62 -0
- package/src/engine/physics/cloth/build/cloth_proxy_from_mesh.d.ts.map +1 -0
- package/src/engine/physics/cloth/build/cloth_proxy_from_mesh.js +280 -0
- package/src/engine/physics/cloth/collider/cloth_collider_sdf.d.ts +1 -1
- package/src/engine/physics/cloth/collider/cloth_collider_sdf.js +1 -1
- package/src/engine/physics/cloth/ecs/Cloth.d.ts +17 -9
- package/src/engine/physics/cloth/ecs/Cloth.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/Cloth.js +220 -212
- package/src/engine/physics/cloth/ecs/ClothDynamicsFlags.js +6 -0
- package/src/engine/physics/cloth/ecs/ClothHold.d.ts +91 -0
- package/src/engine/physics/cloth/ecs/ClothHold.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/ClothHold.js +103 -0
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +254 -48
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothInstance.js +277 -47
- package/src/engine/physics/cloth/ecs/ClothPin.d.ts +73 -0
- package/src/engine/physics/cloth/ecs/ClothPin.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/ClothPin.js +92 -0
- package/src/engine/physics/cloth/ecs/ClothPinSerializationAdapter.d.ts +36 -0
- package/src/engine/physics/cloth/ecs/ClothPinSerializationAdapter.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/ClothPinSerializationAdapter.js +61 -0
- package/src/engine/physics/cloth/ecs/ClothRig.d.ts +23 -17
- package/src/engine/physics/cloth/ecs/ClothRig.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothRig.js +29 -27
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts +12 -14
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothSystem.js +20 -15
- package/src/engine/physics/cloth/ecs/ClothWorld.d.ts +57 -36
- package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothWorld.js +816 -179
- package/src/engine/physics/cloth/ecs/WorkerClothSystem.d.ts +12 -13
- package/src/engine/physics/cloth/ecs/WorkerClothSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/WorkerClothSystem.js +20 -14
- package/src/engine/physics/cloth/ecs/cloth_build_rows.d.ts +63 -11
- package/src/engine/physics/cloth/ecs/cloth_build_rows.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_build_rows.js +321 -84
- package/src/engine/physics/cloth/ecs/cloth_dynamics_map.d.ts +9 -7
- package/src/engine/physics/cloth/ecs/cloth_dynamics_map.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_dynamics_map.js +9 -7
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts +3 -3
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.js +30 -30
- package/src/engine/physics/cloth/ecs/cloth_geodesic.d.ts +37 -0
- package/src/engine/physics/cloth/ecs/cloth_geodesic.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/cloth_geodesic.js +142 -0
- package/src/engine/physics/cloth/ecs/cloth_holds.d.ts +97 -0
- package/src/engine/physics/cloth/ecs/cloth_holds.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/cloth_holds.js +608 -0
- package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.d.ts +2 -2
- package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.js +160 -9
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts +17 -22
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.js +55 -117
- package/src/engine/physics/cloth/ecs/cloth_seed_subtree.d.ts +21 -6
- package/src/engine/physics/cloth/ecs/cloth_seed_subtree.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_seed_subtree.js +44 -15
- package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts +5 -0
- package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_write_back.js +60 -16
- 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 +65 -58
- package/src/engine/physics/cloth/playground/collide_main.js +1 -1
- package/src/engine/physics/cloth/playground/garment_build.d.ts.map +1 -1
- package/src/engine/physics/cloth/playground/garment_build.js +17 -5
- package/src/engine/physics/cloth/playground/garment_main.js +1 -1
- package/src/engine/physics/cloth/playground/rig_build.d.ts.map +1 -1
- package/src/engine/physics/cloth/playground/rig_build.js +302 -296
- package/src/engine/physics/cloth/solver/ClothState.d.ts +45 -7
- package/src/engine/physics/cloth/solver/ClothState.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/ClothState.js +63 -7
- package/src/engine/physics/cloth/solver/cloth_contact_find.d.ts +6 -1
- package/src/engine/physics/cloth/solver/cloth_contact_find.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_contact_find.js +7 -2
- package/src/engine/physics/cloth/solver/cloth_hold_line.d.ts +114 -0
- package/src/engine/physics/cloth/solver/cloth_hold_line.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_hold_line.js +362 -0
- package/src/engine/physics/cloth/solver/cloth_self_find.d.ts +6 -2
- package/src/engine/physics/cloth/solver/cloth_self_find.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_self_find.js +13 -13
- package/src/engine/physics/cloth/solver/cloth_solver_constants.d.ts +24 -12
- package/src/engine/physics/cloth/solver/cloth_solver_constants.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_solver_constants.js +24 -12
- package/src/engine/physics/cloth/solver/cloth_step.d.ts +16 -0
- package/src/engine/physics/cloth/solver/cloth_step.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_step.js +183 -20
- package/src/engine/physics/cloth/solver/cloth_step_instance.d.ts +1 -0
- package/src/engine/physics/cloth/solver/cloth_step_instance.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_step_instance.js +10 -3
- package/src/engine/physics/cloth/solver/constraint/cloth_leash_row.d.ts +1 -1
- package/src/engine/physics/cloth/solver/constraint/cloth_leash_row.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/constraint/cloth_leash_row.js +353 -346
- package/src/engine/physics/cloth/solver/constraint/cloth_self_row.d.ts +7 -5
- package/src/engine/physics/cloth/solver/constraint/cloth_self_row.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/constraint/cloth_self_row.js +7 -5
- package/src/engine/physics/cloth/wind/cloth_sample_air.d.ts +9 -9
- package/src/engine/physics/cloth/wind/cloth_sample_air.d.ts.map +1 -1
- package/src/engine/physics/cloth/wind/cloth_sample_air.js +26 -26
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/engine/simulation/Ticker.d.ts +13 -0
- package/src/engine/simulation/Ticker.d.ts.map +1 -1
- package/src/engine/simulation/Ticker.js +43 -8
- package/src/shade/RENDERER_CONTRACT.md +8 -2
- package/src/shade/playground/mesh_row_ceiling/main.js +2 -1
- package/src/shade/playground/skinned_blas_refit/main.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/main.js +11 -19
- package/src/shade/playground/skinned_blas_refit/place_character.d.ts +6 -3
- package/src/shade/playground/skinned_blas_refit/place_character.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/place_character.js +90 -90
- package/src/shade/playground/skinned_mesh_soup/main.d.ts.map +1 -1
- package/src/shade/playground/skinned_mesh_soup/main.js +502 -509
- package/src/shade/playground/texture_encode/README.md +129 -109
- package/src/shade/playground/texture_encode/main.js +1430 -1430
- package/src/shade/playground/vgeo_runtime/README.md +5 -4
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +6 -5
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts +45 -14
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.js +316 -64
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts +5 -0
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +11 -1
- package/src/shade/renderer/atmosphere/GPUSky.d.ts +12 -0
- package/src/shade/renderer/atmosphere/GPUSky.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/GPUSky.js +162 -147
- package/src/shade/renderer/geometry/BoxGeometry.d.ts +1 -11
- package/src/shade/renderer/geometry/BoxGeometry.d.ts.map +1 -1
- package/src/shade/renderer/geometry/BoxGeometry.js +6 -13
- package/src/shade/renderer/geometry/CapsuleGeometry.d.ts +19 -0
- package/src/shade/renderer/geometry/CapsuleGeometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/CapsuleGeometry.js +24 -0
- package/src/shade/renderer/geometry/ConeGeometry.d.ts +20 -0
- package/src/shade/renderer/geometry/ConeGeometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/ConeGeometry.js +33 -0
- package/src/shade/renderer/geometry/CylinderGeometry.d.ts +21 -0
- package/src/shade/renderer/geometry/CylinderGeometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/CylinderGeometry.js +35 -0
- package/src/shade/renderer/geometry/PlaneGeometry.d.ts +17 -0
- package/src/shade/renderer/geometry/PlaneGeometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/PlaneGeometry.js +22 -0
- package/src/shade/renderer/geometry/TorusGeometry.d.ts +18 -0
- package/src/shade/renderer/geometry/TorusGeometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/TorusGeometry.js +23 -0
- package/src/shade/renderer/geometry/UVSphereGeometry.d.ts +21 -0
- package/src/shade/renderer/geometry/UVSphereGeometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/UVSphereGeometry.js +34 -0
- package/src/shade/renderer/geometry/primitives/make_capsule_geometry.d.ts +19 -0
- package/src/shade/renderer/geometry/primitives/make_capsule_geometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/primitives/make_capsule_geometry.js +205 -0
- package/src/shade/renderer/geometry/primitives/make_cone_geometry.d.ts +21 -0
- package/src/shade/renderer/geometry/primitives/make_cone_geometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/primitives/make_cone_geometry.js +36 -0
- package/src/shade/renderer/geometry/primitives/make_cylinder_geometry.d.ts +1 -1
- package/src/shade/renderer/geometry/primitives/make_cylinder_geometry.d.ts.map +1 -1
- package/src/shade/renderer/geometry/primitives/make_cylinder_geometry.js +44 -9
- package/src/shade/renderer/geometry/primitives/make_uv_sphere_geometry.d.ts +20 -0
- package/src/shade/renderer/geometry/primitives/make_uv_sphere_geometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/primitives/make_uv_sphere_geometry.js +190 -0
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js +7 -2
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.d.ts +26 -8
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.js +56 -39
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.d.ts +7 -0
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.js +46 -4
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/test_prefix_sum.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/test_prefix_sum.js +4 -2
- package/src/shade/renderer/gpu_primitive/sort/defs.d.ts +2 -2
- package/src/shade/renderer/gpu_primitive/sort/defs.js +79 -79
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts +1 -1
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.js +7 -3
- package/src/shade/renderer/lightmap/bake/shader_lightmap_denoise_sh.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/bake/shader_lightmap_denoise_sh.js +10 -3
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/particles/DESIGN.md +13 -9
- package/src/shade/renderer/particles/GPUParticleSystem.js +1 -1
- package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts +4 -3
- package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts.map +1 -1
- package/src/shade/renderer/particles/coherence/graph_particle_bucket.js +200 -194
- package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles.js +6 -2
- package/src/shade/renderer/particles/shaders/chunk_particle_lighting.d.ts +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_lighting.js +1 -1
- package/src/shade/renderer/particles/warmup/graph_particle_warmup.d.ts.map +1 -1
- package/src/shade/renderer/particles/warmup/graph_particle_warmup.js +334 -329
- 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 +7 -2
- package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.js +16 -4
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +3 -2
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +3 -2
- package/src/shade/renderer/scene/GPUSceneContext.d.ts +9 -1
- package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.js +23 -1
- package/src/shade/renderer/texture/COMPRESSED_TEXTURE_PLAN_2026_09_01.md +2444 -2345
- package/src/shade/renderer/texture/encode/chunk_astc_encode_block_4x4_rgb.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/chunk_astc_encode_block_4x4_rgb.js +312 -310
- package/src/shade/renderer/texture/encode/chunk_bc1_encode_block.d.ts +3 -3
- package/src/shade/renderer/texture/encode/chunk_bc1_encode_block.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/chunk_bc1_encode_block.js +383 -375
- package/src/shade/renderer/texture/encode/chunk_bc6h_encode_block_mode11.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/chunk_bc6h_encode_block_mode11.js +349 -346
- package/src/shade/renderer/texture/encode/chunk_bc7_encode_block.d.ts +58 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_encode_block.d.ts.map +1 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_encode_block.js +536 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_encode_block_mode6.d.ts +21 -7
- package/src/shade/renderer/texture/encode/chunk_bc7_encode_block_mode6.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/chunk_bc7_encode_block_mode6.js +291 -327
- package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode1.d.ts +25 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode1.d.ts.map +1 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode1.js +99 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode6.d.ts +5 -3
- package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode6.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode6.js +47 -71
- package/src/shade/renderer/texture/encode/chunk_bc7_partition_2.d.ts +10 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_partition_2.d.ts.map +1 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_partition_2.js +50 -0
- package/src/shade/renderer/texture/encode/shader_texture_encode_bc7.d.ts +4 -5
- package/src/shade/renderer/texture/encode/shader_texture_encode_bc7.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/shader_texture_encode_bc7.js +7 -8
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +4 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +74 -3
- package/src/shade/renderer/volumetrics/NOTES.md +1023 -957
- package/src/shade/renderer/volumetrics/chunk_volumetrics_irradiance_sh.d.ts +5 -4
- package/src/shade/renderer/volumetrics/chunk_volumetrics_irradiance_sh.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/chunk_volumetrics_irradiance_sh.js +5 -4
- package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.d.ts +1 -1
- package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.js +1 -1
- package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.d.ts +1 -1
- package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.js +1 -1
- package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.d.ts +41 -0
- package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.js +112 -0
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts +9 -23
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +18 -126
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_irradiance.d.ts +22 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_irradiance.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_irradiance.js +228 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +0 -53
- package/src/shade/renderer/water/chunk_water_transport.d.ts.map +1 -1
- package/src/shade/renderer/water/chunk_water_transport.js +7 -5
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +1 -1
- package/src/shade/renderer/water/medium/GPUWaterBodies.js +8 -2
- package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.d.ts +3 -2
- package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.d.ts.map +1 -1
- package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.js +3 -2
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +3 -1
- package/src/shade/renderer/water/surface/GPUWaterSurface.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/GPUWaterSurface.js +3 -1
- package/src/shade/renderer/water/surface/chunk_water_surface_sample.d.ts +4 -3
- package/src/shade/renderer/water/surface/chunk_water_surface_sample.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/chunk_water_surface_sample.js +17 -7
- package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/graph_water_tessellation.js +11 -4
- package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/particles/GPUWaterParticles.js +93 -30
- package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.js +13 -5
- package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts +29 -8
- package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/particles/chunk_water_particle.js +155 -30
- package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts +6 -1
- package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.js +157 -39
- package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts +91 -21
- package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/particles/shader_water_particles.js +442 -70
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +11 -3
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +3 -0
- package/src/shade/wgsl/validate_wgsl_source.d.ts.map +1 -1
- package/src/shade/wgsl/validate_wgsl_source.js +74 -3
- package/src/engine/graphics3/register_instance_animation.d.ts +0 -114
- package/src/engine/graphics3/register_instance_animation.d.ts.map +0 -1
- package/src/engine/graphics3/register_instance_animation.js +0 -201
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { BinaryClassSerializationAdapter } from "../../../ecs/storage/binary/BinaryClassSerializationAdapter.js";
|
|
2
|
+
import { ClothPin } from "./ClothPin.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* # Binary serialization for {@link ClothPin}
|
|
6
|
+
*
|
|
7
|
+
* The cloth's entity, then the particles. A rope is saved as its links and its
|
|
8
|
+
* `Cloth`; without its pin it would load as a rope nothing holds, and fall.
|
|
9
|
+
*
|
|
10
|
+
* The cloth is written as a raw entity id, the way `JointSerializationAdapter`
|
|
11
|
+
* writes its two: a scene's entities keep their ids across a save. A pin on an
|
|
12
|
+
* entity that is not saved — a bone a model spawned, which is transient — is
|
|
13
|
+
* not saved with it, and is put back by whatever spawns the model, as its
|
|
14
|
+
* `ClothRig` is.
|
|
15
|
+
*
|
|
16
|
+
* ## Version 0, and no upgrader
|
|
17
|
+
*
|
|
18
|
+
* A first version has no predecessor stream to upgrade from.
|
|
19
|
+
*
|
|
20
|
+
* @author Alex Goldring
|
|
21
|
+
* @copyright Company Named Limited (c) 2026
|
|
22
|
+
*/
|
|
23
|
+
export class ClothPinSerializationAdapter extends BinaryClassSerializationAdapter {
|
|
24
|
+
|
|
25
|
+
klass = ClothPin;
|
|
26
|
+
version = 0;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* @param {BinaryBuffer} buffer
|
|
30
|
+
* @param {ClothPin} value
|
|
31
|
+
*/
|
|
32
|
+
serialize(buffer, value) {
|
|
33
|
+
buffer.writeUint32(value.cloth);
|
|
34
|
+
|
|
35
|
+
const particles = value.particles;
|
|
36
|
+
|
|
37
|
+
buffer.writeUintVar(particles.length);
|
|
38
|
+
|
|
39
|
+
for (let i = 0; i < particles.length; i++) {
|
|
40
|
+
buffer.writeUintVar(particles[i]);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* @param {BinaryBuffer} buffer
|
|
46
|
+
* @param {ClothPin} value
|
|
47
|
+
*/
|
|
48
|
+
deserialize(buffer, value) {
|
|
49
|
+
value.cloth = buffer.readUint32();
|
|
50
|
+
|
|
51
|
+
const count = buffer.readUintVar();
|
|
52
|
+
|
|
53
|
+
const particles = new Int32Array(count);
|
|
54
|
+
|
|
55
|
+
for (let i = 0; i < count; i++) {
|
|
56
|
+
particles[i] = buffer.readUintVar();
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
value.particles = particles;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
* # Simulate a skinned model's joints instead of the entity subtree
|
|
3
3
|
*
|
|
4
4
|
* Add this beside a {@link Cloth} and the particle set stops being the entity's
|
|
5
|
-
* transform subtree and becomes the **joints of the
|
|
6
|
-
*
|
|
7
|
-
* enum anywhere: `Cloth` alone simulates the subtree, `Cloth` +
|
|
8
|
-
* simulates a rig, and component presence does the work a
|
|
9
|
-
* would do badly (§3.1).
|
|
5
|
+
* transform subtree and becomes the **joints of a skin**: the `MeshSkin` on the
|
|
6
|
+
* entity {@link skin} names. That is the whole of the component's job, and there
|
|
7
|
+
* is no mode enum anywhere: `Cloth` alone simulates the subtree, `Cloth` +
|
|
8
|
+
* `ClothRig` simulates a rig, and component presence does the work a
|
|
9
|
+
* discriminator field would do badly (§3.1).
|
|
10
10
|
*
|
|
11
11
|
* ```js
|
|
12
12
|
* character.add(Cloth.from(CLOTH_SILK));
|
|
13
|
-
* character.add(ClothRig.from(cape_proxy));
|
|
13
|
+
* character.add(ClothRig.from(cape_proxy, cape_mesh));
|
|
14
14
|
* ```
|
|
15
15
|
*
|
|
16
16
|
* ## Why there are two cases at all
|
|
@@ -30,21 +30,26 @@
|
|
|
30
30
|
* asset: `Collider#shape` holds an `AbstractShape3D` and is documented as *not*
|
|
31
31
|
* serialised because shapes are shared assets the pipeline wires up;
|
|
32
32
|
* `ParticleEffect` holds a `ParticleLayout` and a `ParticleProgram` the same
|
|
33
|
-
* way. What serialises is the proxy's identity and the skin
|
|
33
|
+
* way. What serialises is the proxy's identity and the skin's entity.
|
|
34
|
+
*
|
|
35
|
+
* ## The skin is an entity's, and the rig names the entity
|
|
36
|
+
*
|
|
37
|
+
* The joints a proxy indexes are a skin's, and a skin is a `MeshSkin` on the mesh
|
|
38
|
+
* it deforms. The rig sits on the entity whose clips drive the bones the garment
|
|
39
|
+
* hangs from — the character — and names the mesh. Whatever spawned the model, or
|
|
40
|
+
* built the mesh in code, knows which entity that is; nothing has to be asked
|
|
41
|
+
* which model the character is showing.
|
|
34
42
|
*
|
|
35
43
|
* @author Alex Goldring
|
|
36
44
|
* @copyright Company Named Limited (c) 2026
|
|
37
45
|
*/
|
|
38
46
|
export class ClothRig {
|
|
39
47
|
/**
|
|
40
|
-
* @param {ClothProxy}
|
|
41
|
-
* @param {
|
|
42
|
-
* @param {number} [spec.skin]
|
|
48
|
+
* @param {ClothProxy} proxy
|
|
49
|
+
* @param {number} skin the entity carrying the `MeshSkin` the proxy indexes
|
|
43
50
|
* @returns {ClothRig}
|
|
44
51
|
*/
|
|
45
|
-
static from(proxy
|
|
46
|
-
skin?: number;
|
|
47
|
-
}): ClothRig;
|
|
52
|
+
static from(proxy: ClothProxy, skin: number): ClothRig;
|
|
48
53
|
/**
|
|
49
54
|
* The built proxy: which joints, how they connect, and their bind pose.
|
|
50
55
|
* Shared and immutable — see the class docblock for the convention.
|
|
@@ -52,11 +57,12 @@ export class ClothRig {
|
|
|
52
57
|
*/
|
|
53
58
|
proxy: ClothProxy | null;
|
|
54
59
|
/**
|
|
55
|
-
*
|
|
60
|
+
* The entity whose `MeshSkin` the proxy's joint indices are into: the mesh
|
|
61
|
+
* the garment is, or one of the meshes bound to the same skeleton the same way.
|
|
56
62
|
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
63
|
+
* -1 until it is known — a model spawned after the rig went on its
|
|
64
|
+
* character — and while it is, or while the entity carries no skin yet, the
|
|
65
|
+
* rig waits, as it waits for a model still loading.
|
|
60
66
|
* @type {number}
|
|
61
67
|
*/
|
|
62
68
|
skin: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClothRig.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/cloth/ecs/ClothRig.js"],"names":[],"mappings":"AAGA
|
|
1
|
+
{"version":3,"file":"ClothRig.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/cloth/ecs/ClothRig.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH;IAoBI;;;;OAIG;IACH,qCAHW,MAAM,GACJ,QAAQ,CAYpB;IAjCD;;;;OAIG;IACH,OAFU,aAAW,IAAI,CAEZ;IAEb;;;;;;;;OAQG;IACH,MAFU,MAAM,CAEN;IAmBV;;;OAGG;IACH,cAHW,QAAQ,GACN,OAAO,CAenB;IAED;;OAEG;IACH,QAFa,MAAM,CAIlB;IAED;;;;OAIG;IACH;;MAIC;IAED;;OAEG;IACH,mBAFW,MAAM,QAIhB;IAED,mBAEC;IAGL;;;OAGG;IACH,qBAFU,OAAO,CAEY;CAN5B"}
|
|
@@ -5,15 +5,15 @@ import { hash_mix2 } from "../../../../core/math/hash/hash_mix2.js";
|
|
|
5
5
|
* # Simulate a skinned model's joints instead of the entity subtree
|
|
6
6
|
*
|
|
7
7
|
* Add this beside a {@link Cloth} and the particle set stops being the entity's
|
|
8
|
-
* transform subtree and becomes the **joints of the
|
|
9
|
-
*
|
|
10
|
-
* enum anywhere: `Cloth` alone simulates the subtree, `Cloth` +
|
|
11
|
-
* simulates a rig, and component presence does the work a
|
|
12
|
-
* would do badly (§3.1).
|
|
8
|
+
* transform subtree and becomes the **joints of a skin**: the `MeshSkin` on the
|
|
9
|
+
* entity {@link skin} names. That is the whole of the component's job, and there
|
|
10
|
+
* is no mode enum anywhere: `Cloth` alone simulates the subtree, `Cloth` +
|
|
11
|
+
* `ClothRig` simulates a rig, and component presence does the work a
|
|
12
|
+
* discriminator field would do badly (§3.1).
|
|
13
13
|
*
|
|
14
14
|
* ```js
|
|
15
15
|
* character.add(Cloth.from(CLOTH_SILK));
|
|
16
|
-
* character.add(ClothRig.from(cape_proxy));
|
|
16
|
+
* character.add(ClothRig.from(cape_proxy, cape_mesh));
|
|
17
17
|
* ```
|
|
18
18
|
*
|
|
19
19
|
* ## Why there are two cases at all
|
|
@@ -33,7 +33,15 @@ import { hash_mix2 } from "../../../../core/math/hash/hash_mix2.js";
|
|
|
33
33
|
* asset: `Collider#shape` holds an `AbstractShape3D` and is documented as *not*
|
|
34
34
|
* serialised because shapes are shared assets the pipeline wires up;
|
|
35
35
|
* `ParticleEffect` holds a `ParticleLayout` and a `ParticleProgram` the same
|
|
36
|
-
* way. What serialises is the proxy's identity and the skin
|
|
36
|
+
* way. What serialises is the proxy's identity and the skin's entity.
|
|
37
|
+
*
|
|
38
|
+
* ## The skin is an entity's, and the rig names the entity
|
|
39
|
+
*
|
|
40
|
+
* The joints a proxy indexes are a skin's, and a skin is a `MeshSkin` on the mesh
|
|
41
|
+
* it deforms. The rig sits on the entity whose clips drive the bones the garment
|
|
42
|
+
* hangs from — the character — and names the mesh. Whatever spawned the model, or
|
|
43
|
+
* built the mesh in code, knows which entity that is; nothing has to be asked
|
|
44
|
+
* which model the character is showing.
|
|
37
45
|
*
|
|
38
46
|
* @author Alex Goldring
|
|
39
47
|
* @copyright Company Named Limited (c) 2026
|
|
@@ -48,34 +56,28 @@ export class ClothRig {
|
|
|
48
56
|
proxy = null;
|
|
49
57
|
|
|
50
58
|
/**
|
|
51
|
-
*
|
|
59
|
+
* The entity whose `MeshSkin` the proxy's joint indices are into: the mesh
|
|
60
|
+
* the garment is, or one of the meshes bound to the same skeleton the same way.
|
|
52
61
|
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
62
|
+
* -1 until it is known — a model spawned after the rig went on its
|
|
63
|
+
* character — and while it is, or while the entity carries no skin yet, the
|
|
64
|
+
* rig waits, as it waits for a model still loading.
|
|
56
65
|
* @type {number}
|
|
57
66
|
*/
|
|
58
|
-
skin =
|
|
67
|
+
skin = -1;
|
|
59
68
|
|
|
60
69
|
/**
|
|
61
|
-
* @param {ClothProxy}
|
|
62
|
-
* @param {
|
|
63
|
-
* @param {number} [spec.skin]
|
|
70
|
+
* @param {ClothProxy} proxy
|
|
71
|
+
* @param {number} skin the entity carrying the `MeshSkin` the proxy indexes
|
|
64
72
|
* @returns {ClothRig}
|
|
65
73
|
*/
|
|
66
|
-
static from(proxy
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
if (proxy !== undefined) {
|
|
70
|
-
assert.ok(proxy.isClothProxy === true, 'proxy must be a ClothProxy');
|
|
71
|
-
|
|
72
|
-
r.proxy = proxy;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
const { skin = r.skin } = spec;
|
|
76
|
-
|
|
74
|
+
static from(proxy, skin) {
|
|
75
|
+
assert.ok(proxy !== undefined && proxy !== null && proxy.isClothProxy === true, 'proxy must be a ClothProxy');
|
|
77
76
|
assert.isNonNegativeInteger(skin, 'skin');
|
|
78
77
|
|
|
78
|
+
const r = new ClothRig();
|
|
79
|
+
|
|
80
|
+
r.proxy = proxy;
|
|
79
81
|
r.skin = skin;
|
|
80
82
|
|
|
81
83
|
return r;
|
|
@@ -121,7 +123,7 @@ export class ClothRig {
|
|
|
121
123
|
/**
|
|
122
124
|
* @param {object} json
|
|
123
125
|
*/
|
|
124
|
-
fromJSON({ skin =
|
|
126
|
+
fromJSON({ skin = -1 }) {
|
|
125
127
|
this.skin = skin;
|
|
126
128
|
}
|
|
127
129
|
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
export class ClothSystem extends System<any> {
|
|
49
49
|
constructor();
|
|
50
50
|
dependencies: (typeof Transform64 | typeof Cloth)[];
|
|
51
|
-
components_used: (ResourceAccessSpecification<typeof Transform64> | ResourceAccessSpecification<typeof TransformAttachment> | ResourceAccessSpecification<typeof ClothCollider> | ResourceAccessSpecification<typeof Cloth> | ResourceAccessSpecification<typeof ClothExclude> | ResourceAccessSpecification<typeof ClothRig>)[];
|
|
51
|
+
components_used: (ResourceAccessSpecification<typeof Transform64> | ResourceAccessSpecification<typeof TransformAttachment> | ResourceAccessSpecification<typeof GPUStateAuthority> | ResourceAccessSpecification<typeof ParentEntity> | ResourceAccessSpecification<typeof ClothCollider> | ResourceAccessSpecification<typeof Cloth> | ResourceAccessSpecification<typeof ClothExclude> | ResourceAccessSpecification<typeof ClothRig> | ResourceAccessSpecification<typeof ClothPin>)[];
|
|
52
52
|
/**
|
|
53
53
|
* @type {ClothWorld}
|
|
54
54
|
*/
|
|
@@ -100,19 +100,6 @@ export class ClothSystem extends System<any> {
|
|
|
100
100
|
* @returns {ClothInstance[]}
|
|
101
101
|
*/
|
|
102
102
|
get instances(): ClothInstance[];
|
|
103
|
-
/**
|
|
104
|
-
* @param {{instance_of: function(number): (PrefabInstance|null)}|null} value
|
|
105
|
-
*/
|
|
106
|
-
set models(value: {
|
|
107
|
-
instance_of: (arg0: number) => (PrefabInstance | null);
|
|
108
|
-
});
|
|
109
|
-
/**
|
|
110
|
-
* Where a skinned model instance comes from — see {@link ClothWorld#models}.
|
|
111
|
-
* @returns {{instance_of: function(number): (PrefabInstance|null)}|null}
|
|
112
|
-
*/
|
|
113
|
-
get models(): {
|
|
114
|
-
instance_of: (arg0: number) => (PrefabInstance | null);
|
|
115
|
-
};
|
|
116
103
|
/**
|
|
117
104
|
* @param {EntityManager} entityManager
|
|
118
105
|
* @returns {Promise<void>}
|
|
@@ -157,14 +144,25 @@ export class ClothSystem extends System<any> {
|
|
|
157
144
|
* @returns {ClothInstance|undefined}
|
|
158
145
|
*/
|
|
159
146
|
instanceOf(entity: number): ClothInstance | undefined;
|
|
147
|
+
/**
|
|
148
|
+
* Which particle of a cloth an entity is, for a {@link ClothPin} that has
|
|
149
|
+
* the entity in hand — see {@link ClothWorld#particle_of}.
|
|
150
|
+
* @param {number} cloth the entity carrying the `Cloth`
|
|
151
|
+
* @param {number} entity
|
|
152
|
+
* @returns {number} the particle, or `−1`
|
|
153
|
+
*/
|
|
154
|
+
particle_of(cloth: number, entity: number): number;
|
|
160
155
|
}
|
|
161
156
|
import { System } from "../../../ecs/System.js";
|
|
162
157
|
import { Transform64 } from "../../../ecs/transform/Transform64.js";
|
|
163
158
|
import { Cloth } from "./Cloth.js";
|
|
164
159
|
import { ResourceAccessSpecification } from "../../../../core/model/ResourceAccessSpecification.js";
|
|
165
160
|
import { TransformAttachment } from "../../../ecs/transform-attachment/TransformAttachment.js";
|
|
161
|
+
import { GPUStateAuthority } from "../../../ecs/gpu/GPUStateAuthority.js";
|
|
162
|
+
import { ParentEntity } from "../../../ecs/parent/ParentEntity.js";
|
|
166
163
|
import { ClothCollider } from "./ClothCollider.js";
|
|
167
164
|
import { ClothExclude } from "./ClothExclude.js";
|
|
168
165
|
import { ClothRig } from "./ClothRig.js";
|
|
166
|
+
import { ClothPin } from "./ClothPin.js";
|
|
169
167
|
import { ClothWorld } from "./ClothWorld.js";
|
|
170
168
|
//# sourceMappingURL=ClothSystem.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClothSystem.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/cloth/ecs/ClothSystem.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ClothSystem.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/cloth/ecs/ClothSystem.js"],"names":[],"mappings":"AAiBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH;;IAEI,oDAAoC;IAEpC,2dAYE;IAEF;;OAEG;IACH,OAFU,UAAU,CAEK;IAEzB;;;;;;;;;;;;OAYG;IACH,iBAAyD;IAEzD;;;;;;OAMG;IACH,qBAAkB;IAUlB;;OAEG;IACH,iCAEC;IAbD;;;OAGG;IACH,4BAEC;IAkBD;;OAEG;IACH,qBAEC;IAdD;;;;OAIG;IACH,gBAEC;IASD;;;;OAIG;IACH,iCAEC;IAGD;;;OAGG;IACH,uCAFa,QAAQ,IAAI,CAAC,CAIzB;IAED;;;OAGG;IACH,wDAFa,IAAI,CAIhB;IAED;;;OAGG;IACH,wDAFa,IAAI,CAIhB;IAED;;;;OAIG;IACH,YAJW,KAAK,aACL,WAAW,UACX,MAAM,QAIhB;IAED;;;;OAIG;IACH,cAJW,KAAK,aACL,WAAW,UACX,MAAM,QAIhB;IAED;;;;OAIG;IACH,eAHW,MAAM,GACJ,IAAI,CAIhB;IAED;;;;OAIG;IACH,aAHW,MAAM,GACJ,IAAI,CAIhB;IAED;;;OAGG;IACH,mBAHW,MAAM,GACJ,gBAAc,SAAS,CAInC;IAED;;;;;;OAMG;IACH,mBAJW,MAAM,UACN,MAAM,GACJ,MAAM,CAIlB;CA2EJ;uBA9SsB,wBAAwB;4BAInB,uCAAuC;sBAE7C,YAAY;4CAPU,uDAAuD;oCAI5F,0DAA0D;kCAQ/B,uCAAuC;6BAC5C,qCAAqC;8BALpC,oBAAoB;6BACrB,mBAAmB;yBAEvB,eAAe;yBADf,eAAe;2BAIb,iBAAiB"}
|
|
@@ -9,7 +9,10 @@ import { CLOTH_STEP_PARAM_STRIDE, cloth_step_instance } from "../solver/cloth_st
|
|
|
9
9
|
import { Cloth } from "./Cloth.js";
|
|
10
10
|
import { ClothCollider } from "./ClothCollider.js";
|
|
11
11
|
import { ClothExclude } from "./ClothExclude.js";
|
|
12
|
+
import { ClothPin } from "./ClothPin.js";
|
|
12
13
|
import { ClothRig } from "./ClothRig.js";
|
|
14
|
+
import { GPUStateAuthority } from "../../../ecs/gpu/GPUStateAuthority.js";
|
|
15
|
+
import { ParentEntity } from "../../../ecs/parent/ParentEntity.js";
|
|
13
16
|
import { ClothWorld } from "./ClothWorld.js";
|
|
14
17
|
|
|
15
18
|
/**
|
|
@@ -69,7 +72,12 @@ export class ClothSystem extends System {
|
|
|
69
72
|
ResourceAccessSpecification.from(TransformAttachment, ResourceAccessKind.Read | ResourceAccessKind.Write),
|
|
70
73
|
ResourceAccessSpecification.from(ClothExclude, ResourceAccessKind.Read),
|
|
71
74
|
ResourceAccessSpecification.from(ClothCollider, ResourceAccessKind.Read),
|
|
72
|
-
ResourceAccessSpecification.from(ClothRig, ResourceAccessKind.Read)
|
|
75
|
+
ResourceAccessSpecification.from(ClothRig, ResourceAccessKind.Read),
|
|
76
|
+
// What holds a cloth, and — to evaluate a holder a clip drives — the
|
|
77
|
+
// model it belongs to and who composes its transform.
|
|
78
|
+
ResourceAccessSpecification.from(ClothPin, ResourceAccessKind.Read),
|
|
79
|
+
ResourceAccessSpecification.from(ParentEntity, ResourceAccessKind.Read),
|
|
80
|
+
ResourceAccessSpecification.from(GPUStateAuthority, ResourceAccessKind.Read)
|
|
73
81
|
];
|
|
74
82
|
|
|
75
83
|
/**
|
|
@@ -141,20 +149,6 @@ export class ClothSystem extends System {
|
|
|
141
149
|
return this.world.instances;
|
|
142
150
|
}
|
|
143
151
|
|
|
144
|
-
/**
|
|
145
|
-
* Where a skinned model instance comes from — see {@link ClothWorld#models}.
|
|
146
|
-
* @returns {{instance_of: function(number): (PrefabInstance|null)}|null}
|
|
147
|
-
*/
|
|
148
|
-
get models() {
|
|
149
|
-
return this.world.models;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* @param {{instance_of: function(number): (PrefabInstance|null)}|null} value
|
|
154
|
-
*/
|
|
155
|
-
set models(value) {
|
|
156
|
-
this.world.models = value;
|
|
157
|
-
}
|
|
158
152
|
|
|
159
153
|
/**
|
|
160
154
|
* @param {EntityManager} entityManager
|
|
@@ -224,6 +218,17 @@ export class ClothSystem extends System {
|
|
|
224
218
|
return this.world.instanceOf(entity);
|
|
225
219
|
}
|
|
226
220
|
|
|
221
|
+
/**
|
|
222
|
+
* Which particle of a cloth an entity is, for a {@link ClothPin} that has
|
|
223
|
+
* the entity in hand — see {@link ClothWorld#particle_of}.
|
|
224
|
+
* @param {number} cloth the entity carrying the `Cloth`
|
|
225
|
+
* @param {number} entity
|
|
226
|
+
* @returns {number} the particle, or `−1`
|
|
227
|
+
*/
|
|
228
|
+
particle_of(cloth, entity) {
|
|
229
|
+
return this.world.particle_of(cloth, entity);
|
|
230
|
+
}
|
|
231
|
+
|
|
227
232
|
/**
|
|
228
233
|
* Advance every cloth, then step every cloth, then finish every cloth.
|
|
229
234
|
*
|
|
@@ -2,12 +2,9 @@
|
|
|
2
2
|
* # Every cloth in a scene, and everything a step needs that is not arithmetic
|
|
3
3
|
*
|
|
4
4
|
* One {@link ClothInstance} per {@link Cloth} component, stepped at the fixed
|
|
5
|
-
* rate. Per step, per cloth: move the local frame
|
|
6
|
-
* leash rows at
|
|
7
|
-
* it, step, and put the result back on the subtree.
|
|
8
|
-
* leashes are measured against is not recomposed per step — in the entity path
|
|
9
|
-
* it is constant in the anchor's own frame, and `cloth_seed_subtree.js` bakes
|
|
10
|
-
* it.
|
|
5
|
+
* rate. Per step, per cloth: take where its holders are, move the local frame,
|
|
6
|
+
* point the leash rows at what they measure from, gather the colliders that
|
|
7
|
+
* could touch it, step, and put the result back on the subtree.
|
|
11
8
|
*
|
|
12
9
|
* ## Why this is not a `System`
|
|
13
10
|
*
|
|
@@ -42,11 +39,11 @@
|
|
|
42
39
|
*
|
|
43
40
|
* ## The local frame and the inertia model — §7 P7
|
|
44
41
|
*
|
|
45
|
-
* Particles live in the
|
|
42
|
+
* Particles live in the cloth's frame. When the frame moves, the cloth is
|
|
46
43
|
* asked how much of that motion it would like to feel:
|
|
47
44
|
* `ClothDynamics#inertia = 1` keeps every particle's **world** position and
|
|
48
45
|
* velocity, so a cape trails a sprinting character; `0` keeps their **local**
|
|
49
|
-
* ones, so the cloth rides the
|
|
46
|
+
* ones, so the cloth rides the frame as though it were standing still. The
|
|
50
47
|
* blend between the two is a lerp in the local frame, which is all the frame
|
|
51
48
|
* change is.
|
|
52
49
|
*
|
|
@@ -68,14 +65,32 @@
|
|
|
68
65
|
* step's drag response is zero, `cloth_step` takes the uniform-gravity path,
|
|
69
66
|
* and a scene produces the bytes M5 measured.
|
|
70
67
|
*
|
|
68
|
+
* ## Holds
|
|
69
|
+
*
|
|
70
|
+
* A {@link ClothPin} on any entity holds the particles it names. This world
|
|
71
|
+
* keeps one {@link ClothHold} per pin, by the cloth entity it names, for as long
|
|
72
|
+
* as the pin exists — **outside** the seeded instance, because the offsets a
|
|
73
|
+
* hold takes when it begins are the hold's and must survive a re-seed. A pin is
|
|
74
|
+
* only ever *noticed* by the observer; everything it changes in a cloth's state
|
|
75
|
+
* is written in {@link advance}, which is the one window in which the main
|
|
76
|
+
* thread owns that state under both systems.
|
|
77
|
+
*
|
|
78
|
+
* Each step, before anything else, every holder's pose is taken — read off its
|
|
79
|
+
* `Transform64` when the CPU owns it, evaluated exactly when a clip does — and
|
|
80
|
+
* expressed in the cloth's frame. `cloth_holds.js` turns those poses into
|
|
81
|
+
* where the held particles go, the animated pose hung from them, and the leash
|
|
82
|
+
* centres.
|
|
83
|
+
*
|
|
71
84
|
* ## Teleport — §7 P6
|
|
72
85
|
*
|
|
73
|
-
*
|
|
74
|
-
* amount of it
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
86
|
+
* Frame motion past a threshold is not locomotion and is not treated as any
|
|
87
|
+
* amount of it, and neither is a holder jumping that far in the frame — a ship
|
|
88
|
+
* the rope is tied to, moved across the map. `ClothFlags.TeleportKeep` carries
|
|
89
|
+
* the shape across: for the frame that is literally doing nothing, and for a
|
|
90
|
+
* holder it is that holder's own jump applied to what hangs from it. The default
|
|
91
|
+
* re-seeds at the animated pose with zero velocity and opens a stabilisation
|
|
92
|
+
* window in which the velocity limit ramps back from nothing, so the first steps
|
|
93
|
+
* after a reset cannot produce a whip.
|
|
79
94
|
*
|
|
80
95
|
* @author Alex Goldring
|
|
81
96
|
* @copyright Company Named Limited (c) 2026
|
|
@@ -100,25 +115,6 @@ export class ClothWorld {
|
|
|
100
115
|
* @type {ClothInstance[]}
|
|
101
116
|
*/
|
|
102
117
|
instances: ClothInstance[];
|
|
103
|
-
/**
|
|
104
|
-
* Where a skinned model instance comes from. Anything that answers
|
|
105
|
-
* `instance_of(entity)` with a `PrefabInstance` — skins whose joints
|
|
106
|
-
* are entities — will do, and {@link MeshSystem} is what does in a
|
|
107
|
-
* running engine.
|
|
108
|
-
*
|
|
109
|
-
* Public and assignable because a garment's joints are a *rendering*
|
|
110
|
-
* structure and `MeshSystem` needs a graphics engine, a scene and a loader
|
|
111
|
-
* to exist — so a spec that wants joints without a renderer sets this
|
|
112
|
-
* instead, and gets exactly the interface the system uses.
|
|
113
|
-
*
|
|
114
|
-
* `null` means no rig can seed, which is the same additive shape the
|
|
115
|
-
* collider index has: a scene without one gets M1's cloth rather than an
|
|
116
|
-
* error.
|
|
117
|
-
* @type {{instance_of: function(number): (PrefabInstance|null)}|null}
|
|
118
|
-
*/
|
|
119
|
-
models: {
|
|
120
|
-
instance_of: (arg0: number) => (PrefabInstance | null);
|
|
121
|
-
} | null;
|
|
122
118
|
/**
|
|
123
119
|
* @type {EntityManager|null}
|
|
124
120
|
*/
|
|
@@ -217,6 +213,14 @@ export class ClothWorld {
|
|
|
217
213
|
* @private
|
|
218
214
|
*/
|
|
219
215
|
private __rig_observer;
|
|
216
|
+
/**
|
|
217
|
+
* Every {@link ClothPin} in the dataset, as the hold it makes. A pin is
|
|
218
|
+
* noticed here and nowhere else; what it does to a cloth is written in
|
|
219
|
+
* {@link advance}.
|
|
220
|
+
* @type {EntityObserver}
|
|
221
|
+
* @private
|
|
222
|
+
*/
|
|
223
|
+
private __pin_observer;
|
|
220
224
|
/**
|
|
221
225
|
* Resolve the systems a cloth world reads. Called from the owning system's
|
|
222
226
|
* `startup`.
|
|
@@ -265,7 +269,8 @@ export class ClothWorld {
|
|
|
265
269
|
*/
|
|
266
270
|
reseed(entity: number): ClothInstance | undefined;
|
|
267
271
|
/**
|
|
268
|
-
* Wake a sleeping cloth.
|
|
272
|
+
* Wake a sleeping cloth. Frame motion, a holder moving or a hold changing,
|
|
273
|
+
* and a `ClothDynamics` change do this
|
|
269
274
|
* on their own; a caller that has changed the world in some way the cloth
|
|
270
275
|
* cannot see — M6's wind, for one — says so here.
|
|
271
276
|
*
|
|
@@ -278,6 +283,20 @@ export class ClothWorld {
|
|
|
278
283
|
* @returns {ClothInstance|undefined}
|
|
279
284
|
*/
|
|
280
285
|
instanceOf(entity: number): ClothInstance | undefined;
|
|
286
|
+
/**
|
|
287
|
+
* Which particle of a cloth an entity is: a link of a subtree cloth, or a
|
|
288
|
+
* joint of a rigged one — the number a {@link ClothPin} names it by.
|
|
289
|
+
*
|
|
290
|
+
* For code that has the entity rather than the number, which is what a hand
|
|
291
|
+
* closing on a rope has. It answers once the cloth has seeded, which is its
|
|
292
|
+
* first step.
|
|
293
|
+
*
|
|
294
|
+
* @param {number} cloth the entity carrying the `Cloth`
|
|
295
|
+
* @param {number} entity
|
|
296
|
+
* @returns {number} the particle, or `−1` when the entity is not one of the
|
|
297
|
+
* cloth's, or the cloth has not seeded yet
|
|
298
|
+
*/
|
|
299
|
+
particle_of(cloth: number, entity: number): number;
|
|
281
300
|
/**
|
|
282
301
|
* Everything that happens once per tick rather than once per cloth.
|
|
283
302
|
*
|
|
@@ -307,8 +326,9 @@ export class ClothWorld {
|
|
|
307
326
|
finish(instance: ClothInstance, ecd: EntityComponentDataset): void;
|
|
308
327
|
/**
|
|
309
328
|
* Carry one seeded cloth to the edge of its step and write the parameters
|
|
310
|
-
* the step will run on: whatever the
|
|
311
|
-
* the leash rows measure from, and the colliders
|
|
329
|
+
* the step will run on: whatever the frame and the holders did, where the
|
|
330
|
+
* held particles go, where the leash rows measure from, and the colliders
|
|
331
|
+
* within reach.
|
|
312
332
|
*
|
|
313
333
|
* @param {ClothInstance} instance
|
|
314
334
|
* @param {number} dt seconds
|
|
@@ -324,4 +344,5 @@ import { ClothInstance } from "./ClothInstance.js";
|
|
|
324
344
|
import { TransformAttachmentSystem } from "../../../ecs/transform-attachment/TransformAttachmentSystem.js";
|
|
325
345
|
import { ClothColliderSystem } from "./ClothColliderSystem.js";
|
|
326
346
|
import { Cloth } from "./Cloth.js";
|
|
347
|
+
import { Transform64 } from "../../../ecs/transform/Transform64.js";
|
|
327
348
|
//# sourceMappingURL=ClothWorld.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClothWorld.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/cloth/ecs/ClothWorld.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ClothWorld.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/cloth/ecs/ClothWorld.js"],"names":[],"mappings":"AAmEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgGG;AACH;IAEI;;;OAGG;IACH,SAFU,YAAY,CAEoB;IAE1C;;;;;;;;;;;;OAYG;IACH,WAFU,aAAa,EAAE,CAEV;IAEf;;OAEG;IACH,eAFU,gBAAc,IAAI,CAEP;IAErB;;OAEG;IACH,aAFU,yBAAyB,GAAC,IAAI,CAErB;IAEnB;;;;;;OAMG;IACH,WAFU,mBAAmB,GAAC,IAAI,CAEjB;IAEjB;;;;;;;;;;;;;;;;;;OAkBG;IACH,MAFU,oBAAkB,IAAI,CAEpB;IAEZ;;;;;;;;;;;;;;;;;;;OAmBG;IACH,MAFU,MAAM,CAEP;IAET;;;;;OAKG;IACH,uBAAmB;IAEnB;;;;;OAKG;IACH,cAFU,OAAO,CAEI;IAErB;;;OAGG;IACH,oBAAwB;IAExB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,uBAKE;IAEF;;;;;;OAMG;IACH,uBAKE;IA0BF;;;;;OAKG;IACH,2CAaC;IAED;;;;;OAKG;IACH,YALW,KAAK,aACL,WAAW,UACX,MAAM,GACJ,aAAa,CAczB;IAED;;;;;;;;OAQG;IACH,iDAFa,IAAI,CAehB;IAED;;;OAGG;IACH,iDAFa,IAAI,CAOhB;IA+YD;;;OAGG;IACH,eAHW,MAAM,GACJ,aAAa,GAAC,SAAS,CA0BnC;IAyED;;;;;;;;;;;OAWG;IACH,eAHW,MAAM,GACJ,aAAa,GAAC,SAAS,CAuBnC;IAED;;;;;;;;OAQG;IACH,aAHW,MAAM,GACJ,IAAI,CAShB;IAED;;;OAGG;IACH,mBAHW,MAAM,GACJ,aAAa,GAAC,SAAS,CAInC;IAED;;;;;;;;;;;;OAYG;IACH,mBALW,MAAM,UACN,MAAM,GACJ,MAAM,CAmBlB;IAED;;;;;OAKG;IACH,uCAFW,MAAM,QAgBhB;IAED;;;;;;;;;OASG;IACH,wBANW,aAAa,mCAEb,MAAM,GACJ,OAAO,CA8BnB;IAED;;;;;;;OAOG;IACH,iBAJW,aAAa,gCAEX,IAAI,CA4ChB;IAyFD;;;;;;;;;;;;OAYG;IACH,kBAPW,aAAa,MACb,MAAM,UACN,YAAY,UACZ,MAAM,GACJ,OAAO,CAuUnB;;CA8GJ;8BAhlD6B,oBAAoB;0CAnB3C,gEAAgE;oCAenC,0BAA0B;sBA+BxC,YAAY;4BAzC3B,uCAAuC"}
|