Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: TMHSDigital/Blender-Developer-Tools
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v0.44
Choose a base ref
...
head repository: TMHSDigital/Blender-Developer-Tools
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v0.45.0
Choose a head ref
  • 2 commits
  • 16 files changed
  • 2 contributors

Commits on Jul 24, 2026

  1. feat: add socket-attach-points example (spawn mount contract) (#118)

    A spawn system bolting modules onto a prop at runtime rests on a chain of
    matrix identities that all fail quietly: a skipped matrix_parent_inverse, a
    basis built with the cross product the wrong way round, a transform frozen on
    the parent after the sockets were placed. Nothing in the gallery pinned that
    chain down — prop-origin-transform covers pivots and parent-inverse-orrery
    covers parent-inverse under animation, but neither asserts that a module
    dropped on a named socket with an identity local transform lands where the
    artist put it.
    
    The socket orientation check is deliberately non-circular: the mount pad mesh
    is swung onto its declared normal by a quaternion, while the socket basis is
    built by explicit Gram-Schmidt, and the check compares the socket's +Z against
    a Newell normal recomputed from raw vertex coordinates. Two independent
    derivations of the same declared value, so a basis-construction bug cannot
    hide behind the spec that produced it.
    
    Two hazards surfaced while authoring and are asserted rather than merely
    described, so they cannot change under us silently: applying a transform on an
    Empty root has no object data to bake into, so Blender pushes it down into
    every child (all 7 parent-inverses cleared, root scale handed to each child's
    local matrix) while preserving world matrices; and a child left selected
    during that apply gets the transform applied twice, drifting sockets 2.335 m.
    
    Signed-off-by: fOuttaMyPaint <tmhospitalitystrategies@gmail.com>
    Signed-off-by: fOuttaMyPaint <TMhospitalitystrategies@gmail.com>
    TMHSDigital authored Jul 24, 2026
    Configuration menu
    Copy the full SHA
    4bfe83b View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    a1389af View commit details
    Browse the repository at this point in the history
Loading