diff options
| author | Valentin Popov <valentin@popov.link> | 2026-02-11 02:27:43 +0300 |
|---|---|---|
| committer | Valentin Popov <valentin@popov.link> | 2026-02-11 02:27:43 +0300 |
| commit | 5035d022206bf9ace54a43b4d65abe0b9fc0f361 (patch) | |
| tree | 80e6566ec817e14ed12ce25326a83b3172bca3a2 /docs/specs/textures.md | |
| parent | ba1789f10607f5a6cba5863128d31f776b8e59cc (diff) | |
| download | fparkan-5035d022206bf9ace54a43b4d65abe0b9fc0f361.tar.xz fparkan-5035d022206bf9ace54a43b4d65abe0b9fc0f361.zip | |
Add MSH geometry export and preview rendering tools
- Implemented msh_export_obj.py for exporting NGI MSH geometry to Wavefront OBJ format, including model selection and geometry extraction.
- Added msh_preview_renderer.py for rendering NGI MSH models to binary PPM images, featuring a primitive software renderer with customizable parameters.
- Both tools utilize the same NRes parsing logic and provide command-line interfaces for listing models and exporting or rendering geometry.
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` к материалам: - - это имена материалов? - - это имена текстур? - - или это имена узлов/анимаций? - -До подтверждения этих пунктов разумнее держать документацию как “архитектурную карту”, а не как точный байтовый формат. |
