B3D (формат файлов)
Описание формата *.b3d игр Дальнобойщики: Путь к победе и Дальнобойщики 2. Данный формат представляет собой трёхмерную сцену с различными типами объектов: контейнерами, переключателями, триггерами, источниками освещения, геометрией и т.п.[1]. Инструменты для работы с B3D представлены на странице с утилитами. Сам формат, предположительно, создан в первой половине 90-х годов ХХ века.
Содержание
- 1 Общее описание структуры файла
- 2 Структуры и описания объектов
- 2.1 Некоторые используемые структуры
- 2.2 Блок (00)
- 2.3 Обозреватель (01)
- 2.4 Контейнер (02)
- 2.5 Контейнер (03)
- 2.6 Контейнер (04)
- 2.7 Контейнер (05)
- 2.8 Блок типа 06
- 2.9 Блок типа 07
- 2.10 Блок типа 08
- 2.11 Блок типа 09
- 2.12 Блок типа 10
- 2.13 Блок типа 11
- 2.14 Плоскость коллизии (12)
- 2.15 Блок типа 13
- 2.16 Блок типа 14
- 2.17 Блок типа 15
- 2.18 Блок типа 16
- 2.19 Блок типа 17
- 2.20 Блок-связка (18)
- 2.21 Контейнер комнаты (19)
- 2.22 Ломанная коллизии (20)
- 2.23 Контейнер-переключатель (21)
- 2.24 Геометрия коллизии (23)
- 2.25 Локатор-контейнер (24)
- 2.26 Звуковой объект (25)
- 2.27 Блок типа 26
- 2.28 Блок типа 27
- 2.29 Блок типа 28
- 2.30 Блок типа 29
- 2.31 Блок типа 30
- 2.32 Блок типа 31
- 2.33 Блок типа 32
- 2.34 Источник света (33)
- 2.35 Блок типа 34
- 2.36 Блок типа 35
- 2.37 Блок типа 36
- 2.38 Блок типа 37
- 2.39 Блок типа 38
- 2.40 Блок типа 39
- 2.41 Генератор объектов (40)
- 3 Примечания
Общее описание структуры файла
Формат b3d разделен на 3 основные секции:
<заголовок> <список материалов> <блоки данных>
Общее описание блока данных
тип данных | описание |
---|---|
int32 | Идентификатор начала блока |
char[32] | Имя блока |
int32 | Тип блока |
<данные> | Данные блока |
int32 | Идентификатор конца блока |
Числовые идентификаторы
Располагаются в начале и конце каждого экземпляра блока, а также в начале и конце блока данных b3d-файла (см. общее описание структуры файла). Представляют собой int32.
значение int32 | описание |
---|---|
111 | Начало секции с блоками данных |
222 | Конец секции с блоками данных |
333 | Начало одного блока |
444 | Разделитель переключаемых блоков (маркер окончания переключаемой группы) |
555 | Конец одного блока |
Заголовок
тип данных | описание | значение по умолчанию |
---|---|---|
char[4] | сигнатура файла | "b3d" |
int32 | [ Размер файла в байтах ] / 4 | |
int32 | [ Смещение секции со списком используемых материалов ] / 4 | 6 |
int32 | [ Размер секции со списком материалов (1ая секция) ] / 4 | |
int32 | [ Смещение секции с блоками данных (третья секция) ] / 4 | |
int32 | [ Размер секции с блоками данных (третья секция) в байтах ] / 4 |
Список материалов
Представляет собой массив имён материалов из RES-файла. Порядок и имена должны соответствовать RES.
тип данных | описание |
---|---|
int32 | количество материалов |
массив char[32] | имя материала |
Структуры и описания объектов
Структуры даны в синтаксисе C++.
Некоторые используемые структуры
struct Vector3{ float x; float y; float z; }; struct Vector4{ float x; float y; float z; float w; };
Блок (00)
char[32] some_name Vector3 some_position
Назначение неизвестно. Обычно расположен сразу после списка материалов в любом b3d-файле.
Обозреватель (01)
char[32] start_space //имя локатора типа 24, задаёт начальную позицию обозревателя char[32] start_room //имя комнаты типа 19
Обозреватель (Viewer).
Контейнер (02)
Vector4 position; Vector4 unknown; int childCount; <блоки[childCount]>
Контейнер с неизвестными параметрами.
Контейнер (03)
Vector4 position; int childCount; <блоки[childCount]>
Простой контейнер.
Контейнер (04)
Vector4 position; char[32] spaceObject; char[32] linkedObject; int childCount; <блоки[childCount]>
Контейнер с возможностью его прямой привязки к другому объекту: в spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).
Контейнер (05)
Vector4 position; char[32] linkedObject; int childCount; <блоки[childCount]>
Контейнер. Параметр linkedObject аналогично типу 04.
Блок типа 06
Блок типа 07
Блок типа 08
Блок типа 09
Блок типа 10
Блок типа 11
Плоскость коллизии (12)
Vector4 position; Vector4 collisionPlane; int unknown; int collisionType; int childCount; <блоки[childCount]>
Плоскость коллизии (аналогична CollisionPlane из tech-файла). Определяется нормальным вектором и его длиной (она может быть отрицательной). Границей данной коллизии являются точки пересечений с другими объектами коллизии.
Блок типа 13
Блок типа 14
Блок типа 15
Блок типа 16
Блок типа 17
Блок-связка (18)
Vector4 nodePosition; char[32] spaceObject; char[32] linkedObject;
Используется для добавления копий объектов. В spaceObject указывается имя блока-локатора типа 24, в linkedObject - имя подключаемого объекта. После загрузки сцены копия linkedObject будет расположена в позиции spaceObject, причём эта связь не единоразовая - при изменении позиции spaceObject изменится и позиция копии linkedObject.
Контейнер комнаты (19)
int childCount; <блоки[childCount]>
Используется для хранения комнат игрового мира.
Ломанная коллизии (20)
Контейнер-переключатель (21)
Геометрия коллизии (23)
Локатор-контейнер (24)
Vector3 matrix0; Vector3 matrix1; Vector3 matrix2; Vector3 position; int caseState?; int childCount; <блоки[childCount]>
Хранит в себе позицию и вращение. Возможно, также является контейнером-переключателем по типу блока 21.
Звуковой объект (25)
Блок типа 26
Блок типа 27
Блок типа 28
Блок типа 29
Блок типа 30
Блок типа 31
Блок типа 32
Источник света (33)
Vector4 nodePosition; int is_enabled; int unknown_var; int lightType; Vector3D lightPosition; Vector3D lightDirection; float falloff; float attenuation0; float attenuation1; float attenuation1; float theta; float phi; float R; float G; float B; int childCount; <блоки[childCount]>
Источник света DirectX 8.
параметр | описание[2] |
---|---|
lightType | тип источника света: 1 - направленный (directional), 2 - точечный (point), 3 - зональный (spot) |
lightPosition | позиция источника света |
lightDirection | направление освещения (нормальный вектор) |
falloff | уменьшение освещения между внутренним конусом (theta) и внешним конусом (phi) источника света |
attenuation0 | постоянное затухание |
attenuation1 | линейное затухание |
attenuation2 | квадратичное затухание |
theta | угол внутреннего конуса в радианах, для нацеленного источника света. Это значение может принимать от 0 до значения Phi |
phi | угол внешнего конуса источника света. Т.е. вне этого конуса свет уже не освещает. Может принимать значения между 0 и числом Пи. |
Блок типа 34
Блок типа 35
Блок типа 36
Блок типа 37
Блок типа 38
Блок типа 39
Генератор объектов (40)
Дальнобойщики 2 | ||
---|---|---|
Игровое наполнение | Игровой регион • Автопарк • Саундтрек • Вступительный ролик • Рация • Милиция • Вертолёт | |
Моддинг | Модификации • Утилиты • game.cnf • sch-файлы • vehicle.tech • truck.ini | |
Разное | История версий • Советы и секреты • Бонусный диск • Управление • Авторы |