Level.geom — различия между версиями — S.T.A.L.K.E.R. Inside Wiki

Level.geom — различия между версиями

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

Перейти к: навигация, поиск
(Формат вершин)
(Формат вершин)
Строка 202: Строка 202:
 
   <tr>
 
   <tr>
 
     <td>Фактор освещённости(?)</td>
 
     <td>Фактор освещённости(?)</td>
     <td><div align="center">0</div></td>
+
     <td><div align="center">?</div></td>
 
     <td><div align="center">Word(2)</div></td>
 
     <td><div align="center">Word(2)</div></td>
 
   </tr>
 
   </tr>
Строка 222: Строка 222:
 
   <tr>
 
   <tr>
 
     <td>Корректор текс.коорд.Х</td>
 
     <td>Корректор текс.коорд.Х</td>
     <td><div align="center">0</div></td>
+
     <td><div align="center">0/1</div></td>
 
     <td><div align="center">Word(2)</div></td>
 
     <td><div align="center">Word(2)</div></td>
 
   </tr>
 
   </tr>
Строка 242: Строка 242:
 
   <tr>
 
   <tr>
 
     <td>Корректор текс.коорд.Y</td>
 
     <td>Корректор текс.коорд.Y</td>
     <td><div align="center">0</div></td>
+
     <td><div align="center">0/1</div></td>
 
     <td><div align="center">Word(2)</div></td>
 
     <td><div align="center">Word(2)</div></td>
 
   </tr>
 
   </tr>
Строка 295: Строка 295:
 
   </tr>
 
   </tr>
 
   <tr>
 
   <tr>
     <td>Ноль</td>
+
     <td>Фактор освещённости(?)</td>
     <td><div align="center">0</div></td>
+
     <td><div align="center">?</div></td>
 
     <td><div align="center">Word(2)</div></td>
 
     <td><div align="center">Word(2)</div></td>
 
   </tr>
 
   </tr>
Строка 315: Строка 315:
 
   </tr>
 
   </tr>
 
   <tr>
 
   <tr>
     <td>Ноль</td>
+
     <td>Корректор текс.коорд.X</td>
     <td><div align="center">0</div></td>
+
     <td><div align="center">0/1</div></td>
 
     <td><div align="center">Word(2)</div></td>
 
     <td><div align="center">Word(2)</div></td>
 
   </tr>
 
   </tr>
Строка 335: Строка 335:
 
   </tr>
 
   </tr>
 
   <tr>
 
   <tr>
     <td>Ноль</td>
+
     <td>Корректор текс.коорд.Y</td>
     <td><div align="center">0</div></td>
+
     <td><div align="center">0/1</div></td>
 
     <td><div align="center">Word(2)</div></td>
 
     <td><div align="center">Word(2)</div></td>
 
   </tr>
 
   </tr>
Строка 409: Строка 409:
 
   </tr>
 
   </tr>
 
   <tr>
 
   <tr>
     <td>Ноль</td>
+
     <td>Фактор освещённости(?)</td>
     <td><div align="center">0</div></td>
+
     <td><div align="center">?</div></td>
 
     <td><div align="center">Word(2)</div></td>
 
     <td><div align="center">Word(2)</div></td>
 
   </tr>
 
   </tr>
Строка 429: Строка 429:
 
   </tr>
 
   </tr>
 
   <tr>
 
   <tr>
     <td>Ноль</td>
+
     <td>Корректор текс.коорд.X</td>
     <td><div align="center">0</div></td>
+
     <td><div align="center">0/1</div></td>
 
     <td><div align="center">Word(2)</div></td>
 
     <td><div align="center">Word(2)</div></td>
 
   </tr>
 
   </tr>
Строка 449: Строка 449:
 
   </tr>
 
   </tr>
 
   <tr>
 
   <tr>
     <td>Ноль</td>
+
     <td>Корректор текс.коорд.Y</td>
     <td><div align="center">0</div></td>
+
     <td><div align="center">0/1</div></td>
 
     <td><div align="center">Word(2)</div></td>
 
     <td><div align="center">Word(2)</div></td>
 
   </tr>
 
   </tr>
Строка 540: Строка 540:
 
   </tr>
 
   </tr>
 
   <tr>
 
   <tr>
     <td><span class="style13">???</span></td>
+
     <td><span class="style13">Фактор освещенности(?)</span></td>
 
     <td><div align="center" class="style13">1</div></td>
 
     <td><div align="center" class="style13">1</div></td>
 
     <td><div align="center" class="style13">15</div></td>
 
     <td><div align="center" class="style13">15</div></td>
Строка 564: Строка 564:
 
   </tr>
 
   </tr>
 
   <tr>
 
   <tr>
     <td><span class="style14">???</span></td>
+
     <td><span class="style14">Корректор текс.коорд.Х</span></td>
 
     <td><div align="center" class="style14">0</div></td>
 
     <td><div align="center" class="style14">0</div></td>
 
     <td><div align="center" class="style14">19</div></td>
 
     <td><div align="center" class="style14">19</div></td>
Строка 588: Строка 588:
 
   </tr>
 
   </tr>
 
   <tr>
 
   <tr>
     <td><span class="style15">???</span></td>
+
     <td><span class="style15">Корректор текс.коорд.Y</span></td>
 
     <td><div align="center" class="style15">0</div></td>
 
     <td><div align="center" class="style15">0</div></td>
 
     <td><div align="center" class="style15">23</div></td>
 
     <td><div align="center" class="style15">23</div></td>

Версия 07:12, 12 декабря 2008

Формат разбирал Haper (разобран не до конца, нужны коррективы)

Описание файла

Cодержит всю видимую геометрию карты. Тут указаны все вершины с нормалями и координатами для текстур и индексы для построения геометрии, а так же синхронизация.


Файл состоит из таких блоков:

Код блока
Версия компилятора карты
1
Описание вершин
9
Описание индексов
10
Описание синхронизации
11



Версия компилятора карты (блок для всех карт одинаковый)

Значение
Размер
Код блока
1
Word(2)
Сжатие данных (0 - нет, 32768 - да)
0
Word(2)
Размер блока (в байтах)
4
DWord(4)
Номер версии (для всех одинаковый)
13
DWord(4)



Описание вершин

Значение
Размер
Код блока
1
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)
Другие места
LANGUAGE