From 3f48f53bd5d4ce835326f2fe02bb9878f62b7b1d Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Tue, 10 Feb 2026 01:48:59 +0400 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=B0=D1=86=D0=B8=D0=B8=20=D0=BF=D0=BE=20=D1=8D?= =?UTF-8?q?=D1=84=D1=84=D0=B5=D0=BA=D1=82=D0=B0=D0=BC=20=D0=B8=20=D1=87?= =?UTF-8?q?=D0=B0=D1=81=D1=82=D0=B8=D1=86=D0=B0=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/specs/effects.md | 69 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 docs/specs/effects.md 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”.