Skip to main content

Описание бинарного формата b3D

Date: 2018.08 | Version: 0.1 | Авторы: Юрий Гладышенко, Александр Евдокимов#

Глоссарий

integer - тип данных. Целое положительное число, размер в файле 4 байта. В файлах игры не встречаются значения больше 2^16. В integer, например, хранятся количество элементов массива и индексы координат.

float - тип данных, нецелое число, размер в файле 4 байта. Во float, например, хранятся координаты объектов в игре.

string - тип данных, строка, размер которой в файле всегда равен 32 байта.

array - последовательность элементов, всегда предваряется переменной типа integer, содержащей количество элементов.

-TODO-

1. Структура блоков данных.
2. Группировка блоков.
3. Приложения.

Ссылки

  1. Шаблон формата b3D для hex редактора 010 Editor. Открыть B3D.bt

Оглавление#

1. Введение

2. Общая структура формата

3. Секции

  3.1 Заголовок файла

  3.2 Список материалов

  3.3 Блоки данных

Приложение 1. Типы объектов

Приложение 2. Файлы игры

Приложение 3. Название объектов

1. Введение#

Этот документ описывает структуру формата файла b3D, используемого в игре Дальнобойщики 2 Второе издание (версия 8). Формат b3D содержит описание трехмерных моделей, используемых в игре, параметров освещения игрового уровня, а также некоторых объектов логики игры и данные моделей коллизий.

Все переменные, перечисленные в таблицах, показаны в порядке их следования в файле.

2. Общая структура формата#

Формат b3D разделен на 3 основные секции (см Табл. 1).

Таблица 1. Общая Структура#

СекцияСсылки
1Заголовок файлаСм. Таблица 2
2Список материаловСм. Таблица 3
Идентификатор начала секцииСм. Таблица 6
3Блоки данныхСм. Таблица 5
Идентификатор конца секцииСм. Таблица 6

3. Секции#

3.1 Заголовок файла#

Файл формата b3D начинается с сигнатуры, строки размером 4 байта состоящей из трех символов с завершающим нулем на конце "b3D" (0x62336400). Далее располагается таблица размеров и смещений секций файла. Все значения размеров в таблице уменьшены в 4 раза, это возможно поскольку размеры всех переменных, которые хранятся в b3D файлах, кратны 4ем.

Таблица 2. Структура заголовка файла#
Тип данныхОписаниеЗначение
1Сигнатура файла"b3d."
2integer[ Размер файла в байтах ] / 4
3integer[ Смещение секции со списком используемых материалов ] / 46
4integer[ Размер секции со списком материалов (1ая секция) ] / 4
5integer[ Смещение секции с блоками данных (третья секция) ] / 4
6integer[ Размер секции с блоками данных (третья секция) в байтах ] / 4

3.2 Список материалов#

Список материалов представляет из себя массив элементов в виде строки, которая содержит название материала (См. Таблица 4). Список начинается с целочисленной переменной хранящей количество материалов (См. Таблица 3). Сами материалы хранятся отдельно в .res файлах (См. Формат RES/RMP).

Таблица 3. Общая структура секции списка материалов#
Тип данныхОписаниеСсылки
1integerКоличество материалов
2arrayСписок названий материаловСм. Таблица 4
Таблица 4. Формат элемента списка материалов#
РазмерТип данныхОписание
32 байтаstringИмя материала

3.3 Блоки данных#

3.3.1 Общая структура#

В b3D используется единый формат хранения блока данных (См. Таблица 5 ). Блок имеет идентификатор начала (333 в десятичной форме записи) и идентификатором конца блока (555), а также иногда специальный идентификатор 444 (См. Таблица 6 ). После открывающего идентификатора следует заголовок блока, затем параметры блока, а также (при наличии) секция вложенных блоков.

Таблица 5. Общая структура блока данных#
ОписаниеСсылки
Идентификатор начала блокаСм. Таблица 6
1Заголовок блокаСм. Таблица 7
2ПараметрыСм. Пункт 3.3.2. Параметры блоков
3Вложенные блоки данныхСм. Таблица 9
Идентификатор конца блокаСм. Таблица 6

