Carangiform Locomotion

High-Fidelity Technical Rigging for Aquatic Assets

Challenge

Creating unique swimming animations for diverse fish species is a significant production bottleneck. Hand-keyframing fin oscillations and body waves for every new fish type is time-consuming and prone to inconsistency.

The Goal: Build a “Master Rig” that is:

  • Species-Agnostic: Capable of being reshaped to fit any fish utilizing Carangiform locomotion.
  • Semi-Autonomous: Requiring few control bones to drive the entire body’s natural movement.
  • Physically Accurate: Mimicking the “leading-edge” motion of real-world ichthyology.
  • Bridge Software Gaps: Provide the visual smoothness of Blender’s “Bendy Bones” while remaining 100% compatible with real-time game engines.
Solution

Constraint-Driven Automation. I moved away from traditional manual rigging toward a Procedural Logic system. The core solution was a “Master Drive” setup that handles the physics and math internally, allowing the animator to focus purely on trajectory.

The “Two-Bone” Control: I reduced the entire rig’s interface to just two handles: the Head (for pathing) and the Body Root (for wave frequency). This ensures that the animation remains “on-model” even during extreme maneuvers.
Pseudo-Bendy Bone Chains: I replaced engine-unfriendly B-Bones with a high-density linear bone chain. Through precise weight-painting and constraint blending, I achieved identical curvature smoothness that exports perfectly to FBX and .GLB.

Workflow
Phase 1: The Kinematic Spine
  • Hierarchical Foundation: The rig is built on a “Lead-Follow” skeletal architecture. The Head Bone serves as the absolute root of the entire hierarchy. The spine chain is then parented directly to the head, ensuring that all procedural oscillations remain relative to the character’s primary trajectory.
  • The Mathematical Loop (The Driver): To achieve a perfect, infinite swimming cycle for the master body oscillation, I utilized a Sine-wave expression within Blender’s Driver Editor. By tying the rotation of the primary spine bones to the timeline, I ensured the motion is mathematically loopable without manual keyframing.
  • Constraint Propagation: To pass this motion down the body, I used Damped Track Constraints with incremental influence. This creates the signature “S-curve” wave, ensuring the tail reacts with a natural delay compared to the mid-body.

The Expression:
sin((frame​/60)×2π)×0.3
frame​/60: Normalizes the motion to the 60-frame animation length
2π: Completes one full oscillation cycle (360∘) over the duration of the loop.
0.3: Acting as the Amplitude Controller, this variable defines the intensity of the “swing.”

Phase 2: Fluid Tail
  • To capture the delicate “flicker” of a fish, a dedicated bone systems for the tail is developed
  • Damped Track Logic: Tail Bones are parented to the Spine Tail and these bones utilize Damped Track constraints to “lag” behind the body’s primary wave.
  • Dynamic Resistance: This simulates water drag automatically. As the fish swings, the tail take a fraction of a second to “catch up,” creating organic overlapping motion without extra animation data.
Phase 3: Fluid Fin
  • Drive Chain: drive chines were made to control the spines for fins.
  • Spine Chains: were Damped Tracked to give them Fluid Motion
Conclusion

By shifting the burden of movement from the animator to the rig’s architecture, I achieved a 90% reduction in animation turnaround time. The final rig proves that technical art is about building scalable tools that balance biological realism with strict real-time performance constraints—a perfect fit for high-density mobile environments.