aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/specs/effects.md69
1 files changed, 69 insertions, 0 deletions
diff --git a/docs/specs/effects.md b/docs/specs/effects.md
new file mode 100644
index 0000000..2e9681a
--- /dev/null
+++ b/docs/specs/effects.md
@@ -0,0 +1,69 @@
+# Эффекты и частицы
+
+Пока что — **не байтовая спецификация**, а “карта” по тому, что видно в библиотеках. Полную документацию по эффектам/шейдерам/частицам можно будет сделать после того, как:
+
+- найдём формат эффекта (файл/ресурс),
+- найдём точку загрузки/парсинга,
+- найдём точки рендера (создание буферов/вершинного формата/материалов).
+
+---
+
+## 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”.