fix(render): preserve object-local point lights on models
Docs Deploy / Build and Deploy MkDocs (push) Successful in 38s
Docs Deploy / Build and Deploy MkDocs (push) Successful in 38s
This commit is contained in:
14 files changed
+136
-30
No files matched your search
@@ -87,6 +87,9 @@ Raw queue clock задаёт фазу волн отдельно от време
|
||||
Control Op1 пока использует цвет и радиус без случайных добавок команды;
|
||||
это явное приближение считается в `render_coverage control_op1_jitter_unsupported`.
|
||||
Масштаб радиуса длиной преобразованного направления и нижняя замена 0,01 восстановлены.
|
||||
Локальный флаг `0x80000000` сохраняет свет на MSH владельца, исключая его
|
||||
из общего света рельефа. Мерцание жёлтого источника над заводом ещё использует
|
||||
авторские цвет и радиус; порядок общего native RNG пока не воспроизводится.
|
||||
|
||||
Control Op2 воспроизводит modes 0/2; modes 1/3, body+76 и неподдержанные
|
||||
time modes/привязки считаются как `render_coverage control_op2_unsupported`.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 и геометрия без владельца имеют область ноль. Один общий
|
||||
буфер сохраняется; отдельные наборы света для каждого строения не создаются.
|
||||
|
||||
## Элемент отрисовки
|
||||
|
||||
Подготовленный элемент отрисовки содержит:
|
||||
|
||||
@@ -854,9 +854,13 @@ emit не должен повторно менять игровое состоя
|
||||
gate. Type 4 point list задаёт локальную матрицу; текущие MSH owner и mounted
|
||||
node poses входят в transform до локальной FX basis. Реализованные visuals
|
||||
охватывают Op3 modes 0–2, Op4, Op7/8 particle pools и Op9 generated mesh. Op1
|
||||
selector 1 добавляет point lights без native flag `0x80000000` в общий diffuse
|
||||
список; остальные active records сохраняют flags для специальных путей и
|
||||
projected shadows. Радиус источника масштабируется длиной его преобразованного
|
||||
selector 1 добавляет point lights в освещение. Native flag `0x80000000`
|
||||
ограничивает источник собственным объектом: такая лампа освещает завод, но
|
||||
не рельеф вокруг него. Это не запрет на обычный расчёт света. Потеря локального
|
||||
жёлтого источника над трубой делала крышу завода заметно холоднее оригинала.
|
||||
Renderer сопоставляет владельца лампы и диапазона MSH; общие источники
|
||||
доступны всем поверхностям. Исходные flags сохраняются также для projected
|
||||
shadows. Радиус источника масштабируется длиной его преобразованного
|
||||
направления до нормализации. Например, локальный радиус 7 при масштабе узла
|
||||
около 4,85 освещает область радиусом около 34. Потеря этого множителя оставляла
|
||||
синий свет завода почти незаметным. Неположительный итог заменяется на 0,01.
|
||||
|
||||
Reference in new issue
Block a user