# spineconv — экспорт геометрии Spine → JSON (офлайн) Читает `.skel.bytes` + `.atlas.txt` через свободный исходник **spine-csharp 4.2** и выгружает геометрию рига (кости setup + привязки: мировые вершины, UV, треугольники, веса) в компактный JSON, который потребляет нативный сборщик (`src/NativeCharacter.cs`). Нужен потому, что рантайм spine-godot НЕ отдаёт геометрию привязок. ## Как собрать и запустить ```bash # 1) исходники spine-csharp 4.2 (рядом с этой папкой) git clone --depth 1 --branch 4.2 --filter=blob:none --sparse \ https://github.com/EsotericSoftware/spine-runtimes.git spine-rt cd spine-rt && git sparse-checkout set spine-csharp/src && cd .. # (csproj ссылается на ..\spine-rt\spine-csharp\src\**\*.cs — поправь путь при необходимости) # 2) собрать dotnet build -c Release # 3) экспорт геометрии персонажа dotnet bin/Release/net8.0/spineconv.dll /elf1_combat tools/rig/elf1_combat.json ``` ## Пайплайн Spine → нативный Godot (Вариант B) 1. **spineconv** → `tools/rig/.json` (геометрия рига). 2. **tools/bake_anim.gd** (в редакторе spine-godot, headless) → `tools/rig/_anims.json` (запекает локальные трансформы костей покадрово; прогоняет Spine-рантайм офлайн). 3. **src/NativeCharacter.cs** — в рантайме собирает `Skeleton2D` + взвешенные `Polygon2D` из геометрии и `AnimationPlayer` из запечённых костей. **Spine в рантайме не используется.** Итоговый персонаж (`NativeCharacter.cs` + два JSON + атлас-PNG) переносится в обычный Godot без модуля Spine.