Files
Bonchellon 04ad6d3f25 Initial commit: Vertical Partition Streaming plugin (UE 5.7)
Bounded vertical route partition / streaming for handcrafted spiral climb maps
(Only Up / Only Climb). Not World Partition, not Level Instances as core arch.

- Z-cell segmentation + optional XY subcells, editor builder + commandlet
- NonDestructive visibility backend + streaming-level backend
- Offline HLOD proxies: MergedMesh / SimplifiedProxy (ProxyLOD)
- Universal Level Instance + Packed Level Actor + HISM support (flatten+merge)
- Vertical-aware runtime streamer (full/preload/HLOD/unload, hysteresis,
  velocity prediction, fall-risk), WP-style debug viz + vp.* console
- Safe-by-default: only static decor streams; sky/lights/gameplay stay persistent

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 17:42:41 +03:00

110 lines
7.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Vertical Partition — практическая инструкция
> Пошаговое «что нажимать». Архитектура и детали — в [README.md](README.md).
Плагин берёт **готовую** вертикальную карту (Only Up / Only Climb), режет её на
**Z-ячейки**, печёт офлайн **HLOD-прокси** и в рантайме грузит ближние ячейки целиком,
дальние показывает как прокси, совсем дальние выгружает.
---
## 0. Один раз: включить плагин
Плагин `EnabledByDefault` — подхватывается сам. Если нет: `Edit → Plugins → Vertical
Partition → Enabled`, перезапустить редактор. После C++-правок нужна полная пересборка
(новые модули в редактор «на лету» не подгружаются).
---
## 1. Поставить том вокруг трассы
1. В уровне: **Place Actors → ищи `Vertical Partition Volume`** → перетащи на сцену.
2. Масштабируй **Box** так, чтобы он охватил **всю** играбельную спираль (низ → верх).
Бокс рисуется голубым; коллизии у него нет.
## 2. Настроить (в деталях тома, секция `Vertical Partition → Settings`)
Минимум, что нужно тронуть:
- **Cell Height** — высота одной ячейки (см). Ориентир: 12 «этажа» трассы. Например `5000`.
- **Full/HLOD/Unload ranges** (категория `Streaming`) — сколько ячеек вокруг игрока держать:
- `Full Load Cells Below/Above` — целиком (обычно 1/1).
- `HLOD Load Cells Below/Above` — прокси (например 4/5).
- `Unload Cells Below/Above` — дальше выгрузка.
- Остальное можно оставить по умолчанию.
> **Важно про LI:** если трасса собрана из **Level Instance** — они должны быть
> **ЗАГРУЖЕНЫ** в редакторе (не свёрнуты) перед сборкой. Незагруженный LI пропустится
> с варнингом «load it and rebuild».
## 3. Анализ (без записи)
Кнопка **`1 - Analyze → Analyze Current Level`**.
Смотри лог (Output Log, фильтр `LogVerticalPartition`): сколько акторов внутри тома,
сколько ячеек, сколько ушло в persistent, варнинги. Ничего не меняется на диске.
## 4. Сборка
Кнопка **`2 - Build → Build Vertical Partition`**.
Что произойдёт:
- бэкап карты в `Saved/VerticalPartition/Backups/`;
- генерится дескриптор `/Game/VPGenerated/<Карта>/VPD_<Карта>`;
- пекутся HLOD-прокси в `…/Proxies/`;
- в уровень добавляется актор-менеджер (`Vertical Partition Manager`);
- том получает ссылку на дескриптор.
## 5. Проверить HLOD во вьюпорте (без запуска игры)
- **`3 - Validate → Preview Chunks`** — цветные боксы ячеек:
- 🟢 **зелёный** = у ячейки есть HLOD-прокси;
- 🟠 **оранжевый** = стримится, но прокси нет (просто прячется вдали);
-**серый** = пусто / persistent.
- **`3 - Validate → Spawn HLOD Preview`** — спавнит сами прокси-меши поверх оригинала.
Спрячь реальный декор (или посмотри издалека), чтобы оценить силуэт.
- **`3 - Validate → Clear Preview`** — убрать боксы и превью-акторы.
## 6. Запустить и проверить стриминг
**Play**. Включи отладку в консоли (`~`):
```
vp.Debug 1
vp.DebugDraw 1 ; цветные боксы ячеек в 3D
vp.DebugOverlay 1 ; статистика на экране
```
Цвета: 🟢 Full · 🔵 HLOD · 🟡 грузится · 🔴 ошибка · ⚪ выгружено · 🟣 forced.
Полезные команды: `vp.DumpCells`, `vp.TeleportToCell 12`, `vp.ForceCellHLOD 8`,
`vp.SetFullRange 2 2`, `vp.ProfileStreaming`.
---
## Что стримится, а что НЕТ (запомни)
Стримится (прячется/заменяется прокси) **только чистый статик-декор**.
**Никогда не трогаются** (всегда persistent, всегда видны):
- свет, **Ultra Dynamic Sky**, Sky Atmosphere, SkyLight, туман, post-process;
- аудио, частицы/Niagara, reflection capture, декали;
- физика, реплицируемые, Movable-акторы;
- свет/геймплей **внутри** Level Instance.
→ Поэтому небо и рабочие акторы **не пропадают**. Управляется флагом
`Settings → bStreamOnlyStaticDecor` (вкл по умолчанию — не выключай без причины).
---
## Если что-то «пропало» / нужно откатить
NonDestructive-режим **ничего не удаляет с диска** — прячет только в игре (PIE).
- Полный сброс: удали актор `Vertical Partition Manager` из уровня + папку
`/Game/VPGenerated/`, затем `Build` заново. Или кнопка **`5 - Maintenance → Clear Generated Data`**.
- Восстановить карту из бэкапа: **`4 - Commit → Restore From Backup`**.
---
## Частые проблемы
| Симптом | Причина / решение |
|---|---|
| Небо погасло / акторы исчезли в Play | Старый дескриптор до фикса. **Build заново** (теперь свет/небо/LI остаются persistent). |
| Level Instance не попал в чанки | LI был свёрнут. Загрузи его в редакторе → `Build`. |
| Ячейки все оранжевые (нет HLOD) | В ячейке нет статик-геометрии, либо `bGenerateHLODProxies` выключен. |
| `SimplifiedProxy` ничего не печёт | Нужен включённый **ProxyLODPlugin**. Без него авто-откат на `MergedMesh` (это ок). |
| Прокси смещён | Не должно — пекутся с пивотом в (0,0,0). Если видишь смещение — пересобери HLOD. |
| Хочу перепечь только прокси | **`2 - Build → Rebuild HLOD`**. |
---
## Офлайн-сборка (CI / без открытия редактора)
```
UnrealEditor-Cmd.exe IHY.uproject -run=VerticalPartition -Map=/Game/Maps/MyClimbMap
```
Отчёт пишется в `Saved/VerticalPartition/<Карта>_Report.txt`.