Level.geom — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
(→Формат вершин) |
Haper (обсуждение | вклад) (→Формат вершин) |
||
| Строка 142: | Строка 142: | ||
</table> | </table> | ||
=== Формат вершин === | === Формат вершин === | ||
| − | Несколько слов о формате вершин. Как уже известно, в файле несколько блоков описания вершин. В игре не все объекты одинаковы: для брашей нужно указывать координаты лайтмапов, а координаты текстур для деревьев можно упростить. Поэтому, вершины, заданные в разных блоках, могу отличаться. Формат вершины задаётся при помощи нескольких | + | Несколько слов о формате вершин. Как уже известно, в файле несколько блоков описания вершин. В игре не все объекты одинаковы: для брашей нужно указывать координаты лайтмапов, а координаты текстур для деревьев можно упростить. Поэтому, вершины, заданные в разных блоках, могу отличаться. Формат вершины задаётся при помощи нескольких структурой - это стандартный формат вертекс-буфера D3D. Т.е. в файле хранятся готовые скомпонованные вертекс-буферы для D3D: |
<table width="586" border="1"> | <table width="586" border="1"> | ||
<tr> | <tr> | ||
Версия 05:56, 4 мая 2015
Формат разбирал 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:
- 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)
- X-RAY Tools update 2.0 от bardak
- X-RAY Tools от bardak