Обсуждение участника:Excid
Материал из S.T.A.L.K.E.R. Inside Wiki
Формат разобрал excid
Содержание
- 1 О формате
- 2 Описание структуры
- 3 Структура
- 4 Файл (0x7777)
- 4.1 Неизвестные данные (0x0900)
- 4.2 Пользовательские информация — User Data (0x0912)
- 4.3 Уровень детализации — LOD (0x0925)
- 4.4 Тип объекта — Object Type (0x0903)
- 4.5 Данные о геометрии — Geometry (0x0910)
- 4.5.1 Неизвестные данные (0x1000)
- 4.5.2 Название подобъекта — Name (0x1000)
- 4.5.3 Ограничивающий параллелепипед — Bounding Box (0x1004)
- 4.5.4 Неизвестные данные (0x1002)
- 4.5.5 Неизвестные данные (0x1010)
- 4.5.6 Вершины — Vertices (0x1005)
- 4.5.7 Грани — Faces (0x1006)
- 4.5.8 Группы сглаживания — Smoothing Groups (0x1013)
- 4.5.9 Словарь текстурных координат — UVs map (0x1008)
- 4.5.10 Материалы объекта — Object Materials (0x1009)
- 4.5.11 Текстурные координаты — UVs (0x1008)
- 4.6 Материалы — Materials (0x0907)
- 4.7 Автор — Author (0x0907)
- 5 Скрипт разбора файла
О формате
Формат *.object используется в качестве основного формата хранения моделей на этапе редактирования (включая экспорт из Maya или 3ds Max и хранение моделей до компиляции уровня)
Описание структуры
Формат бинарный. Файл состоит из вложенных друг в друга блоков. Весь файл представляет собой единый блок.
Структура блока
Блок имеет 3 обязательные части:
| Часть | Тип(размер) | Подробнее |
|---|---|---|
| Идентификатор типа блока | (4) | 2 байта идентификатора и 2 нулевых байта |
| Размер блока | uint(4) | без учета этих частей — только то, что идет дальше |
| Данные | (Размер блока) | Данные могут быть представлены вложенными блоками |
Типы данных
Особое внимание стоит обратить на то, как хранятся строки: они нуль-терминальные, то есть в конце обязательно содержат нулевой байт.
Структура
В заголовке последующих пунктов в скобках содержатся идентификаторы типа блока в шестнадцатиричной форме, при этом байты представлены в обратном порядке (то есть так, как числа задаются в исходниках), поэтому идентификатор 0x0912 в файле будет выглядеть как 09 12 00 00.
Файл (0x7777)
Неизвестные данные (0x0900)
Возможно, это версия.
| Название | Тип(размер) | Значение | Подробнее |
|---|---|---|---|
| Неизвестно | (2) | 0x10 0x00 |
Пользовательские информация — User Data (0x0912)
В редакторе Game options > User Data.
| Название | Тип(размер) | Значение | Подробнее |
|---|---|---|---|
| Данные | строка | Произвольная строка |
Уровень детализации — LOD (0x0925)
В редакторе LOD > Reference.
| Название | Тип(размер) | Значение | Подробнее |
|---|---|---|---|
| Ссылка | строка | Путь к модели, содержащей следующий уровень детализации |
Тип объекта — Object Type (0x0903)
В редакторе Object Type.
| Название | Тип(размер) | Значение | Подробнее |
|---|---|---|---|
| Тип | (4) | Значение 0x00 для статической модели (тип Static) |
Данные о геометрии — Geometry (0x0910)
В редакторе Geometry. Все представленные ниже данные описывают 1 подобъект.
Неизвестные данные (0x1000)
| Название | Тип(размер) | Значение | Подробнее |
|---|---|---|---|
| Неизвестно | (2) | 0x11 0x00 |
Название подобъекта — Name (0x1000)
| Название | Тип(размер) | Значение | Подробнее |
|---|---|---|---|
| Название | строка |
Ограничивающий параллелепипед — Bounding Box (0x1004)
В редакторе Transform > BBox Min/Max
| Название | Тип(размер) | Значение | Подробнее |
|---|---|---|---|
| Минимум | float(4)[3] | Минимальные значения вершин по x, y, z | |
| Максимум | float(4)[3] | Максимальные значения вершин по x, y, z |
Неизвестные данные (0x1002)
| Название | Тип(размер) | Значение | Подробнее |
|---|---|---|---|
| Неизвестно | (1) | 0x05 |
Неизвестные данные (0x1010)
| Название | Тип(размер) | Значение | Подробнее |
|---|---|---|---|
| Неизвестно | (8) | 0x00 | Все нули |
Вершины — Vertices (0x1005)
| Название | Тип(размер) | Значение | Подробнее |
|---|---|---|---|
| Количество вершин n | uint(4) | ||
| Координаты | float(4)[n * 3] | Координаты x, y, z для каждой вершины |
Грани — Faces (0x1006)
| Название | Тип(размер) | Значение | Подробнее |
|---|---|---|---|
| Количество граней m | uint(4) | ||
| Координаты | uint(4)[m * 6] | Троки пар индекс вершины + индекс текстурной координаты |
Группы сглаживания — Smoothing Groups (0x1013)
| Название | Тип(размер) | Значение | Подробнее |
|---|---|---|---|
| Группы | uint(4)[m] | 32-битная маска групп сглаживания для каждой грани |
Словарь текстурных координат — UVs map (0x1008)
Логика формирования и назначение этого и блока «Текстурные координаты» доконца не понятна. Предположительный вариант представлен ниже.
| Название | Тип(размер) | Значение | Подробнее |
|---|---|---|---|
| Количество записей k | uint(4) | ||
| Данные | (9)[k] | Предположительная структура в следующей таблице |
| Название | Тип(размер) | Значение | Подробнее |
|---|---|---|---|
| Неизвестно | byte(1) | 0x1 | |
| Индекс таблицы текстурных координат | uint(4) | 0x0 или 0x1 | Возможно, только первый байт содержит эти данные, остальные выполняют другие функции Встречались «некорректные» данные (например, 0x1 0x90 0xdb 0x11 0x7), но они не использовались |
| Индекс текстурных координаты | uint(4) | 0x0 или 0x1 | Индекс в таблице, определяемой предыдущим значением. |
Материалы объекта — Object Materials (0x1009)
| Название | Тип(размер) | Значение | Подробнее |
|---|---|---|---|
| Количество материалов p | ushort(2) | ||
| Материалы | [p] | Cтруктура в следующей таблице |
| Название | Тип(размер) | Значение | Подробнее |
|---|---|---|---|
| Название материала | строка | ||
| Количество граней q | uint(4) | Количество граней, имеющих этот материал | |
| Индексы граней | uint(4)[q] |
Текстурные координаты — UVs (0x1008)
Количество таблиц, которое встречалось в тестовых файлах — 2.
| Название | Тип(размер) | Значение | Подробнее |
|---|---|---|---|
| Количество таблиц t | uint(4) | 0x2 | |
| Таблицы | [t] | Структура в следующей таблице |
| Название | Тип(размер) | Значение | Подробнее |
|---|---|---|---|
| Неизвестно | строка | Texture | |
| Неизвестно | ubyte(1) | 0x2 | Возможно, количество компонентов в текс. координате? |
| Номер таблицы | ushort(1) | ||
| Количество текстурных координат s | uint(4) | ||
| Текстурные координаты | float(4)[s * 2] | Пары значения текстурных координат u и v | |
| Неизвестно | uint(4)[s] | Какие-то индексы, не превышающие s | |
| Неизвестно (только для второй таблицы) |
uint(4)[s] | Какие-то индексы, не превышающие s, отсорированные по возрастанию |
Материалы — Materials (0x0907)
| Название | Тип(размер) | Значение | Подробнее |
|---|---|---|---|
| Количество материалов r | uint(4) | ||
| Материалы | [r] | Структура в следующей таблице |
| Название | Тип(размер) | Значение | Подробнее |
|---|---|---|---|
| Название | строка | ||
| Характеристика для движка | строка | Например, default | |
| Характеристика для компилятора | строка | Например, default | |
| Характеристика для игры | строка | Например, default | |
| Путь к текстуре | строка | ||
| Неизвестно | строка | Texture | Значение Texture используется в блоке Текстурные координаты — UVs (0x1008) |
| Флаги | uint(4) | 0x1, если материал двустронний, иначе 0x0 | |
| Неизвестно | (4) | 0x12 0x1 0x0 0x0 0x1 0x0 0x0 0x0 |
Автор — Author (0x0907)
| Название | Тип(размер) | Значение | Подробнее |
|---|---|---|---|
| Создатель | строка | Вид \\компьютер\пользователь (например, \\NAPALI\excid) | |
| Дата создания | (4) | ||
| Последний модифицирующий | строка | Вид \\компьютер\пользователь (например, \\NAPALI\excid) | |
| Дата модификации | (4) |