ProjectRR — нативный прототип на ассетах ProjectR
- Все 189 скелетов Spine сконвертированы в нативные Godot Skeleton2D (.tscn), без Spine в рантайме - Меню + сцены: подземелье (карта комнат), просмотр спрайтов, нативные анимации - Кастомизация цвета (кожа/волосы/глаза) через шейдер - Вытащенные текстуры/UI/шрифты + нарезка спрайтов из атласа - Датасет комнат для LoRA, офлайн-инструменты конвертации в tools/ Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,131 @@
|
||||
# ProjectRR — нативный просмотрщик персонажей
|
||||
|
||||
Тестовый проект: персонажи и анимации, извлечённые из игры **ProjectR** и
|
||||
**полностью переведённые в нативный Godot** (`Skeleton2D` + взвешенные `Polygon2D` +
|
||||
`AnimationPlayer`). **Spine в рантайме не используется** — проект работает на обычном Godot.
|
||||
|
||||
## Требования к движку
|
||||
|
||||
Запуск/редактирование проекта — **обычный Godot 4.7.1 mono** (модуль Spine не нужен):
|
||||
|
||||
```
|
||||
D:\Godot_v4.7.1\Godot_v4.7.1-stable_mono_win64.exe
|
||||
```
|
||||
|
||||
Все персонажи уже нативные, поэтому Spine-сборка для игры не нужна. Офлайн-инструменты
|
||||
пересборки (`tools/bake_anim.gd`, `tools/build_tscn.gd`, `tools/convert_all.gd`) требуют
|
||||
отдельную **spine-godot 4.2**-сборку — но только если понадобится перегенерировать `.tscn`.
|
||||
|
||||
## Запуск
|
||||
|
||||
1. Открыть проект обычным Godot 4.6.1 mono.
|
||||
2. Нажать ▶ (F5). Главная сцена — `scenes/MainMenu.tscn` (меню).
|
||||
|
||||
## Меню и сцены
|
||||
|
||||
Главное меню (`scenes/MainMenu.tscn`) ведёт на три сцены (назад в меню — `Esc`):
|
||||
|
||||
1. **Подземелье** (`scenes/Dungeon.tscn`) — разрез убежища à la Fallout Shelter: сетка 6×5
|
||||
комнат. ЛКМ/WASD — панорама, колесо — зум, `R` — сброс.
|
||||
2. **Просмотр спрайтов** (`scenes/SpriteViewer.tscn`) — галерея вытащенных изображений
|
||||
(UI, фоны, эффекты, нарезанные спрайты). `A/D` — картинка, `W/S` — категория, колесо — зум.
|
||||
3. **Нативные анимации** (`scenes/NativeViewer.tscn`) — браузер всех 38 персонажей нативно:
|
||||
`Q/E` — персонаж, `W/S` — состояние (скелет), `A/D` — анимация. Внизу — **кастомизация
|
||||
цвета** (Кожа / Волосы / Глаза + Сброс): части красятся шейдером `assets/recolor.gdshader`
|
||||
(замена оттенка с сохранением светотени) по имени слота.
|
||||
|
||||
Все **189 скелетов** (38 персонажей × их состояния) сконвертированы в нативные
|
||||
`characters/<char>/<state>_native.tscn`.
|
||||
|
||||
## Управление
|
||||
|
||||
**Персонажи:**
|
||||
|
||||
| Клавиша | Действие |
|
||||
|---|---|
|
||||
| `Q` / `E` | предыдущий / следующий персонаж |
|
||||
| `W` / `S` (↑ / ↓) | предыдущее / следующее состояние |
|
||||
| `A` / `D` (← / →) | предыдущая / следующая анимация |
|
||||
| колесо мыши | зум |
|
||||
| `Пробел` | перезапустить анимацию |
|
||||
| `R` | сбросить вид |
|
||||
|
||||
**Текстуры (галерея):**
|
||||
|
||||
| Клавиша | Действие |
|
||||
|---|---|
|
||||
| `A` / `D` (← / →) | предыдущая / следующая картинка |
|
||||
| `W` / `S` (↑ / ↓) | предыдущая / следующая категория (папка) |
|
||||
| колесо мыши | зум · `R` — сброс |
|
||||
|
||||
## Структура
|
||||
|
||||
```
|
||||
characters/ — персонажи
|
||||
<name>/*_native.tscn — НАТИВНЫЕ сцены (Skeleton2D + Polygon2D + AnimationPlayer) — то, что играется
|
||||
<name>/spine/ — исходники Spine (.skel.bytes/.atlas.txt/.png). PNG нужны нативным сценам
|
||||
как текстуры; .skel/.atlas — только для пересборки (можно удалить)
|
||||
assets/ — прочее 2D-искусство (из AssetRipper-экспорта)
|
||||
fonts/ — шрифты игры (.ttf/.otf)
|
||||
ui/ — UI-скин: button/toggle/slider/window/textfield/scrollbar, Maininterface_*, Button_*
|
||||
backgrounds/ — фоны, дороги, лес, замок, небо
|
||||
fx/ — текстуры эффектов (Cartoon FX / cfxr)
|
||||
cursors/ icons/ misc/ — курсоры, иконки, логотип
|
||||
atlas/ — большие упакованные листы SpriteAtlas (UI/Room, 4096²) — сырые
|
||||
ui_sliced/ — 286 отдельных UI-спрайтов, нарезанных из атласа по Unity-разметке
|
||||
room_sliced/ — 15 спрайтов комнат из атласа
|
||||
scenes/MainMenu.tscn — главное меню (главная сцена)
|
||||
scenes/Dungeon.tscn / SpriteViewer.tscn / NativeViewer.tscn — три сцены из меню
|
||||
src/MainMenu.cs — меню (кнопки, тема из игрового арта)
|
||||
src/NativeBrowser.cs — браузер всех нативных персонажей (сканирует *_native.tscn)
|
||||
src/TextureGallery.cs — галерея текстур
|
||||
src/RoomMap.cs — карта убежища (сетка комнат, панорама/зум)
|
||||
tools/convert_all.gd — ПАКЕТНАЯ конвертация всех скелетов в *_native.tscn
|
||||
tools/bake_anim.gd — запекатель анимаций одного скелета (Spine → кости, JSON)
|
||||
tools/build_tscn.gd — сборка одной .tscn из геометрии + запечённых анимаций
|
||||
tools/spineconv/ — офлайн-экспортёр геометрии Spine → JSON (см. его README)
|
||||
tools/rig/geom/*.json — выгруженная геометрия всех скелетов (для пересборки)
|
||||
tools/slice_atlas.gd — нарезчик спрайтов из атласа (по tools/sprite_layout.json)
|
||||
tools/sprite_layout.json — разметка спрайтов (имя, атлас, rect, 9-slice border)
|
||||
```
|
||||
|
||||
## Как всё переведено в натив (Вариант B)
|
||||
|
||||
Все 189 скелетов конвертированы в нативный Godot. Пайплайн (нужна spine-godot 4.2-сборка):
|
||||
|
||||
1. **`tools/spineconv/`** (через `spine-csharp`) — выгружает геометрию рига каждого скелета
|
||||
в `tools/rig/geom/*.json` (кости + меши с вершинами/UV/треугольниками/весами).
|
||||
Batch: `spineconv --batch <characters> tools/rig/geom`.
|
||||
2. **`tools/convert_all.gd`** — один прогон: по каждой геометрии запекает анимации из
|
||||
Spine-рантайма (локальные трансформы костей + draw order покадрово) и **сохраняет**
|
||||
`characters/<char>/<state>_native.tscn` (`Skeleton2D` + взвешенные `Polygon2D` +
|
||||
`AnimationPlayer`).
|
||||
|
||||
Готовые `.tscn` + атлас-PNG работают в **обычном Godot без модуля Spine** и редактируются
|
||||
в редакторе (кости, веса, ключи, draw order через `z_index`).
|
||||
|
||||
Пересобрать всё: `godot-4.2-... --headless --path . --script res://tools/convert_all.gd`.
|
||||
|
||||
## Перенарезать спрайты из атласа
|
||||
|
||||
Разметка `tools/sprite_layout.json` получена из AssetRipper `Sprite/*.json`
|
||||
(PathID→атлас: 129=UI, 49/128=Room; координаты Unity снизу-вверх → нарезка делает flip по Y).
|
||||
Повторная нарезка:
|
||||
|
||||
```
|
||||
godot-4.2-4.6.1-stable-mono.exe --headless --path . --script res://tools/slice_atlas.gd
|
||||
```
|
||||
|
||||
Не переносилось (движковый/Unity-мусор): водяные знаки и сплэши Unity, lookup-текстуры
|
||||
пост-обработки (BayerMatrix, AreaTex, SearchTex, Falloff*, LDR_LLL1_* дизеринг),
|
||||
TMP-атласы шрифтов, редакторные UI-иконки, White1px/none.
|
||||
|
||||
## Примечания
|
||||
|
||||
- В игре **каждое состояние персонажа — отдельный скелет**, поэтому смена состояния
|
||||
инстанцирует другую `.tscn`.
|
||||
- Среди анимаций встречаются рабочие огрызки аниматора (`dd`, `dfdfa`, `test` и т.п.) —
|
||||
показываются все как есть.
|
||||
- Анимации с **деформацией мешей** конвертер не переносит (только кости); у elf1 их нет,
|
||||
у некоторых персонажей отдельные части могут быть чуть «жёстче» оригинала.
|
||||
- Контент игры 18+.
|
||||
Reference in New Issue
Block a user