fix(render): select native Land2 multitexture variants
Docs Deploy / Build and Deploy MkDocs (push) Successful in 37s
Docs Deploy / Build and Deploy MkDocs (push) Successful in 37s
This commit is contained in:
3 files changed
+132
-15
No files matched your search
+23
-3
@@ -1059,13 +1059,33 @@ for (face, assignment) in mesh.faces.iter().zip(assignments.iter()) {
|
||||
|
||||
## Материалы ландшафта
|
||||
|
||||
Рядом с `Land.msh` лежат `Land1.wea` и `Land2.wea`. Старший байт
|
||||
`TerrainFace28.material_tag` выбирает материал первой таблицы, младший —
|
||||
второй. `0xff` в старшем байте означает отсутствие первого слоя.
|
||||
Рядом с `Land.msh` лежат `Land1.wea` и `Land2.wea`. Младший байт
|
||||
`TerrainFace28.material_tag` выбирает базовый материал `Land1.wea`, старший —
|
||||
дополнительный материал той же таблицы. `0xff` в старшем байте означает
|
||||
отсутствие дополнительного слоя. `Land2.wea` содержит соответствующие этим
|
||||
двум строкам detail-материалы.
|
||||
В AutoDemo встречаются теги `0102`, `0203`, `ff01`, `ff02`, `ff03`.
|
||||
Менеджер World3D получает селектор `(table_index << 16) | material_index`
|
||||
и возвращает выбранную фазу MAT0 размером 76 байт.
|
||||
|
||||
Таблица, строка и блок анимации — разные части запроса. В быстром проходе
|
||||
с двумя текстурами `CShade` запрашивает для Land2 блок анимации **1**. Он может
|
||||
выбирать другую текстуру, а не только другие коэффициенты освещения:
|
||||
например, в «Конструкторе» это `L09M.0` вместо `L09.0`. Подмена блока первым
|
||||
приводит к умножению базового изображения на неподходящую detail-текстуру и
|
||||
меняет яркость и контраст земли. `TerrainMaterialSelection` сохраняет номер
|
||||
блока отдельно от packed material key; приложение использует его при загрузке
|
||||
дескриптора и в последующих кадрах. Если второго блока нет, общий MAT0 sampler
|
||||
возвращается к первому, как оригинальный `GetMaterialPhase`.
|
||||
|
||||
В GOG `Terrain.dll` (сборка из [таблицы бинарников](../reference/original-binaries.md))
|
||||
быстрая ветвь находится в RVA `0x1A7AC–0x1A7FB`. Живое исполнение передаёт
|
||||
handle `0x00010002`, block `1` и устанавливает режим текстур `9`; первая
|
||||
текстура умножается на diffuse, вторая — на результат с множителем два.
|
||||
Ближний дополнительный проход с порогом `260 / FOV` относится к fallback без
|
||||
этого режима. На проверенном устройстве он не выбирается, поэтому переносить
|
||||
его дистанционный порог в быстрый проход нельзя.
|
||||
|
||||
Type 18 в `Land.msh` оригинал называет microtexture mapping chunk;
|
||||
он содержит четырёхбайтовые записи. Type 11 хранит пары `u16`, выбранные
|
||||
таблицей terrain slots. Их первое поле — ключ shade cache, а не номер строки
|
||||
|
||||
Reference in new issue
Block a user