Level.geom
Материал из S.T.A.L.K.E.R. Inside Wiki
Формат разбирал Haper (разобран не до конца, нужны коррективы)
Содержание
Описание файла
Cодержит всю видимую геометрию карты. Тут указаны все вершины с нормалями и координатами для текстур и индексы для построения геометрии, а так же синхронизация.
Файл состоит из таких блоков:
Код блока |
|
Версия компилятора карты | 1 |
Описание вершин | 9 |
Описание индексов | 10 |
Описание синхронизации | 11 |
Версия компилятора карты (блок для всех карт одинаковый)
Значение |
Размер |
|
Код блока | 1 |
Word(2) |
Сжатие данных (0 - нет, 32768 - да) | 0 |
Word(2) |
Размер блока (в байтах) | 4 |
DWord(4) |
Номер версии (для всех одинаковый) | 13 |
DWord(4) |
Описание вершин
Значение |
Размер |
|
Код блока | 9 |
Word(2) |
Сжатие данных (0 - нет, 32768 - да) | 0 |
Word(2) |
Размер блока (в байтах) | 4 |
DWord(4) |
Количество блоков описания вершин | - |
DWord(4) |
Блок описания вершин | - |
- |
Блок описания вершин
Значение |
Размер |
|
Начало нового блока | 0 |
DWord(4) |
Начало описания формата вершины | 2 |
DWord(4) |
Формат вершины | - |
- |
Конец описания формата вершины | 255 |
DWord(4) |
Начало описания вершин | 17 |
DWord(4) |
Количество вершин | - |
DWord(4) |
Вершины | - |
- |
Формат вершин
Несколько слов о формате вершин. Как уже известно, в файле несколько блоков описания вершин. В игре не все объекты одинаковы: для брашей нужно указывать координаты лайтмапов, а координаты текстур для деревьев можно упростить. Поэтому, вершины, заданные в разных блоках, могу отличаться. Формат вершины задаётся при помощи нескольких структурок:
Значение |
Размер |
|
???(всегда ноль) | 0 |
Word(2) |
Смещение | - |
Word(2) |
Тип переменных | - |
Word(2) |
Что описывают переменные | - |
Word(2) |
В самом начале любой вершины находятся координаты её размещения, поэтому, в формате вершин описание координат не указывается. В картах версии 2215 встречаются только три формата вершин:
Растительность |
||
Значение |
Размер |
|
Ноль | 0 |
Word(2) |
Смещение | 12 |
Word(2) |
Тип переменных | 4 |
Word(2) |
Нормали | 3 |
Word(2) |
Фактор освещённости(?) | ? |
Word(2) |
Смещение | 16 |
Word(2) |
Тип переменных | 4 |
Word(2) |
Би-нормали | 6 |
Word(2) |
Корректор текс.коорд.Х | 0/1 |
Word(2) |
Смещение | 20 |
Word(2) |
Тип переменных | 4 |
Word(2) |
Тангент-нормали | 7 |
Word(2) |
Корректор текс.коорд.Y | 0/1 |
Word(2) |
Смещение | 24 |
Word(2) |
Тип переменных | 7 |
Word(2) |
Координаты текстуры | 5 |
Word(2) |
Таким образом, суммарная длина одной вершины растительности равна 32 байтам.
Браш |
||
Значение |
Размер |
|
Ноль | 0 |
Word(2) |
Смещение | 12 |
Word(2) |
Тип переменных | 4 |
Word(2) |
Нормали | 3 |
Word(2) |
Фактор освещённости(?) | ? |
Word(2) |
Смещение | 16 |
Word(2) |
Тип переменных | 4 |
Word(2) |
Би-нормали | 6 |
Word(2) |
Корректор текс.коорд.X | 0/1 |
Word(2) |
Смещение | 20 |
Word(2) |
Тип переменных | 4 |
Word(2) |
Тангент-нормали | 7 |
Word(2) |
Корректор текс.коорд.Y | 0/1 |
Word(2) |
Смещение | 24 |
Word(2) |
Тип переменных | 1 |
Word(2) |
Координаты текстуры | 5 |
Word(2) |
Ноль | 0 |
Word(2) |
Смещение | 32 |
Word(2) |
Тип переменных | 6 |
Word(2) |
Координаты лайтмапа | 261 |
Word(2) |
Суммарная длина одной вершины браша составляет 36 байт.
Энтитя |
||
Значение |
Размер |
|
Ноль | 0 |
Word(2) |
Смещение | 12 |
Word(2) |
Тип переменных | 4 |
Word(2) |
Нормали | 3 |
Word(2) |
Фактор освещённости(?) | ? |
Word(2) |
Смещение | 16 |
Word(2) |
Тип переменных | 4 |
Word(2) |
Би-нормали | 6 |
Word(2) |
Корректор текс.коорд.X | 0/1 |
Word(2) |
Смещение | 20 |
Word(2) |
Тип переменных | 4 |
Word(2) |
Тангент-нормали | 7 |
Word(2) |
Корректор текс.коорд.Y | 0/1 |
Word(2) |
Смещение | 24 |
Word(2) |
Тип переменных | 4 |
Word(2) |
??? | 10 |
Word(2) |
Ноль | 0 |
Word(2) |
Смещение | 28 |
Word(2) |
Тип переменных | 1 |
Word(2) |
Координаты текстуры | 5 |
Word(2) |
Суммарная длина одной вершины энтити составляет 36 байт.
Исходя из этого, получаем, например, такой вид вершины:
Браш |
|||
Значение |
Смещение |
Размер |
|
Координата X | 30.76 |
0 |
DWord(4) |
Координата Z | 0.2 |
4 |
DWord(4) |
Координата Y | 51.4 |
8 |
DWord(4) |
Нормаль по X | 127 |
12 |
Byte(1) |
Нормаль по Z | 255 |
13 |
Byte(1) |
Нормаль по Y | 127 |
14 |
Byte(1) |
Фактор освещенности(?) | 1 |
15 |
Byte(1) |
Би-нормаль по Х | 127 |
16 |
Byte(1) |
Би-нормаль по Z | 255 |
17 |
Byte(1) |
Би-нормаль по Y | 255 |
18 |
Byte(1) |
Корректор текс.коорд.Х | 0 |
19 |
Byte(1) |
Тангент-нормаль по X | 0 |
20 |
Byte(1) |
Тангент-нормаль по Z | 127 |
21 |
Byte(1) |
Тангент-нормаль по Y | 127 |
22 |
Byte(1) |
Корректор текс.коорд.Y | 0 |
23 |
Byte(1) |
Координата текстуры X | 3.1802 |
24 |
Single(4) |
Координата текстуры Y | 2.2143 |
28 |
Single(4) |
Координата лайтмапа X | 0.4023 |
32 |
ShortSingle(2) |
Координата лайтмапа Y | 0.000097 |
34 |
ShortSingle(2) |
Типы переменных
Код типа |
Значение |
1 |
DWord(4) + DWord(4) |
4 |
Byte(1) + Byte(1) + Byte(1) + Byte(1) |
6 |
Word(2)/32768 + Word(2)/32768 |
7 |
(Byte(1)-128)/128 + (Byte(1)-128)/128 + (Byte(1)-128)/128 + (Byte(1)-128)/128 |
С ходу, возможно, трудно въехать в структуру данных, но когда начнёте ковырять файл, сразу всё поймёте - ничего сложного нет.
Описание индексов
Значение |
Размер |
|
Код блока | 10 |
Word(2) |
Сжатие данных (0 - нет, 32768 - да) | 0 |
Word(2) |
Размер блока (в байтах) | - |
DWord(4) |
Количество блоков описания индексов | - |
DWord(4) |
Блок описания индексов | - |
- |
Блок описания индексов
Значение |
Размер |
|
Количество индексов в блоке | - |
DWord(4) |
Индексы | - |
DWord(4) |
Индекс: Word(2) .
Количество индексов должно быть всегда кратно трём, потому что по индексам строятся треугольники.
Описание синхронизации
(что они синхронизируют, для учёных до сих пор остаётся загадкой):
Значение |
Размер |
|
Код блока | 11 |
Word(2) |
Сжатие данных (0 - нет, 32768 - да) | 0 |
Word(2) |
Размер блока (в байтах) | - |
DWord(4) |
Количество блоков синхронизации | - |
DWord(4) |
Блоки синхронизации | - |
- |
Блок синхронизации
Значение |
Размер |
|
??? | 0 |
DWord(4) |
??? | 0 |
DWord(4) |
??? | 0 |
DWord(4) |
??? | 0 |
DWord(4) |
Количество единиц синхронизации | - |
DWord(4) |
Единицы синхронизации | - |
- |
Единица синхронизации
Значение |
Размер |
|
??? | - |
DWord(4) |
??? | - |
Word(2) |
??? | - |
Word(2) |
Ссылки
Утилиты так или иначе связанные с импортом\экспортом geom:
- Geometry Decompiler 2 src от Neo (stable)
- Geometry Decompiler 2 src от Neo (unstable new)
- X-RAY Tools src от bardak
- xrFSL src 18/06/08 от Neo][
- Level Editor SRC от batya
- Level Editor 0.0.2 Stable Build от batya
- STALKER MAX Factory 0.1 от Neo][, Haron, GSC
- Geometry Decompiler от kasper (3dsmax 7,8)
- Geometry Decompiler 2 от Neo (3dsmax 9)