70 lines
3.6 KiB
Markdown
70 lines
3.6 KiB
Markdown
|
|
# Эффекты и частицы
|
|||
|
|
|
|||
|
|
Пока что — **не байтовая спецификация**, а “карта” по тому, что видно в библиотеках. Полную документацию по эффектам/шейдерам/частицам можно будет сделать после того, как:
|
|||
|
|
|
|||
|
|
- найдём формат эффекта (файл/ресурс),
|
|||
|
|
- найдём точку загрузки/парсинга,
|
|||
|
|
- найдём точки рендера (создание буферов/вершинного формата/материалов).
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1) Что видно по `Effect.dll`
|
|||
|
|
|
|||
|
|
- Есть экспорт `CreateFxManager(...)`, который создаёт менеджер эффектов и регистрирует его в движке.
|
|||
|
|
- Внутри много логики “сообщений/команд” через виртуальные вызовы (похоже на общий компонентный интерфейс).
|
|||
|
|
- Явного парсера формата эффекта (по типу “читать заголовок, читать эмиттеры…”) в найденных местах пока не идентифицировано.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2) Что видно по `Terrain.dll` (рендер‑статистика частиц)
|
|||
|
|
|
|||
|
|
В `Terrain.dll` есть отладочная/статистическая телеметрия:
|
|||
|
|
|
|||
|
|
- количество отрендеренных частиц (`Rendered particles`)
|
|||
|
|
- количество батчей (`Rendered batches`)
|
|||
|
|
- количество отрендеренных треугольников
|
|||
|
|
|
|||
|
|
Это подтверждает:
|
|||
|
|
|
|||
|
|
- частицы рендерятся батчами,
|
|||
|
|
- они интегрированы в общий 3D‑рендер (через тот же графический слой).
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3) Что важно для совместимости
|
|||
|
|
|
|||
|
|
Даже без точного формата эффекта, из поведения оригинала следует:
|
|||
|
|
|
|||
|
|
- Эффекты/частицы завязаны на общий набор рендер‑фич (фильтрация/мультитекстурность/блендинг).
|
|||
|
|
- На слабом железе (и для минимализма) должны работать деградации:
|
|||
|
|
- без мипмапов,
|
|||
|
|
- без bilinear/trilinear,
|
|||
|
|
- без multitexturing,
|
|||
|
|
- возможно с 16‑бит текстурами.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4) План “докопать” до формата эффектов
|
|||
|
|
|
|||
|
|
1. Найти **точку создания эффекта по имени/ID**:
|
|||
|
|
- поискать места, где в строки/лог пишется имя эффекта,
|
|||
|
|
- найти функции, которые принимают “путь/имя” и возвращают handle.
|
|||
|
|
|
|||
|
|
2. Найти **точку загрузки данных**:
|
|||
|
|
- чтение из NRes/RsLi ресурса,
|
|||
|
|
- распаковка/декодирование.
|
|||
|
|
|
|||
|
|
3. Зафиксировать **структуру данных эффекта в памяти**:
|
|||
|
|
- эмиттеры,
|
|||
|
|
- спауны,
|
|||
|
|
- lifetime,
|
|||
|
|
- ключи размера/цвета,
|
|||
|
|
- привязка к текстурам/материалам.
|
|||
|
|
|
|||
|
|
4. Найти рендер‑код:
|
|||
|
|
- какой vertex format у частицы,
|
|||
|
|
- как формируются квадраты/ленты (billboard/trail),
|
|||
|
|
- какие state’ы включаются.
|
|||
|
|
|
|||
|
|
После этого можно будет выпустить полноценный документ “FX format”.
|