Level.geom — S.T.A.L.K.E.R. Inside Wiki

Level.geom

Материал из S.T.A.L.K.E.R. Inside Wiki

Версия от 05:57, 4 мая 2015; Haper (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Формат разбирал 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)
Вершины
-
-

Формат вершин

Несколько слов о формате вершин. Как уже известно, в файле несколько блоков описания вершин. В игре не все объекты одинаковы: для брашей нужно указывать координаты лайтмапов, а координаты текстур для деревьев можно упростить. Поэтому, вершины, заданные в разных блоках, могу отличаться. Формат вершины задаётся при помощи нескольких структур - это стандартный формат вертекс-буфера D3D. Т.е. в файле хранятся готовые скомпонованные вертекс-буферы для D3D:

Значение
Размер
???(всегда ноль)
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:


Другие места
LANGUAGE