Идентификаторы 111 и 222 присутствуют в единичных экземплярах перед секции блоков данных в конце файла b3D соответственно. Идентификаторы 333 и 555 есть перед каждым блоком и в его конце соответственно. Идентификатор 444 присутствует в начале, а также в конце некоторых блоков.

Таблица 6. Идентификаторы#
ОписаниеЗначение в десятичной форме
1Начало секции с блоками данных111
2Конец секции с блоками данных222
3Начало одного блока333
4Разделитель переключаемых блоков444
5Конец одного блока555

Заголовок блока содержит два поля: название блока и тип блока. Именование блоков, применяемое в игре, приведено в приложениях.

Таблица 7. Заголовок блока данных#
Тип данныхОписаниеСсылки
1stringНазвание блокаСм. Приложение 3
2integerТип блокаСм. Таблица 8

Все блоки могут быть разделены на две большие группы: с вложенными блоками и без. Первые содержат в своей структуре дополнительные блоки, вторые не имеют.

Таблица 8. Типы блоков#
Номер блокаОписаниеПараметры
0Пустой блок.См. Таблица 10
1Пустой блок.См. Таблица 11
2Тип: Групповой блок.
4Тип: Групповой блок. Содержит вложенные блоки для хранения и отображения информации об объектах инфраструктуры дороги: дорожные знаки, радары, светофоры, фонари. При соприкосновении с моделью автомобиля эти объекты могут быть частично или полностью повреждены.См. Таблица 13
5Тип: Групповой блок. Содержит вложенные блоки для хранения и отображения информации об объектах: строения, внешняя и внутренняя модели транспорта, дороги, стоянки, поверхность земли, холмы и скалы, а также модели коллизий этих и других объектов.См. Таблица 14
6Тип: Групповой блок. Тоже, что тип 7. Присутствует только в Дальнобойщики 1.См. Таблица 14
7Тип: Групповой блок. Содержит информацию о вершинах, а также текстурных координатах модели. Содержит вложенные блоки типа 8 или другие.
8Тип: Простой блок. Содержит информацию об индексах полигонов и текстурных координат модели.
9Тип: Групповой блок. Триггер.
10Тип: Групповой блок. Содержит параметры LOD моделей.
12Тип: Групповой блок.
13Тип: Простой блок. Триггер.
14Тип: Простой блок. Связан с автомобилями.
16Тип: Простой блок.
17Тип: Простой блок.
18Тип: Простой блок. Связывает два блока.
19Тип: Групповой блок. Блок содержит вложенные блоки для отображения объектов, по которым транспорт может перемещаться: дорога, бездорожье, объекты природы, т.н. комнаты (room).
20Тип: Одиночный блок. "Плоская" модель коллизии.
21Тип: Групповой блок. Содержит вложенные блоки для отображения специальных объектов: людей, деревья, ключи, а также объекты освещение.
23Тип: Простой блок. "Объемная" модель коллизии.
24Тип: Групповой блок. Содержит матрицу трансформации объектов для перевода координат объекта в координаты пространства игрового мира.
25Тип: Звуковой объект.
28Тип: Простой блок. Тоже, что тип 8.
29Тип: Групповой блок.
30Тип: Портал. Представляет собой невидимый полигон высотой 120, который соединяет соседние комнаты (room).
31Тип: Простой блок.
33Тип: Групповой блок. Блок для хранения данных объектов освещения.
34Тип: Простой блок.
35Тип: Простой блок. Тоже, что тип 37.
36Тип: Простой блок. Тоже, что тип 37.
37Тип: Групповой блок. Тоже, что тип 8.
39Тип: Skybox.
40Тип: Простой блок. Блок для специальных объектов-генераторов, которые создаются динамически при загрузке игры: деревьев ($$treegenerator), свечения объектов ($$dynamicGlow), людей ($$people).

Вложенные блоки хранятся последовательно, начиная с переменной отображающей их количество.

Таблица 9. Вложенные блоки#
Тип данныхОписаниеСсылка
1integerКоличество блоков
2arrayБлоки

3.3.2 Параметры блоков#

