aboutsummaryrefslogtreecommitdiff
path: root/docs/reference
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2026-11-01 12:40:12 +0300
committerValentin Popov <valentin@popov.link>2026-11-01 12:40:12 +0300
commite8942caa233a663155ffec14c1070ad5dbbb9c7b (patch)
tree3cd95541668969db5139c528e50e4a32aea83ab1 /docs/reference
parent315afff2202f3d7cfd7299a29c0ca67a757b9e2e (diff)
downloadfparkan-e8942caa233a663155ffec14c1070ad5dbbb9c7b.tar.xz
fparkan-e8942caa233a663155ffec14c1070ad5dbbb9c7b.zip
fix(render): preserve object-local point lights on models
Diffstat (limited to 'docs/reference')
-rw-r--r--docs/reference/environment-effects.md9
-rw-r--r--docs/reference/render-frame.md17
2 files changed, 23 insertions, 3 deletions
diff --git a/docs/reference/environment-effects.md b/docs/reference/environment-effects.md
index 0e709d9..2a17838 100644
--- a/docs/reference/environment-effects.md
+++ b/docs/reference/environment-effects.md
@@ -350,9 +350,12 @@ Renderer preview поддерживает FXID-команды Op3 modes 0–2, O
Op3 mode0 строит camera-facing поверхность из анимируемых локальных позиции и
масштаба; Op7/Op8 обновляют отдельные элементы particle pool; Op9 создаёт
индексированную полусферическую сетку. Op1 вычисляется отдельно как список
-point lights: selector 1 и записи без `flags & 0x80000000` входят в общий
-diffuse light set. Записи с этим битом сохраняют native flags для специальных
-путей и projected shadows, но не добавляются в общий diffuse список.
+point lights: selector 1 без `flags & 0x80000000` освещает мир, а с этим битом —
+собственное строение или юнит. Локальный источник нельзя удалять из освещения
+MSH вместе с исключением из общего списка рельефа. Preview сохраняет исходные
+flags для projected shadows и передаёт в renderer область действия корневого
+объекта. Область ноль означает общий свет; у локального источника и диапазонов
+его модели одинаковый ненулевой идентификатор.
Body discriminator Op3 читается из первого DWORD `FxCommand.raw_body`; offsets
в evaluator-е относительны к данным после четырёхбайтового command word. Mode 1
diff --git a/docs/reference/render-frame.md b/docs/reference/render-frame.md
index ebe3971..8bd548f 100644
--- a/docs/reference/render-frame.md
+++ b/docs/reference/render-frame.md
@@ -126,6 +126,23 @@ RVA `0xF6E0`, преобразует направление текущей маÑ
число таких Control-команд как `control_op1_jitter_unsupported` и использует
их авторские значения. У синего источника в проверенном захвате добавки нулевые.
+Флаг источника `0x80000000` отделяет локальный свет объекта от общего света
+мира. В эталонной `Terrain.dll` (SHA-256
+`af87d1b2e728a0be73c52be3b44cc196ab46da7799f25a15d40f8c9b0b425ead`)
+`CLightManager` RVA `0x4C1D0` ведёт отдельные числа всех активных и общих
+источников; второй счётчик исключает этот бит. Живой вход `CShade` RVA
+`0x2E4A0` подтверждает различие: завод получает жёлтый источник с flags
+`0xA0000000`, а рельеф — только общие источники. Для выбранной вершины крыши
+native diffuse `1,205386/1,095748/1,893271` и specular после переноса переполнения
+`0,160597/0,147096/0,358346` воспроизводятся формулой shader с теми же входами
+с отклонением менее `0,0002`. Менять формулу блика для этого дефекта не нужно.
+
+В Vulkan каждый свет хранит `owner_scope` в последнем DWORD 48-байтовой
+SSBO-записи; область диапазона передаётся через `firstInstance`. Нулевая
+область света доступна всем диапазонам, ненулевая — только совпадающему
+владельцу. Terrain и геометрия без владельца имеют область ноль. Один общий
+буфер сохраняется; отдельные наборы света для каждого строения не создаются.
+
## Элемент отрисовки
Подготовленный элемент отрисовки содержит: