aboutsummaryrefslogtreecommitdiff
path: root/docs/specs/textures.md
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2026-02-11 02:27:43 +0300
committerValentin Popov <valentin@popov.link>2026-02-11 02:27:43 +0300
commit5035d022206bf9ace54a43b4d65abe0b9fc0f361 (patch)
tree80e6566ec817e14ed12ce25326a83b3172bca3a2 /docs/specs/textures.md
parentba1789f10607f5a6cba5863128d31f776b8e59cc (diff)
downloadfparkan-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.md90
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` к материалам:
- - это имена материалов?
- - это имена текстур?
- - или это имена узлов/анимаций?
-
-До подтверждения этих пунктов разумнее держать документацию как “архитектурную карту”, а не как точный байтовый формат.