The lab

Prani

A lightweight, multithreaded, ECS-based animation engine built from scratch — AnimForge's research sandbox for modern animation techniques.

Why build an engine to build tools?

Iterating on animation algorithms inside a full game engine means paying the full engine's cost every cycle: long rebuilds, heavyweight editors, and abstractions you have to work around instead of with. Prani exists to make the iteration loop on solver math, blending strategies, and pose pipelines as short as possible.

Algorithms are proven here first — with visualizers and unit tests — then ported into engine plugins. The DLS IK solver and the RBF blend space core both follow this path: validate in Prani, ship in Unreal.

  • Language — modern C++, built from scratch
  • ECS — EnTT registry, command-buffer structural changes
  • Threading — Intel TBB task parallelism across pose evaluation
  • Rendering — Raylib 6 with native skeletal animation blending
  • Assets — glTF import via cgltf
  • Tooling UI — Dear ImGui, composited into desktop tooling

Current research threads

What's on the bench

Active

Parallel pose pipeline

ECS pose-view architecture with TBB parallel_for across skeleton evaluation — measuring where task granularity pays off and where it doesn't.

Active

IK iteration environment

The DLS solver math running in a bare Prani node — sub-second rebuild cycles for solver experiments that would take minutes per iteration in a full engine.

Exploring

Tooling composition

Raylib rendering composited into a desktop tooling UI — an FBO render-to-texture bridge, with shared GL context as the long-term target.

Exploring

WarpViz evaluation target

Prani as a lightweight replacement for a full Unreal instance in the WarpViz pipeline — making the tool dramatically easier to distribute.

Devlog

Build notes

Architecture decisions, dead ends, and measurements from Prani's development — posted as they happen.