Blender add-on: soft-tissue jiggle analyzer + auto-rig + VRChat PhysBone preview. By Unity AI Lab. GPLv3.
Find a file
2026-07-03 00:32:01 -07:00
.gitignore Jiggle Lab v1.0.0 — soft-tissue jiggle analyzer + auto-rig + PhysBone preview 2026-06-30 16:12:07 -07:00
jiggle_lab.py compat(2.93): support Blender 2.93 — color_attributes/vertex_colors bridge + temp_override fallback 2026-07-03 00:32:01 -07:00
LICENSE Jiggle Lab v1.0.0 — soft-tissue jiggle analyzer + auto-rig + PhysBone preview 2026-06-30 16:12:07 -07:00
README.md compat(2.93): support Blender 2.93 — color_attributes/vertex_colors bridge + temp_override fallback 2026-07-03 00:32:01 -07:00

Jiggle Lab

Measured, one-click jiggle physics for rigged avatars in Blender.

Jiggle Lab reads a rigged avatar's geometry, works out which flesh overhangs the skeleton, clusters that soft tissue into anatomical masses, and auto-rigs a jiggle bone per mass with physically-derived spring parameters. It then computes matching VRChat PhysBone settings, and lets you preview the motion in the viewport or render it straight to MP4.

No manual bone placement, no guessing at spring/pull values — the numbers come out of the mesh itself.

What it does

  • Analyze soft tissue. Builds a per-vertex "softness" field — the distance from each vertex to its nearest structural skeleton bone (how far the flesh overhangs the structure) — and paints it as a heatmap (blue = firm / near-bone, red = soft overhang). Verts driven only by helper groups or no deform bone are excluded.
  • Detect masses. Clusters high-softness vertices into anatomical zones by position and dominant bone — breast (L/R), belly, butt (L/R), thigh (L/R). Arms are skipped. Each mass is colored distinctly and reported with its vertex count.
  • Auto-rig jiggle bones. Creates one bone per mass (jb_* prefix), parents it to the mass's dominant deform bone, orients it along the overhang direction, and weights it with a softness falloff taken from the existing deform weights. By default it strips any prior jiggle rig first, so rigs never stack (stacked rigs cause clipping) — safe to re-run.
  • Compute physics. From each mass's proxy volume it derives a spring model: bigger masses jiggle slower (natural frequency f ~ 1/sqrt(m)), firmer tissue is more damped (damping ratio ζ). These map to VRChat PhysBone Pull, Spring, Stiffness, and Gravity, stored as custom properties on each jiggle bone and shown in the panel.
  • Preview / render. Bakes a jump animation with a decaying oscillation on the jiggle bones so you can feel the motion — play it in the timeline, or render it to an MP4. MP4 uses Blender's native FFmpeg container when the build supports it, and falls back to a PNG sequence stitched with system ffmpeg (or leaves the PNG folder if ffmpeg isn't found).

Quick start

Open the Jiggle Lab tab in the 3D View sidebar (press N). The panels run top-to-bottom in the order you use them:

  1. Setup — Pick your Mesh and Armature, or click Set / Sync Targets to auto-fill from the active mesh and its armature modifier. This panel also shows whether Deform Doctor and MPFB were detected.
  2. Analyze — Click Analyze Soft Tissue to paint the overhang heatmap. Adjust Softness Threshold and Min Mass Size, then click Detect Masses to see the clustered zones and their vertex counts. Clear Heatmap removes the diagnostic coloring.
  3. Auto-Rig & Physics — Set Firmness, Min/Max Freq, Jiggle Authority, Max Influences, and leave Replace Existing Jiggle on. Click Auto-Rig Jiggle Bones (it asks for confirmation). It rigs the bones, computes the physics, and lists the resulting PhysBone settings per bone. Remove Jiggle Bones deletes everything it created.
  4. Preview — Set Preview Amplitude and Preview Frames, then Bake Preview (viewport) and play the timeline, or Render Preview MP4 to write jiggle_lab_preview.mp4.

Controls

Control Default Meaning
Softness Threshold 0.55 Fraction of max overhang counted as soft tissue
Min Mass Size 40 Minimum vertices for a cluster to become a mass
Firmness 0.3 Tissue firmness → damping (used when the MPFB macro is absent)
Min Freq (Hz) 1.6 Frequency of the biggest / heaviest mass
Max Freq (Hz) 3.8 Frequency of the smallest mass
Jiggle Authority 0.8 Max weight share a jiggle bone takes from the body
Max Influences 4 Weight limit-per-vertex during cleanup
Replace Existing Jiggle on Strip prior jiggle rig before rigging (no stacking)
Preview Amplitude 1.0 Scales preview jiggle amplitude
Preview Frames 100 Length of the baked preview

Installation

Jiggle Lab is a single-file, drop-in add-on.

  1. Blender 2.93+: Edit → Preferences → Add-ons (or Extensions on 4.2+) → Install…
  2. Select jiggle_lab.py and enable Jiggle Lab.
  3. Open the Jiggle Lab panel in the 3D View sidebar (N).

Blender version support

Requires Blender 2.93 or newer (bl_info minimum (2, 93, 0)). Runtime-verified on Blender 2.93.0 and 5.1.2. The jiggle heatmap uses mesh.color_attributes on Blender 3.2+ and falls back to loop-domain mesh.vertex_colors on 2.933.1; viewport-render preview uses context.temp_override on 3.2+ with a classic override-dict fallback on older builds.

VRChat / Unity relevance

Jiggle Lab is built for avatars headed to VRChat and Unity. For each mass it computes concrete VRChat PhysBone values — Pull, Spring, Stiffness, and Gravity — derived from the mass's size and firmness, and stores them as custom properties on the generated jiggle bones so you can read them straight off the rig when setting up your PhysBone components. The generated bones use a clean jb_ prefix and are weighted with a per-vertex influence cap (default 4) so the rig stays within engine limits. The in-Blender preview is an approximation of feel — in-game jiggle is 100% PhysBones.

Part of the Unity AI Lab Blender suite

Jiggle Lab is one of the Unity AI Lab Blender plugins. Each tool is standalone — no hard dependencies — but built to interoperate cleanly with its siblings:

  • Deform Doctor — when present, Jiggle Lab routes its weight cleanup (limit-to-N + normalize) through it; otherwise it uses its own equivalent. Jiggle Lab never touches Deform Doctor's DD_Heat attribute (it uses its own JL_Heat).
  • MPFB — when present, Jiggle Lab reads the firmness macro to scale damping instead of the Firmness slider.
  • Texturly and Cats Blender Expanded — sibling suite tools for world/material texturing and avatar cleanup that share the same avatar-first, VRChat/Unity-safe workflow.

Conflict-proofing is by design: Jiggle Lab keeps its own jigglelab.* operator namespace, JIGGLELAB_* classes, scene.jiggle_lab property, "Jiggle Lab" sidebar tab, JL_Heat color attribute, and jb_ bone prefix, and it detects and reuses existing jiggle bones rather than duplicating them.

The suite is developed on the lab's self-hosted Forgejo host:

git@git.unityailab.com:UnityAILab/blender-jiggle-lab.git

License

GNU General Public License v3.0 or later (GPL-3.0-or-later). See LICENSE. © Unity AI Lab.