diff --git a/gpu-skinned-herds.html b/gpu-skinned-herds.html index 2449704..a71d73d 100644 --- a/gpu-skinned-herds.html +++ b/gpu-skinned-herds.html @@ -369,8 +369,8 @@ NORMAL = normalize((skin * vec4(NORMAL, 0.0)).xyz);
Engine version: 4.6.5.
No C# wrapper is generated — instantiate from GDScript via ClassDB.instantiate() and call the bound methods. The binding surface is small and stable. See ariki-game/scenes/animals/skinned_herd.gd for the reference backend.
The migrate_animals.py tool converts source FBX files to game-ready GLBs — imports, cleans hierarchy, rebuilds named NLA clips from frame ranges, strips duplicate meshes, bakes into the flat assets/models/glbs/ directory. Each animal gets a catalog entry in animals_catalog.json with clip metadata, default state mapping, and an animSpeedRef for foot-sync.
At runtime, AnimalHerdRenderer spawns one skinned_herd per animal type. The herd bakes the palette from the catalog GLB's clips. AnimalAnimationLogic maps sim FSM states to clip keywords (attack → "attack"/"bite", flee → "run"/"gallop", wander → "walk"). The renderer lerps positions between sim ticks for smooth motion and writes per-instance custom data each frame. Zero per-frame CPU on the animation path.
Each animal model ships as a game-ready GLB with baked animation clips. A catalog file maps each animal to its clips, default state, and per-animal speed reference for foot-sync.
+At runtime, AnimalHerdRenderer spawns one skinned_herd per animal type. The herd bakes the palette from the model's clips. Animation logic maps sim FSM states to clip keywords (attack → attack/bite, flee → run/gallop, wander → walk). The renderer lerps positions between sim ticks for smooth motion and writes per-instance custom data each frame. Zero per-frame CPU on the animation path.
The bone-matrix palette technique is the same architecture used by Assassin's Creed Unity, Total War: Warhammer, and Hitman for their crowd systems. We're using the same core idea, in a Godot fork, with smaller VRAM — our low-poly animals keep textures tiny.
The platform supports three tiers by distance, all driven by the same (clip, count, speed, phase) packet: