# Текстуры и материалы На текущем этапе в дизассемблированных библиотеках **не найден полный декодер формата текстурного файла** (нет явных парсеров 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` к материалам: - это имена материалов? - это имена текстур? - или это имена узлов/анимаций? До подтверждения этих пунктов разумнее держать документацию как “архитектурную карту”, а не как точный байтовый формат.