aboutsummaryrefslogtreecommitdiff
path: root/docs/specs/effects.md
blob: 2e9681a0baa409d3abe4fafdbb53fda066aae86d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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”.