OnlyCSharp 1.9 · ComputerGraphics.PartAssembly

PartForge

Attach a custom part to anything that moves, see exactly where the joints are, and build it out of steel or aluminum foil and watch the difference — three connected pieces of work, all pure C#, all real physics, zero NuGet packages.

01 · Attach

Part Studio

A Kerbal-Space-Program-style attachment system for the library's own procedural creatures: snap a part onto a socket that snaps flush, floats freehand, or rides an evenly-spaced ring around a host part — and if the socket is on a moving leg or wing, the attached part tracks that motion automatically, no separate animation code required.

3attach modes: snap / freehand / ring
3actions: spin / bob / emit effects
6complete builds, analysis-picked sockets
5starter parts: spike, plate, antenna, pod, fin
0changes to the 90+ existing creature clips
Six different animated creatures and machines, each customized with attached parts and live effects.
The fleet: six complete builds across six clip categories — a war beetle, a cargo bird, a fish with a water-trail tail, a sparking piston engine, a glowing garden stem, and a jellyfish with a mind-orbit crown. Every build discovers its own attachment points by motion analysis (least-moving part = hub, most-moving = animated socket), uses KSP-style radial symmetry and phase-staggered actions, and saves to a JSON document.
Before and after of an edited part build: the engine pod and its chained antenna removed, spikes recolored, a slinky tail added.
The full editor loop: left, a build with live actions — a spinning radar plate, a fire-emitting engine pod, a bobbing antenna chained onto the pod. The whole build saves to a 2.9 KB JSON document, loads back through name resolvers, and gets edited KSP-style: right, the engine pod pulled off (its chained antenna goes with it), spikes re-materialed to copper, the radar spun up, and a pipe-cleaner slinky tail added emitting a heal spiral. The save→load round-trip is verified to exact composed geometry.
  • Parts are never required to touch what they're attached to — most of the library's own recipes already place pieces this way (a snowman is three spheres and a cone nose, not one welded mesh).
  • Attaching a custom part onto another custom part's own node chains cleanly — a fin mounted on a pod that's itself freehand-mounted on the body.
02 · Analyze

Skeleton Viz

Where are the good attachment points on a creature that has no bone hierarchy at all? A shape-agnostic movement analysis samples every part's world-space position across a full gait cycle and colors it blue-to-red by how much it actually moves — the parts that move the most are exactly the parts that make good animated sockets; the parts that barely move are good static hubs instead.

99creature clips, all 10 categories
110migrated spell/monster particle effects
209pieces in one combined grid
  • The metric needs zero per-creature tuning: sample N phases, take each part's world bounding-box center (not local origin — hip-anchored legs are pinned at the origin), sum the cyclic path length.
  • A heatmap-only view reads clearly for discrete-jointed creatures; a heatmap-plus-trail view is load-bearing, not cosmetic, for continuous-wave motion — the same data reads as meaningless scatter without it.
03 · Simulate

Material Physics

What a part is made of changes how it behaves once attached — not a fake "stiffness slider," but real cantilever-beam and coil-spring mechanics driven by each material's actual density, Young's modulus, and yield strength.

8materials: steel to pipe cleaner to glass
3mechanics models: beam bend + coil spring + fracture
0.0°settle angle for every elastic material — earned, not authored
Eight wall-mounted arms under a ramping force; four snap off at different moments and fall.
Bend to destruction: the force ramps to 1.5 N and each material meets its ultimate strength on its own schedule — foil tears almost instantly, glass shatters with barely any visible flex (it has no yield regime at all), the pipe-cleaner and wood snap later in the ramp, and the broken pieces tumble down under ballistics. Steel, titanium, and copper survive; limp string just hangs. The cascade falls out of the real tabulated ultimate-strength numbers with zero per-material scripting.
The same antenna attached to the same walking ant, built out of seven materials, each drooping by its real physics.
Where the three pieces meet: the same antenna, attached at the same socket on the same walking creature (Part Studio), built out of all seven materials — and gravity-aware: each antenna re-aims every frame, blending between the socket's live up-axis and world-down by its real cantilever droop fraction (Material Physics). Steel, titanium, and copper ride the bobbing body upright; foil and string hang straight toward the ground no matter how the gait tilts their socket; the pipe-cleaner holds a permanent bend because its low yield point was exceeded.

A real limitation, documented rather than hidden: the aluminum-foil preset's softened modulus was calibrated for beam bending (foil's floppiness is almost entirely a thin-cross-section effect, not the alloy itself) — fed into the coil-spring formula, where stiffness scales with wire diameter to the fourth power, it produces a physically silly stretch number. Bounded for rendering, flagged in the code rather than quietly clamped and forgotten.

  • Permanent bends are a real consequence of exceeding a material's yield stress — pipe cleaners hold a shape because their yield point is low, not because "plastic" was hand-set to true.
  • The settle motion reuses GameDevelopment.Vegetation.VegetationBend, an existing, unit-tested damped torsional spring originally built for grass blades — a part hanging off an attachment point is exactly the same pinned-torsional-spring problem.