Далее описываются параметры каждого из типов блоков данных (См. Таблица 5 и Таблица 8).

Блок 0

Самый первый блок в файле. Данный тип блок не хранит в себе вложенных блоков. Не используется в игре, хотя присутствует в файлах.

Таблица 10. Блок 0#
Тип данных/размерОписаниеЗначение
140 байтПустые данные0
10floatНеизвестная переменная1
114 байтаПустые данные0

Блок 1

В игре Дальнобойщики 2 присутствует только в файле "Common.d3D". Данный тип блок не хранит в себе вложенных блоков. Не используется в игре, хотя присутствует в файлах.

Таблица 11. Блок 1#
Тип данныхОписаниеЗначение
1stringНазвание
2stringНазвание

Блок 2

Присутствует только в файлах "Trucks.d3D" ($$$Group_1381_truck), "ce.d3D" (room_ce01), "dq.d3D" (lep12).

Таблица 12. Блок 2#
Тип данныхОписаниеЗначение
Координаты центра объекта (локальное пространство) X,Y,Z
1floatX
2floatY
3floatZ
4floatРадиус ограничивающей сферы
5floatНеизвестная переменная1
6floatНеизвестная переменная0
7floatНеизвестная переменная0
8floatНеизвестная переменная0
Вложенные блоки
9integerКоличество блоков
10arrayБлоки

Блок 3

Таблица 1. Блок 3#
Тип данныхОписаниеЗначение
Координаты центра объекта (локальное пространство) X,Y,Z
1floatX
2floatY
3floatZ
4floatРадиус ограничивающей сферы
Вложенные блоки
5integerКоличество блоков
6arrayБлоки

Блок 4

Таблица 13. Блок 4#
Тип данныхОписаниеЗначение
Координаты центра объекта (локальное пространство) X,Y,Z
1floatX
2floatY
3floatZ
4floatРадиус ограничивающей сферы
5stringНазвание блока типа 24
6stringПусто
Вложенные блоки
6integerКоличество блоков
7arrayБлоки

Блок 5

Таблица 14. Блок 5#
Тип данныхОписаниеЗначение
Координаты центра объекта (локальное пространство)
1floatX
2floatY
3floatZ
4floatРадиус ограничивающей сферы
5stringНазвание блока/объекта
Вложенные блоки
6integerКоличество блоков
7arrayБлоки

Блок 7

Таблица 15. Блок 7#
Тип данныхОписаниеЗначение
Координаты центра объекта (локальное пространство)
1floatX
2floatY
3floatZ
4floatРадиус ограничивающей сферы
5stringНазвание блока/объекта
6integerКоличество вершин
7arrayСм. Таблица 16
Вложенные блоки
6integerКоличество блоков
7arrayБлоки
Таблица 16.#
Тип данныхОписаниеЗначение
Координаты вершины (локальное пространство)
1floatX
2floatY
3floatZ
Текстурные координаты
1floatU
2floatV

Блок 8

Таблица 17. Блок 8#

| № | Тип данных | Описание | Значение |

Блок 9

Таблица 18. Блок 9#
Тип данныхОписаниеЗначение
Координаты центра объекта (локальное пространство)
1floatX
2floatY
3floatZ
4floatРадиус ограничивающей сферы
5floatКоордината X (?)0
6floatКоордината Y (?)0
7floatКоордината Z (?)0
8floatРасстояние до центра модели от игрока
Вложенные блоки
9integerКоличество блоков
10arrayБлоки

Блок 10

Блок 10 используется для задания параметров LOD моделей, а также модели коллизий зданий. Первый блок с индексом 10 будет содержать параметры для первой модели LOD1 (упрощенная модель), второй, вложенный блок будет содержать параметры для второй модели LOD2 (основная модель), в случае модели коллизий первый блок с индексом 10 будет содержать параметры для основной модели (?), вложенным будет блок с индексом 9 для (?).

