diff options
Diffstat (limited to 'docs/specs/textures.md')
| -rw-r--r-- | docs/specs/textures.md | 90 |
1 files changed, 0 insertions, 90 deletions
diff --git a/docs/specs/textures.md b/docs/specs/textures.md deleted file mode 100644 index 72e1462..0000000 --- a/docs/specs/textures.md +++ /dev/null @@ -1,90 +0,0 @@ -# Текстуры и материалы - -На текущем этапе в дизассемблированных библиотеках **не найден полный декодер формата текстурного файла** (нет явных парсеров DDS/TGA/BMP и т.п.). Поэтому документ пока фиксирует: - -- что можно достоверно вывести по рендер‑конфигу, -- что видно по структурам модели (materialIndex), -- какие места требуют дальнейшего анализа. - ---- - -## 1) Материал в модели - -В batch table модели (см. документацию по MSH/AniMesh) есть поле, очень похожее на: - -- `materialIndex: u16` (batch + 2) - -Это индекс, по которому рендерер выбирает: - -- текстуру(ы), -- параметры (blend, alpha test, двухтекстурность и т.п.), -- “шейдер/пайплайн” (в терминах оригинального рендера — набор state’ов). - -**Где лежит таблица материалов** (внутри модели или глобально) — требует подтверждения: - -- вероятный кандидат — отдельный ресурс/таблица, на которую `materialIndex` ссылается. -- строковая таблица `Res10` может хранить имена материалов/текстур, но маппинг не доказан. - ---- - -## 2) Переключатели рендера, влияющие на текстуры (из Ngi32.dll) - -В `Ngi32.dll` есть набор runtime‑настроек (похоже, читаются из системных настроек/INI/registry), которые сильно влияют на текстурный пайплайн: - -- `DisableMipmap` -- `DisableBilinear` -- `DisableTrilinear` -- `DisableMultiTexturing` -- `Disable32bitTextures` / `Force16bitTextures` -- `ForceSoftware` -- `ForceNoFiltering` -- `ForceHWTnL` -- `ForceNoHWTnL` - -Практический вывод для порта: - -- движок может работать **без мипмапов**, **без фильтрации**, и даже **без multitexturing**. - ---- - -## 3) “Две текстуры” и дополнительные UV‑потоки - -В загрузчике модели присутствуют дополнительные per‑vertex ресурсы: - -- Res15 (stride 8) — кандидат на UV1 (lightmap/second layer) -- Res16 (stride 8, split в 2×4) — кандидат на tangent/bitangent (normal mapping) -- Res18 (stride 4) — кандидат на vertex color / AO - -Если материал реально поддерживает: - -- вторую текстуру (detail map, lightmap), -- нормалмапы, - -то где‑то должен быть код: - -- который выбирает эти потоки как входные атрибуты вершинного шейдера/пайплайна, -- который активирует multi‑texturing. - -Сейчас в найденных фрагментах это ещё **не подтверждено**, но структура данных “просится” именно туда. - ---- - -## 4) Что нужно найти дальше (чтобы написать полноценную спецификацию материалов/текстур) - -1. Место, где `materialIndex` разворачивается в набор render states: - - alpha blending / alpha test - - z‑write/z‑test - - culling - - 1‑pass vs 2‑pass (multi‑texturing) -2. Формат записи “material record”: - - какие поля - - ссылки на текстуры (ID, имя, индекс в таблице) -3. Формат “texture asset”: - - где хранится (внутри NRes или отдельным файлом) - - компрессия/палитра/мip’ы -4. Привязка строковой таблицы `Res10` к материалам: - - это имена материалов? - - это имена текстур? - - или это имена узлов/анимаций? - -До подтверждения этих пунктов разумнее держать документацию как “архитектурную карту”, а не как точный байтовый формат. |
