explaingit

6x-u/enrinanime

14C++Audience · developerComplexity · 4/5Setup · hard

TLDR

A lightweight C++ character animation engine under 3 MB that covers skeleton keyframing, ten inverse kinematics solvers, blend trees, and ARKit-compatible facial animation for games and apps.

Mindmap

mindmap
  root((ENRINANIME))
    Skeleton animation
      256 bones max
      6 interpolation types
      Position rotation scale
    Inverse kinematics
      10 IK solvers
      Two-bone arm and leg
      Full body solver
      Foot placement
    Blend trees
      12 node types
      Mix clips by parameter
      Speed-based blending
    Facial animation
      55 ARKit blend shapes
      Phoneme lip sync
      Eyes brows mouth
    Platforms
      Windows Linux macOS Android
      Vulkan DirectX12 OpenGL
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Things people build with this

USE CASE 1

Add multi-bone skeleton keyframe animation to a custom game engine with six interpolation modes.

USE CASE 2

Implement realistic foot placement using the IK foot solver so character feet land correctly on uneven terrain.

USE CASE 3

Drive lip sync automatically from speech using the phoneme system and 55 ARKit blend shapes.

Tech stack

C++C++20VulkanDirectX 12OpenGL

Getting it running

Difficulty · hard Time to first run · 1h+

Requires a C++20 compiler and linking against Vulkan, DirectX 12, or OpenGL depending on platform.

License not specified in the explanation.

In plain English

ENRINANIME is a C++ animation engine aimed at developers who need to add character animation to games or interactive applications without taking on the size and cost of a professional content creation tool. The whole compiled library weighs around 3 megabytes, which the README compares to the tens of gigabytes that tools like Maya require. The engine handles several interconnected problems in character animation. For basic movement, it supports keyframe animation on skeletons of up to 256 bones, with six different ways to interpolate between keyframes: constant, linear, cubic, Bezier, Hermite, and step. Bone channels can carry position, rotation, scale, shape deformation weights, visibility, and custom numeric values. For body posing, the engine includes ten inverse kinematics solvers. Inverse kinematics is the technique where you specify where a hand or foot should land and the solver works backward to figure out how the arm or leg joints need to rotate to get there. Different solvers are provided for different body parts: two-bone for arms and legs, spinal solvers, hand-specific, foot placement, and a full-body solver. For blending between animations, it uses a blend tree system with twelve node types. This lets developers mix multiple animation clips together based on game parameters, such as blending a walk animation with a run animation proportionally to the character's speed. For facial animation it implements 55 blend shapes compatible with Apple's ARKit face tracking format, covering eyes, brows, cheeks, jaw, and a full range of mouth shapes. A phoneme system handles automatic lip synchronization to speech. The engine supports Vulkan, DirectX 12, and OpenGL rendering backends and runs on Windows, Linux, macOS, and Android. It is built with C++20 and uses a multithreaded job system for performance. The README is written as detailed technical documentation with code examples.

Copy-paste prompts

Prompt 1
I am building a game with ENRINANIME. Show me C++ code to load a skeleton, set keyframes for a walk cycle on a 30-bone character, and sample the pose at a given time using linear interpolation.
Prompt 2
Explain how to set up a blend tree in ENRINANIME that blends a walk animation and a run animation based on a speed float parameter.
Prompt 3
Show me how to use ENRINANIME's two-bone IK solver to make a character's hand reach a target position in world space with the elbow pointing correctly.
Open on GitHub → Explain another repo

← 6x-u on gitmyhub — every repo by this author, as a profile.

Verify against the repo before relying on details.