# Cloth, soft-body and rod coverage of ALICE-Physics (real-time and
# physically based animation of deformable objects), against an external
# reference frame.
#
# What this table is: every capability that the standard texts (Bender et al.,
# Position-Based Simulation Methods in Computer Graphics; Müller et al. 2007
# Position Based Dynamics; Macklin et al. 2016 XPBD; Baraff-Witkin 1998; Bridson
# et al. 2002 cloth collisions; Bergou et al. 2008 Discrete Elastic Rods;
# Bouaziz et al. 2014 Projective Dynamics), reference implementations (NVIDIA
# Flex, PhysX cloth, Houdini Vellum) and standard benchmarks (hanging cloth,
# Cusick drape, crumpling, cantilever rod, catenary, Michell twisted ring, soft
# cube volume) expect of a deformable-object simulator, one [[item]] per
# capability, with what the crate has today. The rows are written by hand: the
# axes and the items come from the reference frame, not from the modules that
# exist, so a missing capability is visible instead of absent.
#
# Boundary with the other tables (one capability lives in one table only):
# - a single rope joint between two rigid bodies (one unilateral constraint)
# is the rigid table; rope particles attached to a body are here
# - continuum solid FE (linear, hyperelastic, shells and membranes as finite
# elements) and tetrahedral mesh generation are the solid FEM table; here
# are the XPBD / position-based deformables
# - fracture mechanics (energy release rate, crack growth) is the fracture
# table; the geometric operation of cutting and tearing a mesh is here
# - cloth-fluid and other cloth-flow coupling (cloth_fluid, fsi) are the
# coupling table; aerodynamic forces evaluated on the cloth itself are here
# - rigid-body sleeping, rigid contact and the 2D engine (physics2d) are the
# rigid table
# Functions that exist but are not called by the step of a deformable, and
# module docs that name a capability without an implementation, say so in
# `evidence`.
#
# status (exactly one of):
# implemented+oracle implemented, and at least one non-ignored test
# checks it against an independent reference
# implemented-no-oracle implemented, no such test
# partial implemented with a restriction that the source states;
# `limitation` quotes it, and the source carries a
# `LIMITATION(<id>)` comment at that place
# missing not implemented
# out-of-scope not a capability of this field (reason in `evidence`)
#
# This axis is separate from the test ignore reasons (`known defect: ...`,
# `src gap: ...`, `diagnostic`, `runtime`). A capability that exists with a
# recorded defect keeps its status and cites the known-defect test in
# `evidence`; it is not `missing`.
#
# keys: id (COV-SOFT-NNN) / axis / item / source (book, chapter, paper or
# reference-implementation feature; no quoted text) / status / evidence
# (`src/...rs::symbol`, `tests/...rs::test_fn`) / oracle_candidate / limitation
# (verbatim quote of the source, required for `partial`). "(推測)" marks a row
# whose status rests on a search that may have missed a synonym.
#
# Reference values marked "参照値要確認" are to be checked against the original
# publication before any test uses them.
#
# Checked by scripts/coverage_check.py (tests: scripts/test_coverage_check.py).
[[item]]
id = "COV-SOFT-001"
axis = "cloth model"
item = "mass-spring cloth (structural / shear / bend springs integrated as forces)"
source = "Provot 1995 (Deformation constraints in a mass-spring model); Baraff-Witkin 1998 §4"
status = "missing"
evidence = "布はばね力でなく位置拘束 (XPBD 距離) だけで表す src/cloth.rs::solve_edge_constraints 力として積分するばねモデルは無い"
oracle_candidate = "単一のばね-質点の振動周期 2π√(m/k) と減衰なしのエネルギー保存"
limitation = ""
[[item]]
id = "COV-SOFT-002"
axis = "cloth model"
item = "stretch: XPBD distance constraints on the mesh edges"
source = "Müller et al. 2007 (Position Based Dynamics) §3; Macklin et al. 2016 (XPBD); Houdini Vellum distance constraint"
status = "implemented+oracle"
evidence = "src/cloth.rs::solve_edge_constraints tests/default_configs.rs::cloth_config_default_pinned_curtain_sags_and_stays_bounded (上端を pin した 2 m の布の下端が非伸長長さ -2 に落ち着く)"
oracle_candidate = "α>0 で一軸に引いた帯の静的伸びが α から決まる値と一致 (COV-SOFT-038 と組で)"
limitation = ""
[[item]]
id = "COV-SOFT-003"
axis = "cloth model"
item = "shear resistance separate from stretch (shear constraint with its own stiffness)"
source = "Provot 1995; Baraff-Witkin 1998 (shear condition); Houdini Vellum cloth (stretch / shear)"
status = "missing"
evidence = "格子の三角形分割の全辺に同じ stretch_compliance を掛ける src/cloth.rs::build_constraints shear 専用の剛性は無い"
oracle_candidate = "単純せん断した正方形片の復元力が shear 剛性だけで決まる"
limitation = ""
[[item]]
id = "COV-SOFT-004"
axis = "cloth model"
item = "anisotropic in-plane stiffness (warp / weft)"
source = "Baraff-Witkin 1998 (u / v stretch conditions); Volino et al. 2009 (A simple approach to nonlinear tensile stiffness for accurate cloth simulation)"
status = "missing"
evidence = "伸びの剛性は 1 値 src/cloth.rs::ClothConfig"
oracle_candidate = "経糸方向と緯糸方向に同じ荷重で引いた伸びの比が剛性比に一致"
limitation = ""
[[item]]
id = "COV-SOFT-005"
axis = "cloth model"
item = "bending: dihedral-angle constraint between adjacent triangles"
source = "Müller et al. 2007 (Position Based Dynamics) Appendix A; Houdini Vellum bend"
status = "implemented+oracle"
evidence = "src/cloth.rs::solve_bend_constraints src/cloth.rs::bend_flat_rest_is_pi_and_flat_cloth_is_a_fixed_point src/cloth.rs::bend_folded_cloth_relaxes_monotonically_toward_flat src/cloth.rs::bend_pinned_vertices_do_not_move"
oracle_candidate = ""
limitation = ""
[[item]]
id = "COV-SOFT-006"
axis = "cloth model"
item = "isometric / quadratic bending (discrete-shell bending energy)"
source = "Bergou et al. 2006 (A Quadratic Bending Model for Inextensible Surfaces); Grinspun et al. 2003 (Discrete Shells)"
status = "missing"
evidence = "曲げは二面角の位置拘束のみ src/cloth.rs::solve_bend_constraints"
oracle_candidate = "円筒に巻いた布の曲げエネルギーが κ²/2 の面積分に一致"
limitation = ""
[[item]]
id = "COV-SOFT-007"
axis = "cloth model"
item = "triangle membrane element (constant-strain triangle, StVK / co-rotational)"
source = "Etzmuss et al. 2003 (A fast finite element solution for cloth modelling); Volino et al. 2009; Abaqus M3D3 membrane"
status = "missing"
evidence = "面内は辺の距離拘束のみで、三角形の面内ひずみを使う要素は無い src/cloth.rs::build_constraints (FE のシェル・膜要素は固体 FEM の表の範囲)"
oracle_candidate = "一軸引張の膜で応力-ひずみが StVK の閉形式に一致"
limitation = ""
[[item]]
id = "COV-SOFT-008"
axis = "cloth model"
item = "implicit cloth with stretch / shear / bend conditions (Baraff-Witkin)"
source = "Baraff-Witkin 1998 (Large Steps in Cloth Simulation)"
status = "missing"
evidence = "時間積分は位置ベースの陽的予測のみ src/cloth.rs::substep"
oracle_candidate = "大きな Δt で吊った布が発散しない (Baraff-Witkin の大ステップ)"
limitation = ""
[[item]]
id = "COV-SOFT-009"
axis = "cloth model"
item = "strain limiting (maximum stretch / biphasic)"
source = "Provot 1995 (deformation constraints); Thomaszewski et al. 2009 (Continuum-based Strain Limiting)"
status = "missing"
evidence = "伸びの上限を課す拘束は無い 伸びは反復回数に依存する距離拘束の残差で決まる src/cloth.rs::solve_edge_constraints"
oracle_candidate = "重りを吊った帯の最大伸びが上限 (例 10%) を超えない"
limitation = ""
[[item]]
id = "COV-SOFT-010"
axis = "cloth model"
item = "long-range attachments (tethers from free vertices to pinned vertices)"
source = "Kim et al. 2012 (Long Range Attachments); PhysX cloth tether constraints"
status = "missing"
evidence = "grep (long range / tether / LRA) は自己接触の文脈のみ 拘束は辺と二面角だけ src/cloth.rs::build_constraints"
oracle_candidate = "高解像度の吊り布で反復回数を減らしても下端の伸びが上限内"
limitation = ""
[[item]]
id = "COV-SOFT-011"
axis = "cloth model"
item = "cloth from an arbitrary triangle mesh (not only a regular grid)"
source = "PhysX / Flex cloth cooking; Houdini Vellum cloth from any polygon mesh"
status = "missing"
evidence = "構築子は src/cloth.rs::new_grid のみ 拘束の構築 src/cloth.rs::build_constraints は private で、triangles を差し替えても拘束は作り直せない"
oracle_candidate = "1 枚の二十面体の殻を作り、辺長が静止長に保たれる"
limitation = ""
[[item]]
id = "COV-SOFT-012"
axis = "cloth model"
item = "seams / sewing (stitch constraints between panels)"
source = "Houdini Vellum stitch / weld; Volino-Magnenat-Thalmann, Virtual Clothing ch.4"
status = "missing"
evidence = "パネル間の縫い目を表す拘束は無い (grep stitch / sew / seam は cloth.rs に 0 件)"
oracle_candidate = "2 枚の布を辺で縫い合わせ、縫い目の間隔が 0 に収束"
limitation = ""
[[item]]
id = "COV-SOFT-013"
axis = "cloth model"
item = "cloth plasticity (rest-angle / rest-length update, permanent wrinkles)"
source = "Houdini Vellum plasticity; Narain et al. 2013 (Folding and Crumpling Adaptive Sheets)"
status = "missing"
evidence = "静止長と静止二面角は構築時の値で固定 src/cloth.rs::build_constraints"
oracle_candidate = "折り曲げて保持した後に放した布の残留角が降伏後の更新則に一致"
limitation = ""
[[item]]
id = "COV-SOFT-014"
axis = "cloth model"
item = "closed-surface pressure / global volume constraint (balloon, inflated soft body)"
source = "Müller et al. 2007 (Position Based Dynamics) §4.4 (closed meshes, overpressure); Houdini Vellum pressure"
status = "missing"
evidence = "体積は軟体の四面体ごとの拘束のみ src/deformable.rs::solve_volume_constraints 閉じた布・表面メッシュ全体の体積や内圧の拘束は無い"
oracle_candidate = "内圧 k の閉じた球殻の静止半径が理想気体の閉形式に一致"
limitation = ""
[[item]]
id = "COV-SOFT-015"
axis = "soft body"
item = "tetrahedral volume constraint (XPBD)"
source = "Müller et al. 2007 (Position Based Dynamics) §4; Macklin et al. 2016 (XPBD); Houdini Vellum tet volume"
status = "implemented-no-oracle"
evidence = "src/deformable.rs::solve_volume_constraints 体積を測る test (tests/default_configs.rs::deformable_config_default_free_cube_translates_rigidly_and_rests_on_floor) は shape matching (既定 0.5) が同時に効いた状態での 5% 以内で、体積拘束だけを照合する test は無い"
oracle_candidate = "shape_stiffness 0 で一軸に押した四面体 1 個の体積が α=0 で厳密に保たれ、α>0 で XPBD の閉形式の比で緩む"
limitation = ""
[[item]]
id = "COV-SOFT-016"
axis = "soft body"
item = "edge-length constraints on the tetrahedral mesh"
source = "Müller et al. 2007 (Position Based Dynamics); Houdini Vellum tet stretch"
status = "implemented-no-oracle"
evidence = "src/deformable.rs::solve_edge_constraints 辺長を確かめる test は自由落下 (全拘束が自明に満たされる) のみ tests/analytic_deformable_wiring.rs::free_falling_cube_follows_the_kinematic_center_of_mass"
oracle_candidate = "1 辺を引き伸ばした初期配置から 1 反復で静止長に戻る量が逆質量比に一致"
limitation = ""
[[item]]
id = "COV-SOFT-017"
axis = "soft body"
item = "shape matching with the optimal rotation (polar decomposition of A_pq)"
source = "Müller et al. 2005 (Meshless Deformations Based on Shape Matching)"
status = "partial"
evidence = "src/deformable.rs::apply_shape_matching 回転を抽出せず、静止形を現在の重心に平行移動した目標へ混ぜる 重心は質量重み無し src/deformable.rs::center_of_mass"
oracle_candidate = "剛体回転を与えた立方体が shape matching で回転を保つ (Müller 2005 は回転不変、現状は静止姿勢へ戻す)"
limitation = "src/deformable.rs::apply_shape_matching 'Simplified shape matching: blend toward rest shape'"
[[item]]
id = "COV-SOFT-018"
axis = "soft body"
item = "cluster / lattice shape matching (overlapping regions)"
source = "Rivers-James 2007 (FastLSM); Müller et al. 2005 §4.4 (cluster-based deformation)"
status = "missing"
evidence = "shape matching は物体全体で 1 つ src/deformable.rs::apply_shape_matching"
oracle_candidate = "片持ちの棒状物体のたわみが領域サイズに応じて単調に変わる"
limitation = ""
[[item]]
id = "COV-SOFT-019"
axis = "soft body"
item = "FEM energy as XPBD constraints (Neo-Hookean / co-rotational, stable at inversion)"
source = "Macklin-Müller 2021 (A Constraint-based Formulation of Stable Neo-Hookean Materials); Bender et al. 2014 (Position-Based Simulation of Continuous Materials)"
status = "missing"
evidence = "module の題名は「FEM-XPBD」(src/deformable.rs) だが拘束は体積・辺・shape matching のみ FE の超弾性は固体 FEM の表 (src/hyperelastic.rs) で別系統"
oracle_candidate = "一軸引張した Neo-Hookean 棒の伸びと横収縮が閉形式に一致、反転した要素が元に戻る"
limitation = ""
[[item]]
id = "COV-SOFT-020"
axis = "soft body"
item = "material parameters in physical units (Young's modulus / Poisson ratio mapped to compliance)"
source = "Macklin-Müller 2021; Bender et al. 2014; Houdini Vellum stiffness in physical units"
status = "missing"
evidence = "設定は compliance と 0..1 の剛性 src/deformable.rs::DeformableConfig のみ E と ν から決める経路は無い"
oracle_candidate = "E を与えた立方体の一軸圧縮の見かけの剛性が E に一致"
limitation = ""
[[item]]
id = "COV-SOFT-021"
axis = "soft body"
item = "simulation from an arbitrary tetrahedral mesh"
source = "Flex / Houdini Vellum soft body from a tetrahedral mesh"
status = "implemented-no-oracle"
evidence = "src/deformable.rs::new (任意の四面体リスト) test は new_cube 経由のみ tests/analytic_deformable_wiring.rs::cube_tetrahedra_fill_the_cube_exactly"
oracle_candidate = "正二十面体を四面体分割した球を落とし、体積と重心の自由落下を照合"
limitation = ""
[[item]]
id = "COV-SOFT-022"
axis = "soft body"
item = "embedded render surface (skinning a fine surface to the simulation mesh)"
source = "Flex soft body skinning; Houdini Vellum point deform"
status = "missing"
evidence = "表面は四面体の頂点から作る三角形のみ src/deformable.rs::DeformableBody"
oracle_candidate = "埋め込み点の重心座標が変形後も保たれる"
limitation = ""
[[item]]
id = "COV-SOFT-023"
axis = "soft body"
item = "soft-body plasticity (rest-shape update)"
source = "Müller et al. 2005 §4.5 (plasticity); Bargteil et al. 2007"
status = "missing"
evidence = "静止形は構築時に固定 src/deformable.rs::build_constraints"
oracle_candidate = "押し込んで離した立方体の残留変形が降伏則に一致"
limitation = ""
[[item]]
id = "COV-SOFT-024"
axis = "rod / rope / hair"
item = "rope: chain of XPBD distance constraints"
source = "Müller et al. 2007 (Position Based Dynamics); Houdini Vellum string / hair stretch"
status = "implemented+oracle"
evidence = "src/rope.rs::solve_distance_constraints tests/audit_rope.rs::one_distance_iteration_restores_rest_length_symmetrically tests/audit_rope.rs::constraint_correction_splits_by_inverse_mass tests/audit_rope.rs::new_places_particles_evenly_with_rest_length_l_over_n known defect: tests/audit_rope.rs::total_particle_mass_is_mass_per_unit_times_length"
oracle_candidate = ""
limitation = ""
[[item]]
id = "COV-SOFT-025"
axis = "rod / rope / hair"
item = "rod bending stiffness between consecutive segments"
source = "Bergou et al. 2008 (Discrete Elastic Rods) §4; Umetani et al. 2014 (Position-based Elastic Rods)"
status = "missing"
evidence = "rope は距離拘束だけで曲げ拘束は無い src/rope.rs::substep"
oracle_candidate = "片持ちロッドの先端たわみ PL³/3EI (COV-SOFT-086)"
limitation = ""
[[item]]
id = "COV-SOFT-026"
axis = "rod / rope / hair"
item = "discrete elastic rods: twist with a material frame (parallel transport)"
source = "Bergou et al. 2008 (Discrete Elastic Rods); Bergou et al. 2010 (Discrete Viscous Threads)"
status = "missing"
evidence = "rope の粒子は位置だけで向き・ねじれの自由度を持たない src/rope.rs::Rope"
oracle_candidate = "一端を回したロッドのねじれ角が他端まで線形に分布 (θ(s) = Θ s/L)"
limitation = ""
[[item]]
id = "COV-SOFT-027"
axis = "rod / rope / hair"
item = "Cosserat rod (per-segment orientation, stretch-shear and bend-twist constraints)"
source = "Kugelstadt-Schömer 2016 (Position and Orientation Based Cosserat Rods); Deul et al. 2018 (Direct Position-Based Solver for Stiff Rods)"
status = "missing"
evidence = "向きを持つ segment は無い src/rope.rs::Rope"
oracle_candidate = "螺旋の静止形を持つロッドが重力下で閉形式のつり合いに収束"
limitation = ""
[[item]]
id = "COV-SOFT-028"
axis = "rod / rope / hair"
item = "inextensible strands by follow-the-leader projection"
source = "Müller et al. 2012 (Fast Simulation of Inextensible Hair and Fur)"
status = "missing"
evidence = "伸びは反復回数に依存する距離拘束の残差で決まる src/rope.rs::solve_distance_constraints"
oracle_candidate = "1 反復で全 segment が静止長に戻る"
limitation = ""
[[item]]
id = "COV-SOFT-029"
axis = "rod / rope / hair"
item = "hair strands (guide strands, interpolation, hair-hair interaction)"
source = "Selle et al. 2008 (A Mass Spring Model for Hair Simulation); Petrovic et al. 2005 (Volumetric Methods for Simulation and Rendering of Hair); Houdini Vellum hair"
status = "missing"
evidence = "hair を名乗るのは風の module の doc (src/wind_zone.rs) のみで、hair の型は無い 分割: 子の行 COV-SOFT-094〜096 この行の status は子のうち最も実装の少ないもの (missing) に合わせて手で保つ (検査器は親子を見ない)"
oracle_candidate = "ガイド 1 本からの補間毛が根元の座標系に追従"
limitation = ""
[[item]]
id = "COV-SOFT-030"
axis = "rod / rope / hair"
item = "pinning rope particles to the world and to moving bodies"
source = "Houdini Vellum pin to animation; PhysX attachments"
status = "implemented+oracle"
evidence = "src/rope.rs::update_pin_targets tests/analytic_rope_wiring.rs::update_pin_targets_follows_a_moving_body_identity_and_180deg_rotation tests/analytic_rope_wiring.rs::pin_start_and_pin_end_hold_exactly_under_gravity_for_many_frames"
oracle_candidate = ""
limitation = ""
[[item]]
id = "COV-SOFT-031"
axis = "rod / rope / hair"
item = "attaching a rod particle to a rigid body (one-way, compliant, breakable)"
source = "PhysX particle-rigid attachment; Houdini Vellum glue / breaking threshold"
status = "implemented+oracle"
evidence = "src/rope_attach.rs::solve_rope_attachments tests/analytic_rope_attach_wiring.rs::rigid_static_anchor_lands_particle_exactly_with_rotated_anchor tests/analytic_rope_attach_wiring.rs::compliance_closes_one_over_one_plus_alpha tests/analytic_rope_attach_wiring.rs::break_threshold_is_strict_and_leaves_the_particle_alone"
oracle_candidate = ""
limitation = ""
[[item]]
id = "COV-SOFT-032"
axis = "rod / rope / hair"
item = "two-way rod-body attachment (the body receives the reaction force and torque)"
source = "Macklin et al. 2014 (Unified Particle Physics for Real-Time Applications) §5; PhysX particle-rigid attachment"
status = "partial"
evidence = "src/rope_attach.rs::solve_rope_attachments_two_way tests/analytic_rope_attach_wiring.rs::two_way_splits_the_gap_by_inverse_mass_and_conserves_momentum tests/analytic_rope_attach_wiring.rs::two_way_with_static_body_equals_one_way"
oracle_candidate = "重心から外した錨点で吊った剛体が受けるトルク r×F と角運動量の保存"
limitation = "src/rope_attach.rs::solve_rope_attachments_two_way 'translation of the centre of mass; the anchor offset's torque is not applied'"
[[item]]
id = "COV-SOFT-033"
axis = "rod / rope / hair"
item = "rope self-contact and rope-rope contact (segment-segment, knots)"
source = "Spillmann-Teschner 2008 (An Adaptive Contact Model for the Robust Simulation of Knots); Houdini Vellum hair collision"
status = "missing"
evidence = "rope の衝突は SdfCollider の粒子判定のみ src/rope.rs::resolve_sdf_collisions"
oracle_candidate = "2 本の rope を交差させて落とし、segment 間距離が太さ未満にならない"
limitation = ""
[[item]]
id = "COV-SOFT-034"
axis = "rod / rope / hair"
item = "rod contact with rigid-body shapes (capsule-segment, two-way)"
source = "Servin-Lacoursière 2008 (Rigid Body Cable for Virtual Environments); PhysX particle collision"
status = "missing"
evidence = "rope の衝突相手は SdfCollider のみで剛体側は動かない src/rope.rs::resolve_sdf_collisions"
oracle_candidate = "動く剛体の箱に掛けた rope が箱を引き戻す運動量交換"
limitation = ""
[[item]]
id = "COV-SOFT-035"
axis = "rod / rope / hair"
item = "adaptive resolution / cable wrapping (nodes inserted at contact)"
source = "Servin-Lacoursière 2008; Houdini Vellum hair resampling"
status = "missing"
evidence = "segment 数は構築時に固定 src/rope.rs::new"
oracle_candidate = "円柱に巻き付けた rope の張力比が capstan 式 e^{μθ} に一致 (参照値要確認)"
limitation = ""
[[item]]
id = "COV-SOFT-036"
axis = "solver"
item = "position-based Gauss-Seidel projection with substeps"
source = "Müller et al. 2007 (Position Based Dynamics) Alg. 1; Macklin et al. 2019 (Small Steps in Physics Simulation)"
status = "implemented+oracle"
evidence = "src/rope.rs::substep tests/audit_rope.rs::more_iterations_leave_a_smaller_length_residual tests/audit_rope.rs::free_fall_follows_symplectic_euler_with_damping_once_per_frame 布 src/cloth.rs::substep と軟体 src/deformable.rs::substep も同じ形"
oracle_candidate = ""
limitation = ""
[[item]]
id = "COV-SOFT-037"
axis = "solver"
item = "XPBD compliance term α/Δt² in the constraint update"
source = "Macklin et al. 2016 (XPBD) eq. 18"
status = "implemented+oracle"
evidence = "src/rope.rs::solve_distance_constraints tests/audit_rope.rs::compliance_softens_the_correction_by_alpha_over_dt_squared 布 src/cloth.rs::solve_edge_constraints と軟体 src/deformable.rs::solve_edge_constraints も同じ式"
oracle_candidate = ""
limitation = ""
[[item]]
id = "COV-SOFT-038"
axis = "solver"
item = "XPBD Lagrange-multiplier accumulation (stiffness independent of the iteration count)"
source = "Macklin et al. 2016 (XPBD) eq. 18 (Δλ update)"
status = "missing"
evidence = "3 module とも反復ごとに λ = C/(Σw+α̃) を新たに計算し、乗数を累積しない (src/rope.rs::solve_distance_constraints / src/cloth.rs::solve_edge_constraints / src/deformable.rs::solve_volume_constraints) 剛体 2D の拘束 (src/physics2d.rs::solve_distance) は累積する別系統"
oracle_candidate = "α>0 の rope の静的伸びが反復回数 1 / 8 / 64 で同じ (Macklin 2016 の比較)"
limitation = ""
[[item]]
id = "COV-SOFT-039"
axis = "solver"
item = "XPBD constraint damping (β term)"
source = "Macklin et al. 2016 (XPBD) eq. 26"
status = "missing"
evidence = "減衰は frame ごとの速度の一律倍のみ src/cloth.rs::apply_frame_damping"
oracle_candidate = "α>0 の 1 自由度の振動が β から決まる減衰率で減る"
limitation = ""
[[item]]
id = "COV-SOFT-040"
axis = "solver"
item = "parallel constraint solve (Jacobi with averaging / graph colouring)"
source = "Macklin et al. 2014 (Unified Particle Physics) §4.2; Fratarcangeli et al. 2016 (Vivace)"
status = "missing"
evidence = "伸び・曲げの拘束は逐次の Gauss-Seidel のみ src/cloth.rs::solve_edge_constraints 自己接触だけが Jacobi 平均 (COV-SOFT-060)"
oracle_candidate = "彩色ごとの並列解が逐次解と同じ収束率"
limitation = ""
[[item]]
id = "COV-SOFT-041"
axis = "solver"
item = "Projective Dynamics (local-global solve)"
source = "Bouaziz et al. 2014 (Projective Dynamics)"
status = "missing"
evidence = "grep (projective) 0 件"
oracle_candidate = "大きな剛性の布で反復ごとの残差が単調に減り、陰的 Euler の解に収束"
limitation = ""
[[item]]
id = "COV-SOFT-042"
axis = "solver"
item = "implicit Euler with Newton / conjugate gradients (filtered constraints)"
source = "Baraff-Witkin 1998 §5; Boxerman-Ascher 2004"
status = "missing"
evidence = "変形体の時間積分は位置ベースのみ src/cloth.rs::substep (陰的な固体 FE は固体 FEM の表)"
oracle_candidate = "線形ばね鎖の陰的 Euler の 1 step が線形系の解に一致"
limitation = ""
[[item]]
id = "COV-SOFT-043"
axis = "solver"
item = "convergence acceleration (Chebyshev semi-iterative / Anderson)"
source = "Wang 2015 (A Chebyshev Semi-Iterative Approach for Accelerating Projective and Position-based Dynamics); Peng et al. 2018 (Anderson Acceleration for Geometry Optimization)"
status = "missing"
evidence = "grep (chebyshev / anderson) は cloth / rope / deformable に 0 件"
oracle_candidate = "同じ反復回数で残差が加速なしより小さい"
limitation = ""
[[item]]
id = "COV-SOFT-044"
axis = "solver"
item = "vertex block descent (per-vertex Newton blocks)"
source = "Chen et al. 2024 (Vertex Block Descent)"
status = "missing"
evidence = "頂点ごとの局所 Newton は無い src/cloth.rs::substep"
oracle_candidate = ""
limitation = ""
[[item]]
id = "COV-SOFT-045"
axis = "solver"
item = "unified particle solver (cloth, ropes, soft bodies, rigid clusters and fluid in one system)"
source = "Macklin et al. 2014 (Unified Particle Physics for Real-Time Applications); NVIDIA Flex"
status = "missing"
evidence = "布 src/cloth.rs::Cloth / rope src/rope.rs::Rope / 軟体 src/deformable.rs::DeformableBody は別々の型と step を持ち、互いに接触しない 分割: 子の行 COV-SOFT-091〜093 この行の status は子のうち最も実装の少ないもの (missing) に合わせて手で保つ (検査器は親子を見ない)"
oracle_candidate = "布の上に落とした rope が布を貫かない"
limitation = ""
[[item]]
id = "COV-SOFT-046"
axis = "solver"
item = "GPU / multi-thread solve"
source = "NVIDIA Flex; PhysX GPU cloth"
status = "missing"
evidence = "変形体の step は単一スレッドの逐次処理 src/cloth.rs::substep"
oracle_candidate = "並列解が逐次解と bit 一致 (決定性を保つ並列化)"
limitation = ""
[[item]]
id = "COV-SOFT-047"
axis = "solver"
item = "bit-exact deterministic stepping"
source = "PhysX enhanced determinism; lockstep networking requirement"
status = "implemented+oracle"
evidence = "tests/determinism_golden.rs::determinism_cloth_drape src/cloth.rs::self_contact_result_is_independent_of_the_pair_order src/cloth.rs::self_collision_is_independent_of_the_pair_order_across_both_stages"
oracle_candidate = ""
limitation = ""
[[item]]
id = "COV-SOFT-048"
axis = "time integration / damping"
item = "symplectic Euler prediction with velocities from the position change"
source = "Müller et al. 2007 (Position Based Dynamics) Alg. 1"
status = "implemented+oracle"
evidence = "src/rope.rs::substep tests/audit_rope.rs::free_fall_follows_symplectic_euler_with_damping_once_per_frame tests/analytic_deformable_wiring.rs::free_falling_cube_follows_the_kinematic_center_of_mass"
oracle_candidate = ""
limitation = ""
[[item]]
id = "COV-SOFT-049"
axis = "time integration / damping"
item = "global velocity damping applied once per frame"
source = "NVIDIA Flex damping; Houdini Vellum velocity damping"
status = "implemented+oracle"
evidence = "src/cloth.rs::apply_frame_damping tests/audit_rope.rs::free_fall_follows_symplectic_euler_with_damping_once_per_frame (substeps 1 / 2 / 4 で同じ減衰)"
oracle_candidate = ""
limitation = ""
[[item]]
id = "COV-SOFT-050"
axis = "time integration / damping"
item = "damping that preserves rigid-body motion (only relative velocities damped)"
source = "Müller et al. 2007 (Position Based Dynamics) §3.5"
status = "missing"
evidence = "速度の一律倍は自由落下・剛体回転も減衰させる src/cloth.rs::apply_frame_damping src/deformable.rs::apply_frame_damping src/rope.rs::apply_frame_damping"
oracle_candidate = "剛体回転させた布片の角運動量が減衰を入れても保存"
limitation = ""
[[item]]
id = "COV-SOFT-051"
axis = "time integration / damping"
item = "sleeping / deactivation of resting deformables"
source = "PhysX cloth sleep threshold; Bullet soft body deactivation"
status = "missing"
evidence = "cloth / rope / deformable に sleep の状態は無い (剛体の sleep は剛体の表)"
oracle_candidate = "静止した布が閾値以下で step を省き、起こすと同じ解に戻る"
limitation = ""
[[item]]
id = "COV-SOFT-052"
axis = "collision"
item = "particle collision against signed-distance colliders (with thickness)"
source = "Bridson et al. 2002 (Robust Treatment of Collisions, Contact and Friction for Cloth Animation) §5; Fuhrmann et al. 2003 (Distance fields for rapid collision detection in physically based modeling)"
status = "implemented+oracle"
evidence = "src/cloth.rs::resolve_sdf_collisions src/cloth.rs::step_with_sdf_drapes_cloth_over_unit_sphere_without_penetration src/rope.rs::step_with_sdf_keeps_free_rope_particles_outside_unit_sphere src/deformable.rs::step_with_sdf_keeps_cube_particles_outside_unit_sphere tests/analytic_rope_wiring.rs::step_with_sdf_plane_exact_resolution_from_below"
oracle_candidate = ""
limitation = ""
[[item]]
id = "COV-SOFT-053"
axis = "collision"
item = "tangential friction against colliders (Coulomb, |Δv_t| <= μ|Δv_n|)"
source = "Bridson et al. 2002 §7"
status = "implemented+oracle"
evidence = "src/rope.rs::resolve_sdf_collisions tests/audit_rope.rs::inbound_contact_scales_normal_by_minus_tenth_and_applies_coulomb_friction tests/audit_rope.rs::tangential_loss_per_frame_is_independent_of_the_substep_count tests/audit_rope.rs::coulomb_friction_stops_at_zero_tangential_speed 布 src/cloth.rs::resolve_sdf_collisions と軟体も同じ形"
oracle_candidate = ""
limitation = ""
[[item]]
id = "COV-SOFT-054"
axis = "collision"
item = "Coulomb friction (static / kinetic, bounded by the normal correction)"
source = "Macklin et al. 2014 (Unified Particle Physics) §6.1; Bridson et al. 2002 §7.2"
status = "missing"
evidence = "摩擦は接触ごとに接線速度を (1−μ) 倍する形で法線力に依らない (COV-SOFT-053)"
oracle_candidate = "傾斜 θ の平板に置いた布片が tanθ < μ_s で静止、超えると μ_k の加速度で滑る"
limitation = ""
[[item]]
id = "COV-SOFT-055"
axis = "collision"
item = "configurable restitution of particle contacts"
source = "Bridson et al. 2002 §7; PhysX particle restitution"
status = "missing"
evidence = "rope は法線速度を −0.1 倍に固定 (src/rope.rs::resolve_sdf_collisions)、布と軟体は法線速度を捨てる 係数を設定する経路は無い known defect: tests/audit_rope.rs::separating_normal_velocity_is_not_reversed_by_the_contact"
oracle_candidate = "粒子を平面に落とし、跳ね返り速度が e·v に一致"
limitation = ""
[[item]]
id = "COV-SOFT-056"
axis = "collision"
item = "continuous collision of particles against colliders (swept test)"
source = "Bridson et al. 2002 §6.2; Harmon et al. 2008"
status = "missing"
evidence = "SDF 接触は substep 末の位置で判定するだけ src/cloth.rs::resolve_sdf_collisions src/sdf_ccd.rs の掃過判定は剛体用で変形体からは呼ばれない"
oracle_candidate = "1 substep で薄い板を跨ぐ速度の粒子が板の手前で止まる"
limitation = ""
[[item]]
id = "COV-SOFT-057"
axis = "collision"
item = "collision against the rigid world's shapes (sphere / capsule / box / triangle mesh)"
source = "PhysX cloth collision shapes; NVIDIA Flex shapes"
status = "missing"
evidence = "布と rope の衝突相手は SdfCollider のみ src/cloth.rs::step_with_sdf src/rope.rs::step_with_sdf"
oracle_candidate = "布を箱の角に落とし、箱の面を貫かない"
limitation = ""
[[item]]
id = "COV-SOFT-058"
axis = "collision"
item = "cloth and rope pushing rigid bodies (two-way contact)"
source = "Macklin et al. 2014 §5; PhysX two-way cloth interaction"
status = "missing"
evidence = "SDF 側は動かない (src/cloth.rs::resolve_sdf_collisions は粒子だけを動かす) 双方向は軟体の球近似のみ (COV-SOFT-059)"
oracle_candidate = "動く剛体の球が布を押し、布から受けた力積で減速 (運動量の保存)"
limitation = ""
[[item]]
id = "COV-SOFT-059"
axis = "collision"
item = "soft-body / rigid-body two-way contact"
source = "Macklin et al. 2014 §5; Houdini Vellum + RBD two-way"
status = "partial"
evidence = "src/deformable.rs::resolve_rigid_body_collisions tests/analytic_deformable_wiring.rs::dynamic_sphere_shares_the_correction_by_inverse_mass_and_the_collision_is_inelastic tests/analytic_deformable_wiring.rs::static_body_is_exact_the_particle_takes_the_whole_correction"
oracle_candidate = "箱の剛体に落とした軟体立方体が箱の面で止まり、運動量が保存"
limitation = "src/deformable.rs::resolve_rigid_body_collisions 'Treats each rigid body as a sphere with given radius for simplicity.'"
[[item]]
id = "COV-SOFT-060"
axis = "collision"
item = "self-collision: vertex-face proximity"
source = "Bridson et al. 2002 §6.1"
status = "implemented+oracle"
evidence = "src/cloth.rs::collect_vertex_face_candidates tests/analytic_self_contact.rs::vertex_face_crossing_matches_the_closed_form_exactly tests/analytic_self_contact.rs::the_point_triangle_metric_matches_the_closed_form src/cloth.rs::the_proximity_projection_restores_exactly_the_contact_thickness src/cloth.rs::the_averaging_denominator_counts_contacts_from_both_stages"
oracle_candidate = ""
limitation = ""
[[item]]
id = "COV-SOFT-061"
axis = "collision"
item = "self-collision: edge-edge proximity"
source = "Bridson et al. 2002 §6.1"
status = "implemented+oracle"
evidence = "src/cloth.rs::accumulate_edge_edge_contacts src/cloth.rs::the_edge_edge_projection_restores_exactly_the_contact_thickness src/cloth.rs::the_edge_edge_projection_weights_s_t_and_the_inverse_masses_separately tests/analytic_self_contact.rs::edge_edge_closest_approach_matches_the_closed_form_exactly 平行な辺対は頂点-面に任せる (src/cloth.rs::closest_points_on_segments) 関数 doc の「no swept edge-edge test」(src/cloth.rs::accumulate_edge_edge_contacts) は掃過修復 (COV-SOFT-062) の追加前の記述"
oracle_candidate = ""
limitation = ""
[[item]]
id = "COV-SOFT-062"
axis = "collision"
item = "self-collision CCD (vertex chords and swept edge pairs repaired over the frame)"
source = "Bridson et al. 2002 §6.2; Provot 1997 (Collision and self-collision handling in cloth model dedicated to design garments) coplanarity cubic"
status = "partial"
evidence = "src/cloth.rs::resolve_self_contact_over_frame tests/analytic_self_contact.rs::a_crumpled_cloth_does_not_pass_through_itself tests/analytic_self_contact.rs::ccd_coplanarity_cubic_is_constructed_exactly_and_its_root_is_bracketed src/cloth.rs::an_edge_pair_that_swaps_sides_in_one_frame_is_seen_by_the_crossings_invariant 1 frame 内で通り抜けて戻る対は数えない src/cloth.rs::a_pair_that_crosses_and_returns_inside_one_interval_is_not_counted"
oracle_candidate = "同時に多数の接触が重なる積み重ね (布を 10 枚重ねて押す) で貫通 0 と辺の伸びの上限"
limitation = "src/cloth.rs::resolve_self_contact_over_frame 'This repair is a **position** projection: it can stretch an edge past what `solve_edge_constraints` would allow, and it does not build rigid impact zones, so a pile-up of simultaneous contacts is resolved approximately rather than exactly.'"
[[item]]
id = "COV-SOFT-063"
axis = "collision"
item = "rigid impact zones / fail-safe for simultaneous collisions"
source = "Bridson et al. 2002 §6.3; Harmon et al. 2008 (Robust Treatment of Simultaneous Collisions)"
status = "missing"
evidence = "修復は位置の射影のみで impact zone を作らない (src/cloth.rs::resolve_self_contact_over_frame)"
oracle_candidate = "多層の積み重ねで反復を増やしても残る貫通が 0 になる"
limitation = ""
[[item]]
id = "COV-SOFT-064"
axis = "collision"
item = "self-collision broad phase (spatial hash / bounding-volume hierarchy)"
source = "Teschner et al. 2003 (Optimized Spatial Hashing for Collision Detection of Deformable Objects); Bridson et al. 2002 §6"
status = "missing"
evidence = "候補は全対の総当たり (src/cloth.rs::substep、辺-辺 src/cloth.rs::collect_edge_edge_candidates) lib の doc の「cloth と共有の hash grid」(src/lib.rs) に対応する呼び出しは cloth.rs に無い"
oracle_candidate = "候補集合が総当たりと一致し、粒子数に対して線形に増える"
limitation = ""
[[item]]
id = "COV-SOFT-065"
axis = "collision"
item = "self-collision and mutual contact of soft bodies"
source = "Teschner et al. 2005 (Collision Detection for Deformable Objects); Houdini Vellum self collision"
status = "missing"
evidence = "軟体は SDF と剛体 (球近似) との接触のみ src/deformable.rs::step_with_sdf"
oracle_candidate = "2 つの立方体を衝突させて表面が交差しない"
limitation = ""
[[item]]
id = "COV-SOFT-066"
axis = "collision"
item = "friction in self-contact"
source = "Bridson et al. 2002 §7.2"
status = "missing"
evidence = "自己接触は法線方向の位置射影のみ (cloth.rs の friction は SDF 接触の sdf_friction だけ src/cloth.rs::ClothConfig)"
oracle_candidate = "傾けた 2 枚重ねの布で上の布が μ に応じて滑る / 止まる"
limitation = ""
[[item]]
id = "COV-SOFT-067"
axis = "collision"
item = "barrier-based intersection-free contact (IPC, codimensional)"
source = "Li et al. 2020 (Incremental Potential Contact); Li et al. 2021 (Codimensional Incremental Potential Contact)"
status = "missing"
evidence = "grep (barrier / IPC) は cloth / rope / deformable に 0 件"
oracle_candidate = ""
limitation = ""
[[item]]
id = "COV-SOFT-068"
axis = "attachment / external force"
item = "pinning cloth vertices to the world"
source = "Houdini Vellum pin; PhysX cloth fixed particles"
status = "implemented+oracle"
evidence = "src/cloth.rs::pin tests/default_configs.rs::cloth_config_default_pinned_curtain_sags_and_stays_bounded (pin した上端が bit 一致で動かない)"
oracle_candidate = ""
limitation = ""
[[item]]
id = "COV-SOFT-069"
axis = "attachment / external force"
item = "cloth attached to moving rigid bodies (pin targets follow the body, two-way)"
source = "PhysX cloth attachment; Houdini Vellum pin to animation"
status = "missing"
evidence = "module doc の機能一覧は「Pin constraints for attaching cloth to bodies」(src/cloth.rs) だが pin は逆質量を 0 にするだけ (src/cloth.rs::pin) 剛体の姿勢に追従させる API は無い (rope は COV-SOFT-030)"
oracle_candidate = "回転する剛体の縁に付けた布の付け根が剛体の点の軌道に一致"
limitation = ""
[[item]]
id = "COV-SOFT-070"
axis = "attachment / external force"
item = "pinning / attaching soft-body vertices (world or rigid body)"
source = "Houdini Vellum pin / attach to geometry; Flex soft body attachment"
status = "missing"
evidence = "DeformableBody に pin の API は無い (呼び手が inv_masses を 0 にする) src/deformable.rs::DeformableBody"
oracle_candidate = "上面を固定した立方体の静的なたわみ"
limitation = ""
[[item]]
id = "COV-SOFT-071"
axis = "attachment / external force"
item = "wind force on cloth"
source = "NVIDIA Flex wind; Houdini Vellum wind"
status = "partial"
evidence = "src/cloth.rs::compute_wind_force 布の wind は 1 本のベクトルを全粒子に同じ力として足す"
oracle_candidate = "向きの異なる面を持つ布で、面ごとに受ける力が法線成分に比例 (COV-SOFT-073 と組)"
limitation = "src/cloth.rs::compute_wind_force 'Simplified: uniform wind force'"
[[item]]
id = "COV-SOFT-072"
axis = "attachment / external force"
item = "per-particle quadratic aerodynamic drag with gusts (wind zone)"
source = "NVIDIA Flex drag; Unity WindZone; Hoerner, Fluid-Dynamic Drag"
status = "partial"
evidence = "src/wind_zone.rs::force_on_particle tests/audit_wind_zone.rs::force_general_3d_matches_half_rho_cd_a_speed_vrel tests/analytic_wind_zone_wiring.rs::force_on_particle_matches_force_on_for_the_equivalent_rigid_body_state Cloth は粒子ごとの外力の入口を持たず (wind は 1 ベクトル、COV-SOFT-071)、呼び手が velocities に足す形"
oracle_candidate = "面の向きを変えた布片で受ける抗力が投影面積に比例"
limitation = "src/wind_zone.rs 'The MVP evaluates the aerodynamic force in the body's centre and ignores surface-orientation dependence'"
[[item]]
id = "COV-SOFT-073"
axis = "attachment / external force"
item = "triangle aerodynamic drag and lift (normal- and area-dependent)"
source = "Keckeisen et al. 2004 (Interactive Cloth Simulation in Virtual Environments, aerodynamics); NVIDIA Flex cloth drag / lift; Houdini Vellum drag"
status = "missing"
evidence = "風の力は点で評価し面の向きを見ない (src/wind_zone.rs)"
oracle_candidate = "風に対して角度 θ の平板布片の揚力と抗力の比が向きの閉形式に一致 (参照値要確認)"
limitation = ""
[[item]]
id = "COV-SOFT-074"
axis = "topology change"
item = "plane cut: classify particles and split the crossing edges"
source = "Molino et al. 2004 (A Virtual Node Algorithm for Changing Mesh Topology During Simulation); Bielser et al. 2004"
status = "implemented+oracle"
evidence = "src/soft_body_cut.rs::cut_deformable tests/analytic_soft_body_cut_wiring.rs::cut_deformable_tetrahedron_hand_counted_split_and_intersections tests/audit_soft_body_cut.rs::intersection_is_distance_weighted_not_midpoint tests/engineering_oracles_misc.rs::soft_body_cut_partition_crossing_count_and_intersections_on_plane"
oracle_candidate = ""
limitation = ""
[[item]]
id = "COV-SOFT-075"
axis = "topology change"
item = "applying a cut to the simulated body (duplicate vertices, rebuild constraints, split elements)"
source = "Molino et al. 2004; Sifakis et al. 2007 (Arbitrary Cutting of Deformable Tetrahedralized Objects)"
status = "missing"
evidence = "cut は分類と交点を返すだけ (src/soft_body_cut.rs::CutResult) Cloth の拘束は private (src/cloth.rs::Cloth) で外から作り直せない 軟体も同じ (src/deformable.rs::DeformableBody)"
oracle_candidate = "切断した布の 2 片が落下して離れ、切断面を跨ぐ拘束が残らない"
limitation = ""
[[item]]
id = "COV-SOFT-076"
axis = "topology change"
item = "cutting along an arbitrary blade path / swept surface"
source = "Bielser et al. 2004 (A State Machine for Real-Time Cutting of Tetrahedral Meshes); Steinemann et al. 2006"
status = "missing"
evidence = "切断は平面のみ src/soft_body_cut.rs::CutPlane"
oracle_candidate = "折れ線の刃で切った交点がすべて刃の掃過面上"
limitation = ""
[[item]]
id = "COV-SOFT-077"
axis = "topology change"
item = "cloth tearing (split where the edge strain exceeds a threshold)"
source = "Metaaphanon et al. 2009 (Tearing Cloth); Houdini Vellum breaking"
status = "missing"
evidence = "引き裂きの経路は無い (grep tear は FE の mesh の文脈のみ) エネルギー解放率など破壊力学の基準は破壊の表"
oracle_candidate = "伸びの閾値を超えた辺だけが切れ、他の辺の長さが保たれる"
limitation = ""
[[item]]
id = "COV-SOFT-078"
axis = "topology change"
item = "adaptive remeshing (refine / coarsen the cloth mesh)"
source = "Narain et al. 2012 (Adaptive Anisotropic Remeshing for Cloth Simulation)"
status = "missing"
evidence = "メッシュは構築時に固定 src/cloth.rs::new_grid"
oracle_candidate = "細分化前後で総質量と面積が保存"
limitation = ""
[[item]]
id = "COV-SOFT-079"
axis = "integration / output"
item = "deformables stepped inside the rigid-body world (one step, shared contacts)"
source = "NVIDIA Flex / PhysX scene; Houdini Vellum + RBD"
status = "missing"
evidence = "solver.rs の module doc は「Unified solver for rigid bodies, cloth, and ropes.」(src/solver.rs) だが solver.rs に Cloth / Rope / DeformableBody の参照は無い 呼び手が別々に step する"
oracle_candidate = "world の step 1 回で布と剛体が同じ Δt で進み、接触の力積が釣り合う"
limitation = ""
[[item]]
id = "COV-SOFT-080"
axis = "integration / output"
item = "vertex normals for rendering"
source = "PhysX / Flex cloth normals"
status = "implemented+oracle"
evidence = "src/cloth.rs::compute_normals src/cloth.rs::test_cloth_normals"
oracle_candidate = ""
limitation = ""
[[item]]
id = "COV-SOFT-081"
axis = "integration / output"
item = "self-intersection count (instrument for the no-pass-through invariant)"
source = "Bridson et al. 2002 §6 (intersection-free state)"
status = "implemented+oracle"
evidence = "src/cloth.rs::remaining_self_contact_crossings tests/analytic_cloth_crossings_wiring.rs::a_vertex_pushed_through_a_distant_triangle_is_counted tests/analytic_cloth_crossings_wiring.rs::an_undisturbed_frame_has_no_crossings"
oracle_candidate = ""
limitation = ""
[[item]]
id = "COV-SOFT-082"
axis = "integration / output"
item = "per-element strain / stress / energy output"
source = "Houdini Vellum stretch / bend attributes; PhysX cloth stretch ratios"
status = "missing"
evidence = "変形体の出力は位置・速度・法線のみ (src/cloth.rs::compute_normals) 辺の伸びや拘束の力を返す API は無い"
oracle_candidate = "一様に引いた布の全辺の伸びが一致"
limitation = ""
[[item]]
id = "COV-SOFT-083"
axis = "benchmark"
item = "hanging cloth pinned along one edge settles at its inextensible length"
source = "Houdini Vellum / Flex cloth demos (hanging curtain)"
status = "implemented+oracle"
evidence = "tests/default_configs.rs::cloth_config_default_pinned_curtain_sags_and_stays_bounded src/cloth.rs::drape_bottom_row_ends_below_pinned_top_and_above_free_fall"
oracle_candidate = ""
limitation = ""
[[item]]
id = "COV-SOFT-084"
axis = "benchmark"
item = "drape test of a circular sample on a disk (drape coefficient)"
source = "ISO 9073-9 / BS 5058 (Cusick drape test)"
status = "missing"
evidence = "円形の布を円盤に載せる scene は無い 円盤は SdfCollider で作れる (src/cloth.rs::step_with_sdf)"
oracle_candidate = "drape 係数を素材値と比較 (参照値要確認)"
limitation = ""
[[item]]
id = "COV-SOFT-085"
axis = "benchmark"
item = "crumpled cloth does not pass through itself"
source = "Bridson et al. 2002 (crumpling scenes)"
status = "implemented+oracle"
evidence = "tests/analytic_self_contact.rs::a_crumpled_cloth_does_not_pass_through_itself tests/analytic_self_contact.rs::self_collision_improves_the_edge_edge_separation_it_constrains"
oracle_candidate = ""
limitation = ""
[[item]]
id = "COV-SOFT-086"
axis = "benchmark"
item = "cantilever rod static deflection against Euler-Bernoulli (PL³/3EI)"
source = "Bergou et al. 2008 §7; Timoshenko, Strength of Materials"
status = "missing"
evidence = "rope に曲げ剛性が無い (COV-SOFT-025)"
oracle_candidate = "片持ちロッドの先端たわみ PL³/3EI、小たわみ域で 1% 以内"
limitation = ""
[[item]]
id = "COV-SOFT-087"
axis = "benchmark"
item = "hanging chain against the catenary"
source = "classical catenary y = a cosh(x/a); Irvine, Cable Structures ch.1"
status = "implemented+oracle"
evidence = "src/rope.rs::Rope (add_pin + step) / tests/analytic_rope_catenary.rs::hanging_rope_settles_to_the_catenary_shape (両端 pin、総長 8 > 端点間距離 6 で静止させ、等弧長に並ぶ節点を a sinh(半径間/a)=半長 の二分法で解いた閉形式に突合、既知の質量離散化欠陥 AUD-A-S3W1-003 は全粒子に一様な定数倍なので catenary の形には影響しないことを確認した上で無視)"
oracle_candidate = ""
limitation = ""
[[item]]
id = "COV-SOFT-088"
axis = "benchmark"
item = "twisted ring buckling (Michell instability)"
source = "Bergou et al. 2008 §7.2; Michell 1889"
status = "missing"
evidence = "ねじれの自由度が無い (COV-SOFT-026)"
oracle_candidate = "閉じたロッドの臨界ねじれ角 2π√3 (参照値要確認)"
limitation = ""
[[item]]
id = "COV-SOFT-089"
axis = "benchmark"
item = "soft cube keeps its volume when dropped on the floor"
source = "NVIDIA Flex / Houdini Vellum soft-body demos"
status = "implemented+oracle"
evidence = "tests/default_configs.rs::deformable_config_default_free_cube_translates_rigidly_and_rests_on_floor (着地後の体積が 5% 以内、shape matching 0.5 が同時に効く)"
oracle_candidate = ""
limitation = ""
[[item]]
id = "COV-SOFT-090"
axis = "benchmark"
item = "effective stiffness against the iteration count (XPBD convergence)"
source = "Macklin et al. 2016 (XPBD) §6"
status = "missing"
evidence = "反復回数と剛性の関係を測る scene は無い (乗数の累積が無い COV-SOFT-038)"
oracle_candidate = "α>0 の rope に重りを吊り、反復 1 / 8 / 64 で静的伸びが同じ"
limitation = ""
[[item]]
id = "COV-SOFT-091"
axis = "solver"
item = "rigid clusters in a particle solver by shape matching (Muller 2005)"
source = "Macklin et al. 2014 (Unified Particle Physics for Real-Time Applications); NVIDIA Flex"
status = "missing"
evidence = "COV-SOFT-045 の子 src/deformable.rs::DeformableBody は別の型と step を持つ 布・rope・軟体の各 solver は既存の行が受け持つ"
oracle_candidate = "変形させた cluster が 1 step で剛体の最適回転に戻る"
limitation = ""
[[item]]
id = "COV-SOFT-092"
axis = "solver"
item = "position-based fluid in the same particle system (PBF, density constraint)"
source = "Macklin et al. 2014 (Unified Particle Physics for Real-Time Applications); NVIDIA Flex"
status = "missing"
evidence = "COV-SOFT-045 の子 粒子流体は別の型 (推測: 布・軟体と同じ粒子系の流体は 0 件)"
oracle_candidate = "静水の粒子の密度が rest density の許容内"
limitation = ""
[[item]]
id = "COV-SOFT-093"
axis = "solver"
item = "contact between particles of different kinds in one solver (cloth, rope, soft, rigid, fluid)"
source = "Macklin et al. 2014 (Unified Particle Physics for Real-Time Applications); NVIDIA Flex"
status = "missing"
evidence = "COV-SOFT-045 の子 src/cloth.rs::Cloth / src/rope.rs::Rope / src/deformable.rs::DeformableBody は互いに接触しない"
oracle_candidate = "布の上に落とした rope が布を貫かない"
limitation = ""
[[item]]
id = "COV-SOFT-094"
axis = "rod / rope / hair"
item = "guide hair strand dynamics"
source = "Selle et al. 2008"
status = "missing"
evidence = "COV-SOFT-029 の子 hair を名乗るのは風の module の doc (src/wind_zone.rs) のみで hair の型は無い"
oracle_candidate = "ガイド 1 本の静的な垂れが rod の閉形式"
limitation = ""
[[item]]
id = "COV-SOFT-095"
axis = "rod / rope / hair"
item = "interpolated hair from guide strands"
source = "Houdini Vellum hair"
status = "missing"
evidence = "COV-SOFT-029 の子 同上"
oracle_candidate = "ガイド 1 本からの補間毛が根元の座標系に追従"
limitation = ""
[[item]]
id = "COV-SOFT-096"
axis = "rod / rope / hair"
item = "hair-hair interaction (volumetric or pairwise)"
source = "Petrovic et al. 2005"
status = "missing"
evidence = "COV-SOFT-029 の子 同上"
oracle_candidate = "毛束の体積が密度の上限を超えない"
limitation = ""