Таблица 19. Блок 10#
Тип данныхОписаниеЗначение
Координаты центра объекта (локальное пространство)
1floatX
2floatY
3floatZ
4floatРадиус ограничивающей сферы
5floatКоордината X (?)0
6floatКоордината Y (?)0
7floatКоордината Z (?)0
8floatРасстояние до центра модели от игрока
Вложенные блоки
9integerКоличество блоков
10arrayБлоки

Блок 12

Таблица 21. Блок 12#
Тип данныхОписаниеЗначение
Координаты центра объекта (локальное пространство)
1floatX
2floatY
3floatZ
4floatРадиус ограничивающей сферы
5floatНеизвестная переменная
6floatНеизвестная переменная
7floatНеизвестная переменная
8floatНеизвестная переменная
9integerНеизвестная переменная
10integerНеизвестная переменная
Вложенные блоки
11integerКоличество блоков
12arrayБлоки

Блок 13

Таблица 22. Блок 13#
Тип данныхОписаниеЗначение
Координаты центра объекта (локальное пространство)
1floatX
2floatY
3floatZ
4floatРадиус ограничивающей сферы
5integerНеизвестная переменная
6integerНеизвестная переменная
7integerКоличество
8arrayСм. Таблица 22
Таблица 23.#
Тип данныхОписаниеЗначение

Блок 14

Таблица. Блок 14#
Тип данныхОписаниеЗначение
Координаты центра объекта (локальное пространство)
1floatX
2floatY
3floatZ
4floatРадиус ограничивающей сферы
5integerНеизвестная переменная
6integerНеизвестная переменная
7floatНеизвестная переменная
8floatНеизвестная переменная
9floatНеизвестная переменная
10floatНеизвестная переменная
11floatНеизвестная переменная

Блок 18

Таблица. Блок 18#
Тип данныхОписаниеЗначение
Координаты центра объекта (локальное пространство)
1floatX
2floatY
3floatZ
4floatРадиус ограничивающей сферы
5stringНазвание блока/объекта
6stringНазвание блока/объекта

Блок 19

Таблица. Блок 19#
Тип данныхОписание
Вложенные блоки
14integerКоличество блоков
15arrayБлоки

Блок 20

Содержит параметры геометрии "плоской" модели коллизии.

Таблица. Блок 20#
Тип данныхОписаниеЗначение
Координаты центра объекта (локальное пространство)
1floatX
2floatY
3floatZ
4floatРадиус ограничивающей сферы
5integerКоличество вершин
6float
7float
8integer
9arrayМассив вершин
10array
Таблица. Блок 21#
Тип данныхОписаниеЗначение
1integerНеизвестная переменная
2integerНеизвестная переменная
3integerНеизвестная переменная
4integerНеизвестная переменная
3integerНеизвестная переменная
4integerНеизвестная переменная
Вложенные блоки
14integerКоличество блоков
15arrayБлоки
Таблица. Блок 24#
Тип данныхОписаниеЗначение
X
1floatX
2floaty
3floatz
Y
4floatX
5floaty
6floatz
Z
7floatX
8floaty
9floatz
Позиция
10floatX
11floaty
12floatz
13integerНеизвестная переменная0, 1
Вложенные блоки
14integerКоличество блоков
15arrayБлоки
Таблица. Блок 25#
Тип данныхОписаниеЗначение
1integerНеизвестная переменная
2integerНеизвестная переменная
3integerНеизвестная переменная
4stringНеизвестная переменная
5integerНеизвестная переменная
6integerНеизвестная переменная
7floatНеизвестная переменная
8floatНеизвестная переменная
9floatНеизвестная переменная
10floatНеизвестная переменная
11floatНеизвестная переменная
12floatНеизвестная переменная
13floatНеизвестная переменная
14floatНеизвестная переменная
15floatНеизвестная переменная
Таблица. Блок 30#
Тип данныхОписание
1floatX
2floatY
3floatZ
4Неизвестная переменная
5stringНазвание комнаты, с которой соединяет портал.
6floatX (первая точка полигона)
7floatY (первая точка полигона)
8floatZ (первая точка полигона)
9floatX (вторая точка полигона)
10floatY (вторая точка полигона)
11floatZ (вторая точка полигона)
Таблица. Блок 35#
Тип данныхОписание
1
Таблица. Блок 37#
Тип данныхОписание
1floatX
2floatY
3floatZ

