Skip to content

Add hyper_reduced_projective_dynamics_basis (Brandt et al. 2018); release 0.1.10 - #13

Merged
otmanon merged 1 commit into
mainfrom
claude/new-session-bvo8qi
Oct 8, 2026
Merged

otmanon merged 1 commit into
mainfrom
claude/new-session-bvo8qi

Conversation

@otmanon

@otmanon otmanon commented Oct 8, 2026

Copy link
Copy Markdown
Owner

Summary

Adds the sparse skinning subspace of Hyper-Reduced Projective Dynamics (Brandt, Eisemann, Hildebrandt, SIGGRAPH 2018) as hyper_reduced_projective_dynamics_basis, and bumps the version to 0.1.10.

What it builds

  1. n_samples sample vertices by farthest-point sampling in the geodesic (mesh-edge) distance.
  2. For every sample a compactly supported radial weight of that distance, the Wendland C2 kernel (1 - x)^4 (4x + 1), with support radius support_scale times the sampling's covering distance (the farthest any vertex lies from its nearest sample), so every vertex is covered and neighbouring supports overlap.
  3. Weights normalised to a partition of unity, then one affine frame per sample assembled with lbs_jacobian(sparse=True).

Returns (W, B, samples) and optionally the sample-to-vertex distances. The geodesic distances and sampling reuse compliance_graph / compliance_node_sampling with a unit material, so the function is the geometry-only counterpart of sparse_meshless_methods_basis; the paper's constraint-projection subspace is the same construction on constraint centres.

Tests

tests/test_hyper_reduced_projective_dynamics_basis.py: shapes, partition of unity and non-negativity, compact support, independence from the material, each sample dominated by its own weight, support scaling widens supports while keeping coverage, sparse B equals the dense lbs_jacobian, affine patch test, seed and distance outputs. Full suite: 641 passed, 5 skipped (optional deps).

Tutorial

Tutorial 026 in simkit-tutorials gains a section that builds this basis on the tentacle, visualises its samples and weights, and adds it as a fifth space to the sag, convergence and swing comparisons (it behaves like the uniform skinning eigenmodes: sparse, but geometry-only).

Release

pyproject.toml is at 0.1.10 and CHANGELOG.md has the 0.1.10 section. After merging, push the v0.1.10 tag on main to publish to PyPI (tag pushes are blocked from the Claude session, as with v0.1.9).

🤖 Generated with Claude Code

https://claude.ai/code/session_01UGZcwqzGYGz9YtjzzdLtBX


Generated by Claude Code

Sparse skinning subspace of Hyper-Reduced Projective Dynamics (Brandt,
Eisemann, Hildebrandt, SIGGRAPH 2018): farthest-point samples in geodesic
distance, compactly supported Wendland radial weights of that distance
normalised to a partition of unity, one affine frame per sample assembled
with lbs_jacobian(sparse=True). Geometry-only counterpart of
sparse_meshless_methods_basis; reuses the compliance graph with a unit
material for the geodesic distances and sampling.

Tests: shapes, partition of unity, compact support, material independence,
sample dominance, support scaling, dense/sparse agreement, patch test,
seed and distance outputs. Bumps the version to 0.1.10 with a changelog
entry.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UGZcwqzGYGz9YtjzzdLtBX
@otmanon
otmanon merged commit 1b62b19 into main Oct 8, 2026
9 checks passed
@otmanon
otmanon deleted the claude/new-session-bvo8qi branch October 8, 2026 17:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant