Обсуждение участника: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 Ограничивающий параллелепипед — Bounding Box (0x1004)
- 4.5.3 Неизвестные данные (0x1002)
- 4.5.4 Неизвестные данные (0x1010)
- 4.5.5 Вершины — Vertices (0x1005)
- 4.5.6 Грани — Faces (0x1006)
- 4.5.7 Группы сглаживания — Smoothing Groups (0x1013)
- 4.5.8 Словарь текстурных координат — UVs (0x1008)
О формате
Формат *.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.
Неизвестные данные (0x1000)
| Название | Тип(размер) | Значение | Подробнее |
|---|---|---|---|
| Неизвестно | (2) | 0x11 0x00 |
Ограничивающий параллелепипед — 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 (0x1008)
Логика формирования и назначение этого и последуещего блока доконца не понятна. Предположительный вариант представлен ниже.
| Название | Тип(размер) | Значение | Подробнее |
|---|---|---|---|
| Количество записей k | uint(4) | ||
| Данные | (9)[k] | Предположительная структура в следующей таблице |
| Название | Тип(размер) | Значение | Подробнее | ||||
|---|---|---|---|---|---|---|---|
| Неизвестно | byte(1) | 0x1 | |||||
| Индекс таблицы текстурных координат | uint(4) | 0x0 или 0x1 | Возможно, только первый байт содержит эти данные, остальные выполняют другие функции (но встречались только нулевые значения) |
Индекс текстурных координаты | uint(4) | 0x0 или 0x1 | Индекс в таблице, определяемой предыдущим значением. |
Допишу потом