@woosh/meep-engine 3.47.0 → 3.49.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/build/bundle-worker-terrain.js +1 -1
- package/editor/particles/effect/ParticleReferenceSimulation.d.ts +1 -2
- package/editor/particles/effect/ParticleReferenceSimulation.d.ts.map +1 -1
- package/editor/particles/effect/ParticleReferenceSimulation.js +2 -4
- package/editor/view/particles/effect/ParticleGraphEditorView.js +1 -1
- package/package.json +1 -1
- package/src/engine/ecs/async/WORKER_SYSTEM_PLAN.md +27 -11
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +11 -0
- package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts +2 -2
- package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts.map +1 -1
- package/src/engine/graphics/ecs/particles/ParticleEffect.js +7 -7
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.d.ts +8 -0
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.js +11 -3
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_1_2.d.ts +26 -0
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_1_2.d.ts.map +1 -0
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_1_2.js +91 -0
- package/src/engine/graphics3/GPUParticleEmitterSystem.js +2 -2
- package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -1
- package/src/engine/graphics3/GraphicsEngine.js +8 -1
- package/src/engine/graphics3/ParticipatingMedia.d.ts +84 -1
- package/src/engine/graphics3/ParticipatingMedia.d.ts.map +1 -1
- package/src/engine/graphics3/ParticipatingMedia.js +139 -5
- package/src/engine/graphics3/ParticipatingMediaSerializationAdapter.d.ts +6 -2
- package/src/engine/graphics3/ParticipatingMediaSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics3/ParticipatingMediaSerializationAdapter.js +29 -4
- package/src/engine/graphics3/ParticipatingMediaSerializationUpgrader_0_1.d.ts +10 -0
- package/src/engine/graphics3/ParticipatingMediaSerializationUpgrader_0_1.d.ts.map +1 -0
- package/src/engine/graphics3/ParticipatingMediaSerializationUpgrader_0_1.js +38 -0
- package/src/engine/graphics3/ParticipatingMediaSystem.d.ts.map +1 -1
- package/src/engine/graphics3/ParticipatingMediaSystem.js +46 -3
- package/src/engine/network/NetworkSession.d.ts +16 -5
- package/src/engine/network/NetworkSession.d.ts.map +1 -1
- package/src/engine/network/NetworkSession.js +104 -7
- package/src/engine/network/README.md +27 -1
- package/src/engine/network/orchestrator/ServerAuthoritativeServer.d.ts +40 -18
- package/src/engine/network/orchestrator/ServerAuthoritativeServer.d.ts.map +1 -1
- package/src/engine/network/orchestrator/ServerAuthoritativeServer.js +180 -190
- package/src/engine/network/replication/Replicator.d.ts +15 -4
- package/src/engine/network/replication/Replicator.d.ts.map +1 -1
- package/src/engine/network/replication/Replicator.js +50 -16
- package/src/engine/network/state/RecordArrivalRing.d.ts +57 -0
- package/src/engine/network/state/RecordArrivalRing.d.ts.map +1 -0
- package/src/engine/network/state/RecordArrivalRing.js +144 -0
- package/src/engine/physics/cloth/MEASUREMENTS.md +354 -0
- package/src/engine/physics/cloth/PLAN.md +85 -5
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +0 -12
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothInstance.js +0 -13
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts +2 -1
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothSystem.js +7 -1
- package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothWorld.js +4 -15
- package/src/engine/physics/cloth/ecs/WorkerClothSystem.d.ts +2 -1
- package/src/engine/physics/cloth/ecs/WorkerClothSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/WorkerClothSystem.js +6 -1
- package/src/engine/physics/cloth/ecs/cloth_build_rows.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_build_rows.js +20 -10
- package/src/engine/physics/cloth/playground/collide.html +5 -3
- package/src/engine/physics/cloth/playground/collide_main.js +14 -13
- package/src/engine/physics/cloth/solver/ClothState.d.ts +30 -2
- package/src/engine/physics/cloth/solver/ClothState.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/ClothState.js +62 -4
- package/src/engine/physics/cloth/solver/cloth_self_find.d.ts +11 -3
- package/src/engine/physics/cloth/solver/cloth_self_find.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_self_find.js +52 -11
- package/src/engine/physics/cloth/solver/cloth_self_radius.d.ts +42 -0
- package/src/engine/physics/cloth/solver/cloth_self_radius.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_self_radius.js +64 -0
- package/src/engine/physics/cloth/solver/cloth_solver_constants.d.ts +99 -24
- package/src/engine/physics/cloth/solver/cloth_solver_constants.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_solver_constants.js +102 -25
- package/src/engine/physics/cloth/solver/cloth_step.d.ts +5 -1
- package/src/engine/physics/cloth/solver/cloth_step.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_step.js +13 -3
- package/src/engine/physics/cloth/solver/cloth_step_instance.d.ts +0 -1
- package/src/engine/physics/cloth/solver/cloth_step_instance.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_step_instance.js +12 -14
- package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts +23 -4
- package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.js +36 -8
- 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 +4 -2
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/shade/device/mock/SoftwareGPUDevice.d.ts +15 -0
- package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUDevice.js +21 -0
- package/src/shade/device/pipeline/ComputePipelineManager.d.ts +20 -0
- package/src/shade/device/pipeline/ComputePipelineManager.d.ts.map +1 -1
- package/src/shade/device/pipeline/ComputePipelineManager.js +80 -6
- package/src/shade/device/pipeline/PipelineEnquiry.d.ts +52 -0
- package/src/shade/device/pipeline/PipelineEnquiry.d.ts.map +1 -0
- package/src/shade/device/pipeline/PipelineEnquiry.js +63 -0
- package/src/shade/device/pipeline/RenderPipelineManager.d.ts +21 -0
- package/src/shade/device/pipeline/RenderPipelineManager.d.ts.map +1 -1
- package/src/shade/device/pipeline/RenderPipelineManager.js +84 -4
- package/src/shade/playground/contact_shadows/ContactShadowLab.d.ts +137 -0
- package/src/shade/playground/contact_shadows/ContactShadowLab.d.ts.map +1 -0
- package/src/shade/playground/contact_shadows/ContactShadowLab.js +654 -0
- package/src/shade/playground/contact_shadows/README.md +126 -0
- package/src/shade/playground/contact_shadows/index.html +191 -0
- package/src/shade/playground/contact_shadows/main.d.ts +2 -0
- package/src/shade/playground/contact_shadows/main.d.ts.map +1 -0
- package/src/shade/playground/contact_shadows/main.js +888 -0
- package/src/shade/playground/contact_shadows/scenes.d.ts +48 -0
- package/src/shade/playground/contact_shadows/scenes.d.ts.map +1 -0
- package/src/shade/playground/contact_shadows/scenes.js +620 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_composite.d.ts +36 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_composite.d.ts.map +1 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_composite.js +245 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_reference.d.ts +15 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_reference.d.ts.map +1 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_reference.js +120 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_stats.d.ts +55 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_stats.d.ts.map +1 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_stats.js +216 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_view.d.ts +20 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_view.d.ts.map +1 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_view.js +114 -0
- package/src/shade/playground/contact_shadows/shader_contact_shadow_march.d.ts +11 -0
- package/src/shade/playground/contact_shadows/shader_contact_shadow_march.d.ts.map +1 -0
- package/src/shade/playground/contact_shadows/shader_contact_shadow_march.js +90 -0
- package/src/shade/playground/contact_shadows/textures.d.ts +16 -0
- package/src/shade/playground/contact_shadows/textures.d.ts.map +1 -0
- package/src/shade/playground/contact_shadows/textures.js +123 -0
- package/src/shade/playground/particle_ecs/README.md +1 -1
- package/src/shade/playground/particle_ecs/effects/flame.json +1932 -1881
- package/src/shade/playground/particle_ecs/effects/smoke.json +99 -1
- package/src/shade/playground/particle_ecs/effects/soot.json +152 -145
- package/src/shade/playground/tonemap_sdr/README.md +90 -0
- package/src/shade/playground/tonemap_sdr/ToneMapCompare.d.ts +105 -0
- package/src/shade/playground/tonemap_sdr/ToneMapCompare.d.ts.map +1 -0
- package/src/shade/playground/tonemap_sdr/ToneMapCompare.js +380 -0
- package/src/shade/playground/tonemap_sdr/chunk_tonemap_gt7_sdr_reference.d.ts +32 -0
- package/src/shade/playground/tonemap_sdr/chunk_tonemap_gt7_sdr_reference.d.ts.map +1 -0
- package/src/shade/playground/tonemap_sdr/chunk_tonemap_gt7_sdr_reference.js +104 -0
- package/src/shade/playground/tonemap_sdr/index.html +90 -0
- package/src/shade/playground/tonemap_sdr/main.d.ts +2 -0
- package/src/shade/playground/tonemap_sdr/main.d.ts.map +1 -0
- package/src/shade/playground/tonemap_sdr/main.js +306 -0
- package/src/shade/playground/tonemap_sdr/scenes.d.ts +26 -0
- package/src/shade/playground/tonemap_sdr/scenes.d.ts.map +1 -0
- package/src/shade/playground/tonemap_sdr/scenes.js +404 -0
- package/src/shade/playground/volumetrics_froxel/main.d.ts.map +1 -1
- package/src/shade/playground/volumetrics_froxel/main.js +85 -4
- package/src/shade/playground/water_refraction/README.md +26 -18
- package/src/shade/playground/water_refraction/index.html +1 -1
- package/src/shade/renderer/Renderer.d.ts +35 -3
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +208 -12
- package/src/shade/renderer/ShadeToneMappingMode.d.ts +14 -0
- package/src/shade/renderer/ShadeToneMappingMode.d.ts.map +1 -0
- package/src/shade/renderer/ShadeToneMappingMode.js +30 -0
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts +9 -0
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.js +14 -0
- package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.js +5 -3
- package/src/shade/renderer/buffer/table/GPUDatabase.d.ts +7 -0
- package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUDatabase.js +12 -0
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts +8 -0
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +12 -0
- package/src/shade/renderer/camera/GPUCameraContext.d.ts.map +1 -1
- package/src/shade/renderer/camera/GPUCameraContext.js +19 -8
- package/src/shade/renderer/deferred/chunk_read_gBuffer_material.d.ts.map +1 -1
- package/src/shade/renderer/deferred/chunk_read_gBuffer_material.js +4 -0
- package/src/shade/renderer/deferred/chunk_shade_standard_material_direct.d.ts.map +1 -1
- package/src/shade/renderer/deferred/chunk_shade_standard_material_direct.js +4 -0
- package/src/shade/renderer/deferred/chunk_shade_standard_material_direct_restir.d.ts.map +1 -1
- package/src/shade/renderer/deferred/chunk_shade_standard_material_direct_restir.js +4 -0
- package/src/shade/renderer/deferred/shader_deferred_main.d.ts.map +1 -1
- package/src/shade/renderer/deferred/shader_deferred_main.js +3 -0
- package/src/shade/renderer/deferred/shader_tonemap_HDR.d.ts +6 -0
- package/src/shade/renderer/deferred/shader_tonemap_HDR.d.ts.map +1 -1
- package/src/shade/renderer/deferred/shader_tonemap_HDR.js +13 -3
- package/src/shade/renderer/deferred/shader_tonemap_HDR_none.d.ts +9 -0
- package/src/shade/renderer/deferred/shader_tonemap_HDR_none.d.ts.map +1 -0
- package/src/shade/renderer/deferred/shader_tonemap_HDR_none.js +63 -0
- package/src/shade/renderer/deferred/shader_tonemap_HDR_pbr_neutral.d.ts +10 -0
- package/src/shade/renderer/deferred/shader_tonemap_HDR_pbr_neutral.d.ts.map +1 -0
- package/src/shade/renderer/deferred/shader_tonemap_HDR_pbr_neutral.js +87 -0
- package/src/shade/renderer/deferred/shader_tonemap_LDR.d.ts +6 -0
- package/src/shade/renderer/deferred/shader_tonemap_LDR.d.ts.map +1 -1
- package/src/shade/renderer/deferred/shader_tonemap_LDR.js +23 -5
- package/src/shade/renderer/deferred/shader_tonemap_LDR_none.d.ts +9 -0
- package/src/shade/renderer/deferred/shader_tonemap_LDR_none.d.ts.map +1 -0
- package/src/shade/renderer/deferred/shader_tonemap_LDR_none.js +68 -0
- package/src/shade/renderer/deferred/shader_tonemap_LDR_pbr_neutral.d.ts +10 -0
- package/src/shade/renderer/deferred/shader_tonemap_LDR_pbr_neutral.d.ts.map +1 -0
- package/src/shade/renderer/deferred/shader_tonemap_LDR_pbr_neutral.js +73 -0
- package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/MeshletBatch.js +58 -9
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts +35 -25
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +97 -196
- package/src/shade/renderer/geometry/sdf/shader_build_sdf.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/shader_build_sdf.js +121 -129
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.js +3 -0
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.js +4 -0
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_indirect_lighting.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_indirect_lighting.js +4 -0
- package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.js +3 -0
- package/src/shade/renderer/global_illumination/lpv/deprecated/probe_trace_compute_shader_code.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/deprecated/probe_trace_compute_shader_code.js +4 -0
- package/src/shade/renderer/global_illumination/probe/octahedral/graph_sample_light_probes.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/graph_sample_light_probes.js +4 -0
- package/src/shade/renderer/global_illumination/shader_resolve_indirect_lighting.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/shader_resolve_indirect_lighting.js +4 -0
- package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +131 -1
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_delta.d.ts +7 -0
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_delta.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_delta.js +45 -38
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_determine_range.d.ts +2 -0
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_determine_range.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_determine_range.js +81 -79
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_find_split.d.ts +2 -0
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_find_split.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_find_split.js +5 -3
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_internal_children.d.ts +21 -0
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_internal_children.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_internal_children.js +42 -0
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_morton_code.d.ts +19 -0
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_morton_code.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_morton_code.js +44 -0
- package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.d.ts +23 -5
- package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +139 -23
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_build_single_workgroup.d.ts +25 -0
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_build_single_workgroup.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_build_single_workgroup.js +179 -0
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts +2 -2
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +7 -16
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts +3 -4
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js +6 -23
- package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.d.ts +11 -0
- package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.js +14 -3
- package/src/shade/renderer/gpu_primitive/indirect/build_indirect_draw_command.d.ts +10 -0
- package/src/shade/renderer/gpu_primitive/indirect/build_indirect_draw_command.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/indirect/build_indirect_draw_command.js +13 -3
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.d.ts +10 -0
- 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 +14 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_bitonic_comparator.d.ts +26 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_bitonic_comparator.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_bitonic_comparator.js +52 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_bitonic_workgroup.d.ts +32 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_bitonic_workgroup.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_bitonic_workgroup.js +89 -0
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts +10 -0
- 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 +20 -1
- package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts +10 -0
- package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
- package/src/shade/renderer/hiz/HierarchicalZBuffer.js +294 -281
- package/src/shade/renderer/light/GPULightCollection.d.ts +8 -0
- package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
- package/src/shade/renderer/light/GPULightCollection.js +18 -1
- package/src/shade/renderer/light/cluster/cull/graph_cull_lights.d.ts +8 -0
- package/src/shade/renderer/light/cluster/cull/graph_cull_lights.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/cull/graph_cull_lights.js +234 -218
- package/src/shade/renderer/light/cluster/graph_assign_clsuters.d.ts +7 -0
- package/src/shade/renderer/light/cluster/graph_assign_clsuters.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/graph_assign_clsuters.js +13 -0
- package/src/shade/renderer/light/cluster/graph_build_light_clusters.d.ts +7 -0
- package/src/shade/renderer/light/cluster/graph_build_light_clusters.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/graph_build_light_clusters.js +16 -2
- package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts +10 -0
- package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/execute_filter_environment_map.js +13 -0
- package/src/shade/renderer/lightmap/GPULightMap.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/GPULightMap.js +3 -0
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.js +4 -0
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.js +4 -0
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/material/GPUMaterialManager.d.ts +16 -4
- package/src/shade/renderer/material/GPUMaterialManager.d.ts.map +1 -1
- package/src/shade/renderer/material/GPUMaterialManager.js +38 -8
- package/src/shade/renderer/particles/DESIGN.md +49 -7
- package/src/shade/renderer/particles/ORIENTATION_PLAN_2026_10_15.md +453 -0
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts +5 -1
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.js +13 -5
- package/src/shade/renderer/particles/data/particle_emitter_record.js +2 -2
- package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.js +12 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.d.ts +60 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.js +156 -0
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +2 -2
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/ParticleEmitter.js +8 -8
- package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.js +6 -4
- package/src/shade/renderer/particles/shaders/chunk_particle_render_math.d.ts +7 -6
- package/src/shade/renderer/particles/shaders/chunk_particle_render_math.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_render_math.js +91 -58
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +10 -0
- package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.js +5 -1
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +6 -0
- package/src/shade/renderer/postprocess/bloom/graph_postprocess_bloom.d.ts +7 -0
- package/src/shade/renderer/postprocess/bloom/graph_postprocess_bloom.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/bloom/graph_postprocess_bloom.js +18 -0
- package/src/shade/renderer/postprocess/denoise/LigmaDenoiser.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/denoise/LigmaDenoiser.js +1 -0
- package/src/shade/renderer/postprocess/denoise/shader_temporal_reprojection_luma.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/denoise/shader_temporal_reprojection_luma.js +6 -4
- package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts +11 -0
- package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.js +16 -0
- package/src/shade/renderer/postprocess/gtao/GTAO.d.ts +10 -0
- package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/GTAO.js +16 -0
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +32 -10
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.js +3 -0
- package/src/shade/renderer/postprocess/ssr/resolve/build_ssr_resolve_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/build_ssr_resolve_shader.js +6 -3
- package/src/shade/renderer/postprocess/taa/TAA.d.ts +12 -0
- package/src/shade/renderer/postprocess/taa/TAA.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/TAA.js +15 -0
- package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts +7 -0
- package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.js +13 -0
- package/src/shade/renderer/rasterize/TemplatePassDescriptor.d.ts +31 -3
- package/src/shade/renderer/rasterize/TemplatePassDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/TemplatePassDescriptor.js +79 -4
- package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.d.ts +17 -0
- package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.js +35 -4
- package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.d.ts +7 -0
- package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.js +182 -169
- package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.d.ts +10 -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 +20 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_extract_meshlets_from_bucket.d.ts +10 -0
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_extract_meshlets_from_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_extract_meshlets_from_bucket.js +18 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_sort_meshlets_by_bucket_id.d.ts +10 -0
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_sort_meshlets_by_bucket_id.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_sort_meshlets_by_bucket_id.js +20 -1
- package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.d.ts +7 -0
- package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.js +187 -170
- package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_one_way.d.ts +10 -0
- package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_one_way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_one_way.js +19 -1
- package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.d.ts +13 -0
- package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.js +25 -1
- package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.d.ts +10 -0
- 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 +20 -0
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.js +6 -0
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.js +6 -0
- 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/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +7 -2
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +12 -4
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.js +4 -3
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.js +4 -3
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts +2 -1
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +11 -3
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +4 -3
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.js +4 -3
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts +15 -0
- 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 +35 -2
- package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts +14 -0
- 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 +32 -4
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts +17 -0
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +34 -4
- package/src/shade/renderer/restir/di/chunk_restir_resolve.d.ts +5 -3
- package/src/shade/renderer/restir/di/chunk_restir_resolve.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/chunk_restir_resolve.js +8 -3
- package/src/shade/renderer/restir/di/graph_restir_di.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/graph_restir_di.js +1 -0
- package/src/shade/renderer/restir/di/shader_restir_di_resolve.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_resolve.js +5 -1
- package/src/shade/renderer/restir/reservoir/shader.d.ts.map +1 -1
- package/src/shade/renderer/restir/reservoir/shader.js +7 -4
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts +7 -0
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +13 -1
- package/src/shade/renderer/scene/GPUSceneContext.d.ts +10 -0
- package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.js +19 -0
- package/src/shade/renderer/scene/SceneManager.d.ts +9 -0
- package/src/shade/renderer/scene/SceneManager.d.ts.map +1 -1
- package/src/shade/renderer/scene/SceneManager.js +11 -0
- package/src/shade/renderer/scene/hierarchy/graph_nodes_update_transform_hierarchy.d.ts +11 -0
- package/src/shade/renderer/scene/hierarchy/graph_nodes_update_transform_hierarchy.d.ts.map +1 -1
- package/src/shade/renderer/scene/hierarchy/graph_nodes_update_transform_hierarchy.js +17 -0
- package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.d.ts +11 -0
- 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 +18 -1
- package/src/shade/renderer/shader/ComputeShader.d.ts +12 -0
- package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
- package/src/shade/renderer/shader/ComputeShader.js +53 -0
- package/src/shade/renderer/shader/ImageShader.d.ts +27 -8
- package/src/shade/renderer/shader/ImageShader.d.ts.map +1 -1
- package/src/shade/renderer/shader/ImageShader.js +70 -1
- package/src/shade/renderer/shader/ShaderDescriptor.d.ts +21 -0
- package/src/shade/renderer/shader/ShaderDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/ShaderDescriptor.js +71 -1
- package/src/shade/renderer/shader/chunk/camera/chunk_project_view_position_from_depth.d.ts +17 -0
- package/src/shade/renderer/shader/chunk/camera/chunk_project_view_position_from_depth.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/camera/chunk_project_view_position_from_depth.js +45 -0
- package/src/shade/renderer/shader/chunk/camera/chunk_screen_coordinate_to_view.js +3 -3
- package/src/shade/renderer/shader/chunk/color/iCtCp/chunk_eotf_st2084.d.ts +1 -1
- package/src/shade/renderer/shader/chunk/color/iCtCp/chunk_eotf_st2084.js +62 -62
- package/src/shade/renderer/shader/chunk/color/tonemap/HDR_TONE_MAPPING_FORMS_BRIEF_2026_10_16.md +318 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/SDR_TONE_MAPPING_BRIEF_2026_10_16.md +237 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.d.ts +17 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.js +22 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_khronos_pbr.d.ts +14 -1
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_khronos_pbr.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_khronos_pbr.js +28 -15
- package/src/shade/renderer/shader/chunk/color/tonemap/gt7/chunk_tonemap_gt7.d.ts +12 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/gt7/chunk_tonemap_gt7.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/color/tonemap/gt7/chunk_tonemap_gt7.js +128 -110
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_offset_ray_from_depth.d.ts +20 -0
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_offset_ray_from_depth.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_offset_ray_from_depth.js +33 -0
- package/src/shade/renderer/shader/chunk/light/chunk_compute_multiscattering_specular.d.ts +4 -0
- package/src/shade/renderer/shader/chunk/light/chunk_compute_multiscattering_specular.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/chunk_compute_multiscattering_specular.js +12 -1
- package/src/shade/renderer/shader/chunk/material/MATERIAL_SHADING_INFO_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/material/MATERIAL_SHADING_INFO_STRUCT.js +7 -0
- package/src/shade/renderer/shader/chunk/material/MULTISCATTER.md +108 -0
- package/src/shade/renderer/shader/chunk/material/chunk_compute_indirect_specular.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/material/chunk_compute_indirect_specular.js +23 -4
- package/src/shade/renderer/shader/chunk/material/chunk_re_direct_multiscatter.d.ts +18 -0
- package/src/shade/renderer/shader/chunk/material/chunk_re_direct_multiscatter.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/material/chunk_re_direct_multiscatter.js +56 -0
- package/src/shade/renderer/shader/chunk/material/chunk_re_indirect_specular_physical.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/material/chunk_re_indirect_specular_physical.js +2 -0
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_linear_ray.d.ts +43 -0
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_linear_ray.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_linear_ray.js +319 -0
- package/src/shade/renderer/shader/compiler/CodeChunk.d.ts +33 -0
- package/src/shade/renderer/shader/compiler/CodeChunk.d.ts.map +1 -1
- package/src/shade/renderer/shader/compiler/CodeChunk.js +140 -0
- package/src/shade/renderer/shader/compiler/CodeChunkChoice.d.ts +74 -0
- package/src/shade/renderer/shader/compiler/CodeChunkChoice.d.ts.map +1 -0
- package/src/shade/renderer/shader/compiler/CodeChunkChoice.js +166 -0
- package/src/shade/renderer/shader/compiler/SHADER_SWITCH_PROPOSAL_2026_10_16.md +680 -0
- package/src/shade/renderer/shader/compiler/ShaderSwitch.d.ts +86 -0
- package/src/shade/renderer/shader/compiler/ShaderSwitch.d.ts.map +1 -0
- package/src/shade/renderer/shader/compiler/ShaderSwitch.js +178 -0
- package/src/shade/renderer/shader/compiler/ShaderSwitchSet.d.ts +67 -0
- package/src/shade/renderer/shader/compiler/ShaderSwitchSet.d.ts.map +1 -0
- package/src/shade/renderer/shader/compiler/ShaderSwitchSet.js +205 -0
- package/src/shade/renderer/shadow/contact/CONTACT_SHADOW_WAVE_SIZE.d.ts +14 -0
- package/src/shade/renderer/shadow/contact/CONTACT_SHADOW_WAVE_SIZE.d.ts.map +1 -0
- package/src/shade/renderer/shadow/contact/CONTACT_SHADOW_WAVE_SIZE.js +13 -0
- package/src/shade/renderer/shadow/contact/ContactShadowDispatchList.d.ts +65 -0
- package/src/shade/renderer/shadow/contact/ContactShadowDispatchList.d.ts.map +1 -0
- package/src/shade/renderer/shadow/contact/ContactShadowDispatchList.js +252 -0
- package/src/shade/renderer/shadow/contact/FINDINGS.md +413 -0
- package/src/shade/renderer/shadow/contact/chunk_contact_shadow_wavefront_extents.d.ts +29 -0
- package/src/shade/renderer/shadow/contact/chunk_contact_shadow_wavefront_extents.d.ts.map +1 -0
- package/src/shade/renderer/shadow/contact/chunk_contact_shadow_wavefront_extents.js +105 -0
- package/src/shade/renderer/shadow/contact/graph_contact_shadow_linear.d.ts +29 -0
- package/src/shade/renderer/shadow/contact/graph_contact_shadow_linear.d.ts.map +1 -0
- package/src/shade/renderer/shadow/contact/graph_contact_shadow_linear.js +39 -0
- package/src/shade/renderer/shadow/contact/graph_contact_shadow_wavefront.d.ts +29 -0
- package/src/shade/renderer/shadow/contact/graph_contact_shadow_wavefront.d.ts.map +1 -0
- package/src/shade/renderer/shadow/contact/graph_contact_shadow_wavefront.js +92 -0
- package/src/shade/renderer/shadow/contact/shader_contact_shadow_linear.d.ts +29 -0
- package/src/shade/renderer/shadow/contact/shader_contact_shadow_linear.d.ts.map +1 -0
- package/src/shade/renderer/shadow/contact/shader_contact_shadow_linear.js +128 -0
- package/src/shade/renderer/shadow/contact/shader_contact_shadow_wavefront.d.ts +52 -0
- package/src/shade/renderer/shadow/contact/shader_contact_shadow_wavefront.d.ts.map +1 -0
- package/src/shade/renderer/shadow/contact/shader_contact_shadow_wavefront.js +358 -0
- package/src/shade/renderer/shadow/map/ShadowDirectionalTechnique.d.ts +10 -0
- package/src/shade/renderer/shadow/map/ShadowDirectionalTechnique.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/ShadowDirectionalTechnique.js +12 -0
- package/src/shade/renderer/shadow/map/shader/SHADOW_DIRECTIONAL_TECHNIQUE.d.ts +13 -0
- package/src/shade/renderer/shadow/map/shader/SHADOW_DIRECTIONAL_TECHNIQUE.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/shader/SHADOW_DIRECTIONAL_TECHNIQUE.js +14 -0
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.d.ts +14 -8
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.js +20 -86
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional_cascades.d.ts +14 -0
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional_cascades.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional_cascades.js +79 -0
- package/src/shade/renderer/shadow/ray/shader_ray_shadow_code.d.ts.map +1 -1
- package/src/shade/renderer/shadow/ray/shader_ray_shadow_code.js +12 -12
- package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.d.ts.map +1 -1
- package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.js +153 -151
- package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_directional_virtual.d.ts +13 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_directional_virtual.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_directional_virtual.js +48 -0
- package/src/shade/renderer/texture/GPUTextureContext.d.ts +10 -0
- package/src/shade/renderer/texture/GPUTextureContext.d.ts.map +1 -1
- package/src/shade/renderer/texture/GPUTextureContext.js +24 -0
- package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.d.ts +219 -0
- package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.d.ts.map +1 -0
- package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.js +671 -0
- package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.d.ts +26 -2
- package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.js +108 -4
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +5 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +6 -0
- package/src/shade/renderer/volumetrics/NOTES.md +50 -0
- package/src/shade/renderer/volumetrics/PARTICIPATING_MEDIA_VOLUME_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/PARTICIPATING_MEDIA_VOLUME_STRUCT.js +30 -1
- package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts +51 -13
- package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.js +98 -13
- package/src/shade/renderer/volumetrics/SceneVolumetrics.d.ts +9 -0
- package/src/shade/renderer/volumetrics/SceneVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/SceneVolumetrics.js +78 -68
- package/src/shade/renderer/volumetrics/VOLUMETRIC_NOISE_PLAN_2026_10_15.md +326 -0
- package/src/shade/renderer/volumetrics/chunk_participating_media_volume_sample.d.ts +7 -4
- package/src/shade/renderer/volumetrics/chunk_participating_media_volume_sample.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/chunk_participating_media_volume_sample.js +21 -9
- package/src/shade/renderer/volumetrics/chunk_volumetrics_froxel_uvw_from_clip.d.ts +19 -0
- package/src/shade/renderer/volumetrics/chunk_volumetrics_froxel_uvw_from_clip.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/chunk_volumetrics_froxel_uvw_from_clip.js +53 -0
- package/src/shade/renderer/volumetrics/chunk_volumetrics_sample_froxel_extinction.d.ts +12 -3
- package/src/shade/renderer/volumetrics/chunk_volumetrics_sample_froxel_extinction.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/chunk_volumetrics_sample_froxel_extinction.js +85 -48
- package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.d.ts +4 -1
- package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.js +4 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts +4 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +21 -1
- package/src/shade/renderer/volumetrics/noise/PARTICIPATING_MEDIA_NOISE.d.ts +98 -0
- package/src/shade/renderer/volumetrics/noise/PARTICIPATING_MEDIA_NOISE.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/noise/PARTICIPATING_MEDIA_NOISE.js +115 -0
- package/src/shade/renderer/volumetrics/noise/VOLUMETRICS_NOISE_TILE_BAKE_SETTINGS_STRUCT.d.ts +9 -0
- package/src/shade/renderer/volumetrics/noise/VOLUMETRICS_NOISE_TILE_BAKE_SETTINGS_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/noise/VOLUMETRICS_NOISE_TILE_BAKE_SETTINGS_STRUCT.js +24 -0
- package/src/shade/renderer/volumetrics/noise/bake_volumetrics_noise_tile.d.ts +27 -0
- package/src/shade/renderer/volumetrics/noise/bake_volumetrics_noise_tile.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/noise/bake_volumetrics_noise_tile.js +91 -0
- package/src/shade/renderer/volumetrics/noise/chunk_participating_media_noise.d.ts +35 -0
- package/src/shade/renderer/volumetrics/noise/chunk_participating_media_noise.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/noise/chunk_participating_media_noise.js +92 -0
- package/src/shade/renderer/volumetrics/noise/shader_volumetrics_noise_tile_bake.d.ts +10 -0
- package/src/shade/renderer/volumetrics/noise/shader_volumetrics_noise_tile_bake.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/noise/shader_volumetrics_noise_tile_bake.js +121 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.js +38 -3
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.js +311 -290
- package/src/shade/renderer/volumetrics/volumetrics_position_world_to_froxel_uvw.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/volumetrics_position_world_to_froxel_uvw.js +28 -49
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts +3 -1
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +24 -18
- package/src/shade/renderer/water/chunk_water_transport.d.ts +0 -1
- package/src/shade/renderer/water/chunk_water_transport.d.ts.map +1 -1
- package/src/shade/renderer/water/chunk_water_transport.js +0 -17
- package/src/shade/renderer/water/shader_water.d.ts +4 -2
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +27 -16
- package/src/shade/renderer/water/shader_water_avboit.d.ts +0 -4
- package/src/shade/renderer/water/shader_water_avboit.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water_avboit.js +0 -63
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +43 -9
- package/src/engine/network/transport/Channel.d.ts +0 -85
- package/src/engine/network/transport/Channel.d.ts.map +0 -1
- package/src/engine/network/transport/ReliableCommandPipeline.d.ts +0 -155
- package/src/engine/network/transport/ReliableCommandPipeline.d.ts.map +0 -1
- package/src/engine/network/transport/fragments/FragmentAssembler.d.ts +0 -105
- package/src/engine/network/transport/fragments/FragmentAssembler.d.ts.map +0 -1
- package/src/engine/network/transport/fragments/FragmentRetention.d.ts +0 -103
- package/src/engine/network/transport/fragments/FragmentRetention.d.ts.map +0 -1
- package/src/engine/network/transport/fragments/fragment_send.d.ts +0 -61
- package/src/engine/network/transport/fragments/fragment_send.d.ts.map +0 -1
- package/src/engine/network/transport/fragments/packet_size.d.ts +0 -99
- package/src/engine/network/transport/fragments/packet_size.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/color/sRGB/chunk_RRTAndODTFit.d.ts +0 -6
- package/src/shade/renderer/shader/chunk/color/sRGB/chunk_RRTAndODTFit.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/color/sRGB/chunk_RRTAndODTFit.js +0 -16
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_aces.d.ts +0 -7
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_aces.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_aces.js +0 -46
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_agx.d.ts +0 -10
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_agx.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_agx.js +0 -127
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_pbr_neutral.d.ts +0 -7
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_pbr_neutral.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_pbr_neutral.js +0 -39
|
@@ -30,7 +30,6 @@ import {
|
|
|
30
30
|
collect_entity_playbacks
|
|
31
31
|
} from "../../../graphics3/pose/collect_entity_playbacks.js";
|
|
32
32
|
import { MeshSkin } from "../../../graphics/ecs/mesh-v2/MeshSkin.js";
|
|
33
|
-
import { CLOTH_SELF_RADIUS_MAX_RATIO, CLOTH_SELF_RADIUS_MIN_RATIO } from "../solver/cloth_solver_constants.js";
|
|
34
33
|
import { cloth_air_changed, cloth_sample_air } from "../wind/cloth_sample_air.js";
|
|
35
34
|
import { ClothStepParam } from "../solver/cloth_step_instance.js";
|
|
36
35
|
import { ClothStepResult } from "../solver/ClothState.js";
|
|
@@ -1472,20 +1471,10 @@ export class ClothWorld {
|
|
|
1472
1471
|
params[offset + ClothStepParam.COLLIDER_COUNT] = state.collider_count;
|
|
1473
1472
|
params[offset + ClothStepParam.SELF_COLLISION] = self_collision ? 1 : 0;
|
|
1474
1473
|
|
|
1475
|
-
//
|
|
1476
|
-
//
|
|
1477
|
-
//
|
|
1478
|
-
//
|
|
1479
|
-
// keeps its thickness — and is then clamped under the closest pair
|
|
1480
|
-
// the proxy has with no row between them, because a diameter that
|
|
1481
|
-
// reaches that pair puts a cloth which is not folded at all in
|
|
1482
|
-
// permanent contact with itself (§36, §37).
|
|
1483
|
-
params[offset + ClothStepParam.SELF_RADIUS] = self_collision
|
|
1484
|
-
? Math.min(
|
|
1485
|
-
Math.max(dynamics.thickness, instance.shortest_row * CLOTH_SELF_RADIUS_MIN_RATIO),
|
|
1486
|
-
instance.closest_free_pair * CLOTH_SELF_RADIUS_MAX_RATIO
|
|
1487
|
-
)
|
|
1488
|
-
: 0;
|
|
1474
|
+
// The self-collision radius is each particle's own — half its shortest
|
|
1475
|
+
// row, over the thickness, under two fifths of its closest free pair —
|
|
1476
|
+
// and the step derives it from the thickness word above
|
|
1477
|
+
// (`cloth_self_radius_update`), so nothing about it crosses here.
|
|
1489
1478
|
|
|
1490
1479
|
// Ramp back from nothing over the window. The first step after a
|
|
1491
1480
|
// reset is allowed no velocity at all, which is what stops a
|
|
@@ -88,7 +88,7 @@ export class WorkerClothSystem extends WorkerSystem {
|
|
|
88
88
|
max_cloth_count?: number;
|
|
89
89
|
});
|
|
90
90
|
dependencies: (typeof Transform64 | typeof Cloth)[];
|
|
91
|
-
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>)[];
|
|
91
|
+
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> | ResourceAccessSpecification<typeof FluidComponent>)[];
|
|
92
92
|
/**
|
|
93
93
|
* The cloths, and everything about stepping one that is not arithmetic.
|
|
94
94
|
* Shared with {@link ClothSystem}, which is what makes the two systems one
|
|
@@ -187,5 +187,6 @@ import { ClothCollider } from "./ClothCollider.js";
|
|
|
187
187
|
import { ClothExclude } from "./ClothExclude.js";
|
|
188
188
|
import { ClothRig } from "./ClothRig.js";
|
|
189
189
|
import { ClothPin } from "./ClothPin.js";
|
|
190
|
+
import { FluidComponent } from "../../fluid/ecs/FluidComponent.js";
|
|
190
191
|
import { ClothWorld } from "./ClothWorld.js";
|
|
191
192
|
//# sourceMappingURL=WorkerClothSystem.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkerClothSystem.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/cloth/ecs/WorkerClothSystem.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"WorkerClothSystem.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/cloth/ecs/WorkerClothSystem.js"],"names":[],"mappings":"AA8BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0EG;AACH;IA6EI;;;;;;;;OAQG;IACH;QAPiC,cAAc,EAApC,MAAM,MAAM;QAIK,eAAe,GAAhC,MAAM;OAYhB;IA7FD,oDAAoC;IAEpC,ghBAgBE;IAEF;;;;;OAKG;IACH,OAFU,UAAU,CAEK;IA6EzB;;OAEG;IACH,iCAEC;IAbD;;;OAGG;IACH,4BAEC;IAoBD;;OAEG;IACH,qBAEC;IAhBD;;;;;;OAMG;IACH,gBAEC;IASD;;OAEG;IACH,iCAEC;IA2BD;;;OAGG;IACH,wDAFa,IAAI,CAIhB;IAED;;;OAGG;IACH,wDAFa,IAAI,CAIhB;IAcD;;;;OAIG;IACH,YAJW,KAAK,aACL,WAAW,UACX,MAAM,QAIhB;IAED;;;;OAIG;IACH,cAJW,KAAK,aACL,WAAW,UACX,MAAM,QAQhB;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;IAED;;;;OAIG;IACH,iCAEC;;CAmOJ;6BA1kB4B,oCAAoC;4BAIrC,uCAAuC;sBAG7C,YAAY;4CARU,uDAAuD;oCAI5F,0DAA0D;kCAS/B,uCAAuC;6BAC5C,qCAAqC;8BALpC,oBAAoB;6BACrB,mBAAmB;yBAEvB,eAAe;yBADf,eAAe;+BALT,mCAAmC;2BASvC,iBAAiB"}
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
TransformAttachment
|
|
6
6
|
} from "../../../ecs/transform-attachment/TransformAttachment.js";
|
|
7
7
|
import { Transform64 } from "../../../ecs/transform/Transform64.js";
|
|
8
|
+
import { FluidComponent } from "../../fluid/ecs/FluidComponent.js";
|
|
8
9
|
import { ClothStepParam } from "../solver/cloth_step_instance.js";
|
|
9
10
|
import { Cloth } from "./Cloth.js";
|
|
10
11
|
import { ClothCollider } from "./ClothCollider.js";
|
|
@@ -117,7 +118,11 @@ export class WorkerClothSystem extends WorkerSystem {
|
|
|
117
118
|
// model it belongs to and who composes its transform.
|
|
118
119
|
ResourceAccessSpecification.from(ClothPin, ResourceAccessKind.Read),
|
|
119
120
|
ResourceAccessSpecification.from(ParentEntity, ResourceAccessKind.Read),
|
|
120
|
-
ResourceAccessSpecification.from(GPUStateAuthority, ResourceAccessKind.Read)
|
|
121
|
+
ResourceAccessSpecification.from(GPUStateAuthority, ResourceAccessKind.Read),
|
|
122
|
+
// The air `ClothFluidWind` samples, on this thread in `collect`. As in
|
|
123
|
+
// `ClothSystem`, a cycle with the `Transform64` every fluid system reads,
|
|
124
|
+
// which the score decides for cloth (`cloth_wind.spec.js`).
|
|
125
|
+
ResourceAccessSpecification.from(FluidComponent, ResourceAccessKind.Read)
|
|
121
126
|
];
|
|
122
127
|
|
|
123
128
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloth_build_rows.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/cloth/ecs/cloth_build_rows.js"],"names":[],"mappings":"AAqEA;;;;GAIG;AACH,+DAFa,IAAI,CAsBhB;AAED;;;;;;;;;;GAUG;AACH,2DAFa,IAAI,CA6BhB;AAED;;;;;;;;GAQG;AACH,8DAFa,IAAI,CAgDhB;AAED;;;;;;;;;;;;;;GAcG;AACH,4CAJW,YAAY,SACZ,MAAM,GACJ,MAAM,CAYlB;AAED;;;;;;;;;;;;;GAaG;AACH,8DAHW,MAAM,GACJ,IAAI,
|
|
1
|
+
{"version":3,"file":"cloth_build_rows.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/cloth/ecs/cloth_build_rows.js"],"names":[],"mappings":"AAqEA;;;;GAIG;AACH,+DAFa,IAAI,CAsBhB;AAED;;;;;;;;;;GAUG;AACH,2DAFa,IAAI,CA6BhB;AAED;;;;;;;;GAQG;AACH,8DAFa,IAAI,CAgDhB;AAED;;;;;;;;;;;;;;GAcG;AACH,4CAJW,YAAY,SACZ,MAAM,GACJ,MAAM,CAYlB;AAED;;;;;;;;;;;;;GAaG;AACH,8DAHW,MAAM,GACJ,IAAI,CA4OhB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,kEAHW,MAAM,GACJ,IAAI,CAiEhB;AAED;;;;;;;;;;;GAWG;AACH,iGAFa,OAAO,CAkBnB;AAzjBD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH;;;;GAIG;AACH,kCAFU,MAAM,CAEwB;AAIxC;;;;;;;;;;;;;;;;;GAiBG;AACH,gCAFU,MAAM,CAEmB"}
|
|
@@ -425,20 +425,30 @@ export function cloth_build_rows(instance, dt) {
|
|
|
425
425
|
cloth_particle_of_source(particle_of_node, state.source_of_particle, node_count);
|
|
426
426
|
|
|
427
427
|
// Everything derived from the rows, derived again — and from the bind pose,
|
|
428
|
-
// which is what
|
|
429
|
-
// property of how the proxy was authored, not of whatever shape
|
|
430
|
-
// happens to have the cloth in when self-collision is first
|
|
428
|
+
// which is what each particle's closest free pair has to be measured in: the
|
|
429
|
+
// answer is a property of how the proxy was authored, not of whatever shape
|
|
430
|
+
// the solver happens to have the cloth in when self-collision is first
|
|
431
|
+
// switched on.
|
|
431
432
|
const exclusions = cloth_self_exclusions(state);
|
|
432
433
|
|
|
433
434
|
instance.self_exclusions = exclusions;
|
|
434
435
|
|
|
435
|
-
// Bounded at twice the
|
|
436
|
-
//
|
|
437
|
-
//
|
|
438
|
-
//
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
436
|
+
// Bounded at twice the longest of the particles' own shortest rows, which
|
|
437
|
+
// reaches every particle's two hops — a skirt's hem's as well as its
|
|
438
|
+
// waistband's — so the walk is 27 cells rather than the whole cloth. A
|
|
439
|
+
// particle with nothing that close gets `Infinity`, and then no radius
|
|
440
|
+
// inside its floor can reach anything either.
|
|
441
|
+
let longest_row = 0;
|
|
442
|
+
|
|
443
|
+
for (let i = 0; i < state.particle_count; i++) {
|
|
444
|
+
const row = state.self_row[i];
|
|
445
|
+
|
|
446
|
+
if (row < Infinity && row > longest_row) {
|
|
447
|
+
longest_row = row;
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
cloth_self_closest_free_pair(state, exclusions, longest_row * 2);
|
|
442
452
|
|
|
443
453
|
instance.particle_of_node = particle_of_node;
|
|
444
454
|
instance.blended_position = new Float64Array(node_count * 3);
|
|
@@ -146,11 +146,13 @@
|
|
|
146
146
|
<h2>Contact band</h2>
|
|
147
147
|
<p class="blurb">
|
|
148
148
|
M0 could not choose these: the ramp only means something for a row that <b>arrives</b>, and a
|
|
149
|
-
contact is the first one in the system that does.
|
|
150
|
-
|
|
149
|
+
contact is the first one in the system that does. The ramp is the fraction of the band a
|
|
150
|
+
contact gains per offset of violation per iteration. Measured defaults are
|
|
151
|
+
k_min = k_max/32 and a ramp of 0.1; drag the ramp down to 0.003, which is what β = 1e3 was
|
|
152
|
+
worth on a garment, and sweep the capsule through.
|
|
151
153
|
</p>
|
|
152
154
|
<label><span>k_min ÷ k_max</span><input id="k_floor" type="range" min="-7" max="0" step="0.25"><output id="k_floor_out"></output></label>
|
|
153
|
-
<label><span
|
|
155
|
+
<label><span>ramp</span><input id="ramp" type="range" min="-3" max="1" step="0.125"><output id="ramp_out"></output></label>
|
|
154
156
|
<div class="buttons"><button id="defaults">measured defaults</button></div>
|
|
155
157
|
|
|
156
158
|
<h2>Sweep</h2>
|
|
@@ -85,7 +85,7 @@ const control = {
|
|
|
85
85
|
substeps: 2,
|
|
86
86
|
iterations: 4,
|
|
87
87
|
k_floor: 1 / 32,
|
|
88
|
-
|
|
88
|
+
ramp: CLOTH_SOLVER_TUNING.contact_ramp_ratio,
|
|
89
89
|
swept: true,
|
|
90
90
|
animate: true,
|
|
91
91
|
running: true
|
|
@@ -166,10 +166,11 @@ function step_once() {
|
|
|
166
166
|
|
|
167
167
|
const tuning = {
|
|
168
168
|
alpha: CLOTH_SOLVER_TUNING.alpha,
|
|
169
|
-
beta:
|
|
169
|
+
beta: CLOTH_SOLVER_TUNING.beta,
|
|
170
170
|
gamma: CLOTH_SOLVER_TUNING.gamma,
|
|
171
171
|
k_min_ratio: CLOTH_SOLVER_TUNING.k_max_ratio,
|
|
172
|
-
k_max_ratio: CLOTH_SOLVER_TUNING.k_max_ratio
|
|
172
|
+
k_max_ratio: CLOTH_SOLVER_TUNING.k_max_ratio,
|
|
173
|
+
contact_ramp_ratio: control.ramp
|
|
173
174
|
};
|
|
174
175
|
|
|
175
176
|
const started = performance.now();
|
|
@@ -548,27 +549,27 @@ floor_input.addEventListener('input', () => {
|
|
|
548
549
|
: `1/${(1 / control.k_floor).toFixed(1)}`;
|
|
549
550
|
});
|
|
550
551
|
|
|
551
|
-
const
|
|
552
|
-
const
|
|
552
|
+
const ramp_input = element('ramp');
|
|
553
|
+
const ramp_output = element('ramp_out');
|
|
553
554
|
|
|
554
|
-
|
|
555
|
-
|
|
555
|
+
ramp_input.value = String(Math.log10(control.ramp));
|
|
556
|
+
ramp_output.textContent = control.ramp.toPrecision(2);
|
|
556
557
|
|
|
557
|
-
|
|
558
|
-
control.
|
|
558
|
+
ramp_input.addEventListener('input', () => {
|
|
559
|
+
control.ramp = Math.pow(10, Number(ramp_input.value));
|
|
559
560
|
|
|
560
|
-
|
|
561
|
+
ramp_output.textContent = control.ramp.toPrecision(2);
|
|
561
562
|
});
|
|
562
563
|
|
|
563
564
|
element('defaults').addEventListener('click', () => {
|
|
564
565
|
control.k_floor = 1 / 32;
|
|
565
|
-
control.
|
|
566
|
+
control.ramp = CLOTH_SOLVER_TUNING.contact_ramp_ratio;
|
|
566
567
|
|
|
567
568
|
floor_input.value = String(Math.log2(control.k_floor));
|
|
568
569
|
floor_output.textContent = '1/32';
|
|
569
570
|
|
|
570
|
-
|
|
571
|
-
|
|
571
|
+
ramp_input.value = String(Math.log10(control.ramp));
|
|
572
|
+
ramp_output.textContent = control.ramp.toPrecision(2);
|
|
572
573
|
});
|
|
573
574
|
|
|
574
575
|
const sweep_button = element('sweep');
|
|
@@ -492,9 +492,37 @@ export class ClothState {
|
|
|
492
492
|
* fabric's own 6 mm the row removes **21%** of the sheet's
|
|
493
493
|
* self-intersections, and at half the shortest row **82%**.
|
|
494
494
|
* `MEASUREMENTS.md` §31.
|
|
495
|
-
*
|
|
495
|
+
*
|
|
496
|
+
* **And it is the particle's own.** A circle skirt's rows run from a
|
|
497
|
+
* centimetre at the waistband to five at the hem, and one radius per cloth
|
|
498
|
+
* gave the hem the waistband's — a row a fifth of its spacing wide, and
|
|
499
|
+
* flutes through each other at every sample. So the two lengths it is built
|
|
500
|
+
* from, {@link self_row} and {@link self_free_pair}, are measured per
|
|
501
|
+
* particle at seed, and `cloth_self_radius_update` fills this per step from
|
|
502
|
+
* the fabric's thickness. A pair's reach is the sum of its two radii.
|
|
503
|
+
* `MEASUREMENTS.md` §67, §68.
|
|
504
|
+
* @type {Float32Array}
|
|
505
|
+
*/
|
|
506
|
+
self_radius: Float32Array;
|
|
507
|
+
/**
|
|
508
|
+
* The shortest stretch row incident on each particle, metres — the floor the
|
|
509
|
+
* self-collision radius is half of. `Infinity` for a particle no row touches.
|
|
510
|
+
* Written once, when the rows are.
|
|
511
|
+
* @type {Float32Array}
|
|
512
|
+
*/
|
|
513
|
+
self_row: Float32Array;
|
|
514
|
+
/**
|
|
515
|
+
* How close each particle gets in the **bind pose** to a particle no row
|
|
516
|
+
* joins it to, metres — the length the radius's cap is two fifths of — or
|
|
517
|
+
* `Infinity` when nothing is within the search. Written once at seed by
|
|
518
|
+
* `cloth_self_closest_free_pair`, and measured rather than derived because
|
|
519
|
+
* a garment is not a sheet: on a rigged garment's strips the gap between
|
|
520
|
+
* strips is half what the link length would predict (`MEASUREMENTS.md` §37),
|
|
521
|
+
* and on a skirt it is the waistband's two hops at the waistband and the
|
|
522
|
+
* hem's at the hem.
|
|
523
|
+
* @type {Float32Array}
|
|
496
524
|
*/
|
|
497
|
-
|
|
525
|
+
self_free_pair: Float32Array;
|
|
498
526
|
/**
|
|
499
527
|
* Self-collision pairs, 2 per pair, rebuilt every step (§9).
|
|
500
528
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClothState.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/cloth/solver/ClothState.js"],"names":[],"mappings":";;;8BAoHU,MAAM;;;;;;AAkBhB;;;GAGG;AACH,sCAFU,MAAM,CAEyB;AAEzC;
|
|
1
|
+
{"version":3,"file":"ClothState.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/cloth/solver/ClothState.js"],"names":[],"mappings":"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"}
|
|
@@ -599,9 +599,39 @@ export class ClothState {
|
|
|
599
599
|
* fabric's own 6 mm the row removes **21%** of the sheet's
|
|
600
600
|
* self-intersections, and at half the shortest row **82%**.
|
|
601
601
|
* `MEASUREMENTS.md` §31.
|
|
602
|
-
*
|
|
602
|
+
*
|
|
603
|
+
* **And it is the particle's own.** A circle skirt's rows run from a
|
|
604
|
+
* centimetre at the waistband to five at the hem, and one radius per cloth
|
|
605
|
+
* gave the hem the waistband's — a row a fifth of its spacing wide, and
|
|
606
|
+
* flutes through each other at every sample. So the two lengths it is built
|
|
607
|
+
* from, {@link self_row} and {@link self_free_pair}, are measured per
|
|
608
|
+
* particle at seed, and `cloth_self_radius_update` fills this per step from
|
|
609
|
+
* the fabric's thickness. A pair's reach is the sum of its two radii.
|
|
610
|
+
* `MEASUREMENTS.md` §67, §68.
|
|
611
|
+
* @type {Float32Array}
|
|
603
612
|
*/
|
|
604
|
-
self_radius =
|
|
613
|
+
self_radius = null;
|
|
614
|
+
|
|
615
|
+
/**
|
|
616
|
+
* The shortest stretch row incident on each particle, metres — the floor the
|
|
617
|
+
* self-collision radius is half of. `Infinity` for a particle no row touches.
|
|
618
|
+
* Written once, when the rows are.
|
|
619
|
+
* @type {Float32Array}
|
|
620
|
+
*/
|
|
621
|
+
self_row = null;
|
|
622
|
+
|
|
623
|
+
/**
|
|
624
|
+
* How close each particle gets in the **bind pose** to a particle no row
|
|
625
|
+
* joins it to, metres — the length the radius's cap is two fifths of — or
|
|
626
|
+
* `Infinity` when nothing is within the search. Written once at seed by
|
|
627
|
+
* `cloth_self_closest_free_pair`, and measured rather than derived because
|
|
628
|
+
* a garment is not a sheet: on a rigged garment's strips the gap between
|
|
629
|
+
* strips is half what the link length would predict (`MEASUREMENTS.md` §37),
|
|
630
|
+
* and on a skirt it is the waistband's two hops at the waistband and the
|
|
631
|
+
* hem's at the hem.
|
|
632
|
+
* @type {Float32Array}
|
|
633
|
+
*/
|
|
634
|
+
self_free_pair = null;
|
|
605
635
|
|
|
606
636
|
/**
|
|
607
637
|
* Self-collision pairs, 2 per pair, rebuilt every step (§9).
|
|
@@ -818,9 +848,31 @@ export class ClothState {
|
|
|
818
848
|
state.inertial.set(state.position);
|
|
819
849
|
state.kinematic_target.set(state.position);
|
|
820
850
|
|
|
851
|
+
// The two lengths a particle's self-collision radius is built from: its
|
|
852
|
+
// shortest row, from the rows below, and its closest free pair, which
|
|
853
|
+
// only a walk over the bind pose can measure (`cloth_self_closest_free_pair`)
|
|
854
|
+
// and which stays "nothing in reach" until one does.
|
|
855
|
+
state.self_row.fill(Infinity);
|
|
856
|
+
state.self_free_pair.fill(Infinity);
|
|
857
|
+
|
|
821
858
|
for (let row = 0; row < stretch_count; row++) {
|
|
822
|
-
|
|
823
|
-
|
|
859
|
+
const a = particle_of_source[stretch_particle[row * 2]];
|
|
860
|
+
const b = particle_of_source[stretch_particle[row * 2 + 1]];
|
|
861
|
+
|
|
862
|
+
state.stretch_particle[row * 2] = a;
|
|
863
|
+
state.stretch_particle[row * 2 + 1] = b;
|
|
864
|
+
|
|
865
|
+
const rest = stretch_rest[row];
|
|
866
|
+
|
|
867
|
+
if (rest > 0) {
|
|
868
|
+
if (rest < state.self_row[a]) {
|
|
869
|
+
state.self_row[a] = rest;
|
|
870
|
+
}
|
|
871
|
+
|
|
872
|
+
if (rest < state.self_row[b]) {
|
|
873
|
+
state.self_row[b] = rest;
|
|
874
|
+
}
|
|
875
|
+
}
|
|
824
876
|
|
|
825
877
|
const stiffness = stretch_stiffness[row];
|
|
826
878
|
|
|
@@ -1105,6 +1157,9 @@ function allocate(
|
|
|
1105
1157
|
contact_count, // contact_friction_lambda
|
|
1106
1158
|
contact_count, // contact_friction_penalty
|
|
1107
1159
|
contact_count * 3, // contact_anchor
|
|
1160
|
+
particle_count, // self_row
|
|
1161
|
+
particle_count, // self_free_pair
|
|
1162
|
+
particle_count, // self_radius
|
|
1108
1163
|
self_capacity * 2, // self_pair
|
|
1109
1164
|
particle_count * 3, // self_force
|
|
1110
1165
|
particle_count * 6, // self_hessian
|
|
@@ -1203,6 +1258,9 @@ function allocate(
|
|
|
1203
1258
|
state.contact_friction_penalty = cut(Float32Array, contact_count);
|
|
1204
1259
|
state.contact_anchor = cut(Float32Array, contact_count * 3);
|
|
1205
1260
|
|
|
1261
|
+
state.self_row = cut(Float32Array, particle_count);
|
|
1262
|
+
state.self_free_pair = cut(Float32Array, particle_count);
|
|
1263
|
+
state.self_radius = cut(Float32Array, particle_count);
|
|
1206
1264
|
state.self_pair = cut(Int32Array, self_capacity * 2);
|
|
1207
1265
|
state.self_force = cut(Float32Array, particle_count * 3);
|
|
1208
1266
|
state.self_hessian = cut(Float32Array, particle_count * 6);
|
|
@@ -35,12 +35,20 @@ export function cloth_self_exclusions(state: ClothState): {
|
|
|
35
35
|
* is §36's permanently active pair. {@link cloth_self_find} pairs a held
|
|
36
36
|
* particle with a free one for the same reason.
|
|
37
37
|
*
|
|
38
|
+
* **And every particle gets its own.** The walk writes each particle's closest
|
|
39
|
+
* free pair into {@link ClothState#self_free_pair} — the cap on *that*
|
|
40
|
+
* particle's radius — and returns the closest over the cloth, which on a sheet
|
|
41
|
+
* is every particle's and on a skirt is the waistband's. One cap per cloth gave
|
|
42
|
+
* a skirt's hem the waistband's, which is `MEASUREMENTS.md` §67.
|
|
43
|
+
*
|
|
38
44
|
* @param {ClothState} state
|
|
39
45
|
* @param {{offset: Int32Array, partner: Int32Array}} exclusions from {@link cloth_self_exclusions}
|
|
40
46
|
* @param {number} search only pairs closer than this are looked for; the walk is
|
|
41
|
-
* bounded by it, and a
|
|
42
|
-
* the right answer, because then no radius inside the bound can touch
|
|
43
|
-
*
|
|
47
|
+
* bounded by it, and a particle with nothing that close gets `Infinity` — which
|
|
48
|
+
* is the right answer, because then no radius inside the bound can touch
|
|
49
|
+
* anything. Twice the longest of the particles' shortest rows reaches every
|
|
50
|
+
* particle's own two hops.
|
|
51
|
+
* @returns {number} metres, the closest over the cloth, or `Infinity`
|
|
44
52
|
*/
|
|
45
53
|
export function cloth_self_closest_free_pair(state: ClothState, exclusions: {
|
|
46
54
|
offset: Int32Array;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloth_self_find.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/cloth/solver/cloth_self_find.js"],"names":[],"mappings":"AA6DA;;;;;GAKG;AACH,0DAFa;IAAC,MAAM,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,UAAU,CAAA;CAAC,CAQrD;AAED
|
|
1
|
+
{"version":3,"file":"cloth_self_find.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/cloth/solver/cloth_self_find.js"],"names":[],"mappings":"AA6DA;;;;;GAKG;AACH,0DAFa;IAAC,MAAM,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,UAAU,CAAA;CAAC,CAQrD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,4EARW;IAAC,MAAM,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,UAAU,CAAA;CAAC,UACzC,MAAM,GAKJ,MAAM,CAmIlB;AAED;;;;;;GAMG;AACH,+DAHW;IAAC,MAAM,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,UAAU,CAAA;CAAC,GACvC,MAAM,CAuKlB;AAjaD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH;;;;;;;;;;;;;;;;;GAiBG;AACH,4CAFU,MAAM,CAE+B"}
|
|
@@ -100,16 +100,28 @@ export function cloth_self_exclusions(state) {
|
|
|
100
100
|
* is §36's permanently active pair. {@link cloth_self_find} pairs a held
|
|
101
101
|
* particle with a free one for the same reason.
|
|
102
102
|
*
|
|
103
|
+
* **And every particle gets its own.** The walk writes each particle's closest
|
|
104
|
+
* free pair into {@link ClothState#self_free_pair} — the cap on *that*
|
|
105
|
+
* particle's radius — and returns the closest over the cloth, which on a sheet
|
|
106
|
+
* is every particle's and on a skirt is the waistband's. One cap per cloth gave
|
|
107
|
+
* a skirt's hem the waistband's, which is `MEASUREMENTS.md` §67.
|
|
108
|
+
*
|
|
103
109
|
* @param {ClothState} state
|
|
104
110
|
* @param {{offset: Int32Array, partner: Int32Array}} exclusions from {@link cloth_self_exclusions}
|
|
105
111
|
* @param {number} search only pairs closer than this are looked for; the walk is
|
|
106
|
-
* bounded by it, and a
|
|
107
|
-
* the right answer, because then no radius inside the bound can touch
|
|
108
|
-
*
|
|
112
|
+
* bounded by it, and a particle with nothing that close gets `Infinity` — which
|
|
113
|
+
* is the right answer, because then no radius inside the bound can touch
|
|
114
|
+
* anything. Twice the longest of the particles' shortest rows reaches every
|
|
115
|
+
* particle's own two hops.
|
|
116
|
+
* @returns {number} metres, the closest over the cloth, or `Infinity`
|
|
109
117
|
*/
|
|
110
118
|
export function cloth_self_closest_free_pair(state, exclusions, search) {
|
|
111
119
|
const particle_count = state.particle_count;
|
|
112
120
|
|
|
121
|
+
const free_pair = state.self_free_pair;
|
|
122
|
+
|
|
123
|
+
free_pair.fill(Infinity);
|
|
124
|
+
|
|
113
125
|
if (!(search > 0) || particle_count < 2) {
|
|
114
126
|
return Infinity;
|
|
115
127
|
}
|
|
@@ -131,7 +143,9 @@ export function cloth_self_closest_free_pair(state, exclusions, search) {
|
|
|
131
143
|
// hand back a point from anywhere. Without this the answer would be the
|
|
132
144
|
// closest ungoverned pair the table happened to collide into view, which is
|
|
133
145
|
// a real distance but not the one `search` was asked for.
|
|
134
|
-
|
|
146
|
+
const search_squared = search * search;
|
|
147
|
+
|
|
148
|
+
let closest_squared = search_squared;
|
|
135
149
|
|
|
136
150
|
for (let i = 0; i < particle_count; i++) {
|
|
137
151
|
const a = i * 3;
|
|
@@ -187,7 +201,7 @@ export function cloth_self_closest_free_pair(state, exclusions, search) {
|
|
|
187
201
|
|
|
188
202
|
const distance_squared = ddx * ddx + ddy * ddy + ddz * ddz;
|
|
189
203
|
|
|
190
|
-
if (distance_squared >=
|
|
204
|
+
if (distance_squared >= search_squared) {
|
|
191
205
|
continue;
|
|
192
206
|
}
|
|
193
207
|
|
|
@@ -209,14 +223,27 @@ export function cloth_self_closest_free_pair(state, exclusions, search) {
|
|
|
209
223
|
continue;
|
|
210
224
|
}
|
|
211
225
|
|
|
212
|
-
|
|
226
|
+
const distance = Math.sqrt(distance_squared);
|
|
227
|
+
|
|
228
|
+
// Both ends of the pair: the walk visits each pair once, from its lower index.
|
|
229
|
+
if (distance < free_pair[i]) {
|
|
230
|
+
free_pair[i] = distance;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
if (distance < free_pair[j]) {
|
|
234
|
+
free_pair[j] = distance;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
if (distance_squared < closest_squared) {
|
|
238
|
+
closest_squared = distance_squared;
|
|
239
|
+
}
|
|
213
240
|
}
|
|
214
241
|
}
|
|
215
242
|
}
|
|
216
243
|
}
|
|
217
244
|
}
|
|
218
245
|
|
|
219
|
-
return closest_squared ===
|
|
246
|
+
return closest_squared === search_squared ? Infinity : Math.sqrt(closest_squared);
|
|
220
247
|
}
|
|
221
248
|
|
|
222
249
|
/**
|
|
@@ -229,7 +256,19 @@ export function cloth_self_closest_free_pair(state, exclusions, search) {
|
|
|
229
256
|
export function cloth_self_find(state, exclusions) {
|
|
230
257
|
const particle_count = state.particle_count;
|
|
231
258
|
|
|
232
|
-
const
|
|
259
|
+
const self_radius = state.self_radius;
|
|
260
|
+
|
|
261
|
+
// The cell is the widest pair's reach, which is what makes the 27-cell walk
|
|
262
|
+
// sufficient for every pair; a pair's own reach is the sum of its two radii.
|
|
263
|
+
let largest = 0;
|
|
264
|
+
|
|
265
|
+
for (let i = 0; i < particle_count; i++) {
|
|
266
|
+
if (self_radius[i] > largest) {
|
|
267
|
+
largest = self_radius[i];
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
const radius = largest * 2;
|
|
233
272
|
|
|
234
273
|
if (radius <= 0) {
|
|
235
274
|
state.self_count = 0;
|
|
@@ -256,8 +295,6 @@ export function cloth_self_find(state, exclusions) {
|
|
|
256
295
|
|
|
257
296
|
const inverse = 1 / radius;
|
|
258
297
|
|
|
259
|
-
const radius_squared = radius * radius;
|
|
260
|
-
|
|
261
298
|
for (let i = 0; i < particle_count; i++) {
|
|
262
299
|
// A held particle is paired with free ones and not with another held
|
|
263
300
|
// one: it cannot be pushed, but it can be carried through the fabric —
|
|
@@ -275,6 +312,8 @@ export function cloth_self_find(state, exclusions) {
|
|
|
275
312
|
const cy = Math.floor(y * inverse);
|
|
276
313
|
const cz = Math.floor(z * inverse);
|
|
277
314
|
|
|
315
|
+
const radius_i = self_radius[i];
|
|
316
|
+
|
|
278
317
|
const exclude_start = offset[i];
|
|
279
318
|
const exclude_end = offset[i + 1];
|
|
280
319
|
|
|
@@ -326,7 +365,9 @@ export function cloth_self_find(state, exclusions) {
|
|
|
326
365
|
const ddy = y - position[b + 1];
|
|
327
366
|
const ddz = z - position[b + 2];
|
|
328
367
|
|
|
329
|
-
|
|
368
|
+
const reach = radius_i + self_radius[j];
|
|
369
|
+
|
|
370
|
+
if (ddx * ddx + ddy * ddy + ddz * ddz >= reach * reach) {
|
|
330
371
|
continue;
|
|
331
372
|
}
|
|
332
373
|
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* # The self-collision radius, per particle
|
|
3
|
+
*
|
|
4
|
+
* §9's radius is built from two lengths of the proxy: half the shortest row,
|
|
5
|
+
* so the row's diameter is one particle spacing (`MEASUREMENTS.md` §31), capped
|
|
6
|
+
* at two fifths of the closest pair no row governs, so a cloth that is not
|
|
7
|
+
* folded is never in contact with itself (§36, §37). Both used to be measured
|
|
8
|
+
* over the whole cloth and the radius was one number for it.
|
|
9
|
+
*
|
|
10
|
+
* **Both lengths are the particle's own.** A circle skirt's rows run from a
|
|
11
|
+
* centimetre at the waistband to five at the hem, and one radius per cloth gave
|
|
12
|
+
* the hem the waistband's: six millimetres against fifty-four of spacing, a row
|
|
13
|
+
* a fifth of the spacing wide where §9 wants one spacing, and the hem's flutes
|
|
14
|
+
* passed through each other at every sample. With {@link ClothState#self_row}
|
|
15
|
+
* and {@link ClothState#self_free_pair} measured per particle at seed, this
|
|
16
|
+
* fills {@link ClothState#self_radius} per step from the fabric's thickness,
|
|
17
|
+
* and a pair's reach is the sum of its two radii. On a uniform sheet every
|
|
18
|
+
* particle gets the number the cloth used to get. `MEASUREMENTS.md` §67, §68.
|
|
19
|
+
*
|
|
20
|
+
* Per step rather than at seed because the thickness is `ClothDynamics`', which
|
|
21
|
+
* an author may change while the cloth runs; it is one multiply and two
|
|
22
|
+
* comparisons a particle, in the step itself so that the worker and the main
|
|
23
|
+
* thread derive the same bytes from the same words.
|
|
24
|
+
*
|
|
25
|
+
* @author Alex Goldring
|
|
26
|
+
* @copyright Company Named Limited (c) 2026
|
|
27
|
+
*/
|
|
28
|
+
/**
|
|
29
|
+
* Fill every particle's self-collision radius from its own two lengths and the
|
|
30
|
+
* fabric's thickness:
|
|
31
|
+
*
|
|
32
|
+
* r_i = min( max(thickness, ½·self_row_i), 0.4·self_free_pair_i )
|
|
33
|
+
*
|
|
34
|
+
* A particle with no row has no floor above the thickness, and one with
|
|
35
|
+
* nothing in reach has no cap.
|
|
36
|
+
*
|
|
37
|
+
* @param {ClothState} state
|
|
38
|
+
* @param {number} thickness `ClothDynamics#thickness`, metres
|
|
39
|
+
* @returns {void}
|
|
40
|
+
*/
|
|
41
|
+
export function cloth_self_radius_update(state: ClothState, thickness: number): void;
|
|
42
|
+
//# sourceMappingURL=cloth_self_radius.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloth_self_radius.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/cloth/solver/cloth_self_radius.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH;;;;;;;;;;;;GAYG;AACH,uEAHW,MAAM,GACJ,IAAI,CAsBhB"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { CLOTH_SELF_RADIUS_MAX_RATIO, CLOTH_SELF_RADIUS_MIN_RATIO } from "./cloth_solver_constants.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* # The self-collision radius, per particle
|
|
5
|
+
*
|
|
6
|
+
* §9's radius is built from two lengths of the proxy: half the shortest row,
|
|
7
|
+
* so the row's diameter is one particle spacing (`MEASUREMENTS.md` §31), capped
|
|
8
|
+
* at two fifths of the closest pair no row governs, so a cloth that is not
|
|
9
|
+
* folded is never in contact with itself (§36, §37). Both used to be measured
|
|
10
|
+
* over the whole cloth and the radius was one number for it.
|
|
11
|
+
*
|
|
12
|
+
* **Both lengths are the particle's own.** A circle skirt's rows run from a
|
|
13
|
+
* centimetre at the waistband to five at the hem, and one radius per cloth gave
|
|
14
|
+
* the hem the waistband's: six millimetres against fifty-four of spacing, a row
|
|
15
|
+
* a fifth of the spacing wide where §9 wants one spacing, and the hem's flutes
|
|
16
|
+
* passed through each other at every sample. With {@link ClothState#self_row}
|
|
17
|
+
* and {@link ClothState#self_free_pair} measured per particle at seed, this
|
|
18
|
+
* fills {@link ClothState#self_radius} per step from the fabric's thickness,
|
|
19
|
+
* and a pair's reach is the sum of its two radii. On a uniform sheet every
|
|
20
|
+
* particle gets the number the cloth used to get. `MEASUREMENTS.md` §67, §68.
|
|
21
|
+
*
|
|
22
|
+
* Per step rather than at seed because the thickness is `ClothDynamics`', which
|
|
23
|
+
* an author may change while the cloth runs; it is one multiply and two
|
|
24
|
+
* comparisons a particle, in the step itself so that the worker and the main
|
|
25
|
+
* thread derive the same bytes from the same words.
|
|
26
|
+
*
|
|
27
|
+
* @author Alex Goldring
|
|
28
|
+
* @copyright Company Named Limited (c) 2026
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Fill every particle's self-collision radius from its own two lengths and the
|
|
33
|
+
* fabric's thickness:
|
|
34
|
+
*
|
|
35
|
+
* r_i = min( max(thickness, ½·self_row_i), 0.4·self_free_pair_i )
|
|
36
|
+
*
|
|
37
|
+
* A particle with no row has no floor above the thickness, and one with
|
|
38
|
+
* nothing in reach has no cap.
|
|
39
|
+
*
|
|
40
|
+
* @param {ClothState} state
|
|
41
|
+
* @param {number} thickness `ClothDynamics#thickness`, metres
|
|
42
|
+
* @returns {void}
|
|
43
|
+
*/
|
|
44
|
+
export function cloth_self_radius_update(state, thickness) {
|
|
45
|
+
const particle_count = state.particle_count;
|
|
46
|
+
|
|
47
|
+
const row = state.self_row;
|
|
48
|
+
const free_pair = state.self_free_pair;
|
|
49
|
+
const radius = state.self_radius;
|
|
50
|
+
|
|
51
|
+
for (let i = 0; i < particle_count; i++) {
|
|
52
|
+
const floor = row[i] * CLOTH_SELF_RADIUS_MIN_RATIO;
|
|
53
|
+
|
|
54
|
+
let r = floor > thickness && floor < Infinity ? floor : thickness;
|
|
55
|
+
|
|
56
|
+
const cap = free_pair[i] * CLOTH_SELF_RADIUS_MAX_RATIO;
|
|
57
|
+
|
|
58
|
+
if (cap < r) {
|
|
59
|
+
r = cap;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
radius[i] = r;
|
|
63
|
+
}
|
|
64
|
+
}
|