@zephyr3d/scene 0.8.1 → 0.9.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/dist/animation/animationset.js +563 -128
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/cloth/gpu_cloth_system.js +2516 -0
- package/dist/animation/cloth/gpu_cloth_system.js.map +1 -0
- package/dist/animation/fixed_geometry_cache_track.js +138 -0
- package/dist/animation/fixed_geometry_cache_track.js.map +1 -0
- package/dist/animation/geometry_cache_utils.js +120 -0
- package/dist/animation/geometry_cache_utils.js.map +1 -0
- package/dist/animation/ik_modifier.js +9 -1
- package/dist/animation/ik_modifier.js.map +1 -1
- package/dist/animation/joint_dynamics/collision.js +469 -0
- package/dist/animation/joint_dynamics/collision.js.map +1 -0
- package/dist/animation/joint_dynamics/constraints.js +329 -0
- package/dist/animation/joint_dynamics/constraints.js.map +1 -0
- package/dist/animation/joint_dynamics/controller.js +699 -0
- package/dist/animation/joint_dynamics/controller.js.map +1 -0
- package/dist/animation/joint_dynamics/joint_dynamics_system.js +393 -0
- package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -0
- package/dist/animation/joint_dynamics/solver.js +794 -0
- package/dist/animation/joint_dynamics/solver.js.map +1 -0
- package/dist/animation/joint_dynamics/types.js +19 -0
- package/dist/animation/joint_dynamics/types.js.map +1 -0
- package/dist/animation/joint_dynamics/vrm_spring_bone.js +46 -0
- package/dist/animation/joint_dynamics/vrm_spring_bone.js.map +1 -0
- package/dist/animation/joint_dynamics_modifier.js +51 -0
- package/dist/animation/joint_dynamics_modifier.js.map +1 -0
- package/dist/animation/pca_geometry_cache_track.js +222 -0
- package/dist/animation/pca_geometry_cache_track.js.map +1 -0
- package/dist/animation/skeleton.js +1907 -3
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/skeleton_modifier.js +3 -5
- package/dist/animation/skeleton_modifier.js.map +1 -1
- package/dist/animation/spring/multi_chain_spring_system.js +2 -0
- package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
- package/dist/animation/spring/spring_chain.js +3 -2
- package/dist/animation/spring/spring_chain.js.map +1 -1
- package/dist/animation/spring/spring_collider.js +35 -5
- package/dist/animation/spring/spring_collider.js.map +1 -1
- package/dist/animation/spring/spring_particle.js +1 -0
- package/dist/animation/spring/spring_particle.js.map +1 -1
- package/dist/animation/spring/spring_system.js +325 -28
- package/dist/animation/spring/spring_system.js.map +1 -1
- package/dist/animation/spring2/collision.js +469 -0
- package/dist/animation/spring2/collision.js.map +1 -0
- package/dist/animation/spring2/constraints.js +329 -0
- package/dist/animation/spring2/constraints.js.map +1 -0
- package/dist/animation/spring2/controller.js +434 -0
- package/dist/animation/spring2/controller.js.map +1 -0
- package/dist/animation/spring2/math.js +16 -0
- package/dist/animation/spring2/math.js.map +1 -0
- package/dist/animation/spring2/solver.js +624 -0
- package/dist/animation/spring2/solver.js.map +1 -0
- package/dist/animation/spring2/spring_system.js +118 -0
- package/dist/animation/spring2/spring_system.js.map +1 -0
- package/dist/animation/spring2/types.js +19 -0
- package/dist/animation/spring2/types.js.map +1 -0
- package/dist/animation/spring_modifier.js +17 -1
- package/dist/animation/spring_modifier.js.map +1 -1
- package/dist/app/engine.js +42 -15
- package/dist/app/engine.js.map +1 -1
- package/dist/app/runtimescript.js +132 -1
- package/dist/app/runtimescript.js.map +1 -1
- package/dist/app/screen.js +3 -3
- package/dist/app/screen.js.map +1 -1
- package/dist/app/scriptingsystem.js +69 -37
- package/dist/app/scriptingsystem.js.map +1 -1
- package/dist/app/scriptregistry.js +157 -146
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +2 -1
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/loaders/zabc/zabc_loader.js +570 -0
- package/dist/asset/loaders/zabc/zabc_loader.js.map +1 -0
- package/dist/asset/model.js +192 -0
- package/dist/asset/model.js.map +1 -1
- package/dist/camera/base.js +26 -7
- package/dist/camera/base.js.map +1 -1
- package/dist/camera/camera.js +146 -24
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/fps.js +2 -2
- package/dist/camera/fps.js.map +1 -1
- package/dist/camera/orbit.js +2 -2
- package/dist/camera/orbit.js.map +1 -1
- package/dist/index.d.ts +11701 -8506
- package/dist/index.js +29 -8
- package/dist/index.js.map +1 -1
- package/dist/material/lambert.js +1 -1
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +9 -3
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +54 -7
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +17 -7
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js +7 -2
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +108 -16
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +222 -14
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js +24 -12
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +11 -8
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/common.js +72 -5
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/pbrblueprint.js +148 -1
- package/dist/material/pbrblueprint.js.map +1 -1
- package/dist/material/pbrmr.js +125 -2
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/shader/helper.js +10 -4
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/water.js +2 -2
- package/dist/material/water.js.map +1 -1
- package/dist/posteffect/coloradjust.js +145 -0
- package/dist/posteffect/coloradjust.js.map +1 -0
- package/dist/posteffect/taa.js +68 -32
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/render/cluster_light.js +17 -12
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/deferredlightpass.js +510 -0
- package/dist/render/deferredlightpass.js.map +1 -0
- package/dist/render/deferredshadowlightpass.js +428 -0
- package/dist/render/deferredshadowlightpass.js.map +1 -0
- package/dist/render/drawable.js.map +1 -1
- package/dist/render/drawable_mixin.js +21 -12
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/envlight.js +20 -22
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/gbufferpass.js +50 -0
- package/dist/render/gbufferpass.js.map +1 -0
- package/dist/render/lightpass.js +1 -2
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/primitive.js +1 -1
- package/dist/render/primitive.js.map +1 -1
- package/dist/render/render_queue.js +3 -2
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +5 -358
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/rendergraph/executor.js +15 -12
- package/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +144 -88
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/history_resource_manager.js +178 -0
- package/dist/render/rendergraph/history_resource_manager.js.map +1 -0
- package/dist/render/rendergraph/rendergraph.js +12 -1
- package/dist/render/rendergraph/rendergraph.js.map +1 -1
- package/dist/render/rendergraph/types.js +2 -2
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/sky.js +26 -9
- package/dist/render/sky.js.map +1 -1
- package/dist/scene/basesprite.js +4 -3
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/batchgroup.js +4 -4
- package/dist/scene/environment.js +7 -4
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/light.js +184 -18
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/mesh.js +30 -0
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/particlesys.js +3 -2
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/raycast_visitor.js +29 -3
- package/dist/scene/raycast_visitor.js.map +1 -1
- package/dist/scene/scene.js +86 -19
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +87 -31
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/script_attachment.js +59 -0
- package/dist/scene/script_attachment.js.map +1 -0
- package/dist/scene/terrain-cm/grass.js +3 -2
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +4 -3
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/water.js +3 -2
- package/dist/scene/water.js.map +1 -1
- package/dist/shaders/shadow.js +2 -2
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shadow/shadowmapper.js +74 -4
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shapes/box.js +163 -0
- package/dist/shapes/box.js.map +1 -1
- package/dist/shapes/capsule.js +216 -0
- package/dist/shapes/capsule.js.map +1 -0
- package/dist/shapes/cylinder.js +91 -0
- package/dist/shapes/cylinder.js.map +1 -1
- package/dist/shapes/plane.js +32 -0
- package/dist/shapes/plane.js.map +1 -1
- package/dist/shapes/tetrahedron.js +211 -0
- package/dist/shapes/tetrahedron.js.map +1 -1
- package/dist/shapes/torus.js +173 -0
- package/dist/shapes/torus.js.map +1 -1
- package/dist/utility/blueprint/common/math.js +111 -1
- package/dist/utility/blueprint/common/math.js.map +1 -1
- package/dist/utility/blueprint/material/inputs.js +235 -1
- package/dist/utility/blueprint/material/inputs.js.map +1 -1
- package/dist/utility/blueprint/material/ir.js +154 -10
- package/dist/utility/blueprint/material/ir.js.map +1 -1
- package/dist/utility/blueprint/material/texture.js +273 -19
- package/dist/utility/blueprint/material/texture.js.map +1 -1
- package/dist/utility/serialization/json.js +12 -2
- package/dist/utility/serialization/json.js.map +1 -1
- package/dist/utility/serialization/manager.js +30 -11
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +250 -7
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +4 -2
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +154 -2
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/cloth_script.js +834 -0
- package/dist/utility/serialization/scene/cloth_script.js.map +1 -0
- package/dist/utility/serialization/scene/common.js +7 -0
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +120 -4
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +453 -1
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +4 -2
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +298 -10
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +4 -2
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +100 -3
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +130 -3
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/script.js +66 -0
- package/dist/utility/serialization/scene/script.js.map +1 -0
- package/dist/utility/serialization/scene/spring_script.js +596 -0
- package/dist/utility/serialization/scene/spring_script.js.map +1 -0
- package/dist/utility/serialization/scene/sprite.js +5 -3
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +4 -2
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +4 -2
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/values.js +5 -1
- package/dist/values.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gpu_cloth_system.js","sources":["../../../src/animation/cloth/gpu_cloth_system.ts"],"sourcesContent":["import type {\r\n AbstractDevice,\r\n BindGroup,\r\n GPUDataBuffer,\r\n GPUProgram,\r\n StructuredBuffer\r\n} from '@zephyr3d/device';\r\nimport { PBPrimitiveType } from '@zephyr3d/device';\r\nimport {\r\n Matrix4x4,\r\n base64ToUint8Array,\r\n releaseObject,\r\n retainObject,\r\n uint8ArrayToBase64,\r\n Vector3,\r\n type Nullable\r\n} from '@zephyr3d/base';\r\nimport { getDevice } from '../../app/api';\r\nimport type { Primitive } from '../../render';\r\nimport type { Scene } from '../../scene';\r\nimport type { MeshUpdateCallback } from '../../scene/mesh';\r\nimport { BoundingBox } from '../../utility/bounding_volume';\r\nimport type {\r\n CapsuleCollider,\r\n PlaneCollider,\r\n SphereCollider,\r\n SpringCollider\r\n} from '../spring/spring_collider';\r\nimport { updateColliderFromNode } from '../spring/spring_collider';\r\n\r\nexport type GPUClothSystemOptions = {\r\n enabled?: boolean;\r\n device?: Nullable<AbstractDevice>;\r\n primitive?: Nullable<Primitive>;\r\n collisionSpaceNode?: any;\r\n positionData?: Float32Array<ArrayBuffer>;\r\n indexData?: Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>;\r\n skinningBlendIndices?: Float32Array<ArrayBuffer>;\r\n skinningBlendWeights?: Float32Array<ArrayBuffer>;\r\n pinnedVertexWeights?: ArrayLike<number>;\r\n pinnedVertexIndices?: number[];\r\n gravity?: Vector3;\r\n damping?: number;\r\n dynamicFriction?: number;\r\n staticFriction?: number;\r\n stiffness?: number;\r\n poseFollow?: number;\r\n substeps?: number;\r\n solverIterations?: number;\r\n maxNeighbors?: number;\r\n workgroupSize?: number;\r\n colliders?: SpringCollider[];\r\n maxTrianglesPerVertex?: number;\r\n rebuildNormals?: boolean;\r\n scene?: Nullable<Scene>;\r\n autoUpdate?: boolean;\r\n};\r\n\r\nexport type GPUClothWrapBindingData = {\r\n version: 4;\r\n vertexCount: number;\r\n sourceVertexCount: number;\r\n influenceCount: number;\r\n maxOffsetDistance: number;\r\n sourceTriangleIndices: string;\r\n sourceBarycentrics: string;\r\n targetLocalOffsets: string;\r\n};\r\n\r\nexport type GPUClothWrapBindingTarget = {\r\n target: any;\r\n data: GPUClothWrapBindingData;\r\n};\r\n\r\nfunction encodeTypedArrayBase64(view: ArrayBufferView) {\r\n return uint8ArrayToBase64(new Uint8Array(view.buffer, view.byteOffset, view.byteLength));\r\n}\r\n\r\nfunction decodeTypedArrayFromBase64<T extends Uint32Array | Float32Array>(\r\n ctor: {\r\n new (buffer: ArrayBuffer): T;\r\n BYTES_PER_ELEMENT: number;\r\n },\r\n base64: string,\r\n expectedLength: number\r\n) {\r\n const bytes = base64ToUint8Array(base64);\r\n const byteLength = bytes.byteLength;\r\n if (byteLength % ctor.BYTES_PER_ELEMENT !== 0) {\r\n throw new Error('GPU cloth wrap failed: binding cache data is corrupted.');\r\n }\r\n const buffer = bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength);\r\n const result = new ctor(buffer);\r\n if (expectedLength >= 0 && result.length !== expectedLength) {\r\n throw new Error('GPU cloth wrap failed: binding cache size does not match target mesh.');\r\n }\r\n return result;\r\n}\r\n\r\nfunction isWrapBindingDataCompatible(\r\n data: GPUClothWrapBindingData,\r\n sourceRestPositions: Float32Array<ArrayBuffer>,\r\n targetVertexCount: number\r\n) {\r\n return (\r\n data?.version === 4 &&\r\n data.vertexCount === targetVertexCount &&\r\n data.sourceVertexCount === (sourceRestPositions.length / 3) >> 0 &&\r\n data.influenceCount === WRAP_TRIANGLE_VERTEX_COUNT\r\n );\r\n}\r\n\r\nfunction resolveDevice(explicitDevice?: Nullable<AbstractDevice>) {\r\n if (explicitDevice) {\r\n return explicitDevice;\r\n }\r\n try {\r\n return getDevice();\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Returns whether GPU cloth is supported on the given device.\r\n *\r\n * GPU cloth in this engine is WebGPU-only. WebGL backends are explicitly unsupported.\r\n */\r\nexport function isGPUClothSupported(device?: Nullable<AbstractDevice>) {\r\n const resolved = resolveDevice(device);\r\n return resolved?.type === 'webgpu';\r\n}\r\n\r\nconst DEFAULT_DAMPING = 0.02;\r\nconst DEFAULT_DYNAMIC_FRICTION = 0.15;\r\nconst DEFAULT_STATIC_FRICTION = 0.3;\r\nconst DEFAULT_STIFFNESS = 0.3;\r\nconst DEFAULT_POSE_FOLLOW = 0;\r\nconst DEFAULT_SUBSTEPS = 2;\r\nconst DEFAULT_SOLVER_ITERATIONS = 5;\r\nconst DEFAULT_MAX_NEIGHBORS = 8;\r\nconst DEFAULT_WORKGROUP_SIZE = 64;\r\nconst DEFAULT_MAX_TRIANGLES_PER_VERTEX = 16;\r\nconst DEFAULT_REST_POSITION_SMOOTHING_TIME = 1 / 25;\r\nconst DEFAULT_COLLIDER_SMOOTHING_TIME = 1 / 30;\r\nconst FIXED_SIMULATION_TIME_STEP = 1 / 60;\r\nconst MAX_ACCUMULATED_SIMULATION_TIME = 1 / 20;\r\nconst MAX_SIMULATION_STEPS_PER_UPDATE = Math.max(\r\n 1,\r\n Math.ceil(MAX_ACCUMULATED_SIMULATION_TIME / FIXED_SIMULATION_TIME_STEP)\r\n);\r\nconst WRAP_TRIANGLE_VERTEX_COUNT = 3;\r\nconst WRAP_MIN_DISTANCE = 1e-8;\r\n\r\nfunction clamp(value: number, min: number, max: number) {\r\n return Math.min(Math.max(value, min), max);\r\n}\r\n\r\nfunction getInitialColliderBufferFloatCount(\r\n colliders: SpringCollider[] | undefined,\r\n type: SpringCollider['type'],\r\n stride: number\r\n) {\r\n const count = (colliders ?? []).reduce((total, collider) => total + (collider?.type === type ? 1 : 0), 0);\r\n return Math.max(1, count) * stride;\r\n}\r\n\r\nfunction getPrimitiveScalarByteSize(type: PBPrimitiveType) {\r\n switch (type) {\r\n case PBPrimitiveType.I16:\r\n case PBPrimitiveType.I16_NORM:\r\n case PBPrimitiveType.U16:\r\n case PBPrimitiveType.U16_NORM:\r\n case PBPrimitiveType.F16:\r\n return 2;\r\n case PBPrimitiveType.I32:\r\n case PBPrimitiveType.I32_NORM:\r\n case PBPrimitiveType.U32:\r\n case PBPrimitiveType.U32_NORM:\r\n case PBPrimitiveType.F32:\r\n return 4;\r\n default:\r\n return 1;\r\n }\r\n}\r\n\r\nfunction readPrimitiveScalar(\r\n view: DataView,\r\n byteOffset: number,\r\n scalarType: PBPrimitiveType,\r\n normalized: boolean\r\n) {\r\n switch (scalarType) {\r\n case PBPrimitiveType.I8:\r\n case PBPrimitiveType.I8_NORM: {\r\n const value = view.getInt8(byteOffset);\r\n return normalized ? Math.max(-1, value / 127) : value;\r\n }\r\n case PBPrimitiveType.U8:\r\n case PBPrimitiveType.U8_NORM: {\r\n const value = view.getUint8(byteOffset);\r\n return normalized ? value / 255 : value;\r\n }\r\n case PBPrimitiveType.I16:\r\n case PBPrimitiveType.I16_NORM: {\r\n const value = view.getInt16(byteOffset, true);\r\n return normalized ? Math.max(-1, value / 32767) : value;\r\n }\r\n case PBPrimitiveType.U16:\r\n case PBPrimitiveType.U16_NORM: {\r\n const value = view.getUint16(byteOffset, true);\r\n return normalized ? value / 65535 : value;\r\n }\r\n case PBPrimitiveType.I32:\r\n case PBPrimitiveType.I32_NORM: {\r\n const value = view.getInt32(byteOffset, true);\r\n return normalized ? Math.max(-1, value / 2147483647) : value;\r\n }\r\n case PBPrimitiveType.U32:\r\n case PBPrimitiveType.U32_NORM: {\r\n const value = view.getUint32(byteOffset, true);\r\n return normalized ? value / 4294967295 : value;\r\n }\r\n case PBPrimitiveType.F32:\r\n return view.getFloat32(byteOffset, true);\r\n default:\r\n throw new Error(`Unsupported vertex scalar type: ${scalarType}`);\r\n }\r\n}\r\n\r\nfunction distance3(positions: Float32Array<ArrayBuffer>, a: number, b: number) {\r\n const a0 = a * 3;\r\n const b0 = b * 3;\r\n const dx = positions[a0] - positions[b0];\r\n const dy = positions[a0 + 1] - positions[b0 + 1];\r\n const dz = positions[a0 + 2] - positions[b0 + 2];\r\n return Math.sqrt(dx * dx + dy * dy + dz * dz);\r\n}\r\n\r\nfunction dot3(ax: number, ay: number, az: number, bx: number, by: number, bz: number) {\r\n return ax * bx + ay * by + az * bz;\r\n}\r\n\r\nfunction normalize3(\r\n x: number,\r\n y: number,\r\n z: number,\r\n fallback: [number, number, number]\r\n): [number, number, number] {\r\n const length = Math.hypot(x, y, z);\r\n if (length <= WRAP_MIN_DISTANCE) {\r\n return fallback;\r\n }\r\n return [x / length, y / length, z / length];\r\n}\r\n\r\nfunction buildWrapTriangleFrame(\r\n p0x: number,\r\n p0y: number,\r\n p0z: number,\r\n p1x: number,\r\n p1y: number,\r\n p1z: number,\r\n p2x: number,\r\n p2y: number,\r\n p2z: number,\r\n out: Float32Array<ArrayBuffer> | number[]\r\n) {\r\n const edge01x = p1x - p0x;\r\n const edge01y = p1y - p0y;\r\n const edge01z = p1z - p0z;\r\n const edge02x = p2x - p0x;\r\n const edge02y = p2y - p0y;\r\n const edge02z = p2z - p0z;\r\n\r\n let tangent = normalize3(edge01x, edge01y, edge01z, [0, 0, 0]);\r\n if (tangent[0] === 0 && tangent[1] === 0 && tangent[2] === 0) {\r\n tangent = normalize3(edge02x, edge02y, edge02z, [1, 0, 0]);\r\n }\r\n\r\n let normal = normalize3(\r\n edge01y * edge02z - edge01z * edge02y,\r\n edge01z * edge02x - edge01x * edge02z,\r\n edge01x * edge02y - edge01y * edge02x,\r\n [0, 0, 0]\r\n );\r\n if (normal[0] === 0 && normal[1] === 0 && normal[2] === 0) {\r\n const fallbackAxis = Math.abs(tangent[1]) < 0.999 ? [0, 1, 0] : [1, 0, 0];\r\n normal = normalize3(\r\n tangent[1] * fallbackAxis[2] - tangent[2] * fallbackAxis[1],\r\n tangent[2] * fallbackAxis[0] - tangent[0] * fallbackAxis[2],\r\n tangent[0] * fallbackAxis[1] - tangent[1] * fallbackAxis[0],\r\n [0, 0, 1]\r\n );\r\n }\r\n\r\n let bitangent = normalize3(\r\n normal[1] * tangent[2] - normal[2] * tangent[1],\r\n normal[2] * tangent[0] - normal[0] * tangent[2],\r\n normal[0] * tangent[1] - normal[1] * tangent[0],\r\n [0, 0, 0]\r\n );\r\n if (bitangent[0] === 0 && bitangent[1] === 0 && bitangent[2] === 0) {\r\n bitangent = Math.abs(tangent[1]) < 0.999 ? [0, 1, 0] : [1, 0, 0];\r\n }\r\n\r\n normal = normalize3(\r\n tangent[1] * bitangent[2] - tangent[2] * bitangent[1],\r\n tangent[2] * bitangent[0] - tangent[0] * bitangent[2],\r\n tangent[0] * bitangent[1] - tangent[1] * bitangent[0],\r\n [0, 0, 1]\r\n );\r\n\r\n out[0] = tangent[0];\r\n out[1] = tangent[1];\r\n out[2] = tangent[2];\r\n out[3] = bitangent[0];\r\n out[4] = bitangent[1];\r\n out[5] = bitangent[2];\r\n out[6] = normal[0];\r\n out[7] = normal[1];\r\n out[8] = normal[2];\r\n}\r\n\r\nfunction closestPointOnTriangle(\r\n px: number,\r\n py: number,\r\n pz: number,\r\n ax: number,\r\n ay: number,\r\n az: number,\r\n bx: number,\r\n by: number,\r\n bz: number,\r\n cx: number,\r\n cy: number,\r\n cz: number,\r\n closestOut: Float32Array<ArrayBuffer> | number[],\r\n baryOut: Float32Array<ArrayBuffer> | number[]\r\n) {\r\n const abx = bx - ax;\r\n const aby = by - ay;\r\n const abz = bz - az;\r\n const acx = cx - ax;\r\n const acy = cy - ay;\r\n const acz = cz - az;\r\n const apx = px - ax;\r\n const apy = py - ay;\r\n const apz = pz - az;\r\n const d1 = dot3(abx, aby, abz, apx, apy, apz);\r\n const d2 = dot3(acx, acy, acz, apx, apy, apz);\r\n if (d1 <= 0 && d2 <= 0) {\r\n closestOut[0] = ax;\r\n closestOut[1] = ay;\r\n closestOut[2] = az;\r\n baryOut[0] = 1;\r\n baryOut[1] = 0;\r\n baryOut[2] = 0;\r\n } else {\r\n const bpx = px - bx;\r\n const bpy = py - by;\r\n const bpz = pz - bz;\r\n const d3 = dot3(abx, aby, abz, bpx, bpy, bpz);\r\n const d4 = dot3(acx, acy, acz, bpx, bpy, bpz);\r\n if (d3 >= 0 && d4 <= d3) {\r\n closestOut[0] = bx;\r\n closestOut[1] = by;\r\n closestOut[2] = bz;\r\n baryOut[0] = 0;\r\n baryOut[1] = 1;\r\n baryOut[2] = 0;\r\n } else {\r\n const vc = d1 * d4 - d3 * d2;\r\n if (vc <= 0 && d1 >= 0 && d3 <= 0) {\r\n const v = d1 / Math.max(WRAP_MIN_DISTANCE, d1 - d3);\r\n closestOut[0] = ax + abx * v;\r\n closestOut[1] = ay + aby * v;\r\n closestOut[2] = az + abz * v;\r\n baryOut[0] = 1 - v;\r\n baryOut[1] = v;\r\n baryOut[2] = 0;\r\n } else {\r\n const cpx = px - cx;\r\n const cpy = py - cy;\r\n const cpz = pz - cz;\r\n const d5 = dot3(abx, aby, abz, cpx, cpy, cpz);\r\n const d6 = dot3(acx, acy, acz, cpx, cpy, cpz);\r\n if (d6 >= 0 && d5 <= d6) {\r\n closestOut[0] = cx;\r\n closestOut[1] = cy;\r\n closestOut[2] = cz;\r\n baryOut[0] = 0;\r\n baryOut[1] = 0;\r\n baryOut[2] = 1;\r\n } else {\r\n const vb = d5 * d2 - d1 * d6;\r\n if (vb <= 0 && d2 >= 0 && d6 <= 0) {\r\n const w = d2 / Math.max(WRAP_MIN_DISTANCE, d2 - d6);\r\n closestOut[0] = ax + acx * w;\r\n closestOut[1] = ay + acy * w;\r\n closestOut[2] = az + acz * w;\r\n baryOut[0] = 1 - w;\r\n baryOut[1] = 0;\r\n baryOut[2] = w;\r\n } else {\r\n const va = d3 * d6 - d5 * d4;\r\n if (va <= 0 && d4 - d3 >= 0 && d5 - d6 >= 0) {\r\n const w = (d4 - d3) / Math.max(WRAP_MIN_DISTANCE, d4 - d3 + d5 - d6);\r\n closestOut[0] = bx + (cx - bx) * w;\r\n closestOut[1] = by + (cy - by) * w;\r\n closestOut[2] = bz + (cz - bz) * w;\r\n baryOut[0] = 0;\r\n baryOut[1] = 1 - w;\r\n baryOut[2] = w;\r\n } else {\r\n const denom = 1 / Math.max(WRAP_MIN_DISTANCE, va + vb + vc);\r\n const v = vb * denom;\r\n const w = vc * denom;\r\n const u = 1 - v - w;\r\n closestOut[0] = ax * u + bx * v + cx * w;\r\n closestOut[1] = ay * u + by * v + cy * w;\r\n closestOut[2] = az * u + bz * v + cz * w;\r\n baryOut[0] = u;\r\n baryOut[1] = v;\r\n baryOut[2] = w;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n const dx = px - closestOut[0];\r\n const dy = py - closestOut[1];\r\n const dz = pz - closestOut[2];\r\n return dx * dx + dy * dy + dz * dz;\r\n}\r\n\r\nfunction buildPinWeightArray(\r\n positions: Float32Array<ArrayBuffer>,\r\n explicitWeights?: ArrayLike<number>,\r\n explicitPinned?: number[]\r\n): Float32Array<ArrayBuffer> {\r\n const vertexCount = (positions.length / 3) >> 0;\r\n const result = new Float32Array(vertexCount);\r\n if (explicitWeights && explicitWeights.length > 0) {\r\n const len = Math.min(vertexCount, explicitWeights.length);\r\n for (let i = 0; i < len; i++) {\r\n result[i] = clamp(Number(explicitWeights[i]) || 0, 0, 1);\r\n }\r\n return result;\r\n }\r\n if (explicitPinned && explicitPinned.length > 0) {\r\n for (const i of explicitPinned) {\r\n if (Number.isFinite(i) && i >= 0 && i < vertexCount) {\r\n result[i >> 0] = 1;\r\n }\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nfunction buildNeighborData(\r\n positions: Float32Array<ArrayBuffer>,\r\n indexData: Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>,\r\n maxNeighbors: number\r\n) {\r\n const vertexCount = (positions.length / 3) >> 0;\r\n const neighborMap: Array<Map<number, number>> = Array.from({ length: vertexCount }, () => new Map());\r\n\r\n const addEdge = (a: number, b: number) => {\r\n if (a < 0 || b < 0 || a >= vertexCount || b >= vertexCount || a === b) {\r\n return;\r\n }\r\n const len = distance3(positions, a, b);\r\n const mapA = neighborMap[a];\r\n const mapB = neighborMap[b];\r\n const oldAB = mapA.get(b);\r\n if (oldAB === undefined || len < oldAB) {\r\n mapA.set(b, len);\r\n }\r\n const oldBA = mapB.get(a);\r\n if (oldBA === undefined || len < oldBA) {\r\n mapB.set(a, len);\r\n }\r\n };\r\n\r\n for (let i = 0; i + 2 < indexData.length; i += 3) {\r\n const a = indexData[i];\r\n const b = indexData[i + 1];\r\n const c = indexData[i + 2];\r\n addEdge(a, b);\r\n addEdge(b, c);\r\n addEdge(c, a);\r\n }\r\n\r\n const totalEntries = vertexCount * maxNeighbors;\r\n const neighborIndices = new Int32Array(totalEntries);\r\n const restLengths = new Float32Array(totalEntries);\r\n neighborIndices.fill(-1);\r\n\r\n let hasConstraint = false;\r\n for (let i = 0; i < vertexCount; i++) {\r\n const sorted = [...neighborMap[i].entries()].sort((a, b) => a[1] - b[1]).slice(0, maxNeighbors);\r\n for (let j = 0; j < sorted.length; j++) {\r\n const slot = i * maxNeighbors + j;\r\n neighborIndices[slot] = sorted[j][0];\r\n restLengths[slot] = sorted[j][1];\r\n hasConstraint = true;\r\n }\r\n }\r\n\r\n return {\r\n neighborIndices,\r\n restLengths,\r\n hasConstraint\r\n };\r\n}\r\n\r\nfunction toUInt32Indices(indexData: Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>) {\r\n if (indexData instanceof Uint32Array) {\r\n return indexData;\r\n }\r\n const out = new Uint32Array(indexData.length);\r\n for (let i = 0; i < indexData.length; i++) {\r\n out[i] = indexData[i];\r\n }\r\n return out;\r\n}\r\n\r\nfunction buildVertexTriangleAdjacency(\r\n vertexCount: number,\r\n indexData: Uint32Array<ArrayBuffer>,\r\n maxTrianglesPerVertex: number\r\n) {\r\n const triangleCount = (indexData.length / 3) >> 0;\r\n const trianglesPerVertex: number[][] = Array.from({ length: vertexCount }, () => []);\r\n for (let tri = 0; tri < triangleCount; tri++) {\r\n const base = tri * 3;\r\n const i0 = indexData[base];\r\n const i1 = indexData[base + 1];\r\n const i2 = indexData[base + 2];\r\n if (i0 < vertexCount) {\r\n trianglesPerVertex[i0].push(tri);\r\n }\r\n if (i1 < vertexCount) {\r\n trianglesPerVertex[i1].push(tri);\r\n }\r\n if (i2 < vertexCount) {\r\n trianglesPerVertex[i2].push(tri);\r\n }\r\n }\r\n const adjacency = new Int32Array(vertexCount * maxTrianglesPerVertex);\r\n adjacency.fill(-1);\r\n for (let i = 0; i < vertexCount; i++) {\r\n const tris = trianglesPerVertex[i];\r\n const len = Math.min(maxTrianglesPerVertex, tris.length);\r\n for (let t = 0; t < len; t++) {\r\n adjacency[i * maxTrianglesPerVertex + t] = tris[t];\r\n }\r\n }\r\n return {\r\n triangleCount,\r\n adjacency\r\n };\r\n}\r\n\r\nfunction buildInitialSimulationPositions(options?: GPUClothSystemOptions) {\r\n const sourcePositions = options?.positionData;\r\n if (!sourcePositions) {\r\n return null;\r\n }\r\n const target = options?.collisionSpaceNode;\r\n const blendIndices = options?.skinningBlendIndices;\r\n const blendWeights = options?.skinningBlendWeights;\r\n if (\r\n !target?.invWorldMatrix ||\r\n !blendIndices ||\r\n !blendWeights ||\r\n typeof target?.findSkeletonById !== 'function'\r\n ) {\r\n return new Float32Array(sourcePositions);\r\n }\r\n const skeletonId = String(target.skeletonName ?? '');\r\n const skeleton = skeletonId ? target.findSkeletonById(skeletonId) : null;\r\n if (!skeleton?.skinPositionsToLocal) {\r\n return new Float32Array(sourcePositions);\r\n }\r\n return skeleton.skinPositionsToLocal(sourcePositions, blendIndices, blendWeights, target.invWorldMatrix);\r\n}\r\n\r\nasync function resolveWrapBindPositions(\r\n mesh: any,\r\n basePositions: Float32Array<ArrayBuffer>\r\n): Promise<Float32Array<ArrayBuffer>> {\r\n if (!basePositions || basePositions.length === 0) {\r\n return new Float32Array(0);\r\n }\r\n const primitive = mesh?.primitive;\r\n if (!primitive) {\r\n return new Float32Array(basePositions);\r\n }\r\n const blendData = await readSkinningDataFromPrimitive(primitive);\r\n if (\r\n !mesh?.invWorldMatrix ||\r\n !blendData?.blendIndices ||\r\n !blendData?.blendWeights ||\r\n typeof mesh?.findSkeletonById !== 'function'\r\n ) {\r\n return new Float32Array(basePositions);\r\n }\r\n const skeletonId = String(mesh.skeletonName ?? '');\r\n const skeleton = skeletonId ? mesh.findSkeletonById(skeletonId) : null;\r\n if (!skeleton?.skinPositionsToLocal) {\r\n return new Float32Array(basePositions);\r\n }\r\n return skeleton.skinPositionsToLocal(\r\n basePositions,\r\n blendData.blendIndices,\r\n blendData.blendWeights,\r\n mesh.invWorldMatrix\r\n );\r\n}\r\n\r\nfunction createIntegrateProgram(device: AbstractDevice, workgroupSize: number) {\r\n const program = device.buildComputeProgram({\r\n workgroupSize: [workgroupSize, 1, 1],\r\n compute(pb) {\r\n this.positions = pb.float[0]().storageBuffer(0);\r\n this.prevPositions = pb.float[0]().storageBuffer(0);\r\n this.restPositions = pb.float[0]().storageBufferReadonly(0);\r\n this.prevRestPositions = pb.float[0]().storageBufferReadonly(0);\r\n this.invMass = pb.float[0]().storageBufferReadonly(0);\r\n this.sphereData = pb.float[0]().storageBufferReadonly(0);\r\n this.capsuleData = pb.float[0]().storageBufferReadonly(0);\r\n this.planeData = pb.float[0]().storageBufferReadonly(0);\r\n this.vertexCount = pb.uint().uniform(0);\r\n this.deltaTime = pb.float().uniform(0);\r\n this.damping = pb.float().uniform(0);\r\n this.gravity = pb.vec3().uniform(0);\r\n this.sphereCount = pb.uint().uniform(0);\r\n this.capsuleCount = pb.uint().uniform(0);\r\n this.planeCount = pb.uint().uniform(0);\r\n this.dynamicFriction = pb.float().uniform(0);\r\n this.staticFriction = pb.float().uniform(0);\r\n this.minDistance = pb.float().uniform(0);\r\n pb.main(function () {\r\n this.$l.index = this.$builtins.globalInvocationId.x;\r\n this.$if(pb.lessThan(this.index, this.vertexCount), function () {\r\n this.$l.base = pb.mul(this.index, 3);\r\n this.$l.x = this.positions.at(this.base);\r\n this.$l.y = this.positions.at(pb.add(this.base, 1));\r\n this.$l.z = this.positions.at(pb.add(this.base, 2));\r\n this.$l.px = this.prevPositions.at(this.base);\r\n this.$l.py = this.prevPositions.at(pb.add(this.base, 1));\r\n this.$l.pz = this.prevPositions.at(pb.add(this.base, 2));\r\n this.$l.restX = this.restPositions.at(this.base);\r\n this.$l.restY = this.restPositions.at(pb.add(this.base, 1));\r\n this.$l.restZ = this.restPositions.at(pb.add(this.base, 2));\r\n this.$l.prevRestX = this.prevRestPositions.at(this.base);\r\n this.$l.prevRestY = this.prevRestPositions.at(pb.add(this.base, 1));\r\n this.$l.prevRestZ = this.prevRestPositions.at(pb.add(this.base, 2));\r\n this.$l.freeWeight = this.invMass.at(this.index);\r\n this.$l.pinWeight = pb.sub(1, this.freeWeight);\r\n this.$l.current = pb.vec3(this.x, this.y, this.z);\r\n this.$l.previous = pb.vec3(this.px, this.py, this.pz);\r\n this.$l.rest = pb.vec3(this.restX, this.restY, this.restZ);\r\n this.$l.prevRest = pb.vec3(this.prevRestX, this.prevRestY, this.prevRestZ);\r\n this.$l.restDelta = pb.sub(this.rest, this.prevRest);\r\n this.current = pb.add(this.current, this.restDelta);\r\n this.previous = pb.add(this.previous, this.restDelta);\r\n this.$l.dt2 = pb.mul(this.deltaTime, this.deltaTime);\r\n // Damping is modeled as velocity loss strength: 0 keeps full inertia, 1 removes it entirely.\r\n this.$l.velocity = pb.mul(\r\n pb.sub(this.current, this.previous),\r\n pb.mul(pb.sub(1, this.damping), this.freeWeight)\r\n );\r\n this.$l.next = pb.add(\r\n this.current,\r\n this.velocity,\r\n pb.mul(this.gravity, pb.mul(this.dt2, this.freeWeight))\r\n );\r\n\r\n this.$if(pb.greaterThan(this.freeWeight, this.minDistance), function () {\r\n this.$for(pb.uint('i'), 0, this.sphereCount, function () {\r\n this.$l.sphereBase = pb.mul(this.i, 4);\r\n this.$l.center = pb.vec3(\r\n this.sphereData.at(this.sphereBase),\r\n this.sphereData.at(pb.add(this.sphereBase, 1)),\r\n this.sphereData.at(pb.add(this.sphereBase, 2))\r\n );\r\n this.$l.radius = this.sphereData.at(pb.add(this.sphereBase, 3));\r\n this.$l.deltaCol = pb.sub(this.next, this.center);\r\n this.$l.lenCol = pb.length(this.deltaCol);\r\n this.$if(pb.lessThan(this.lenCol, this.radius), function () {\r\n this.$l.contactNormal = pb.vec3(0, 1, 0);\r\n this.$if(pb.greaterThan(this.lenCol, this.minDistance), function () {\r\n this.contactNormal = pb.div(this.deltaCol, this.lenCol);\r\n this.next = pb.add(this.center, pb.mul(this.contactNormal, this.radius));\r\n }).$else(function () {\r\n this.next = pb.add(this.center, pb.vec3(0, this.radius, 0));\r\n });\r\n this.$l.correctionDelta = pb.sub(this.next, pb.add(this.center, this.deltaCol));\r\n this.$l.correctionLen = pb.length(this.correctionDelta);\r\n this.$l.surfaceDelta = pb.sub(this.next, this.current);\r\n this.$l.normalStep = pb.mul(\r\n this.contactNormal,\r\n pb.dot(this.surfaceDelta, this.contactNormal)\r\n );\r\n this.$l.tangentStep = pb.sub(this.surfaceDelta, this.normalStep);\r\n this.$l.normalTravel = pb.length(this.normalStep);\r\n this.$l.tangentLen = pb.length(this.tangentStep);\r\n this.$if(pb.greaterThan(this.tangentLen, this.minDistance), function () {\r\n this.$l.dynamicBasis = pb.max(\r\n this.correctionLen,\r\n pb.max(this.normalTravel, pb.mul(this.tangentLen, 0.5))\r\n );\r\n this.$l.staticBasis = pb.max(\r\n this.correctionLen,\r\n pb.max(this.normalTravel, this.tangentLen)\r\n );\r\n this.$l.staticLimit = pb.max(\r\n this.minDistance,\r\n pb.mul(this.staticBasis, pb.mul(this.staticFriction, 2))\r\n );\r\n this.$if(pb.lessThanEqual(this.tangentLen, this.staticLimit), function () {\r\n this.next = pb.sub(this.next, this.tangentStep);\r\n }).$else(function () {\r\n this.$l.dynamicRemove = pb.min(\r\n this.tangentLen,\r\n pb.mul(this.dynamicBasis, this.dynamicFriction)\r\n );\r\n this.next = pb.sub(\r\n this.next,\r\n pb.mul(pb.div(this.tangentStep, this.tangentLen), this.dynamicRemove)\r\n );\r\n });\r\n });\r\n });\r\n });\r\n\r\n this.$for(pb.uint('j'), 0, this.capsuleCount, function () {\r\n this.$l.capsuleBase = pb.mul(this.j, 8);\r\n this.$l.cStart = pb.vec3(\r\n this.capsuleData.at(this.capsuleBase),\r\n this.capsuleData.at(pb.add(this.capsuleBase, 1)),\r\n this.capsuleData.at(pb.add(this.capsuleBase, 2))\r\n );\r\n this.$l.cRadius = this.capsuleData.at(pb.add(this.capsuleBase, 3));\r\n this.$l.cEnd = pb.vec3(\r\n this.capsuleData.at(pb.add(this.capsuleBase, 4)),\r\n this.capsuleData.at(pb.add(this.capsuleBase, 5)),\r\n this.capsuleData.at(pb.add(this.capsuleBase, 6))\r\n );\r\n this.$l.ab = pb.sub(this.cEnd, this.cStart);\r\n this.$l.abLen2 = pb.dot(this.ab, this.ab);\r\n this.$l.closest = this.cStart;\r\n this.$if(pb.greaterThan(this.abLen2, this.minDistance), function () {\r\n this.$l.ap = pb.sub(this.next, this.cStart);\r\n this.$l.t = pb.clamp(pb.div(pb.dot(this.ap, this.ab), this.abLen2), 0, 1);\r\n this.closest = pb.add(this.cStart, pb.mul(this.ab, this.t));\r\n });\r\n this.$l.deltaCap = pb.sub(this.next, this.closest);\r\n this.$l.lenCap = pb.length(this.deltaCap);\r\n this.$if(pb.lessThan(this.lenCap, this.cRadius), function () {\r\n this.$l.contactNormal = pb.vec3(0, 1, 0);\r\n this.$if(pb.greaterThan(this.lenCap, this.minDistance), function () {\r\n this.contactNormal = pb.div(this.deltaCap, this.lenCap);\r\n this.next = pb.add(this.closest, pb.mul(this.contactNormal, this.cRadius));\r\n }).$else(function () {\r\n this.next = pb.add(this.closest, pb.vec3(0, this.cRadius, 0));\r\n });\r\n this.$l.correctionDelta = pb.sub(this.next, pb.add(this.closest, this.deltaCap));\r\n this.$l.correctionLen = pb.length(this.correctionDelta);\r\n this.$l.surfaceDelta = pb.sub(this.next, this.current);\r\n this.$l.normalStep = pb.mul(\r\n this.contactNormal,\r\n pb.dot(this.surfaceDelta, this.contactNormal)\r\n );\r\n this.$l.tangentStep = pb.sub(this.surfaceDelta, this.normalStep);\r\n this.$l.normalTravel = pb.length(this.normalStep);\r\n this.$l.tangentLen = pb.length(this.tangentStep);\r\n this.$if(pb.greaterThan(this.tangentLen, this.minDistance), function () {\r\n this.$l.dynamicBasis = pb.max(\r\n this.correctionLen,\r\n pb.max(this.normalTravel, pb.mul(this.tangentLen, 0.5))\r\n );\r\n this.$l.staticBasis = pb.max(\r\n this.correctionLen,\r\n pb.max(this.normalTravel, this.tangentLen)\r\n );\r\n this.$l.staticLimit = pb.max(\r\n this.minDistance,\r\n pb.mul(this.staticBasis, pb.mul(this.staticFriction, 2))\r\n );\r\n this.$if(pb.lessThanEqual(this.tangentLen, this.staticLimit), function () {\r\n this.next = pb.sub(this.next, this.tangentStep);\r\n }).$else(function () {\r\n this.$l.dynamicRemove = pb.min(\r\n this.tangentLen,\r\n pb.mul(this.dynamicBasis, this.dynamicFriction)\r\n );\r\n this.next = pb.sub(\r\n this.next,\r\n pb.mul(pb.div(this.tangentStep, this.tangentLen), this.dynamicRemove)\r\n );\r\n });\r\n });\r\n });\r\n });\r\n\r\n this.$for(pb.uint('k'), 0, this.planeCount, function () {\r\n this.$l.planeBase = pb.mul(this.k, 8);\r\n this.$l.planePoint = pb.vec3(\r\n this.planeData.at(this.planeBase),\r\n this.planeData.at(pb.add(this.planeBase, 1)),\r\n this.planeData.at(pb.add(this.planeBase, 2))\r\n );\r\n this.$l.planeNormal = pb.vec3(\r\n this.planeData.at(pb.add(this.planeBase, 4)),\r\n this.planeData.at(pb.add(this.planeBase, 5)),\r\n this.planeData.at(pb.add(this.planeBase, 6))\r\n );\r\n this.$l.planeDistance = pb.dot(pb.sub(this.next, this.planePoint), this.planeNormal);\r\n this.$if(pb.lessThan(this.planeDistance, 0), function () {\r\n this.$l.contactNormal = this.planeNormal;\r\n this.$l.preProject = this.next;\r\n this.next = pb.sub(this.next, pb.mul(this.contactNormal, this.planeDistance));\r\n this.$l.correctionDelta = pb.sub(this.next, this.preProject);\r\n this.$l.correctionLen = pb.length(this.correctionDelta);\r\n this.$l.surfaceDelta = pb.sub(this.next, this.current);\r\n this.$l.normalStep = pb.mul(\r\n this.contactNormal,\r\n pb.dot(this.surfaceDelta, this.contactNormal)\r\n );\r\n this.$l.tangentStep = pb.sub(this.surfaceDelta, this.normalStep);\r\n this.$l.normalTravel = pb.length(this.normalStep);\r\n this.$l.tangentLen = pb.length(this.tangentStep);\r\n this.$if(pb.greaterThan(this.tangentLen, this.minDistance), function () {\r\n this.$l.dynamicBasis = pb.max(\r\n this.correctionLen,\r\n pb.max(this.normalTravel, pb.mul(this.tangentLen, 0.5))\r\n );\r\n this.$l.staticBasis = pb.max(\r\n this.correctionLen,\r\n pb.max(this.normalTravel, this.tangentLen)\r\n );\r\n this.$l.staticLimit = pb.max(\r\n this.minDistance,\r\n pb.mul(this.staticBasis, pb.mul(this.staticFriction, 2))\r\n );\r\n this.$if(pb.lessThanEqual(this.tangentLen, this.staticLimit), function () {\r\n this.next = pb.sub(this.next, this.tangentStep);\r\n }).$else(function () {\r\n this.$l.dynamicRemove = pb.min(\r\n this.tangentLen,\r\n pb.mul(this.dynamicBasis, this.dynamicFriction)\r\n );\r\n this.next = pb.sub(\r\n this.next,\r\n pb.mul(pb.div(this.tangentStep, this.tangentLen), this.dynamicRemove)\r\n );\r\n });\r\n });\r\n });\r\n });\r\n });\r\n\r\n this.next = pb.add(pb.mul(this.next, this.freeWeight), pb.mul(this.rest, this.pinWeight));\r\n this.$l.prevOut = pb.add(pb.mul(this.current, this.freeWeight), pb.mul(this.rest, this.pinWeight));\r\n this.prevPositions.setAt(this.base, this.prevOut.x);\r\n this.prevPositions.setAt(pb.add(this.base, 1), this.prevOut.y);\r\n this.prevPositions.setAt(pb.add(this.base, 2), this.prevOut.z);\r\n this.positions.setAt(this.base, this.next.x);\r\n this.positions.setAt(pb.add(this.base, 1), this.next.y);\r\n this.positions.setAt(pb.add(this.base, 2), this.next.z);\r\n });\r\n });\r\n }\r\n });\r\n if (program) {\r\n program.name = '@GPUCloth_Integrate';\r\n }\r\n return program;\r\n}\r\n\r\nfunction createConstraintProgram(device: AbstractDevice, workgroupSize: number) {\r\n const program = device.buildComputeProgram({\r\n workgroupSize: [workgroupSize, 1, 1],\r\n compute(pb) {\r\n this.positions = pb.float[0]().storageBuffer(0);\r\n this.restPositions = pb.float[0]().storageBufferReadonly(0);\r\n this.invMass = pb.float[0]().storageBufferReadonly(0);\r\n this.neighborIndices = pb.int[0]().storageBufferReadonly(0);\r\n this.restLengths = pb.float[0]().storageBufferReadonly(0);\r\n this.sphereData = pb.float[0]().storageBufferReadonly(0);\r\n this.capsuleData = pb.float[0]().storageBufferReadonly(0);\r\n this.planeData = pb.float[0]().storageBufferReadonly(0);\r\n this.vertexCount = pb.uint().uniform(0);\r\n this.maxNeighbors = pb.uint().uniform(0);\r\n this.stiffness = pb.float().uniform(0);\r\n this.poseFollow = pb.float().uniform(0);\r\n this.sphereCount = pb.uint().uniform(0);\r\n this.capsuleCount = pb.uint().uniform(0);\r\n this.planeCount = pb.uint().uniform(0);\r\n this.dynamicFriction = pb.float().uniform(0);\r\n this.staticFriction = pb.float().uniform(0);\r\n this.minDistance = pb.float().uniform(0);\r\n pb.main(function () {\r\n this.$l.index = this.$builtins.globalInvocationId.x;\r\n this.$if(pb.lessThan(this.index, this.vertexCount), function () {\r\n this.$l.freeWeight = this.invMass.at(this.index);\r\n this.$l.pinWeight = pb.sub(1, this.freeWeight);\r\n this.$l.base = pb.mul(this.index, 3);\r\n this.$l.rest = pb.vec3(\r\n this.restPositions.at(this.base),\r\n this.restPositions.at(pb.add(this.base, 1)),\r\n this.restPositions.at(pb.add(this.base, 2))\r\n );\r\n this.$if(pb.greaterThan(this.freeWeight, this.minDistance), function () {\r\n this.$l.pos = pb.vec3(\r\n this.positions.at(this.base),\r\n this.positions.at(pb.add(this.base, 1)),\r\n this.positions.at(pb.add(this.base, 2))\r\n );\r\n this.$l.correction = pb.vec3(0);\r\n this.$l.validCount = pb.uint(0);\r\n this.$l.neighborStart = pb.mul(this.index, this.maxNeighbors);\r\n this.$for(pb.uint('i'), 0, this.maxNeighbors, function () {\r\n this.$l.slot = pb.add(this.neighborStart, this.i);\r\n this.$l.neighbor = this.neighborIndices.at(this.slot);\r\n this.$if(pb.greaterThanEqual(this.neighbor, 0), function () {\r\n this.$l.neighborBase = pb.mul(pb.uint(this.neighbor), 3);\r\n this.$l.neighborPos = pb.vec3(\r\n this.positions.at(this.neighborBase),\r\n this.positions.at(pb.add(this.neighborBase, 1)),\r\n this.positions.at(pb.add(this.neighborBase, 2))\r\n );\r\n this.$l.restLength = this.restLengths.at(this.slot);\r\n this.$l.delta = pb.sub(this.pos, this.neighborPos);\r\n this.$l.len = pb.length(this.delta);\r\n this.$if(pb.greaterThan(this.len, this.minDistance), function () {\r\n this.$l.offset = pb.mul(pb.div(this.delta, this.len), pb.sub(this.len, this.restLength));\r\n this.correction = pb.add(this.correction, this.offset);\r\n this.validCount = pb.add(this.validCount, 1);\r\n });\r\n });\r\n });\r\n this.$l.corrected = this.pos;\r\n this.$if(pb.greaterThan(this.validCount, 0), function () {\r\n this.$l.scale = pb.div(pb.mul(this.stiffness, this.freeWeight), pb.float(this.validCount));\r\n this.corrected = pb.sub(this.pos, pb.mul(this.correction, this.scale));\r\n });\r\n this.$if(pb.greaterThan(this.poseFollow, this.minDistance), function () {\r\n this.$l.followStrength = pb.mul(this.poseFollow, this.freeWeight);\r\n this.corrected = pb.add(\r\n this.corrected,\r\n pb.mul(pb.sub(this.rest, this.corrected), this.followStrength)\r\n );\r\n });\r\n this.corrected = pb.add(\r\n pb.mul(this.corrected, this.freeWeight),\r\n pb.mul(this.rest, this.pinWeight)\r\n );\r\n this.$for(pb.uint('i'), 0, this.sphereCount, function () {\r\n this.$l.sphereBase = pb.mul(this.i, 4);\r\n this.$l.center = pb.vec3(\r\n this.sphereData.at(this.sphereBase),\r\n this.sphereData.at(pb.add(this.sphereBase, 1)),\r\n this.sphereData.at(pb.add(this.sphereBase, 2))\r\n );\r\n this.$l.radius = this.sphereData.at(pb.add(this.sphereBase, 3));\r\n this.$l.deltaCol = pb.sub(this.corrected, this.center);\r\n this.$l.lenCol = pb.length(this.deltaCol);\r\n this.$if(pb.lessThan(this.lenCol, this.radius), function () {\r\n this.$if(pb.greaterThan(this.lenCol, this.minDistance), function () {\r\n this.corrected = pb.add(\r\n this.center,\r\n pb.mul(pb.div(this.deltaCol, this.lenCol), this.radius)\r\n );\r\n }).$else(function () {\r\n this.corrected = pb.add(this.center, pb.vec3(0, this.radius, 0));\r\n });\r\n });\r\n });\r\n this.$for(pb.uint('j'), 0, this.capsuleCount, function () {\r\n this.$l.capsuleBase = pb.mul(this.j, 8);\r\n this.$l.cStart = pb.vec3(\r\n this.capsuleData.at(this.capsuleBase),\r\n this.capsuleData.at(pb.add(this.capsuleBase, 1)),\r\n this.capsuleData.at(pb.add(this.capsuleBase, 2))\r\n );\r\n this.$l.cRadius = this.capsuleData.at(pb.add(this.capsuleBase, 3));\r\n this.$l.cEnd = pb.vec3(\r\n this.capsuleData.at(pb.add(this.capsuleBase, 4)),\r\n this.capsuleData.at(pb.add(this.capsuleBase, 5)),\r\n this.capsuleData.at(pb.add(this.capsuleBase, 6))\r\n );\r\n this.$l.ab = pb.sub(this.cEnd, this.cStart);\r\n this.$l.abLen2 = pb.dot(this.ab, this.ab);\r\n this.$l.closest = this.cStart;\r\n this.$if(pb.greaterThan(this.abLen2, this.minDistance), function () {\r\n this.$l.ap = pb.sub(this.corrected, this.cStart);\r\n this.$l.t = pb.clamp(pb.div(pb.dot(this.ap, this.ab), this.abLen2), 0, 1);\r\n this.closest = pb.add(this.cStart, pb.mul(this.ab, this.t));\r\n });\r\n this.$l.deltaCap = pb.sub(this.corrected, this.closest);\r\n this.$l.lenCap = pb.length(this.deltaCap);\r\n this.$if(pb.lessThan(this.lenCap, this.cRadius), function () {\r\n this.$if(pb.greaterThan(this.lenCap, this.minDistance), function () {\r\n this.corrected = pb.add(\r\n this.closest,\r\n pb.mul(pb.div(this.deltaCap, this.lenCap), this.cRadius)\r\n );\r\n }).$else(function () {\r\n this.corrected = pb.add(this.closest, pb.vec3(0, this.cRadius, 0));\r\n });\r\n });\r\n });\r\n this.$for(pb.uint('k'), 0, this.planeCount, function () {\r\n this.$l.planeBase = pb.mul(this.k, 8);\r\n this.$l.planePoint = pb.vec3(\r\n this.planeData.at(this.planeBase),\r\n this.planeData.at(pb.add(this.planeBase, 1)),\r\n this.planeData.at(pb.add(this.planeBase, 2))\r\n );\r\n this.$l.planeNormal = pb.vec3(\r\n this.planeData.at(pb.add(this.planeBase, 4)),\r\n this.planeData.at(pb.add(this.planeBase, 5)),\r\n this.planeData.at(pb.add(this.planeBase, 6))\r\n );\r\n this.$l.planeDistance = pb.dot(pb.sub(this.corrected, this.planePoint), this.planeNormal);\r\n this.$if(pb.lessThan(this.planeDistance, 0), function () {\r\n this.corrected = pb.sub(this.corrected, pb.mul(this.planeNormal, this.planeDistance));\r\n });\r\n });\r\n this.positions.setAt(this.base, this.corrected.x);\r\n this.positions.setAt(pb.add(this.base, 1), this.corrected.y);\r\n this.positions.setAt(pb.add(this.base, 2), this.corrected.z);\r\n }).$else(function () {\r\n this.positions.setAt(this.base, this.rest.x);\r\n this.positions.setAt(pb.add(this.base, 1), this.rest.y);\r\n this.positions.setAt(pb.add(this.base, 2), this.rest.z);\r\n });\r\n });\r\n });\r\n }\r\n });\r\n if (program) {\r\n program.name = '@GPUCloth_Constraint';\r\n }\r\n return program;\r\n}\r\n\r\nfunction createFaceNormalProgram(device: AbstractDevice, workgroupSize: number) {\r\n const program = device.buildComputeProgram({\r\n workgroupSize: [workgroupSize, 1, 1],\r\n compute(pb) {\r\n this.positions = pb.float[0]().storageBufferReadonly(0);\r\n this.triangleIndices = pb.uint[0]().storageBufferReadonly(0);\r\n this.triangleNormals = pb.float[0]().storageBuffer(0);\r\n this.triangleCount = pb.uint().uniform(0);\r\n this.minDistance = pb.float().uniform(0);\r\n pb.main(function () {\r\n this.$l.tri = this.$builtins.globalInvocationId.x;\r\n this.$if(pb.lessThan(this.tri, this.triangleCount), function () {\r\n this.$l.indexBase = pb.mul(this.tri, 3);\r\n this.$l.i0 = this.triangleIndices.at(this.indexBase);\r\n this.$l.i1 = this.triangleIndices.at(pb.add(this.indexBase, 1));\r\n this.$l.i2 = this.triangleIndices.at(pb.add(this.indexBase, 2));\r\n this.$l.p0Base = pb.mul(this.i0, 3);\r\n this.$l.p1Base = pb.mul(this.i1, 3);\r\n this.$l.p2Base = pb.mul(this.i2, 3);\r\n this.$l.p0 = pb.vec3(\r\n this.positions.at(this.p0Base),\r\n this.positions.at(pb.add(this.p0Base, 1)),\r\n this.positions.at(pb.add(this.p0Base, 2))\r\n );\r\n this.$l.p1 = pb.vec3(\r\n this.positions.at(this.p1Base),\r\n this.positions.at(pb.add(this.p1Base, 1)),\r\n this.positions.at(pb.add(this.p1Base, 2))\r\n );\r\n this.$l.p2 = pb.vec3(\r\n this.positions.at(this.p2Base),\r\n this.positions.at(pb.add(this.p2Base, 1)),\r\n this.positions.at(pb.add(this.p2Base, 2))\r\n );\r\n this.$l.n = pb.cross(pb.sub(this.p1, this.p0), pb.sub(this.p2, this.p0));\r\n this.$l.nLen = pb.length(this.n);\r\n this.$if(pb.greaterThan(this.nLen, this.minDistance), function () {\r\n this.n = pb.div(this.n, this.nLen);\r\n }).$else(function () {\r\n this.n = pb.vec3(0, 1, 0);\r\n });\r\n this.$l.outBase = pb.mul(this.tri, 3);\r\n this.triangleNormals.setAt(this.outBase, this.n.x);\r\n this.triangleNormals.setAt(pb.add(this.outBase, 1), this.n.y);\r\n this.triangleNormals.setAt(pb.add(this.outBase, 2), this.n.z);\r\n });\r\n });\r\n }\r\n });\r\n if (program) {\r\n program.name = '@GPUCloth_FaceNormal';\r\n }\r\n return program;\r\n}\r\n\r\nfunction createVertexNormalProgram(device: AbstractDevice, workgroupSize: number) {\r\n const program = device.buildComputeProgram({\r\n workgroupSize: [workgroupSize, 1, 1],\r\n compute(pb) {\r\n this.triangleNormals = pb.float[0]().storageBufferReadonly(0);\r\n this.vertexTriangleAdjacency = pb.int[0]().storageBufferReadonly(0);\r\n this.vertexNormals = pb.float[0]().storageBuffer(0);\r\n this.vertexCount = pb.uint().uniform(0);\r\n this.maxTrianglesPerVertex = pb.uint().uniform(0);\r\n this.minDistance = pb.float().uniform(0);\r\n pb.main(function () {\r\n this.$l.vertex = this.$builtins.globalInvocationId.x;\r\n this.$if(pb.lessThan(this.vertex, this.vertexCount), function () {\r\n this.$l.sum = pb.vec3(0);\r\n this.$l.valid = pb.uint(0);\r\n this.$l.start = pb.mul(this.vertex, this.maxTrianglesPerVertex);\r\n this.$for(pb.uint('i'), 0, this.maxTrianglesPerVertex, function () {\r\n this.$l.tri = this.vertexTriangleAdjacency.at(pb.add(this.start, this.i));\r\n this.$if(pb.greaterThanEqual(this.tri, 0), function () {\r\n this.$l.nBase = pb.mul(pb.uint(this.tri), 3);\r\n this.sum = pb.add(\r\n this.sum,\r\n pb.vec3(\r\n this.triangleNormals.at(this.nBase),\r\n this.triangleNormals.at(pb.add(this.nBase, 1)),\r\n this.triangleNormals.at(pb.add(this.nBase, 2))\r\n )\r\n );\r\n this.valid = pb.add(this.valid, 1);\r\n });\r\n });\r\n this.$if(pb.greaterThan(this.valid, 0), function () {\r\n this.sum = pb.div(this.sum, pb.float(this.valid));\r\n }).$else(function () {\r\n this.sum = pb.vec3(0, 1, 0);\r\n });\r\n this.$l.len = pb.length(this.sum);\r\n this.$if(pb.greaterThan(this.len, this.minDistance), function () {\r\n this.sum = pb.div(this.sum, this.len);\r\n }).$else(function () {\r\n this.sum = pb.vec3(0, 1, 0);\r\n });\r\n this.$l.outBase = pb.mul(this.vertex, 3);\r\n this.vertexNormals.setAt(this.outBase, this.sum.x);\r\n this.vertexNormals.setAt(pb.add(this.outBase, 1), this.sum.y);\r\n this.vertexNormals.setAt(pb.add(this.outBase, 2), this.sum.z);\r\n });\r\n });\r\n }\r\n });\r\n if (program) {\r\n program.name = '@GPUCloth_VertexNormal';\r\n }\r\n return program;\r\n}\r\n\r\nasync function readPositionDataFromPrimitive(primitive: Primitive) {\r\n const positions = await readVertexAttributeDataFromPrimitive(primitive, 'position', 3);\r\n if (!positions) {\r\n throw new Error('GPU cloth initialization failed: primitive has no position buffer.');\r\n }\r\n return positions;\r\n}\r\n\r\nasync function readVertexAttributeDataFromPrimitive(\r\n primitive: Primitive,\r\n semantic: 'position' | 'normal' | 'blendIndices' | 'blendWeights',\r\n componentCount: number\r\n) {\r\n const info = primitive.getVertexBufferInfo(semantic);\r\n if (!info || !info.type.isPrimitiveType() || info.type.cols < componentCount) {\r\n return null;\r\n }\r\n const vertexCount = primitive.getNumVertices();\r\n if (vertexCount <= 0) {\r\n return null;\r\n }\r\n const bytes = await info.buffer.getBufferSubData();\r\n const result = new Float32Array(vertexCount * componentCount);\r\n const scalarType = info.type.scalarType;\r\n const normalized = info.type.normalized;\r\n const componentByteSize = getPrimitiveScalarByteSize(scalarType);\r\n const baseByteOffset = info.drawOffset + info.offset;\r\n if (\r\n scalarType === PBPrimitiveType.F32 &&\r\n !normalized &&\r\n baseByteOffset % 4 === 0 &&\r\n info.stride % 4 === 0\r\n ) {\r\n const raw = new Float32Array(bytes.buffer, bytes.byteOffset, bytes.byteLength >> 2);\r\n const stride = info.stride >> 2;\r\n const srcOffset = baseByteOffset >> 2;\r\n for (let i = 0; i < vertexCount; i++) {\r\n const src = srcOffset + i * stride;\r\n const dst = i * componentCount;\r\n for (let c = 0; c < componentCount; c++) {\r\n result[dst + c] = raw[src + c];\r\n }\r\n }\r\n return result;\r\n }\r\n if (scalarType === PBPrimitiveType.F16) {\r\n throw new Error(`GPU cloth initialization failed: unsupported ${semantic} attribute format.`);\r\n }\r\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\r\n for (let i = 0; i < vertexCount; i++) {\r\n const src = baseByteOffset + i * info.stride;\r\n const dst = i * componentCount;\r\n for (let c = 0; c < componentCount; c++) {\r\n result[dst + c] = readPrimitiveScalar(view, src + c * componentByteSize, scalarType, normalized);\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nasync function readSkinningDataFromPrimitive(primitive: Primitive) {\r\n try {\r\n const [blendIndices, blendWeights] = await Promise.all([\r\n readVertexAttributeDataFromPrimitive(primitive, 'blendIndices', 4),\r\n readVertexAttributeDataFromPrimitive(primitive, 'blendWeights', 4)\r\n ]);\r\n if (!blendIndices || !blendWeights) {\r\n return null;\r\n }\r\n return { blendIndices, blendWeights };\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nfunction buildNonIndexedTriangles(primitive: Primitive, vertexCount: number) {\r\n if (primitive.primitiveType !== 'triangle-list') {\r\n throw new Error('GPU cloth initialization failed: only triangle-list primitive is supported.');\r\n }\r\n const start = primitive.indexStart;\r\n const count = primitive.indexCount;\r\n if (count <= 0 || count % 3 !== 0 || start < 0 || start + count > vertexCount) {\r\n throw new Error('GPU cloth initialization failed: invalid non-indexed triangle range.');\r\n }\r\n const indices = new Uint32Array(count);\r\n for (let i = 0; i < count; i++) {\r\n indices[i] = start + i;\r\n }\r\n return indices;\r\n}\r\n\r\nasync function readIndexDataFromPrimitive(primitive: Primitive, vertexCount: number) {\r\n const indexBuffer = primitive.getIndexBuffer();\r\n if (!indexBuffer) {\r\n return buildNonIndexedTriangles(primitive, vertexCount);\r\n }\r\n if (primitive.primitiveType !== 'triangle-list') {\r\n throw new Error('GPU cloth initialization failed: only triangle-list primitive is supported.');\r\n }\r\n const bytes = await indexBuffer.getBufferSubData();\r\n if (indexBuffer.indexType.primitiveType === PBPrimitiveType.U16) {\r\n const src = new Uint16Array(bytes.buffer, bytes.byteOffset, bytes.byteLength >> 1);\r\n return new Uint16Array(src);\r\n }\r\n const src = new Uint32Array(bytes.buffer, bytes.byteOffset, bytes.byteLength >> 2);\r\n return new Uint32Array(src);\r\n}\r\n\r\nfunction createWrapDeformerProgram(device: AbstractDevice, workgroupSize: number) {\r\n const program = device.buildComputeProgram({\r\n workgroupSize: [workgroupSize, 1, 1],\r\n compute(pb) {\r\n this.sourcePositions = pb.float[0]().storageBufferReadonly(0);\r\n this.sourceTriangleIndices = pb.uint[0]().storageBufferReadonly(0);\r\n this.sourceBarycentrics = pb.float[0]().storageBufferReadonly(0);\r\n this.targetLocalOffsets = pb.float[0]().storageBufferReadonly(0);\r\n this.targetPositions = pb.float[0]().storageBuffer(0);\r\n this.targetNormals = pb.float[0]().storageBuffer(0);\r\n this.vertexCount = pb.uint().uniform(0);\r\n this.sourceToTargetMatrix = pb.mat4().uniform(0);\r\n this.minDistance = pb.float().uniform(0);\r\n pb.main(function () {\r\n this.$l.vertex = this.$builtins.globalInvocationId.x;\r\n this.$if(pb.lessThan(this.vertex, this.vertexCount), function () {\r\n this.$l.targetBase = pb.mul(this.vertex, 3);\r\n this.$l.influenceBase = pb.mul(this.vertex, WRAP_TRIANGLE_VERTEX_COUNT);\r\n this.$l.i0 = this.sourceTriangleIndices.at(this.influenceBase);\r\n this.$l.i1 = this.sourceTriangleIndices.at(pb.add(this.influenceBase, 1));\r\n this.$l.i2 = this.sourceTriangleIndices.at(pb.add(this.influenceBase, 2));\r\n this.$l.base0 = pb.mul(this.i0, 3);\r\n this.$l.base1 = pb.mul(this.i1, 3);\r\n this.$l.base2 = pb.mul(this.i2, 3);\r\n this.$l.w0 = this.sourceBarycentrics.at(this.influenceBase);\r\n this.$l.w1 = this.sourceBarycentrics.at(pb.add(this.influenceBase, 1));\r\n this.$l.w2 = this.sourceBarycentrics.at(pb.add(this.influenceBase, 2));\r\n this.$l.p0 = pb.mul(\r\n this.sourceToTargetMatrix,\r\n pb.vec4(\r\n this.sourcePositions.at(this.base0),\r\n this.sourcePositions.at(pb.add(this.base0, 1)),\r\n this.sourcePositions.at(pb.add(this.base0, 2)),\r\n 1\r\n )\r\n ).xyz;\r\n this.$l.p1 = pb.mul(\r\n this.sourceToTargetMatrix,\r\n pb.vec4(\r\n this.sourcePositions.at(this.base1),\r\n this.sourcePositions.at(pb.add(this.base1, 1)),\r\n this.sourcePositions.at(pb.add(this.base1, 2)),\r\n 1\r\n )\r\n ).xyz;\r\n this.$l.p2 = pb.mul(\r\n this.sourceToTargetMatrix,\r\n pb.vec4(\r\n this.sourcePositions.at(this.base2),\r\n this.sourcePositions.at(pb.add(this.base2, 1)),\r\n this.sourcePositions.at(pb.add(this.base2, 2)),\r\n 1\r\n )\r\n ).xyz;\r\n this.$l.basePoint = pb.add(\r\n pb.mul(this.p0, this.w0),\r\n pb.mul(this.p1, this.w1),\r\n pb.mul(this.p2, this.w2)\r\n );\r\n this.$l.edge01 = pb.sub(this.p1, this.p0);\r\n this.$l.edge02 = pb.sub(this.p2, this.p0);\r\n this.$l.tangent = this.edge01;\r\n this.$l.tangentLen = pb.length(this.tangent);\r\n this.$if(pb.lessThanEqual(this.tangentLen, this.minDistance), function () {\r\n this.tangent = this.edge02;\r\n this.tangentLen = pb.length(this.tangent);\r\n });\r\n this.$if(pb.greaterThan(this.tangentLen, this.minDistance), function () {\r\n this.tangent = pb.div(this.tangent, this.tangentLen);\r\n }).$else(function () {\r\n this.tangent = pb.vec3(1, 0, 0);\r\n });\r\n this.$l.normal = pb.cross(this.edge01, this.edge02);\r\n this.$l.normalLen = pb.length(this.normal);\r\n this.$if(pb.greaterThan(this.normalLen, this.minDistance), function () {\r\n this.normal = pb.div(this.normal, this.normalLen);\r\n }).$else(function () {\r\n this.$l.fallbackAxis = pb.vec3(0, 1, 0);\r\n this.$if(\r\n pb.or(pb.greaterThan(this.tangent.y, 0.999), pb.lessThan(this.tangent.y, -0.999)),\r\n function () {\r\n this.fallbackAxis = pb.vec3(1, 0, 0);\r\n }\r\n );\r\n this.normal = pb.cross(this.tangent, this.fallbackAxis);\r\n this.normalLen = pb.length(this.normal);\r\n this.$if(pb.greaterThan(this.normalLen, this.minDistance), function () {\r\n this.normal = pb.div(this.normal, this.normalLen);\r\n }).$else(function () {\r\n this.normal = pb.vec3(0, 0, 1);\r\n });\r\n });\r\n this.$l.bitangent = pb.cross(this.normal, this.tangent);\r\n this.$l.bitangentLen = pb.length(this.bitangent);\r\n this.$if(pb.greaterThan(this.bitangentLen, this.minDistance), function () {\r\n this.bitangent = pb.div(this.bitangent, this.bitangentLen);\r\n }).$else(function () {\r\n this.bitangent = pb.vec3(0, 1, 0);\r\n });\r\n this.normal = pb.cross(this.tangent, this.bitangent);\r\n this.normalLen = pb.length(this.normal);\r\n this.$if(pb.greaterThan(this.normalLen, this.minDistance), function () {\r\n this.normal = pb.div(this.normal, this.normalLen);\r\n }).$else(function () {\r\n this.normal = pb.vec3(0, 0, 1);\r\n });\r\n this.$l.localOffset = pb.vec3(\r\n this.targetLocalOffsets.at(this.targetBase),\r\n this.targetLocalOffsets.at(pb.add(this.targetBase, 1)),\r\n this.targetLocalOffsets.at(pb.add(this.targetBase, 2))\r\n );\r\n this.$l.deformedPosition = pb.add(\r\n this.basePoint,\r\n pb.add(\r\n pb.mul(this.tangent, this.localOffset.x),\r\n pb.mul(this.bitangent, this.localOffset.y),\r\n pb.mul(this.normal, this.localOffset.z)\r\n )\r\n );\r\n this.targetPositions.setAt(this.targetBase, this.deformedPosition.x);\r\n this.targetPositions.setAt(pb.add(this.targetBase, 1), this.deformedPosition.y);\r\n this.targetPositions.setAt(pb.add(this.targetBase, 2), this.deformedPosition.z);\r\n this.targetNormals.setAt(this.targetBase, this.normal.x);\r\n this.targetNormals.setAt(pb.add(this.targetBase, 1), this.normal.y);\r\n this.targetNormals.setAt(pb.add(this.targetBase, 2), this.normal.z);\r\n });\r\n });\r\n }\r\n });\r\n if (program) {\r\n program.name = '@GPUCloth_DisplacementWrapTarget';\r\n }\r\n return program;\r\n}\r\n\r\nfunction transformPointArrayByMatrix(\r\n matrix: Matrix4x4,\r\n source: Float32Array<ArrayBuffer>,\r\n out?: Float32Array<ArrayBuffer>\r\n) {\r\n const target = out && out.length === source.length ? out : new Float32Array(source.length);\r\n for (let i = 0; i + 2 < source.length; i += 3) {\r\n const x = source[i];\r\n const y = source[i + 1];\r\n const z = source[i + 2];\r\n target[i] = matrix[0] * x + matrix[4] * y + matrix[8] * z + matrix[12];\r\n target[i + 1] = matrix[1] * x + matrix[5] * y + matrix[9] * z + matrix[13];\r\n target[i + 2] = matrix[2] * x + matrix[6] * y + matrix[10] * z + matrix[14];\r\n }\r\n return target;\r\n}\r\n\r\nfunction getWrapSourceToTargetMatrix(source: any, target: any, out?: Matrix4x4) {\r\n if (!source?.worldMatrix || !target?.invWorldMatrix) {\r\n return (out ?? new Matrix4x4()).identity();\r\n }\r\n return Matrix4x4.multiplyAffine(target.invWorldMatrix, source.worldMatrix, out);\r\n}\r\n\r\nclass GPUClothWrapBinding {\r\n private readonly _device: AbstractDevice;\r\n private readonly _source: any;\r\n private readonly _target: any;\r\n private readonly _targetPrimitive: Primitive;\r\n private readonly _wrapTriangleIndexBuffer: GPUDataBuffer;\r\n private readonly _wrapBarycentricBuffer: GPUDataBuffer;\r\n private readonly _wrapLocalOffsetBuffer: GPUDataBuffer;\r\n private readonly _program: GPUProgram;\r\n private readonly _bindGroup: BindGroup;\r\n private readonly _workgroupCount: number;\r\n private readonly _maxOffsetDistance: number;\r\n private readonly _sourceToTargetMatrix: Matrix4x4;\r\n private readonly _positionBuffer: StructuredBuffer;\r\n private readonly _normalBuffer: StructuredBuffer;\r\n private readonly _originalPositionBuffer: Nullable<StructuredBuffer>;\r\n private readonly _originalNormalBuffer: Nullable<StructuredBuffer>;\r\n private readonly _restoreSkinning: Nullable<boolean>;\r\n\r\n private constructor(\r\n device: AbstractDevice,\r\n source: any,\r\n target: any,\r\n targetPrimitive: Primitive,\r\n wrapTriangleIndexBuffer: GPUDataBuffer,\r\n wrapBarycentricBuffer: GPUDataBuffer,\r\n wrapLocalOffsetBuffer: GPUDataBuffer,\r\n program: GPUProgram,\r\n bindGroup: BindGroup,\r\n positionBuffer: StructuredBuffer,\r\n normalBuffer: StructuredBuffer,\r\n originalPositionBuffer: Nullable<StructuredBuffer>,\r\n originalNormalBuffer: Nullable<StructuredBuffer>,\r\n workgroupCount: number,\r\n maxOffsetDistance: number,\r\n restoreSkinning: Nullable<boolean>\r\n ) {\r\n this._device = device;\r\n this._source = source;\r\n this._target = target;\r\n this._targetPrimitive = targetPrimitive;\r\n this._wrapTriangleIndexBuffer = wrapTriangleIndexBuffer;\r\n this._wrapBarycentricBuffer = wrapBarycentricBuffer;\r\n this._wrapLocalOffsetBuffer = wrapLocalOffsetBuffer;\r\n this._program = program;\r\n this._bindGroup = bindGroup;\r\n this._workgroupCount = workgroupCount;\r\n this._maxOffsetDistance = maxOffsetDistance;\r\n this._sourceToTargetMatrix = new Matrix4x4();\r\n this._positionBuffer = positionBuffer;\r\n this._normalBuffer = normalBuffer;\r\n this._originalPositionBuffer = originalPositionBuffer;\r\n this._originalNormalBuffer = originalNormalBuffer;\r\n this._restoreSkinning = restoreSkinning;\r\n }\r\n\r\n static async create(\r\n device: AbstractDevice,\r\n source: any,\r\n sourcePositionBuffer: StructuredBuffer,\r\n sourceRestPositions: Float32Array<ArrayBuffer>,\r\n sourceIndexData: Uint32Array<ArrayBuffer>,\r\n target: any,\r\n workgroupSize: number\r\n ) {\r\n const data = await GPUClothWrapBinding.createBindingData(\r\n source,\r\n sourceRestPositions,\r\n sourceIndexData,\r\n target\r\n );\r\n return GPUClothWrapBinding.createFromData(\r\n device,\r\n source,\r\n sourcePositionBuffer,\r\n sourceRestPositions,\r\n sourceIndexData,\r\n target,\r\n workgroupSize,\r\n data\r\n );\r\n }\r\n\r\n static async createBindingData(\r\n source: any,\r\n sourceRestPositions: Float32Array<ArrayBuffer>,\r\n sourceIndexData: Uint32Array<ArrayBuffer>,\r\n target: any\r\n ): Promise<GPUClothWrapBindingData> {\r\n if (!target?.primitive) {\r\n throw new Error('GPU cloth wrap failed: target mesh has no primitive.');\r\n }\r\n const targetPrimitive = target.primitive as Primitive;\r\n const targetBasePositions = await readPositionDataFromPrimitive(targetPrimitive);\r\n const sourceToTargetBindMatrix = getWrapSourceToTargetMatrix(source, target);\r\n const [resolvedSourcePositions, targetPositions] = await Promise.all([\r\n resolveWrapBindPositions(source, sourceRestPositions),\r\n resolveWrapBindPositions(target, targetBasePositions)\r\n ]);\r\n const sourcePositionsInTargetSpace = transformPointArrayByMatrix(\r\n sourceToTargetBindMatrix,\r\n resolvedSourcePositions\r\n );\r\n const sourceVertexCount = (sourcePositionsInTargetSpace.length / 3) >> 0;\r\n const sourceTriangleCount = (sourceIndexData.length / 3) >> 0;\r\n if (sourceVertexCount <= 0) {\r\n throw new Error('GPU cloth wrap failed: source mesh has no vertices.');\r\n }\r\n if (sourceTriangleCount <= 0) {\r\n throw new Error('GPU cloth wrap failed: source mesh has no triangles.');\r\n }\r\n const vertexCount = (targetPositions.length / 3) >> 0;\r\n const sourceTriangleIndices = new Uint32Array(vertexCount * WRAP_TRIANGLE_VERTEX_COUNT);\r\n const sourceBarycentrics = new Float32Array(vertexCount * WRAP_TRIANGLE_VERTEX_COUNT);\r\n const targetLocalOffsets = new Float32Array(vertexCount * 3);\r\n let maxOffsetDistance = 0;\r\n const closestPoint = new Float32Array(3);\r\n const barycentrics = new Float32Array(3);\r\n const frame = new Float32Array(9);\r\n for (let vertex = 0; vertex < vertexCount; vertex++) {\r\n const targetBase = vertex * 3;\r\n const vx = targetPositions[targetBase];\r\n const vy = targetPositions[targetBase + 1];\r\n const vz = targetPositions[targetBase + 2];\r\n let bestDistanceSq = Number.POSITIVE_INFINITY;\r\n let bestI0 = 0;\r\n let bestI1 = 0;\r\n let bestI2 = 0;\r\n let bestClosestX = vx;\r\n let bestClosestY = vy;\r\n let bestClosestZ = vz;\r\n let bestBary0 = 1;\r\n let bestBary1 = 0;\r\n let bestBary2 = 0;\r\n for (let tri = 0; tri < sourceTriangleCount; tri++) {\r\n const triBase = tri * 3;\r\n const i0 = sourceIndexData[triBase];\r\n const i1 = sourceIndexData[triBase + 1];\r\n const i2 = sourceIndexData[triBase + 2];\r\n if (i0 >= sourceVertexCount || i1 >= sourceVertexCount || i2 >= sourceVertexCount) {\r\n continue;\r\n }\r\n const base0 = i0 * 3;\r\n const base1 = i1 * 3;\r\n const base2 = i2 * 3;\r\n const distanceSq = closestPointOnTriangle(\r\n vx,\r\n vy,\r\n vz,\r\n sourcePositionsInTargetSpace[base0],\r\n sourcePositionsInTargetSpace[base0 + 1],\r\n sourcePositionsInTargetSpace[base0 + 2],\r\n sourcePositionsInTargetSpace[base1],\r\n sourcePositionsInTargetSpace[base1 + 1],\r\n sourcePositionsInTargetSpace[base1 + 2],\r\n sourcePositionsInTargetSpace[base2],\r\n sourcePositionsInTargetSpace[base2 + 1],\r\n sourcePositionsInTargetSpace[base2 + 2],\r\n closestPoint,\r\n barycentrics\r\n );\r\n if (distanceSq < bestDistanceSq) {\r\n bestDistanceSq = distanceSq;\r\n bestI0 = i0;\r\n bestI1 = i1;\r\n bestI2 = i2;\r\n bestClosestX = closestPoint[0];\r\n bestClosestY = closestPoint[1];\r\n bestClosestZ = closestPoint[2];\r\n bestBary0 = barycentrics[0];\r\n bestBary1 = barycentrics[1];\r\n bestBary2 = barycentrics[2];\r\n }\r\n }\r\n if (!Number.isFinite(bestDistanceSq)) {\r\n throw new Error('GPU cloth wrap failed: source mesh triangle data is invalid.');\r\n }\r\n const influenceBase = vertex * WRAP_TRIANGLE_VERTEX_COUNT;\r\n sourceTriangleIndices[influenceBase] = bestI0;\r\n sourceTriangleIndices[influenceBase + 1] = bestI1;\r\n sourceTriangleIndices[influenceBase + 2] = bestI2;\r\n sourceBarycentrics[influenceBase] = bestBary0;\r\n sourceBarycentrics[influenceBase + 1] = bestBary1;\r\n sourceBarycentrics[influenceBase + 2] = bestBary2;\r\n const bestBase0 = bestI0 * 3;\r\n const bestBase1 = bestI1 * 3;\r\n const bestBase2 = bestI2 * 3;\r\n buildWrapTriangleFrame(\r\n sourcePositionsInTargetSpace[bestBase0],\r\n sourcePositionsInTargetSpace[bestBase0 + 1],\r\n sourcePositionsInTargetSpace[bestBase0 + 2],\r\n sourcePositionsInTargetSpace[bestBase1],\r\n sourcePositionsInTargetSpace[bestBase1 + 1],\r\n sourcePositionsInTargetSpace[bestBase1 + 2],\r\n sourcePositionsInTargetSpace[bestBase2],\r\n sourcePositionsInTargetSpace[bestBase2 + 1],\r\n sourcePositionsInTargetSpace[bestBase2 + 2],\r\n frame\r\n );\r\n const deltaX = vx - bestClosestX;\r\n const deltaY = vy - bestClosestY;\r\n const deltaZ = vz - bestClosestZ;\r\n targetLocalOffsets[targetBase] = dot3(deltaX, deltaY, deltaZ, frame[0], frame[1], frame[2]);\r\n targetLocalOffsets[targetBase + 1] = dot3(deltaX, deltaY, deltaZ, frame[3], frame[4], frame[5]);\r\n targetLocalOffsets[targetBase + 2] = dot3(deltaX, deltaY, deltaZ, frame[6], frame[7], frame[8]);\r\n maxOffsetDistance = Math.max(maxOffsetDistance, Math.sqrt(bestDistanceSq));\r\n }\r\n\r\n return {\r\n version: 4,\r\n vertexCount,\r\n sourceVertexCount,\r\n influenceCount: WRAP_TRIANGLE_VERTEX_COUNT,\r\n maxOffsetDistance,\r\n sourceTriangleIndices: encodeTypedArrayBase64(sourceTriangleIndices),\r\n sourceBarycentrics: encodeTypedArrayBase64(sourceBarycentrics),\r\n targetLocalOffsets: encodeTypedArrayBase64(targetLocalOffsets)\r\n };\r\n }\r\n\r\n static createFromData(\r\n device: AbstractDevice,\r\n source: any,\r\n sourcePositionBuffer: StructuredBuffer,\r\n sourceRestPositions: Float32Array<ArrayBuffer>,\r\n _sourceIndexData: Uint32Array<ArrayBuffer>,\r\n target: any,\r\n workgroupSize: number,\r\n data: GPUClothWrapBindingData\r\n ) {\r\n if (!target?.primitive) {\r\n throw new Error('GPU cloth wrap failed: target mesh has no primitive.');\r\n }\r\n const targetPrimitive = target.primitive as Primitive;\r\n const vertexCount = targetPrimitive.getNumVertices();\r\n if (!isWrapBindingDataCompatible(data, sourceRestPositions, vertexCount)) {\r\n throw new Error('GPU cloth wrap failed: binding cache is incompatible with current meshes.');\r\n }\r\n const expectedElementCount = vertexCount * 3;\r\n const influenceElementCount = vertexCount * data.influenceCount;\r\n const wrapSourceTriangleIndices = decodeTypedArrayFromBase64(\r\n Uint32Array,\r\n data.sourceTriangleIndices,\r\n influenceElementCount\r\n );\r\n const wrapSourceBarycentrics = decodeTypedArrayFromBase64(\r\n Float32Array,\r\n data.sourceBarycentrics,\r\n influenceElementCount\r\n );\r\n const wrapTargetLocalOffsets = decodeTypedArrayFromBase64(\r\n Float32Array,\r\n data.targetLocalOffsets,\r\n expectedElementCount\r\n );\r\n const positionBuffer = device.createVertexBuffer(\r\n 'position_f32x3',\r\n new Float32Array(expectedElementCount),\r\n {\r\n storage: true,\r\n managed: false\r\n }\r\n );\r\n if (!positionBuffer) {\r\n throw new Error('GPU cloth wrap failed: could not create target position buffer.');\r\n }\r\n const normalBuffer = device.createVertexBuffer('normal_f32x3', new Float32Array(expectedElementCount), {\r\n storage: true,\r\n managed: false\r\n });\r\n if (!normalBuffer) {\r\n throw new Error('GPU cloth wrap failed: could not create target normal buffer.');\r\n }\r\n\r\n const wrapTriangleIndexBuffer = device.createBuffer(wrapSourceTriangleIndices.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n wrapTriangleIndexBuffer.bufferSubData(0, wrapSourceTriangleIndices);\r\n const wrapBarycentricBuffer = device.createBuffer(wrapSourceBarycentrics.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n wrapBarycentricBuffer.bufferSubData(0, wrapSourceBarycentrics);\r\n const wrapLocalOffsetBuffer = device.createBuffer(wrapTargetLocalOffsets.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n wrapLocalOffsetBuffer.bufferSubData(0, wrapTargetLocalOffsets);\r\n const program = createWrapDeformerProgram(device, workgroupSize);\r\n if (!program) {\r\n throw new Error('GPU cloth wrap failed: could not create compute program.');\r\n }\r\n const bindGroup = device.createBindGroup(program.bindGroupLayouts[0]);\r\n bindGroup.setBuffer('sourcePositions', sourcePositionBuffer);\r\n bindGroup.setBuffer('sourceTriangleIndices', wrapTriangleIndexBuffer);\r\n bindGroup.setBuffer('sourceBarycentrics', wrapBarycentricBuffer);\r\n bindGroup.setBuffer('targetLocalOffsets', wrapLocalOffsetBuffer);\r\n bindGroup.setBuffer('targetPositions', positionBuffer);\r\n bindGroup.setBuffer('targetNormals', normalBuffer);\r\n const sourceToTargetBindMatrix = getWrapSourceToTargetMatrix(source, target);\r\n bindGroup.setValue('vertexCount', vertexCount);\r\n bindGroup.setValue('sourceToTargetMatrix', sourceToTargetBindMatrix);\r\n bindGroup.setValue('minDistance', 1e-5);\r\n\r\n const originalPositionBuffer = targetPrimitive.getVertexBuffer('position');\r\n const originalNormalBuffer = targetPrimitive.getVertexBuffer('normal');\r\n retainObject(originalPositionBuffer);\r\n retainObject(originalNormalBuffer);\r\n targetPrimitive.removeVertexBuffer('position');\r\n targetPrimitive.setVertexBuffer(positionBuffer!);\r\n targetPrimitive.removeVertexBuffer('normal');\r\n targetPrimitive.setVertexBuffer(normalBuffer!);\r\n\r\n let restoreSkinning: Nullable<boolean> = null;\r\n if (typeof target?.suspendSkinning === 'boolean') {\r\n restoreSkinning = target.suspendSkinning;\r\n target.suspendSkinning = true;\r\n target.setBoneMatrices?.(null);\r\n target.setAnimatedBoundingBox?.(null);\r\n }\r\n\r\n const binding = new GPUClothWrapBinding(\r\n device,\r\n source,\r\n target,\r\n targetPrimitive,\r\n wrapTriangleIndexBuffer,\r\n wrapBarycentricBuffer,\r\n wrapLocalOffsetBuffer,\r\n program,\r\n bindGroup,\r\n positionBuffer!,\r\n normalBuffer!,\r\n originalPositionBuffer,\r\n originalNormalBuffer,\r\n Math.max(1, Math.ceil(vertexCount / workgroupSize)),\r\n Math.max(0, Number(data.maxOffsetDistance) || 0),\r\n restoreSkinning\r\n );\r\n binding.update();\r\n return binding;\r\n }\r\n\r\n update() {\r\n getWrapSourceToTargetMatrix(this._source, this._target, this._sourceToTargetMatrix);\r\n this._bindGroup.setValue('sourceToTargetMatrix', this._sourceToTargetMatrix);\r\n this._device.setProgram(this._program);\r\n this._device.setBindGroup(0, this._bindGroup);\r\n this._device.compute(this._workgroupCount, 1, 1);\r\n this.updateBoundingBox();\r\n }\r\n\r\n dispose() {\r\n this._bindGroup.dispose();\r\n this._program.dispose();\r\n this._wrapTriangleIndexBuffer.dispose();\r\n this._wrapBarycentricBuffer.dispose();\r\n this._wrapLocalOffsetBuffer.dispose();\r\n if (this._targetPrimitive) {\r\n this._targetPrimitive.removeVertexBuffer('position');\r\n if (this._originalPositionBuffer) {\r\n this._targetPrimitive.setVertexBuffer(this._originalPositionBuffer);\r\n }\r\n this._targetPrimitive.removeVertexBuffer('normal');\r\n if (this._originalNormalBuffer) {\r\n this._targetPrimitive.setVertexBuffer(this._originalNormalBuffer);\r\n }\r\n }\r\n releaseObject(this._originalPositionBuffer);\r\n releaseObject(this._originalNormalBuffer);\r\n this._positionBuffer.dispose();\r\n this._normalBuffer.dispose();\r\n if (this._target && this._restoreSkinning !== null) {\r\n this._target.setAnimatedBoundingBox?.(null);\r\n this._target.suspendSkinning = this._restoreSkinning;\r\n }\r\n }\r\n\r\n private updateBoundingBox() {\r\n const sourceBBox =\r\n this._source?.getAnimatedBoundingBox?.() ??\r\n this._source?.primitive?.getBoundingVolume?.()?.toAABB?.() ??\r\n null;\r\n if (!sourceBBox) {\r\n return;\r\n }\r\n let minX = Number.POSITIVE_INFINITY;\r\n let minY = Number.POSITIVE_INFINITY;\r\n let minZ = Number.POSITIVE_INFINITY;\r\n let maxX = Number.NEGATIVE_INFINITY;\r\n let maxY = Number.NEGATIVE_INFINITY;\r\n let maxZ = Number.NEGATIVE_INFINITY;\r\n getWrapSourceToTargetMatrix(this._source, this._target, this._sourceToTargetMatrix);\r\n const corners = [\r\n [sourceBBox.minPoint.x, sourceBBox.minPoint.y, sourceBBox.minPoint.z],\r\n [sourceBBox.minPoint.x, sourceBBox.minPoint.y, sourceBBox.maxPoint.z],\r\n [sourceBBox.minPoint.x, sourceBBox.maxPoint.y, sourceBBox.minPoint.z],\r\n [sourceBBox.minPoint.x, sourceBBox.maxPoint.y, sourceBBox.maxPoint.z],\r\n [sourceBBox.maxPoint.x, sourceBBox.minPoint.y, sourceBBox.minPoint.z],\r\n [sourceBBox.maxPoint.x, sourceBBox.minPoint.y, sourceBBox.maxPoint.z],\r\n [sourceBBox.maxPoint.x, sourceBBox.maxPoint.y, sourceBBox.minPoint.z],\r\n [sourceBBox.maxPoint.x, sourceBBox.maxPoint.y, sourceBBox.maxPoint.z]\r\n ];\r\n for (const corner of corners) {\r\n const x =\r\n this._sourceToTargetMatrix[0] * corner[0] +\r\n this._sourceToTargetMatrix[4] * corner[1] +\r\n this._sourceToTargetMatrix[8] * corner[2] +\r\n this._sourceToTargetMatrix[12];\r\n const y =\r\n this._sourceToTargetMatrix[1] * corner[0] +\r\n this._sourceToTargetMatrix[5] * corner[1] +\r\n this._sourceToTargetMatrix[9] * corner[2] +\r\n this._sourceToTargetMatrix[13];\r\n const z =\r\n this._sourceToTargetMatrix[2] * corner[0] +\r\n this._sourceToTargetMatrix[6] * corner[1] +\r\n this._sourceToTargetMatrix[10] * corner[2] +\r\n this._sourceToTargetMatrix[14];\r\n minX = Math.min(minX, x);\r\n minY = Math.min(minY, y);\r\n minZ = Math.min(minZ, z);\r\n maxX = Math.max(maxX, x);\r\n maxY = Math.max(maxY, y);\r\n maxZ = Math.max(maxZ, z);\r\n }\r\n const padding = Math.max(0.001, this._maxOffsetDistance);\r\n this._target?.setAnimatedBoundingBox?.(\r\n new BoundingBox(\r\n new Vector3(minX - padding, minY - padding, minZ - padding),\r\n new Vector3(maxX + padding, maxY + padding, maxZ + padding)\r\n )\r\n );\r\n }\r\n}\r\n\r\nexport async function createGPUClothWrapBindingData(\r\n source: any,\r\n target: any\r\n): Promise<GPUClothWrapBindingData> {\r\n if (!source?.primitive) {\r\n throw new Error('GPU cloth wrap failed: source mesh has no primitive.');\r\n }\r\n const sourcePrimitive = source.primitive as Primitive;\r\n const sourcePositions = await readPositionDataFromPrimitive(sourcePrimitive);\r\n const sourceIndices = toUInt32Indices(\r\n await readIndexDataFromPrimitive(sourcePrimitive, (sourcePositions.length / 3) >> 0)\r\n );\r\n return GPUClothWrapBinding.createBindingData(source, sourcePositions, sourceIndices, target);\r\n}\r\n\r\n/**\r\n * WebGPU-only cloth simulation entry.\r\n *\r\n * On non-WebGPU backends (including WebGL), the system is always disabled.\r\n */\r\nexport class GPUClothSystem {\r\n private _enabled: boolean;\r\n private _disabledReason: Nullable<string>;\r\n private _device: Nullable<AbstractDevice>;\r\n private _primitive: Nullable<Primitive>;\r\n private _originalPositionBuffer: Nullable<StructuredBuffer>;\r\n private _originalNormalBuffer: Nullable<StructuredBuffer>;\r\n private _positionBuffer: Nullable<StructuredBuffer>;\r\n private _sourceIndexData: Nullable<Uint32Array<ArrayBuffer>>;\r\n private _prevPositionBuffer: Nullable<GPUDataBuffer>;\r\n private _restPositionBuffer: Nullable<GPUDataBuffer>;\r\n private _prevRestPositionBuffer: Nullable<GPUDataBuffer>;\r\n private _invMassBuffer: Nullable<GPUDataBuffer>;\r\n private _neighborIndexBuffer: Nullable<GPUDataBuffer>;\r\n private _restLengthBuffer: Nullable<GPUDataBuffer>;\r\n private _integrateProgram: Nullable<GPUProgram>;\r\n private _constraintProgram: Nullable<GPUProgram>;\r\n private _faceNormalProgram: Nullable<GPUProgram>;\r\n private _vertexNormalProgram: Nullable<GPUProgram>;\r\n private _integrateBindGroup: Nullable<BindGroup>;\r\n private _constraintBindGroup: Nullable<BindGroup>;\r\n private _faceNormalBindGroup: Nullable<BindGroup>;\r\n private _vertexNormalBindGroup: Nullable<BindGroup>;\r\n private _vertexCount: number;\r\n private _workgroupCount: number;\r\n private _triangleCount: number;\r\n private _triangleWorkgroupCount: number;\r\n private _maxNeighbors: number;\r\n private _maxTrianglesPerVertex: number;\r\n private _gravity: Vector3;\r\n private _damping: number;\r\n private _dynamicFriction: number;\r\n private _staticFriction: number;\r\n private _stiffness: number;\r\n private _poseFollow: number;\r\n private _substeps: number;\r\n private _solverIterations: number;\r\n private _colliders: SpringCollider[];\r\n private _sphereColliderBuffer: Nullable<GPUDataBuffer>;\r\n private _capsuleColliderBuffer: Nullable<GPUDataBuffer>;\r\n private _planeColliderBuffer: Nullable<GPUDataBuffer>;\r\n private _sphereColliderData: Float32Array<ArrayBuffer>;\r\n private _capsuleColliderData: Float32Array<ArrayBuffer>;\r\n private _planeColliderData: Float32Array<ArrayBuffer>;\r\n private _triangleIndexBuffer: Nullable<GPUDataBuffer>;\r\n private _triangleNormalBuffer: Nullable<GPUDataBuffer>;\r\n private _vertexTriangleAdjacencyBuffer: Nullable<GPUDataBuffer>;\r\n private _normalBuffer: Nullable<StructuredBuffer>;\r\n private _rebuildNormals: boolean;\r\n private _collisionSpaceNode: any;\r\n private _sourcePositionData: Nullable<Float32Array<ArrayBuffer>>;\r\n private _skinningBlendIndices: Nullable<Float32Array<ArrayBuffer>>;\r\n private _skinningBlendWeights: Nullable<Float32Array<ArrayBuffer>>;\r\n private _dynamicRestPositionData: Nullable<Float32Array<ArrayBuffer>>;\r\n private _smoothedRestPositionData: Nullable<Float32Array<ArrayBuffer>>;\r\n private _usingDynamicRestPose: boolean;\r\n private _skinAnimationTarget: any;\r\n private _restoreSkinAnimation: Nullable<boolean>;\r\n private _boundScene: Nullable<Scene>;\r\n private _autoUpdate: boolean;\r\n private _workgroupSize: number;\r\n private _wrapBindings: GPUClothWrapBinding[];\r\n private _latestInputDeltaTime: number;\r\n private _smoothedSphereCenters: WeakMap<SphereCollider, Vector3>;\r\n private _smoothedCapsuleEndpoints: WeakMap<CapsuleCollider, { start: Vector3; end: Vector3 }>;\r\n private _smoothedPlaneData: WeakMap<PlaneCollider, { point: Vector3; normal: Vector3 }>;\r\n private _timeAccumulator: number;\r\n private _pendingAutoUpdateDeltaTime: number;\r\n private readonly _meshPostUpdateCallback: MeshUpdateCallback;\r\n\r\n constructor(options?: GPUClothSystemOptions) {\r\n this._device = resolveDevice(options?.device ?? null);\r\n const supported = isGPUClothSupported(this._device);\r\n const wantEnabled = options?.enabled ?? true;\r\n this._enabled = false;\r\n this._disabledReason = null;\r\n this._primitive = options?.primitive ?? null;\r\n this._originalPositionBuffer = null;\r\n this._originalNormalBuffer = null;\r\n this._positionBuffer = null;\r\n this._sourceIndexData = null;\r\n this._prevPositionBuffer = null;\r\n this._restPositionBuffer = null;\r\n this._prevRestPositionBuffer = null;\r\n this._invMassBuffer = null;\r\n this._neighborIndexBuffer = null;\r\n this._restLengthBuffer = null;\r\n this._integrateProgram = null;\r\n this._constraintProgram = null;\r\n this._faceNormalProgram = null;\r\n this._vertexNormalProgram = null;\r\n this._integrateBindGroup = null;\r\n this._constraintBindGroup = null;\r\n this._faceNormalBindGroup = null;\r\n this._vertexNormalBindGroup = null;\r\n this._vertexCount = 0;\r\n this._workgroupCount = 0;\r\n this._triangleCount = 0;\r\n this._triangleWorkgroupCount = 0;\r\n this._maxNeighbors = clamp(options?.maxNeighbors ?? DEFAULT_MAX_NEIGHBORS, 1, 64) | 0;\r\n this._maxTrianglesPerVertex = clamp(\r\n options?.maxTrianglesPerVertex ?? DEFAULT_MAX_TRIANGLES_PER_VERTEX,\r\n 1,\r\n 64\r\n );\r\n this._gravity = options?.gravity?.clone() ?? new Vector3(0, -9.8, 0);\r\n this._damping = clamp(options?.damping ?? DEFAULT_DAMPING, 0, 1);\r\n this._dynamicFriction = clamp(options?.dynamicFriction ?? DEFAULT_DYNAMIC_FRICTION, 0, 1);\r\n this._staticFriction = clamp(options?.staticFriction ?? DEFAULT_STATIC_FRICTION, 0, 1);\r\n this._stiffness = clamp(options?.stiffness ?? DEFAULT_STIFFNESS, 0, 1);\r\n this._poseFollow = clamp(options?.poseFollow ?? DEFAULT_POSE_FOLLOW, 0, 1);\r\n this._substeps = clamp(options?.substeps ?? DEFAULT_SUBSTEPS, 1, 8) | 0;\r\n this._solverIterations = Math.max(1, (options?.solverIterations ?? DEFAULT_SOLVER_ITERATIONS) | 0);\r\n this._colliders = [...(options?.colliders ?? [])];\r\n this._sphereColliderBuffer = null;\r\n this._capsuleColliderBuffer = null;\r\n this._planeColliderBuffer = null;\r\n this._sphereColliderData = new Float32Array(\r\n getInitialColliderBufferFloatCount(this._colliders, 'sphere', 4)\r\n );\r\n this._capsuleColliderData = new Float32Array(\r\n getInitialColliderBufferFloatCount(this._colliders, 'capsule', 8)\r\n );\r\n this._planeColliderData = new Float32Array(\r\n getInitialColliderBufferFloatCount(this._colliders, 'plane', 8)\r\n );\r\n this._triangleIndexBuffer = null;\r\n this._triangleNormalBuffer = null;\r\n this._vertexTriangleAdjacencyBuffer = null;\r\n this._normalBuffer = null;\r\n this._rebuildNormals = options?.rebuildNormals ?? true;\r\n this._collisionSpaceNode = options?.collisionSpaceNode ?? null;\r\n this._sourcePositionData = options?.positionData ? new Float32Array(options.positionData) : null;\r\n this._skinningBlendIndices = options?.skinningBlendIndices\r\n ? new Float32Array(options.skinningBlendIndices)\r\n : null;\r\n this._skinningBlendWeights = options?.skinningBlendWeights\r\n ? new Float32Array(options.skinningBlendWeights)\r\n : null;\r\n this._dynamicRestPositionData = null;\r\n this._smoothedRestPositionData = null;\r\n this._usingDynamicRestPose = false;\r\n this._skinAnimationTarget = null;\r\n this._restoreSkinAnimation = null;\r\n this._boundScene = null;\r\n this._autoUpdate = options?.autoUpdate ?? true;\r\n this._workgroupSize = clamp(options?.workgroupSize ?? DEFAULT_WORKGROUP_SIZE, 1, 256) | 0;\r\n this._wrapBindings = [];\r\n this._latestInputDeltaTime = 0;\r\n this._smoothedSphereCenters = new WeakMap();\r\n this._smoothedCapsuleEndpoints = new WeakMap();\r\n this._smoothedPlaneData = new WeakMap();\r\n this._timeAccumulator = 0;\r\n this._pendingAutoUpdateDeltaTime = 0;\r\n this._meshPostUpdateCallback = (_frameId, _elapsedInSeconds, deltaInSeconds) => {\r\n const dt = this._pendingAutoUpdateDeltaTime || deltaInSeconds;\r\n if (dt > 0) {\r\n this._pendingAutoUpdateDeltaTime = 0;\r\n this.update(dt);\r\n }\r\n };\r\n\r\n if (!supported) {\r\n this._disabledReason = 'GPU cloth is disabled: current backend is not WebGPU.';\r\n return;\r\n }\r\n\r\n if (!this._device) {\r\n this._disabledReason = 'GPU cloth is disabled: no active rendering device.';\r\n return;\r\n }\r\n\r\n if (!this._primitive) {\r\n this._disabledReason = 'GPU cloth is disabled: primitive is required.';\r\n return;\r\n }\r\n\r\n if (!options?.positionData || !options?.indexData) {\r\n this._disabledReason =\r\n 'GPU cloth is disabled: positionData and indexData are required. Use createFromPrimitive(...) to build them automatically.';\r\n return;\r\n }\r\n\r\n const vertexCount = (options.positionData.length / 3) >> 0;\r\n if (vertexCount <= 0 || options.positionData.length % 3 !== 0) {\r\n this._disabledReason = 'GPU cloth is disabled: invalid positionData.';\r\n return;\r\n }\r\n if (options.indexData.length < 3 || options.indexData.length % 3 !== 0) {\r\n this._disabledReason = 'GPU cloth is disabled: indexData must be triangle indices.';\r\n return;\r\n }\r\n\r\n const initialSimulationPositions =\r\n buildInitialSimulationPositions(options) ?? new Float32Array(options.positionData);\r\n const workgroupSize = this._workgroupSize;\r\n const indexDataU32 = toUInt32Indices(options.indexData);\r\n this._sourceIndexData = new Uint32Array(indexDataU32);\r\n const pinWeightArray = buildPinWeightArray(\r\n initialSimulationPositions,\r\n options.pinnedVertexWeights,\r\n options.pinnedVertexIndices\r\n );\r\n const neighbors = buildNeighborData(initialSimulationPositions, options.indexData, this._maxNeighbors);\r\n const adjacency = buildVertexTriangleAdjacency(vertexCount, indexDataU32, this._maxTrianglesPerVertex);\r\n if (!neighbors.hasConstraint) {\r\n this._disabledReason = 'GPU cloth is disabled: could not build cloth constraints from indexData.';\r\n return;\r\n }\r\n\r\n try {\r\n this._positionBuffer = this._device.createVertexBuffer('position_f32x3', initialSimulationPositions, {\r\n storage: true,\r\n managed: false\r\n });\r\n if (!this._positionBuffer) {\r\n this._disabledReason = 'GPU cloth is disabled: failed to create cloth position buffer.';\r\n return;\r\n }\r\n this._prevPositionBuffer = this._device.createBuffer(options.positionData.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._prevPositionBuffer.bufferSubData(0, initialSimulationPositions);\r\n\r\n this._restPositionBuffer = this._device.createBuffer(options.positionData.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._restPositionBuffer.bufferSubData(0, initialSimulationPositions);\r\n\r\n this._prevRestPositionBuffer = this._device.createBuffer(options.positionData.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._prevRestPositionBuffer.bufferSubData(0, initialSimulationPositions);\r\n\r\n const invMassArray = new Float32Array(vertexCount);\r\n for (let i = 0; i < vertexCount; i++) {\r\n invMassArray[i] = 1 - pinWeightArray[i];\r\n }\r\n this._invMassBuffer = this._device.createBuffer(invMassArray.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._invMassBuffer.bufferSubData(0, invMassArray);\r\n\r\n this._neighborIndexBuffer = this._device.createBuffer(neighbors.neighborIndices.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._neighborIndexBuffer.bufferSubData(0, neighbors.neighborIndices);\r\n\r\n this._restLengthBuffer = this._device.createBuffer(neighbors.restLengths.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._restLengthBuffer.bufferSubData(0, neighbors.restLengths);\r\n\r\n this._triangleIndexBuffer = this._device.createBuffer(indexDataU32.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._triangleIndexBuffer.bufferSubData(0, indexDataU32);\r\n\r\n this._triangleNormalBuffer = this._device.createBuffer(adjacency.triangleCount * 3 * 4, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n\r\n this._vertexTriangleAdjacencyBuffer = this._device.createBuffer(adjacency.adjacency.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._vertexTriangleAdjacencyBuffer.bufferSubData(0, adjacency.adjacency);\r\n\r\n this._sphereColliderBuffer = this._device.createBuffer(this._sphereColliderData.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._sphereColliderBuffer.bufferSubData(0, this._sphereColliderData);\r\n\r\n this._capsuleColliderBuffer = this._device.createBuffer(this._capsuleColliderData.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._capsuleColliderBuffer.bufferSubData(0, this._capsuleColliderData);\r\n\r\n this._planeColliderBuffer = this._device.createBuffer(this._planeColliderData.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._planeColliderBuffer.bufferSubData(0, this._planeColliderData);\r\n\r\n this._integrateProgram = createIntegrateProgram(this._device, workgroupSize);\r\n this._constraintProgram = createConstraintProgram(this._device, workgroupSize);\r\n if (!this._integrateProgram || !this._constraintProgram) {\r\n this._disabledReason = 'GPU cloth is disabled: failed to create compute programs.';\r\n return;\r\n }\r\n\r\n this._integrateBindGroup = this._device.createBindGroup(this._integrateProgram.bindGroupLayouts[0]);\r\n this._integrateBindGroup.setBuffer('positions', this._positionBuffer!);\r\n this._integrateBindGroup.setBuffer('prevPositions', this._prevPositionBuffer);\r\n this._integrateBindGroup.setBuffer('restPositions', this._restPositionBuffer);\r\n this._integrateBindGroup.setBuffer('prevRestPositions', this._prevRestPositionBuffer);\r\n this._integrateBindGroup.setBuffer('invMass', this._invMassBuffer);\r\n this._integrateBindGroup.setBuffer('sphereData', this._sphereColliderBuffer);\r\n this._integrateBindGroup.setBuffer('capsuleData', this._capsuleColliderBuffer);\r\n this._integrateBindGroup.setBuffer('planeData', this._planeColliderBuffer);\r\n this._integrateBindGroup.setValue('vertexCount', vertexCount);\r\n this._integrateBindGroup.setValue('damping', this._damping);\r\n this._integrateBindGroup.setValue('gravity', this._gravity);\r\n this._integrateBindGroup.setValue('sphereCount', 0);\r\n this._integrateBindGroup.setValue('capsuleCount', 0);\r\n this._integrateBindGroup.setValue('planeCount', 0);\r\n this._integrateBindGroup.setValue('dynamicFriction', this._dynamicFriction);\r\n this._integrateBindGroup.setValue('staticFriction', this._staticFriction);\r\n this._integrateBindGroup.setValue('minDistance', 1e-5);\r\n\r\n this._constraintBindGroup = this._device.createBindGroup(this._constraintProgram.bindGroupLayouts[0]);\r\n this._constraintBindGroup.setBuffer('positions', this._positionBuffer!);\r\n this._constraintBindGroup.setBuffer('restPositions', this._restPositionBuffer);\r\n this._constraintBindGroup.setBuffer('invMass', this._invMassBuffer);\r\n this._constraintBindGroup.setBuffer('neighborIndices', this._neighborIndexBuffer);\r\n this._constraintBindGroup.setBuffer('restLengths', this._restLengthBuffer);\r\n this._constraintBindGroup.setBuffer('sphereData', this._sphereColliderBuffer);\r\n this._constraintBindGroup.setBuffer('capsuleData', this._capsuleColliderBuffer);\r\n this._constraintBindGroup.setBuffer('planeData', this._planeColliderBuffer);\r\n this._constraintBindGroup.setValue('vertexCount', vertexCount);\r\n this._constraintBindGroup.setValue('maxNeighbors', this._maxNeighbors);\r\n this._constraintBindGroup.setValue('stiffness', this._stiffness);\r\n this._constraintBindGroup.setValue('poseFollow', this.getSubstepPoseFollow());\r\n this._constraintBindGroup.setValue('sphereCount', 0);\r\n this._constraintBindGroup.setValue('capsuleCount', 0);\r\n this._constraintBindGroup.setValue('planeCount', 0);\r\n this._constraintBindGroup.setValue('dynamicFriction', this._dynamicFriction);\r\n this._constraintBindGroup.setValue('staticFriction', this._staticFriction);\r\n this._constraintBindGroup.setValue('minDistance', 1e-5);\r\n\r\n if (this._rebuildNormals) {\r\n this._normalBuffer = this._device.createVertexBuffer(\r\n 'normal_f32x3',\r\n new Float32Array(vertexCount * 3),\r\n {\r\n storage: true,\r\n managed: false\r\n }\r\n );\r\n if (this._normalBuffer) {\r\n this._faceNormalProgram = createFaceNormalProgram(this._device, workgroupSize);\r\n this._vertexNormalProgram = createVertexNormalProgram(this._device, workgroupSize);\r\n if (!this._faceNormalProgram || !this._vertexNormalProgram) {\r\n this._disabledReason = 'GPU cloth is disabled: failed to create normal reconstruction programs.';\r\n return;\r\n }\r\n this._faceNormalBindGroup = this._device.createBindGroup(\r\n this._faceNormalProgram.bindGroupLayouts[0]\r\n );\r\n this._faceNormalBindGroup.setBuffer('positions', this._positionBuffer!);\r\n this._faceNormalBindGroup.setBuffer('triangleIndices', this._triangleIndexBuffer);\r\n this._faceNormalBindGroup.setBuffer('triangleNormals', this._triangleNormalBuffer);\r\n this._faceNormalBindGroup.setValue('triangleCount', adjacency.triangleCount);\r\n this._faceNormalBindGroup.setValue('minDistance', 1e-5);\r\n\r\n this._vertexNormalBindGroup = this._device.createBindGroup(\r\n this._vertexNormalProgram.bindGroupLayouts[0]\r\n );\r\n this._vertexNormalBindGroup.setBuffer('triangleNormals', this._triangleNormalBuffer);\r\n this._vertexNormalBindGroup.setBuffer(\r\n 'vertexTriangleAdjacency',\r\n this._vertexTriangleAdjacencyBuffer\r\n );\r\n this._vertexNormalBindGroup.setBuffer('vertexNormals', this._normalBuffer);\r\n this._vertexNormalBindGroup.setValue('vertexCount', vertexCount);\r\n this._vertexNormalBindGroup.setValue('maxTrianglesPerVertex', this._maxTrianglesPerVertex);\r\n this._vertexNormalBindGroup.setValue('minDistance', 1e-5);\r\n }\r\n }\r\n\r\n this._originalPositionBuffer = this._primitive.getVertexBuffer('position');\r\n retainObject(this._originalPositionBuffer);\r\n this._primitive.removeVertexBuffer('position');\r\n this._primitive.setVertexBuffer(this._positionBuffer!);\r\n if (this._normalBuffer) {\r\n this._originalNormalBuffer = this._primitive.getVertexBuffer('normal');\r\n retainObject(this._originalNormalBuffer);\r\n this._primitive.removeVertexBuffer('normal');\r\n this._primitive.setVertexBuffer(this._normalBuffer);\r\n }\r\n this._vertexCount = vertexCount;\r\n this._workgroupCount = Math.max(1, Math.ceil(vertexCount / workgroupSize));\r\n this._triangleCount = adjacency.triangleCount;\r\n this._triangleWorkgroupCount = Math.max(1, Math.ceil(this._triangleCount / workgroupSize));\r\n this.disableTargetSkinning();\r\n this.updateTargetBoundingBox(initialSimulationPositions);\r\n this.updateColliderBuffers();\r\n if (this._autoUpdate && options?.scene) {\r\n this.bindToScene(options.scene);\r\n }\r\n this._enabled = !!wantEnabled;\r\n this._disabledReason = null;\r\n } catch (err) {\r\n this._disabledReason = `GPU cloth initialization failed: ${\r\n err instanceof Error ? err.message : String(err)\r\n }`;\r\n this._enabled = false;\r\n }\r\n }\r\n\r\n static async createFromPrimitive(\r\n primitive: Primitive,\r\n options?: Omit<GPUClothSystemOptions, 'primitive' | 'positionData' | 'indexData'>\r\n ) {\r\n const positionData = await readPositionDataFromPrimitive(primitive);\r\n const skinningData = await readSkinningDataFromPrimitive(primitive);\r\n const indexData = await readIndexDataFromPrimitive(primitive, (positionData.length / 3) >> 0);\r\n return new GPUClothSystem({\r\n ...options,\r\n primitive,\r\n positionData,\r\n indexData,\r\n skinningBlendIndices: skinningData?.blendIndices ?? undefined,\r\n skinningBlendWeights: skinningData?.blendWeights ?? undefined\r\n });\r\n }\r\n\r\n static async createFromMesh(\r\n mesh: { primitive: Nullable<Primitive>; scene?: Nullable<Scene> },\r\n options?: Omit<GPUClothSystemOptions, 'primitive' | 'positionData' | 'indexData' | 'scene'>\r\n ) {\r\n if (!mesh.primitive) {\r\n throw new Error('GPU cloth initialization failed: mesh has no primitive.');\r\n }\r\n return GPUClothSystem.createFromPrimitive(mesh.primitive, {\r\n ...options,\r\n collisionSpaceNode: mesh,\r\n scene: mesh.scene ?? null\r\n });\r\n }\r\n\r\n async setWrapTargets(targets: any[]) {\r\n this.clearWrapTargets();\r\n if (\r\n !this.supported ||\r\n !this._device ||\r\n !this._positionBuffer ||\r\n !this._sourcePositionData ||\r\n !this._sourceIndexData\r\n ) {\r\n return;\r\n }\r\n const uniqueTargets = [\r\n ...new Set((targets ?? []).filter((target) => target?.primitive && target !== this._collisionSpaceNode))\r\n ];\r\n for (const target of uniqueTargets) {\r\n try {\r\n const binding = await GPUClothWrapBinding.create(\r\n this._device,\r\n this._collisionSpaceNode,\r\n this._positionBuffer,\r\n this._sourcePositionData,\r\n this._sourceIndexData,\r\n target,\r\n this._workgroupSize\r\n );\r\n this._wrapBindings.push(binding);\r\n } catch (err) {\r\n console.error('GPU cloth wrap target initialization failed:', err);\r\n }\r\n }\r\n }\r\n\r\n setWrapTargetsFromBindingData(targets: GPUClothWrapBindingTarget[]) {\r\n this.clearWrapTargets();\r\n if (\r\n !this.supported ||\r\n !this._device ||\r\n !this._positionBuffer ||\r\n !this._sourcePositionData ||\r\n !this._sourceIndexData\r\n ) {\r\n return;\r\n }\r\n const seen = new Set<any>();\r\n for (const entry of targets ?? []) {\r\n const target = entry?.target;\r\n if (!target?.primitive || target === this._collisionSpaceNode || seen.has(target)) {\r\n continue;\r\n }\r\n seen.add(target);\r\n try {\r\n const binding = GPUClothWrapBinding.createFromData(\r\n this._device,\r\n this._collisionSpaceNode,\r\n this._positionBuffer,\r\n this._sourcePositionData,\r\n this._sourceIndexData,\r\n target,\r\n this._workgroupSize,\r\n entry.data\r\n );\r\n this._wrapBindings.push(binding);\r\n } catch (err) {\r\n console.error('GPU cloth wrap target binding cache initialization failed:', err);\r\n }\r\n }\r\n }\r\n\r\n clearWrapTargets() {\r\n if (this._wrapBindings.length === 0) {\r\n return;\r\n }\r\n for (const binding of this._wrapBindings) {\r\n binding.dispose();\r\n }\r\n this._wrapBindings = [];\r\n }\r\n\r\n get enabled() {\r\n return this._enabled;\r\n }\r\n\r\n set enabled(value: boolean) {\r\n const enabled = this.supported && !!value;\r\n if (this._enabled !== enabled) {\r\n this.resetSimulationTiming();\r\n }\r\n this._enabled = enabled;\r\n }\r\n\r\n get supported() {\r\n return this._disabledReason === null;\r\n }\r\n\r\n get disabledReason() {\r\n return this._disabledReason;\r\n }\r\n\r\n get colliders() {\r\n return this._colliders;\r\n }\r\n\r\n set colliders(value: SpringCollider[]) {\r\n this._colliders = [...(value ?? [])];\r\n this.resetColliderSmoothing();\r\n this.updateColliderBuffers();\r\n }\r\n\r\n addCollider(collider: SpringCollider) {\r\n this._colliders.push(collider);\r\n this.updateColliderBuffers();\r\n }\r\n\r\n removeCollider(collider: SpringCollider) {\r\n const idx = this._colliders.indexOf(collider);\r\n if (idx >= 0) {\r\n this._colliders.splice(idx, 1);\r\n this.updateColliderBuffers();\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n clearColliders() {\r\n this._colliders.length = 0;\r\n this.resetColliderSmoothing();\r\n this.updateColliderBuffers();\r\n }\r\n\r\n get gravity() {\r\n return this._gravity;\r\n }\r\n\r\n set gravity(value: Vector3) {\r\n this._gravity.set(value);\r\n }\r\n\r\n get damping() {\r\n return this._damping;\r\n }\r\n\r\n set damping(value: number) {\r\n this._damping = clamp(value, 0, 1);\r\n }\r\n\r\n get dynamicFriction() {\r\n return this._dynamicFriction;\r\n }\r\n\r\n set dynamicFriction(value: number) {\r\n this._dynamicFriction = clamp(value, 0, 1);\r\n }\r\n\r\n get staticFriction() {\r\n return this._staticFriction;\r\n }\r\n\r\n set staticFriction(value: number) {\r\n this._staticFriction = clamp(value, 0, 1);\r\n }\r\n\r\n get stiffness() {\r\n return this._stiffness;\r\n }\r\n\r\n set stiffness(value: number) {\r\n this._stiffness = clamp(value, 0, 1);\r\n }\r\n\r\n get poseFollow() {\r\n return this._poseFollow;\r\n }\r\n\r\n set poseFollow(value: number) {\r\n this._poseFollow = clamp(value, 0, 1);\r\n }\r\n\r\n get solverIterations() {\r\n return this._solverIterations;\r\n }\r\n\r\n set solverIterations(value: number) {\r\n this._solverIterations = Math.max(1, value | 0);\r\n }\r\n\r\n get substeps() {\r\n return this._substeps;\r\n }\r\n\r\n set substeps(value: number) {\r\n this._substeps = clamp(value, 1, 8) | 0;\r\n }\r\n\r\n get vertexCount() {\r\n return this._vertexCount;\r\n }\r\n\r\n bindToScene(scene: Nullable<Scene>) {\r\n if (this._boundScene === scene) {\r\n return;\r\n }\r\n this.detachAutoUpdateTarget();\r\n if (this._boundScene) {\r\n this._boundScene.off('update', this._onSceneUpdate, this);\r\n }\r\n this._boundScene = scene ?? null;\r\n if (this._boundScene) {\r\n this._boundScene.on('update', this._onSceneUpdate, this);\r\n this.attachAutoUpdateTarget();\r\n }\r\n }\r\n\r\n unbindFromScene() {\r\n this.bindToScene(null);\r\n }\r\n\r\n update(deltaTime: number) {\r\n if (!this._enabled) {\r\n return;\r\n }\r\n if (\r\n !this._device ||\r\n !this._integrateProgram ||\r\n !this._constraintProgram ||\r\n !this._integrateBindGroup ||\r\n !this._constraintBindGroup\r\n ) {\r\n return;\r\n }\r\n const frameDt = clamp(Number(deltaTime) || 0, 0, MAX_ACCUMULATED_SIMULATION_TIME);\r\n this._latestInputDeltaTime = frameDt;\r\n this.updateSkinnedRestPositions(frameDt);\r\n this.updateColliderBuffers(frameDt);\r\n if (frameDt <= 0) {\r\n return;\r\n }\r\n this._timeAccumulator = Math.min(this._timeAccumulator + frameDt, MAX_ACCUMULATED_SIMULATION_TIME);\r\n const stepCount = Math.min(\r\n MAX_SIMULATION_STEPS_PER_UPDATE,\r\n Math.floor((this._timeAccumulator + 1e-8) / FIXED_SIMULATION_TIME_STEP)\r\n );\r\n if (stepCount <= 0) {\r\n return;\r\n }\r\n this._timeAccumulator = Math.max(0, this._timeAccumulator - stepCount * FIXED_SIMULATION_TIME_STEP);\r\n this._device.pushDeviceStates();\r\n try {\r\n for (let step = 0; step < stepCount; step++) {\r\n this.simulateStep(FIXED_SIMULATION_TIME_STEP);\r\n }\r\n this.updateSimulationOutputs();\r\n } finally {\r\n this._device.popDeviceStates();\r\n }\r\n }\r\n\r\n dispose() {\r\n this.unbindFromScene();\r\n this.clearWrapTargets();\r\n this.restoreTargetSkinning();\r\n if (this._primitive) {\r\n if (this._positionBuffer) {\r\n this._primitive.removeVertexBuffer('position');\r\n if (this._originalPositionBuffer) {\r\n this._primitive.setVertexBuffer(this._originalPositionBuffer);\r\n }\r\n }\r\n if (this._normalBuffer || this._originalNormalBuffer) {\r\n this._primitive.removeVertexBuffer('normal');\r\n if (this._originalNormalBuffer) {\r\n this._primitive.setVertexBuffer(this._originalNormalBuffer);\r\n }\r\n }\r\n }\r\n this._integrateBindGroup?.dispose();\r\n this._integrateBindGroup = null;\r\n this._constraintBindGroup?.dispose();\r\n this._constraintBindGroup = null;\r\n this._faceNormalBindGroup?.dispose();\r\n this._faceNormalBindGroup = null;\r\n this._vertexNormalBindGroup?.dispose();\r\n this._vertexNormalBindGroup = null;\r\n this._integrateProgram?.dispose();\r\n this._integrateProgram = null;\r\n this._constraintProgram?.dispose();\r\n this._constraintProgram = null;\r\n this._faceNormalProgram?.dispose();\r\n this._faceNormalProgram = null;\r\n this._vertexNormalProgram?.dispose();\r\n this._vertexNormalProgram = null;\r\n this._prevPositionBuffer?.dispose();\r\n this._prevPositionBuffer = null;\r\n this._restPositionBuffer?.dispose();\r\n this._restPositionBuffer = null;\r\n this._prevRestPositionBuffer?.dispose();\r\n this._prevRestPositionBuffer = null;\r\n this._invMassBuffer?.dispose();\r\n this._invMassBuffer = null;\r\n this._neighborIndexBuffer?.dispose();\r\n this._neighborIndexBuffer = null;\r\n this._restLengthBuffer?.dispose();\r\n this._restLengthBuffer = null;\r\n this._triangleIndexBuffer?.dispose();\r\n this._triangleIndexBuffer = null;\r\n this._triangleNormalBuffer?.dispose();\r\n this._triangleNormalBuffer = null;\r\n this._vertexTriangleAdjacencyBuffer?.dispose();\r\n this._vertexTriangleAdjacencyBuffer = null;\r\n this._sphereColliderBuffer?.dispose();\r\n this._sphereColliderBuffer = null;\r\n this._capsuleColliderBuffer?.dispose();\r\n this._capsuleColliderBuffer = null;\r\n this._planeColliderBuffer?.dispose();\r\n this._planeColliderBuffer = null;\r\n releaseObject(this._originalPositionBuffer);\r\n this._originalPositionBuffer = null;\r\n releaseObject(this._originalNormalBuffer);\r\n this._originalNormalBuffer = null;\r\n this._enabled = false;\r\n this.resetSimulationTiming();\r\n }\r\n\r\n private simulateStep(deltaTime: number) {\r\n const substeps = this._substeps;\r\n const substepDt = deltaTime / substeps;\r\n try {\r\n for (let substep = 0; substep < substeps; substep++) {\r\n this._integrateBindGroup!.setValue('deltaTime', substepDt);\r\n this._integrateBindGroup!.setValue('damping', this._damping);\r\n this._integrateBindGroup!.setValue('gravity', this._gravity);\r\n this._integrateBindGroup!.setValue('dynamicFriction', this._dynamicFriction);\r\n this._integrateBindGroup!.setValue('staticFriction', this._staticFriction);\r\n this._device!.setProgram(this._integrateProgram!);\r\n this._device!.setBindGroup(0, this._integrateBindGroup!);\r\n this._device!.compute(this._workgroupCount, 1, 1);\r\n\r\n this._constraintBindGroup!.setValue('stiffness', this._stiffness);\r\n this._constraintBindGroup!.setValue('dynamicFriction', this._dynamicFriction);\r\n this._constraintBindGroup!.setValue('staticFriction', this._staticFriction);\r\n this._device!.setProgram(this._constraintProgram!);\r\n this._device!.setBindGroup(0, this._constraintBindGroup!);\r\n for (let i = 0; i < this._solverIterations; i++) {\r\n this._constraintBindGroup!.setValue(\r\n 'poseFollow',\r\n i === this._solverIterations - 1 ? this.getSubstepPoseFollow() : 0\r\n );\r\n this._device!.compute(this._workgroupCount, 1, 1);\r\n }\r\n }\r\n } finally {\r\n // Advance the animated rest pose once per fixed simulation step so a\r\n // single dropped frame does not inject the same pose delta repeatedly.\r\n this.commitRestPositions();\r\n }\r\n }\r\n\r\n private updateSimulationOutputs() {\r\n if (\r\n this._rebuildNormals &&\r\n this._faceNormalProgram &&\r\n this._vertexNormalProgram &&\r\n this._faceNormalBindGroup &&\r\n this._vertexNormalBindGroup\r\n ) {\r\n this._device!.setProgram(this._faceNormalProgram);\r\n this._device!.setBindGroup(0, this._faceNormalBindGroup);\r\n this._device!.compute(this._triangleWorkgroupCount, 1, 1);\r\n\r\n this._device!.setProgram(this._vertexNormalProgram);\r\n this._device!.setBindGroup(0, this._vertexNormalBindGroup);\r\n this._device!.compute(this._workgroupCount, 1, 1);\r\n }\r\n for (const binding of this._wrapBindings) {\r\n binding.update();\r\n }\r\n }\r\n\r\n private resetSimulationTiming() {\r\n this._timeAccumulator = 0;\r\n this._latestInputDeltaTime = 0;\r\n this._pendingAutoUpdateDeltaTime = 0;\r\n this._smoothedRestPositionData = null;\r\n this.resetColliderSmoothing();\r\n }\r\n\r\n private resetColliderSmoothing() {\r\n this._smoothedSphereCenters = new WeakMap();\r\n this._smoothedCapsuleEndpoints = new WeakMap();\r\n this._smoothedPlaneData = new WeakMap();\r\n }\r\n\r\n private updateColliderBuffers(deltaTime = this._latestInputDeltaTime) {\r\n if (!this._device || !this._integrateBindGroup) {\r\n return;\r\n }\r\n\r\n const spheres: { collider: SphereCollider; center: Vector3 }[] = [];\r\n const capsules: { collider: CapsuleCollider; start: Vector3; end: Vector3 }[] = [];\r\n const planes: { collider: PlaneCollider; point: Vector3; normal: Vector3 }[] = [];\r\n const blend = this.getTemporalBlendFactor(deltaTime, DEFAULT_COLLIDER_SMOOTHING_TIME);\r\n for (const collider of this._colliders) {\r\n if (!collider?.enabled) {\r\n continue;\r\n }\r\n if (collider.node) {\r\n updateColliderFromNode(collider);\r\n }\r\n if (collider.type === 'sphere') {\r\n const sphere = collider as SphereCollider;\r\n spheres.push({\r\n collider: sphere,\r\n center: this.getSmoothedSphereCenter(sphere, blend)\r\n });\r\n } else if (collider.type === 'capsule') {\r\n const capsule = collider as CapsuleCollider;\r\n const smoothed = this.getSmoothedCapsuleEndpoints(capsule, blend);\r\n capsules.push({\r\n collider: capsule,\r\n start: smoothed.start,\r\n end: smoothed.end\r\n });\r\n } else if (collider.type === 'plane') {\r\n const plane = collider as PlaneCollider;\r\n const smoothed = this.getSmoothedPlaneData(plane, blend);\r\n planes.push({\r\n collider: plane,\r\n point: smoothed.point,\r\n normal: smoothed.normal\r\n });\r\n }\r\n }\r\n\r\n const sphereData = new Float32Array(Math.max(1, spheres.length) * 4);\r\n for (let i = 0; i < spheres.length; i++) {\r\n const base = i * 4;\r\n const center = this.toCollisionSpacePoint(spheres[i].center);\r\n sphereData[base] = center.x;\r\n sphereData[base + 1] = center.y;\r\n sphereData[base + 2] = center.z;\r\n sphereData[base + 3] = this.toCollisionSpaceRadius(spheres[i].collider.radius);\r\n }\r\n\r\n const capsuleData = new Float32Array(Math.max(1, capsules.length) * 8);\r\n for (let i = 0; i < capsules.length; i++) {\r\n const base = i * 8;\r\n const start = this.toCollisionSpacePoint(capsules[i].start);\r\n const end = this.toCollisionSpacePoint(capsules[i].end);\r\n const axis = Vector3.sub(capsules[i].end, capsules[i].start, new Vector3());\r\n capsuleData[base] = start.x;\r\n capsuleData[base + 1] = start.y;\r\n capsuleData[base + 2] = start.z;\r\n capsuleData[base + 3] = this.toCollisionSpaceRadius(capsules[i].collider.radius, axis);\r\n capsuleData[base + 4] = end.x;\r\n capsuleData[base + 5] = end.y;\r\n capsuleData[base + 6] = end.z;\r\n capsuleData[base + 7] = 0;\r\n }\r\n\r\n const planeData = new Float32Array(Math.max(1, planes.length) * 8);\r\n for (let i = 0; i < planes.length; i++) {\r\n const base = i * 8;\r\n const point = this.toCollisionSpacePoint(planes[i].point);\r\n const normal = this.toCollisionSpaceVector(planes[i].normal);\r\n if (normal.magnitudeSq > 1e-8) {\r\n normal.inplaceNormalize();\r\n } else {\r\n normal.setXYZ(0, 1, 0);\r\n }\r\n planeData[base] = point.x;\r\n planeData[base + 1] = point.y;\r\n planeData[base + 2] = point.z;\r\n planeData[base + 3] = 0;\r\n planeData[base + 4] = normal.x;\r\n planeData[base + 5] = normal.y;\r\n planeData[base + 6] = normal.z;\r\n planeData[base + 7] = 0;\r\n }\r\n\r\n if (!this._sphereColliderBuffer || this._sphereColliderBuffer.byteLength < sphereData.byteLength) {\r\n if (this._sphereColliderBuffer) {\r\n // Drain queued uploads for the old buffer before replacing it.\r\n this._device.flush();\r\n this._sphereColliderBuffer.dispose();\r\n }\r\n this._sphereColliderBuffer = this._device.createBuffer(sphereData.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._integrateBindGroup.setBuffer('sphereData', this._sphereColliderBuffer);\r\n this._constraintBindGroup?.setBuffer('sphereData', this._sphereColliderBuffer);\r\n }\r\n this._sphereColliderBuffer.bufferSubData(0, sphereData);\r\n\r\n if (!this._capsuleColliderBuffer || this._capsuleColliderBuffer.byteLength < capsuleData.byteLength) {\r\n if (this._capsuleColliderBuffer) {\r\n // Drain queued uploads for the old buffer before replacing it.\r\n this._device.flush();\r\n this._capsuleColliderBuffer.dispose();\r\n }\r\n this._capsuleColliderBuffer = this._device.createBuffer(capsuleData.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._integrateBindGroup.setBuffer('capsuleData', this._capsuleColliderBuffer);\r\n this._constraintBindGroup?.setBuffer('capsuleData', this._capsuleColliderBuffer);\r\n }\r\n this._capsuleColliderBuffer.bufferSubData(0, capsuleData);\r\n\r\n if (!this._planeColliderBuffer || this._planeColliderBuffer.byteLength < planeData.byteLength) {\r\n if (this._planeColliderBuffer) {\r\n // Drain queued uploads for the old buffer before replacing it.\r\n this._device.flush();\r\n this._planeColliderBuffer.dispose();\r\n }\r\n this._planeColliderBuffer = this._device.createBuffer(planeData.byteLength, {\r\n usage: 'uniform',\r\n storage: true,\r\n dynamic: false,\r\n managed: false\r\n });\r\n this._integrateBindGroup.setBuffer('planeData', this._planeColliderBuffer);\r\n this._constraintBindGroup?.setBuffer('planeData', this._planeColliderBuffer);\r\n }\r\n this._planeColliderBuffer.bufferSubData(0, planeData);\r\n\r\n this._integrateBindGroup.setValue('sphereCount', spheres.length);\r\n this._integrateBindGroup.setValue('capsuleCount', capsules.length);\r\n this._integrateBindGroup.setValue('planeCount', planes.length);\r\n this._constraintBindGroup?.setValue('sphereCount', spheres.length);\r\n this._constraintBindGroup?.setValue('capsuleCount', capsules.length);\r\n this._constraintBindGroup?.setValue('planeCount', planes.length);\r\n }\r\n\r\n private getSubstepPoseFollow() {\r\n const effectivePoseFollow = this.getEffectivePoseFollow();\r\n if (effectivePoseFollow <= 0) {\r\n return 0;\r\n }\r\n const totalPoseFollowApplications = Math.max(1, this._substeps);\r\n return totalPoseFollowApplications > 1\r\n ? 1 - Math.pow(Math.max(0, 1 - effectivePoseFollow), 1 / totalPoseFollowApplications)\r\n : effectivePoseFollow;\r\n }\r\n\r\n private getEffectivePoseFollow() {\r\n // Cloth uses a dense per-vertex animated target, so the same numeric follow value\r\n // feels much stronger than sparse spring chains. Square the UI value to keep the\r\n // low range usable while preserving 1 => full follow.\r\n return this._poseFollow * this._poseFollow;\r\n }\r\n\r\n private toCollisionSpacePoint(worldPoint: Vector3): Vector3 {\r\n const invWorldMatrix = this._collisionSpaceNode?.invWorldMatrix;\r\n if (!invWorldMatrix?.transformPointAffine) {\r\n return worldPoint;\r\n }\r\n return invWorldMatrix.transformPointAffine(worldPoint, new Vector3());\r\n }\r\n\r\n private toCollisionSpaceVector(worldVector: Vector3): Vector3 {\r\n const invWorldMatrix = this._collisionSpaceNode?.invWorldMatrix;\r\n if (!invWorldMatrix?.transformVectorAffine) {\r\n return worldVector;\r\n }\r\n return invWorldMatrix.transformVectorAffine(worldVector, new Vector3());\r\n }\r\n\r\n private toCollisionSpaceRadius(worldRadius: number, axisWorld?: Vector3): number {\r\n const radius = Math.max(0, Number(worldRadius) || 0);\r\n if (radius <= 0) {\r\n return 0;\r\n }\r\n const invWorldMatrix = this._collisionSpaceNode?.invWorldMatrix;\r\n if (!invWorldMatrix?.transformVectorAffine) {\r\n return radius;\r\n }\r\n if (axisWorld && axisWorld.magnitudeSq > 1e-6) {\r\n const axis = axisWorld.clone().inplaceNormalize();\r\n let tangent = Vector3.cross(\r\n Math.abs(axis.y) < 0.999 ? Vector3.axisPY() : Vector3.axisPX(),\r\n axis,\r\n new Vector3()\r\n );\r\n if (tangent.magnitudeSq <= 1e-6) {\r\n tangent = Vector3.cross(Vector3.axisPZ(), axis, tangent);\r\n }\r\n tangent.inplaceNormalize();\r\n const bitangent = Vector3.cross(axis, tangent, new Vector3()).inplaceNormalize();\r\n const localTangent = this.toCollisionSpaceVector(\r\n Vector3.scale(tangent, radius, new Vector3())\r\n ).magnitude;\r\n const localBitangent = this.toCollisionSpaceVector(\r\n Vector3.scale(bitangent, radius, new Vector3())\r\n ).magnitude;\r\n return Math.max(1e-6, (localTangent + localBitangent) * 0.5);\r\n }\r\n const localX = this.toCollisionSpaceVector(new Vector3(radius, 0, 0)).magnitude;\r\n const localY = this.toCollisionSpaceVector(new Vector3(0, radius, 0)).magnitude;\r\n const localZ = this.toCollisionSpaceVector(new Vector3(0, 0, radius)).magnitude;\r\n return Math.max(1e-6, (localX + localY + localZ) / 3);\r\n }\r\n\r\n private _onSceneUpdate() {\r\n const dt = (getDevice().frameInfo.elapsedFrame || 16.6667) * 0.001;\r\n if (this.hasAutoUpdateTarget()) {\r\n this._pendingAutoUpdateDeltaTime = dt;\r\n this._collisionSpaceNode?.scene?.queueUpdateNode?.(this._collisionSpaceNode);\r\n return;\r\n }\r\n this.update(dt);\r\n }\r\n private hasAutoUpdateTarget() {\r\n const target = this._collisionSpaceNode;\r\n return !!(target?.addPostUpdateCallback && target?.removePostUpdateCallback);\r\n }\r\n private attachAutoUpdateTarget() {\r\n if (this.hasAutoUpdateTarget()) {\r\n this._collisionSpaceNode.addPostUpdateCallback(this._meshPostUpdateCallback);\r\n }\r\n }\r\n private detachAutoUpdateTarget() {\r\n if (this.hasAutoUpdateTarget()) {\r\n this._collisionSpaceNode.removePostUpdateCallback(this._meshPostUpdateCallback);\r\n }\r\n this._pendingAutoUpdateDeltaTime = 0;\r\n }\r\n private updateSkinnedRestPositions(deltaTime = 0) {\r\n if (\r\n !this._sourcePositionData ||\r\n !this._skinningBlendIndices ||\r\n !this._skinningBlendWeights ||\r\n !this._restPositionBuffer ||\r\n !this._prevRestPositionBuffer\r\n ) {\r\n return;\r\n }\r\n const target = this._collisionSpaceNode;\r\n const skeletonId = String(target?.skeletonName ?? '');\r\n const skeleton =\r\n skeletonId && typeof target?.findSkeletonById === 'function'\r\n ? target.findSkeletonById(skeletonId)\r\n : null;\r\n if (skeleton?.skinPositionsToLocal && target?.invWorldMatrix) {\r\n const restPositions =\r\n this._dynamicRestPositionData &&\r\n this._dynamicRestPositionData.length === this._sourcePositionData.length\r\n ? this._dynamicRestPositionData\r\n : new Float32Array(this._sourcePositionData.length);\r\n skeleton.skinPositionsToLocal(\r\n this._sourcePositionData,\r\n this._skinningBlendIndices,\r\n this._skinningBlendWeights,\r\n target.invWorldMatrix,\r\n restPositions\r\n );\r\n const smoothedRestPositions = this.smoothRestPositions(restPositions, deltaTime, restPositions);\r\n this._dynamicRestPositionData = restPositions;\r\n this._restPositionBuffer.bufferSubData(0, smoothedRestPositions);\r\n this._usingDynamicRestPose = true;\r\n this.updateTargetBoundingBox(smoothedRestPositions);\r\n return;\r\n }\r\n if (this._usingDynamicRestPose) {\r\n this._restPositionBuffer.bufferSubData(0, this._sourcePositionData);\r\n this._prevRestPositionBuffer.bufferSubData(0, this._sourcePositionData);\r\n this._usingDynamicRestPose = false;\r\n this._dynamicRestPositionData = null;\r\n this._smoothedRestPositionData = null;\r\n this.updateTargetBoundingBox(this._sourcePositionData);\r\n }\r\n }\r\n\r\n private smoothRestPositions(\r\n rawRestPositions: Float32Array<ArrayBuffer>,\r\n deltaTime: number,\r\n out: Float32Array<ArrayBuffer>\r\n ) {\r\n const blend = this.getTemporalBlendFactor(deltaTime, DEFAULT_REST_POSITION_SMOOTHING_TIME);\r\n const smoothed =\r\n this._smoothedRestPositionData && this._smoothedRestPositionData.length === rawRestPositions.length\r\n ? this._smoothedRestPositionData\r\n : new Float32Array(rawRestPositions.length);\r\n if (!this._smoothedRestPositionData || blend >= 1) {\r\n smoothed.set(rawRestPositions);\r\n } else {\r\n const retain = 1 - blend;\r\n for (let i = 0; i < rawRestPositions.length; i++) {\r\n smoothed[i] = smoothed[i] * retain + rawRestPositions[i] * blend;\r\n }\r\n }\r\n out.set(smoothed);\r\n this._smoothedRestPositionData = smoothed;\r\n return out;\r\n }\r\n\r\n private getTemporalBlendFactor(deltaTime: number, smoothingTime: number) {\r\n const dt = clamp(Number(deltaTime) || 0, 0, MAX_ACCUMULATED_SIMULATION_TIME);\r\n if (dt <= 0 || smoothingTime <= 0) {\r\n return 1;\r\n }\r\n return 1 - Math.exp(-dt / smoothingTime);\r\n }\r\n\r\n private getSmoothedSphereCenter(collider: SphereCollider, blend: number) {\r\n const current = collider.center?.clone() ?? new Vector3();\r\n const cached = this._smoothedSphereCenters.get(collider);\r\n if (!cached || blend >= 1) {\r\n this._smoothedSphereCenters.set(collider, current);\r\n return current;\r\n }\r\n cached.setXYZ(\r\n cached.x + (current.x - cached.x) * blend,\r\n cached.y + (current.y - cached.y) * blend,\r\n cached.z + (current.z - cached.z) * blend\r\n );\r\n return cached;\r\n }\r\n\r\n private getSmoothedCapsuleEndpoints(collider: CapsuleCollider, blend: number) {\r\n const currentStart = collider.start?.clone() ?? new Vector3();\r\n const currentEnd = collider.end?.clone() ?? new Vector3();\r\n const cached = this._smoothedCapsuleEndpoints.get(collider);\r\n if (!cached || blend >= 1) {\r\n const next = {\r\n start: currentStart,\r\n end: currentEnd\r\n };\r\n this._smoothedCapsuleEndpoints.set(collider, next);\r\n return next;\r\n }\r\n cached.start.setXYZ(\r\n cached.start.x + (currentStart.x - cached.start.x) * blend,\r\n cached.start.y + (currentStart.y - cached.start.y) * blend,\r\n cached.start.z + (currentStart.z - cached.start.z) * blend\r\n );\r\n cached.end.setXYZ(\r\n cached.end.x + (currentEnd.x - cached.end.x) * blend,\r\n cached.end.y + (currentEnd.y - cached.end.y) * blend,\r\n cached.end.z + (currentEnd.z - cached.end.z) * blend\r\n );\r\n return cached;\r\n }\r\n\r\n private getSmoothedPlaneData(collider: PlaneCollider, blend: number) {\r\n const currentPoint = collider.point?.clone() ?? new Vector3();\r\n const currentNormal = collider.normal?.clone() ?? Vector3.axisPY();\r\n if (currentNormal.magnitudeSq > 1e-8) {\r\n currentNormal.inplaceNormalize();\r\n } else {\r\n currentNormal.setXYZ(0, 1, 0);\r\n }\r\n const cached = this._smoothedPlaneData.get(collider);\r\n if (!cached || blend >= 1) {\r\n const next = {\r\n point: currentPoint,\r\n normal: currentNormal\r\n };\r\n this._smoothedPlaneData.set(collider, next);\r\n return next;\r\n }\r\n cached.point.setXYZ(\r\n cached.point.x + (currentPoint.x - cached.point.x) * blend,\r\n cached.point.y + (currentPoint.y - cached.point.y) * blend,\r\n cached.point.z + (currentPoint.z - cached.point.z) * blend\r\n );\r\n cached.normal.setXYZ(\r\n cached.normal.x + (currentNormal.x - cached.normal.x) * blend,\r\n cached.normal.y + (currentNormal.y - cached.normal.y) * blend,\r\n cached.normal.z + (currentNormal.z - cached.normal.z) * blend\r\n );\r\n if (cached.normal.magnitudeSq > 1e-8) {\r\n cached.normal.inplaceNormalize();\r\n } else {\r\n cached.normal.setXYZ(0, 1, 0);\r\n }\r\n return cached;\r\n }\r\n\r\n private updateTargetBoundingBox(positions: Float32Array<ArrayBuffer>) {\r\n if (!positions || positions.length < 3) {\r\n return;\r\n }\r\n let minX = Number.POSITIVE_INFINITY;\r\n let minY = Number.POSITIVE_INFINITY;\r\n let minZ = Number.POSITIVE_INFINITY;\r\n let maxX = Number.NEGATIVE_INFINITY;\r\n let maxY = Number.NEGATIVE_INFINITY;\r\n let maxZ = Number.NEGATIVE_INFINITY;\r\n for (let i = 0; i + 2 < positions.length; i += 3) {\r\n const x = positions[i];\r\n const y = positions[i + 1];\r\n const z = positions[i + 2];\r\n if (!Number.isFinite(x) || !Number.isFinite(y) || !Number.isFinite(z)) {\r\n continue;\r\n }\r\n minX = Math.min(minX, x);\r\n minY = Math.min(minY, y);\r\n minZ = Math.min(minZ, z);\r\n maxX = Math.max(maxX, x);\r\n maxY = Math.max(maxY, y);\r\n maxZ = Math.max(maxZ, z);\r\n }\r\n if (!Number.isFinite(minX)) {\r\n return;\r\n }\r\n const padding = Math.max(maxX - minX, maxY - minY, maxZ - minZ) * 0.15;\r\n const bbox = new BoundingBox(\r\n new Vector3(minX - padding, minY - padding, minZ - padding),\r\n new Vector3(maxX + padding, maxY + padding, maxZ + padding)\r\n );\r\n const target = this._collisionSpaceNode;\r\n if (typeof target?.setAnimatedBoundingBox === 'function') {\r\n target.setAnimatedBoundingBox(bbox);\r\n } else {\r\n this._primitive?.setBoundingVolume(bbox);\r\n }\r\n }\r\n private commitRestPositions() {\r\n if (!this._prevRestPositionBuffer || !this._usingDynamicRestPose) {\r\n return;\r\n }\r\n if (this._dynamicRestPositionData) {\r\n this._prevRestPositionBuffer.bufferSubData(0, this._dynamicRestPositionData);\r\n }\r\n }\r\n private disableTargetSkinning() {\r\n const target = this._collisionSpaceNode;\r\n if (!target || typeof target.suspendSkinning !== 'boolean' || this._restoreSkinAnimation !== null) {\r\n return;\r\n }\r\n this._skinAnimationTarget = target;\r\n this._restoreSkinAnimation = target.suspendSkinning;\r\n target.suspendSkinning = true;\r\n target.setBoneMatrices?.(null);\r\n target.setAnimatedBoundingBox?.(null);\r\n }\r\n private restoreTargetSkinning() {\r\n if (!this._skinAnimationTarget || this._restoreSkinAnimation === null) {\r\n return;\r\n }\r\n this.detachAutoUpdateTarget();\r\n this._skinAnimationTarget.setAnimatedBoundingBox?.(null);\r\n this._skinAnimationTarget.suspendSkinning = this._restoreSkinAnimation;\r\n this._skinAnimationTarget = null;\r\n this._restoreSkinAnimation = null;\r\n }\r\n}\r\n"],"names":["encodeTypedArrayBase64","view","uint8ArrayToBase64","Uint8Array","buffer","byteOffset","byteLength","decodeTypedArrayFromBase64","ctor","base64","expectedLength","bytes","base64ToUint8Array","BYTES_PER_ELEMENT","Error","slice","result","length","isWrapBindingDataCompatible","data","sourceRestPositions","targetVertexCount","version","vertexCount","sourceVertexCount","influenceCount","WRAP_TRIANGLE_VERTEX_COUNT","resolveDevice","explicitDevice","getDevice","isGPUClothSupported","device","resolved","type","DEFAULT_DAMPING","DEFAULT_DYNAMIC_FRICTION","DEFAULT_STATIC_FRICTION","DEFAULT_STIFFNESS","DEFAULT_POSE_FOLLOW","DEFAULT_SUBSTEPS","DEFAULT_SOLVER_ITERATIONS","DEFAULT_MAX_NEIGHBORS","DEFAULT_WORKGROUP_SIZE","DEFAULT_MAX_TRIANGLES_PER_VERTEX","DEFAULT_REST_POSITION_SMOOTHING_TIME","DEFAULT_COLLIDER_SMOOTHING_TIME","FIXED_SIMULATION_TIME_STEP","MAX_ACCUMULATED_SIMULATION_TIME","MAX_SIMULATION_STEPS_PER_UPDATE","Math","max","ceil","WRAP_MIN_DISTANCE","clamp","value","min","getInitialColliderBufferFloatCount","colliders","stride","count","reduce","total","collider","getPrimitiveScalarByteSize","PBPrimitiveType","I16","I16_NORM","U16","U16_NORM","F16","I32","I32_NORM","U32","U32_NORM","F32","readPrimitiveScalar","scalarType","normalized","I8","I8_NORM","getInt8","U8","U8_NORM","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","distance3","positions","a","b","a0","b0","dx","dy","dz","sqrt","dot3","ax","ay","az","bx","by","bz","normalize3","x","y","z","fallback","hypot","buildWrapTriangleFrame","p0x","p0y","p0z","p1x","p1y","p1z","p2x","p2y","p2z","out","edge01x","edge01y","edge01z","edge02x","edge02y","edge02z","tangent","normal","fallbackAxis","abs","bitangent","closestPointOnTriangle","px","py","pz","cx","cy","cz","closestOut","baryOut","abx","aby","abz","acx","acy","acz","apx","apy","apz","d1","d2","bpx","bpy","bpz","d3","d4","vc","v","cpx","cpy","cpz","d5","d6","vb","w","va","denom","u","buildPinWeightArray","explicitWeights","explicitPinned","Float32Array","len","i","Number","isFinite","buildNeighborData","indexData","maxNeighbors","neighborMap","Array","from","Map","addEdge","mapA","mapB","oldAB","get","undefined","set","oldBA","c","totalEntries","neighborIndices","Int32Array","restLengths","fill","hasConstraint","sorted","entries","sort","j","slot","toUInt32Indices","Uint32Array","buildVertexTriangleAdjacency","maxTrianglesPerVertex","triangleCount","trianglesPerVertex","tri","base","i0","i1","i2","push","adjacency","tris","t","buildInitialSimulationPositions","options","sourcePositions","positionData","target","collisionSpaceNode","blendIndices","skinningBlendIndices","blendWeights","skinningBlendWeights","invWorldMatrix","findSkeletonById","skeletonId","String","skeletonName","skeleton","skinPositionsToLocal","resolveWrapBindPositions","mesh","basePositions","primitive","blendData","readSkinningDataFromPrimitive","createIntegrateProgram","workgroupSize","program","buildComputeProgram","compute","pb","float","storageBuffer","prevPositions","restPositions","storageBufferReadonly","prevRestPositions","invMass","sphereData","capsuleData","planeData","uint","uniform","deltaTime","damping","gravity","vec3","sphereCount","capsuleCount","planeCount","dynamicFriction","staticFriction","minDistance","main","$l","index","$builtins","globalInvocationId","$if","lessThan","mul","at","add","restX","restY","restZ","prevRestX","prevRestY","prevRestZ","freeWeight","pinWeight","sub","current","previous","rest","prevRest","restDelta","dt2","velocity","next","greaterThan","$for","sphereBase","center","radius","deltaCol","lenCol","contactNormal","div","$else","correctionDelta","correctionLen","surfaceDelta","normalStep","dot","tangentStep","normalTravel","tangentLen","dynamicBasis","staticBasis","staticLimit","lessThanEqual","dynamicRemove","capsuleBase","cStart","cRadius","cEnd","ab","abLen2","closest","ap","deltaCap","lenCap","planeBase","k","planePoint","planeNormal","planeDistance","preProject","prevOut","setAt","name","createConstraintProgram","int","stiffness","poseFollow","pos","correction","validCount","neighborStart","neighbor","greaterThanEqual","neighborBase","neighborPos","restLength","delta","offset","corrected","scale","followStrength","createFaceNormalProgram","triangleIndices","triangleNormals","indexBase","p0Base","p1Base","p2Base","p0","p1","p2","n","cross","nLen","outBase","createVertexNormalProgram","vertexTriangleAdjacency","vertexNormals","vertex","sum","valid","start","nBase","readPositionDataFromPrimitive","readVertexAttributeDataFromPrimitive","semantic","componentCount","info","getVertexBufferInfo","isPrimitiveType","cols","getNumVertices","getBufferSubData","componentByteSize","baseByteOffset","drawOffset","raw","srcOffset","src","dst","DataView","Promise","all","buildNonIndexedTriangles","primitiveType","indexStart","indexCount","indices","readIndexDataFromPrimitive","indexBuffer","getIndexBuffer","indexType","Uint16Array","createWrapDeformerProgram","sourceTriangleIndices","sourceBarycentrics","targetLocalOffsets","targetPositions","targetNormals","sourceToTargetMatrix","mat4","targetBase","influenceBase","base0","base1","base2","w0","w1","w2","vec4","xyz","basePoint","edge01","edge02","normalLen","or","bitangentLen","localOffset","deformedPosition","transformPointArrayByMatrix","matrix","source","getWrapSourceToTargetMatrix","worldMatrix","Matrix4x4","identity","multiplyAffine","GPUClothWrapBinding","_device","_source","_target","_targetPrimitive","_wrapTriangleIndexBuffer","_wrapBarycentricBuffer","_wrapLocalOffsetBuffer","_program","_bindGroup","_workgroupCount","_maxOffsetDistance","_sourceToTargetMatrix","_positionBuffer","_normalBuffer","_originalPositionBuffer","_originalNormalBuffer","_restoreSkinning","targetPrimitive","wrapTriangleIndexBuffer","wrapBarycentricBuffer","wrapLocalOffsetBuffer","bindGroup","positionBuffer","normalBuffer","originalPositionBuffer","originalNormalBuffer","workgroupCount","maxOffsetDistance","restoreSkinning","create","sourcePositionBuffer","sourceIndexData","createBindingData","createFromData","targetBasePositions","sourceToTargetBindMatrix","resolvedSourcePositions","sourcePositionsInTargetSpace","sourceTriangleCount","closestPoint","barycentrics","frame","vx","vy","vz","bestDistanceSq","POSITIVE_INFINITY","bestI0","bestI1","bestI2","bestClosestX","bestClosestY","bestClosestZ","bestBary0","bestBary1","bestBary2","triBase","distanceSq","bestBase0","bestBase1","bestBase2","deltaX","deltaY","deltaZ","_sourceIndexData","expectedElementCount","influenceElementCount","wrapSourceTriangleIndices","wrapSourceBarycentrics","wrapTargetLocalOffsets","createVertexBuffer","storage","managed","createBuffer","usage","dynamic","bufferSubData","createBindGroup","bindGroupLayouts","setBuffer","setValue","getVertexBuffer","retainObject","removeVertexBuffer","setVertexBuffer","suspendSkinning","setBoneMatrices","setAnimatedBoundingBox","binding","update","setProgram","setBindGroup","updateBoundingBox","dispose","releaseObject","sourceBBox","getAnimatedBoundingBox","getBoundingVolume","toAABB","minX","minY","minZ","maxX","NEGATIVE_INFINITY","maxY","maxZ","corners","minPoint","maxPoint","corner","padding","BoundingBox","Vector3","createGPUClothWrapBindingData","sourcePrimitive","sourceIndices","GPUClothSystem","_enabled","_disabledReason","_primitive","_prevPositionBuffer","_restPositionBuffer","_prevRestPositionBuffer","_invMassBuffer","_neighborIndexBuffer","_restLengthBuffer","_integrateProgram","_constraintProgram","_faceNormalProgram","_vertexNormalProgram","_integrateBindGroup","_constraintBindGroup","_faceNormalBindGroup","_vertexNormalBindGroup","_vertexCount","_triangleCount","_triangleWorkgroupCount","_maxNeighbors","_maxTrianglesPerVertex","_gravity","_damping","_dynamicFriction","_staticFriction","_stiffness","_poseFollow","_substeps","_solverIterations","_colliders","_sphereColliderBuffer","_capsuleColliderBuffer","_planeColliderBuffer","_sphereColliderData","_capsuleColliderData","_planeColliderData","_triangleIndexBuffer","_triangleNormalBuffer","_vertexTriangleAdjacencyBuffer","_rebuildNormals","_collisionSpaceNode","_sourcePositionData","_skinningBlendIndices","_skinningBlendWeights","_dynamicRestPositionData","_smoothedRestPositionData","_usingDynamicRestPose","_skinAnimationTarget","_restoreSkinAnimation","_boundScene","_autoUpdate","_workgroupSize","_wrapBindings","_latestInputDeltaTime","_smoothedSphereCenters","_smoothedCapsuleEndpoints","_smoothedPlaneData","_timeAccumulator","_pendingAutoUpdateDeltaTime","_meshPostUpdateCallback","supported","wantEnabled","enabled","clone","substeps","solverIterations","rebuildNormals","autoUpdate","WeakMap","_frameId","_elapsedInSeconds","deltaInSeconds","dt","initialSimulationPositions","indexDataU32","pinWeightArray","pinnedVertexWeights","pinnedVertexIndices","neighbors","invMassArray","getSubstepPoseFollow","disableTargetSkinning","updateTargetBoundingBox","updateColliderBuffers","scene","bindToScene","err","message","createFromPrimitive","skinningData","createFromMesh","setWrapTargets","targets","clearWrapTargets","uniqueTargets","Set","filter","console","error","setWrapTargetsFromBindingData","seen","entry","has","resetSimulationTiming","disabledReason","resetColliderSmoothing","addCollider","removeCollider","idx","indexOf","splice","clearColliders","detachAutoUpdateTarget","off","_onSceneUpdate","on","attachAutoUpdateTarget","unbindFromScene","frameDt","updateSkinnedRestPositions","stepCount","floor","pushDeviceStates","step","simulateStep","updateSimulationOutputs","popDeviceStates","restoreTargetSkinning","substepDt","substep","commitRestPositions","spheres","capsules","planes","blend","getTemporalBlendFactor","node","updateColliderFromNode","sphere","getSmoothedSphereCenter","capsule","smoothed","getSmoothedCapsuleEndpoints","end","plane","getSmoothedPlaneData","point","toCollisionSpacePoint","toCollisionSpaceRadius","axis","toCollisionSpaceVector","magnitudeSq","inplaceNormalize","setXYZ","flush","effectivePoseFollow","getEffectivePoseFollow","totalPoseFollowApplications","pow","worldPoint","transformPointAffine","worldVector","transformVectorAffine","worldRadius","axisWorld","axisPY","axisPX","axisPZ","localTangent","magnitude","localBitangent","localX","localY","localZ","frameInfo","elapsedFrame","hasAutoUpdateTarget","queueUpdateNode","addPostUpdateCallback","removePostUpdateCallback","smoothedRestPositions","smoothRestPositions","rawRestPositions","retain","smoothingTime","exp","cached","currentStart","currentEnd","currentPoint","currentNormal","bbox","setBoundingVolume"],"mappings":"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"}
|