3.3.3 Группировка (иерархия) блоков#

Блок данных в b3D представляют собой связанную иерархическую структуру, с начальным базовым блоком, объединяющим все последующие вложенные блоки в единый объект игры: трехмерную модель, модель коллизий, объект освещения или объект логики. В зависимости от того, какой объект необходимо сохранить в b3D файле, порядок построения иерархии базовых и вложенных блоков будет отличается, однако общая структура будет сохранятся для одного типа игровых объектов (о типах объектов см. Приложение 1.).

Далее описаны типовые способы группировки блоков, используемые в файлах b3D. Данный порядок не является строгим, поскольку возможны равнозначные комбинации блоков внутри базового блока. Это связано и с тем как игра считывает эти блоки из файла, а также с тем, как логически построены типы блоков, а именно то, что есть (возможно) совпадение функций некоторых типов блоков между собой.

b3D объекты уровня комнаты (room) сохранены в мировых координатах, а строения с которыми можно взаимодействовать (АЗС, СТО и т.д.), хранятся отдельно в локальных координатах. Это дает возможность предполагать, что в игровом редакторе они выступали отдельным объектом, который размещался на карте, привязывался к комнате, необходимость привязки строения к комнате обусловлена алгоритмом оптимизации отрисовки игровых объектов и выбирался его тип (АЗС, СТО и т.д.). В файле b3D эти объекты связываются между собой в иерархии комнаты через специально для этого предназначенный блок 18, содержащий в том числе информацию о матрице трансформации координат объекта.

Другой особенностью группировки объектов в b3D является использование группировки объектов одного типа, когда тип базового и вложенного блока совпадает. Это позволяет создавать иерархию блоков отвечающую, например, за освещение объектов в разное время суток. Таким образом, начальный блок будет содержать параметры освещения днем (или их полного отсутствия), второй блок вечером и последний блок ночью. Аналогичным образом выстраивается иерархия объектов уровня детализации (LOD) и др.

3.3.3.1 Дома, строения.

3.3.3.2 Базы, АЗС, СТО, киоски

  • База (Store)
Схема группировки блоков#

БЛОК -> 10 -> [ 33 - 9 - 20 - 37 - 7 ]

Элементы#
НазваниеБлоки
1Освещение ночью33, 37, 35, 7, 8
2Геометрия строения37, 35, 7, 8
3События: приближение к складу9, 13
4Уровень детализации (LOD)10, 37, 35, 7, 8
4Модель коллизии20

3.3.3.3 Элементы освещения

3.3.3.4 Инфраструктура дороги

Схема группировки дорожных знаков#

БЛОК -> 4 -> 37 -> 35

Схема группировки светофоров#

БЛОК -> 4 ->

-> 21 -> 5

-> 37 -> 8

Схема группировки радаров#

БЛОК -> 4 ->

-> 21 -> 37 -> 35

-> 37 -> 8

3.3.3.5 Дороги, бездорожье, стоянки, окружающая среда(вода, горы, болота).

БЛОК -> 19 ->

3.3.3.6 Деревья, люди

3.3.3.7 Специальные объекты

Приложение 1. Типы объектов#

Таблица. Строения#
Тип данныхОписание
1Дом, строение
2АЗС
3База
4СТО
5Нефтебаза
5Информационный киоск
Таблица. Дорожная инфраструктура#
Тип данныхОписание
1Дорожный знак
2Светофор
3Радар
Таблица. Другое#
Тип данныхОписание
1Люди
2Деревья
3Свет
Таблица. Транспортное средство#
Тип данныхОписание
1Автомобиль
2Прицеп, Полуприцеп
3Кабина

Приложение 2. Файлы игры#

Таблица. Файлы .b3D игры#
Тип данныхОписание
1ap.b3DНаселенный пункт Южный (Аэропорт)
2ar.b3DНаселенный пункт Залеск ()
3dr.b3DНаселенный пункт Кольцо (Гоночная трасса)
3au.b3DНаселенный пункт Ельнино ()

Приложение 3. Название объектов#