-
Notifications
You must be signed in to change notification settings - Fork 5
RSB File Format RUS
Глоссарий
GR - игра Ghost Recon,
RSE - Red Storm Engine, игровой движок игры Ghost Recon,
RSB - Red Storm Bitmap (формат для хранения текстур игры)
ps2 - Sony Playstation 2
Неизвестная константа - постоянное значение, роль которой неизвестна
Неизвестная переменная - то же, но изменяется от файла к файлу
Типы данных
integer - неотрицательные целочисленные значения, при размере 2 байта числа 0..65535, при размере 4 байта 0..4294967295
float - неотрицательные нецелое число от -2147483648.0 до 2147483647.0.
string - строка с завершаюшим нулем на конце.
Ссылки
Подробный шаблон формата RSB для программы 010Editor RSB.bt
1. Ведение
3. Секции
3.1. Заголовок файла
3.2. Пиксельные данные
3.3. Свойства текстуры
3.4. Дополнительные каналы текстуры
4. Приложение A
Этот документ описывает структуру формата файла RSB, используемого игровым движком RSE. RSB файлы хранятся в папке "Texture", а также некоторых других папках оригинальной игры и имеют расширение ".rsb". Формат RSB используется для хранения растровых изображений.
Все переменные в секциях описаны в порядке их следования в файле.
RSB формат файла разделен на четыре основные секции (см Табл. 1). Файл не имеет сигнатур для определения его формата. Разделение довольно условное и не претендует на достоверность.
№ | Секция | Ссылки |
---|---|---|
1 | Заголовок файла | См. Таблица 2 |
2 | Пиксельные данные | См. Таблица 5 |
3 | Дополнительные каналы поверхности | См. Таблица 6 |
4 | Свойства текстуры | См. Таблица 8 |
Файл начинается с секции заголовка, которая содержит общие данные об изображении: размер, битовую маску, формат сжатия и т.п. Заголовок отличается в версии игры для ПК и PS2.
Размер | Тип данных | Описание | Значение |
---|---|---|---|
4 | integer | Версия файла | см. Таблицу 3 |
4 | integer | Ширина изображения | см. Таблицу 4 |
4 | integer | Высота изображения | см. Таблицу 4 |
Если версия файла равна 0, то добавляется еще одна переменная, которая позволяет определить есть ли в файле 8битная копия основного изображения.
Размер | Тип данных | Описание | Значение |
---|---|---|---|
4 | integer | Есть ли 8 битная копия изображения | 0 - нет,1 - есть |
Для версий RSB больше или равных 7ой добавляются четыре (?) неизвестных переменных
Размер | Тип данных | Описание | Значение |
---|---|---|---|
4 | integer (?) | Неизвестная константа | 0 |
1 | integer (?) | Неизвестная переменная | 0,1 |
1 | integer (?) | Неизвестная переменная | 0,1 |
1 | integer (?) | Неизвестная переменная | 0,1 |
Далее во всех версиях RSB располагается битовая маска из четырех переменных.
Размер | Тип данных | Описание | Значение |
---|---|---|---|
4 | integer | Количество красные бит на один пиксель | 0, 4, 5, 6, 8 |
4 | integer | Количество зеленых бит на один пиксель | 0, 4, 5, 6, 8 |
4 | integer | Количество синих бит на один пиксель | 0, 4, 5, 6, 8 |
4 | integer | Количество битов прозрачности на один пиксель | 0, 4, 5, 6, 8 |
Для версий больше или равных 9ой добавляются две переменные
Размер | Тип данных | Описание | Значение |
---|---|---|---|
4 | integer (?) | Неизвестная переменная | hex - FFFF |
4 | integer | Версия формата сжатия DXT | 0,1,2,3,4,5 или FFFF (без ) |
В версиях игры для ps2 структура данных заголовка немного другая.
Размер | Тип данных | Описание | Значение |
---|---|---|---|
2 | integer | Версия файла | 0,2,3,4,5,6 |
описание дополняется....
Версия | Игры | Отличие |
---|---|---|
0, 1 | Dominant Species, Bang Gunship Elite, Force 21, Rainbow six (1998), Rogue Spear(2000), Freedom First Resistance, Ghost Recon | отсутствуют свойства текстуры, 0 - имеет два варианта структуры с палитрой и без |
2 | Ghost Recon | отсутствуют свойства текстуры |
3 | Ghost Recon | не содержит информацию о поверхности текстуры (См. Дополнительные каналы), не содержит информацию о МипМапах |
5, 6 | Ghost Recon | + свойства текстуры. которых нет в 3 |
8, 9 | Ghost Recon | + текстуры с DXT1 сжатием |
10, 11 | Rainbow Six Lockdown | + DXT5, + неизвестные переменные в секции со свойствами текстур |
№ | Размер |
---|---|
1 | 16 x 16 |
2 | 16 x 32 |
3 | 16 x 64 |
4 | 32 x 32 |
5 | 32 x 64 |
6 | 32 x 128 |
7 | 64 x 64 |
8 | 64 x 128 |
9 | 64 x 256 |
10 | 128 x 128 |
11 | 128 x 256 |
12 | 128 x 512 |
13 | 256 x 256 |
14 | 256 x 512 |
15 | 256 x 1024 |
16 | 256 x 2048 |
17 | 512 x 512 |
18 | 512 x 1024 |
19 | 512 x 2048 |
20 | 1024 x 1024 |
21 | 1024 x 2048 |
22 | 2048 x 2048 |
typedef struct bit_mask
{
uint32_t red_bits;
uint32_t green_bits;
uint32_t blue_bits;
uint32_t alpha_bits;
};
struct file_header
{
uint32_t version;
uint32_t width;
uint32_t height;
uint32_t Palette; // version = 0
uint32_t Unknown; // version > 7
BYTE Unknown[3]; // version > 7
bit_mask BitMask;
uint32_t Unknown; // version >= 9
uint32_t DXTFormat; // version >= 9
};
Пиксельные данные в RSB файлах представляют собой массив пикселей в формате цветовой модели RGB в сжатом виде (DXT) или не сжатом. Один пиксель массива содержит значения яркости красной, зеленой и синей компоненты цвета, а также может дополнительно содержать информацию о прозрачности пикселя, т.н. альфа канал (см. Табл. 3). Общее количество всех пикселей рассчитывается как произведение ширины на высоту текстуры.
№ | Маска (порядок) | бит на пиксель | Описание |
---|---|---|---|
1 | R5G6B5 | 16 | Красный - 5 бит, Зеленый - 6 бит, Синий - 5 бит |
2 | R8G8B8 | 24 | Красный - 8 бит, Зеленый - 8 бит, Синий - 8 бит |
3 | A4R4G4B4 | 16 | Альфа - 4 бита, Красный - 4 бита, Зеленый - 4 бит, Синий - 4 бит |
4 | A1R5G5B5 | 16 | Альфа - 1 бит, Красный - 5 бита, Зеленый - 5 бит, Синий - 5 бит |
5 | A4R4G8B8 | 24 | Альфа - 4 бита, Красный - 4 бита, Зеленый - 8 бит, Синий - 8 бит |
6 | B8G8R8A8 | 32 | Альфа - 8 бит, Красный - 8 бит, Зеленый - 8 бит, Синий- 8 бит |
7 | DXT1, DXT5 | 16 пикселей в 8(16) битном блоке | см. Описание формата DXT |
struct R5G6B5 // 16 bit
{
uint8_t Red: 5;
uint8_t Green: 6;
uint8_t Blue: 5;
};
struct R8G8B8 // 24 bit
{
uint8_t Red;
uint8_t Green;
uint8_t Blue;
};
struct A4R4G4B4 // 16 bit
{
uint8_t Alpha: 4;
uint8_t Red: 4;
uint8_t Green: 4;
uint8_t Blue: 4;
};
struct A1R5G5B5 // 16 bit
{
uint8_t Alpha: 1;
uint8_t Red: 5;
uint8_t Green: 5;
uint8_t Blue: 5;
} ;
struct A4R4G8B8 // 16 bit
{
uint8_t Alpha: 4;
uint8_t Red: 4;
uint8_t Green;
uint8_t Blue;
} ;
struct B8G8R8A8 // 32 bit
{
uint8_t Blue;
uint8_t Green;
uint8_t Red;
uint8_t Alpha;
} ;
struct DXT1_Block // 8 bit
{
} ;
struct DXT5_Block // 16 bit
{
} ;
Секция существует только для файлов версий 5, 6, 8 и 9. Добавляется одна переменная.
Размер | Тип | Описание | Значение |
---|---|---|---|
4 | integer | Количество дополнительных каналов |
Если она больше 0, то далее идут данные об этих каналах см. Adobe Photoshop File Formats Specification
Конец секции.
Режимы смешивания Alpha Testing и Alpha Blending.
При использовании режима Alpha Testing пиксели текстуры белого или черного цвета становятся либо полностью прозрачными или полностью непрозрачными (видимыми). Данный режим требует меньше ресурсов для отображения на экране, поскольку для его работы не требуется использование предварительной сортировки (alpha sorting). Однако, в отличии от режима Alpha Testing, режим Alpha Blending не поддерживает постепенное смешивание (gradual blend) по яркости пикселя. Таким образом Alpha Blending не подходит для отрисовки эффектов дыма, огня, воды, но хорош для заборов, деревьев, знаков, колес и любых других объектов с четкими границами.
Для работы режима Alpha Testing используются параметры Source Function и Destination Function, для Alpha Blending - Compare Function и "Reference Value".
Текстура в RSB файле может быть анимирована двумя способами: заданным смещением текстуры от первоначального положения и с использованием т.н. flipbook анимации, когда несколько выбранных изображений последовательно сменяют друг друга.
Анимация с помощью смещения текстуры (Scrolling) Данный вид анимации заключается в перемещении текстуры в горизонтальном и вертикальном направлениях или ее вращении. Одновременно доступен только один вид: либо смешение, либо вращение.
Fllipbook анимация Данный вид анимации заключается в смене одинаковых по размеру текстур в заданной последовательности.
Параметры тектсуры, которые влияют на взаимодействие с ней.
№ | Название | Описание | Индекс |
---|---|---|---|
1 | Gunshot Transparent | Пули способны проходить сквозь текстуру | 1 |
2 | Grenade Transparent | Воздействие гранат и бомб сквозь текстуру | 2 |
4 | Line-of-sight Transparent | Враги (искусственный интеллект) будут видеть вас сквозь текстуру | 4 |
5 | Foliage | При попадании пули будут появляться листья | 8 |
7 | Water | Вода | 16 |
Теги текстуры, заданные в файле объекта к которому привязана текстура имеют приоритет над тегами в RSB файле.
Размер | Тип | Свойство (оригинал) | Значение |
---|---|---|---|
1 | integer | Alpha Blending | 1 - вкл., 0 - выкл. |
1 | integer | Alpha Testing | 1 - вкл., 0 - выкл. |
1 | integer | Sampling | 1 - вкл., 0 - выкл. |
1 | integer | Animation | 1 - вкл., 0 - выкл. |
1 | integer | Scrolling | 1 - вкл., 0 - выкл. |
1 | integer | Tiled | 1 - вкл., 0 - выкл. |
1 | integer | *** Compression | 1 - вкл., 0 - выкл. |
1 | integer | *** Distortion | 1 - вкл., 0 - выкл. |
Для файлов версий 7 и более добавляется 1 переменная "Теги текстуры"
Размер | Тип | Свойство (оригинал) | Значение |
---|---|---|---|
4 | integer | Теги текстуры | см. Таблица 7 |
4 | integer | Source Function | см. Таблица 9 |
4 | integer | Destination Function | см. Таблица 10 |
4 | integer | Compare Function | см. Таблица 11 |
1 | integer | Исходное значение прозрачности | |
4 | integer | Тип анимации смещением | см. Таблица 13 |
4 | float | Гор. смещение | |
4 | float | Верт. смещение | |
4 | integer | Тип анимации при FlipBook анимации | см. Таблица 12 |
4 | float | Интервал анимации | |
4 | integer | Количество текстур | 0..9 |
Если Animation > 0 и "Количество текстур" > 0, то далее идет список текстур для анимации в виде массива, где элементы выглядят так
Размер | Тип | Свойство (оригинал) | Значение |
---|---|---|---|
4 | integer | Длина названия текстуры | |
string | Названия текстуры |
Если версия файла > 4, то добавляется еще 2 переменные
Размер | Тип | Свойство (оригинал) | Значение |
---|---|---|---|
4 | integer | Количество карт MIP-текстурирования | |
4 | integer | *** Subsampling Priority | |
1 | integer | Наличие текстуры при повреждении | 1 - вкл., 0 - выкл. |
Если "Наличие текстуры при повреждении" = 1, то далее идут следующие данные
Размер | Тип | Свойство (оригинал) | Значение |
---|---|---|---|
4 | integer | Длина названия текстуры | |
string | Названия текстуры |
Если версия файла > 2 то добавляются переменная "Тип поверхности текстуры" при взаимодействии (звук от попадания или ходьбы) |
Размер | Тип | Свойство (оригинал) | Значение |
---|---|---|---|
4 | integer | Тип поверхности текстуры | см Таблица 14 |
Конец секции.
№ | Texture Размер |
---|---|
0 | Zero |
1 | Less |
2 | Equal |
3 | Greater Equal |
4 | Always |
№ | Texture Размер |
---|---|
0 | Zero |
1 | One |
2 | Source Alpha |
3 | Inverse Source Alpha |
4 | Source Color |
5 | Inverse Source Color |
6 | Destination Color |
7 | Inverse Destination Color |
8 | Both Source Alpha |
9 | Both Inverse Source Alpha |
№ | Texture Размер |
---|---|
0 | Zero |
1 | One |
2 | Source Alpha |
3 | Inverse Source Alpha Source Color |
5 | Inverse Source Color |
6 | Destination Color |
7 | Inverse Destination Color |
8 | Both Source Alpha |
9 | Both Inverse Source Alpha |
№ | Texture Размер |
---|---|
0 | Cycle |
1 | Oscillate |
2 | Constant |
- Cycle - повторение анимации, исчезает, если объект типа billboard (всегда повернут к игроку перпиндикулярно плоскости взгляда, например, все спецэффекты)
- Oscillate - пин-понг,
- Constant - повторение анимации, не исчезает
№ | Texture Размер |
---|---|
0 | Rotate |
1 | Degrees Seconds |
№ | Texture Размер |
---|---|
0 | NONE |
1 | Carpet |
2 | Concrete |
3 | Wood |
4 | Metal |
5 | Asphalt |
6 | Sand |
7 | Lowgrass |
8 | Highgrass |
9 | Puddle |
10 | Water |
11 | Drywall |
12 | Thin Metal |
13 | Thick Metal |
14 | Metal Gas Tank |
15 | Steam Pipe |
16 | Electrical Panel |
17 | Snow |
18 | Safety Glass |
19 | Bullet Resistant Glass |
20 | Ice |
21 | Mud |
22 | Glass |
23 | Foliage |
24 | Gravel |
25 | Glass Shards |
№ | Версия | Размер |
---|---|---|
1 | 1, 2, 4, 5, 6 | 28 |
1 | 8 | 37 |
1 | 9 | 45 |
№ | Версия | Размер |
---|---|---|
1 | 1 | 0 |
2 | 2, 3 | 46 |
3 | 4 | 53 |
4 | 5, 6 | 61 |
5 | 6 | 65 |
6 | 8, 9 |
All copyrights belong to their respective owners.
Version History:
0.7
0.6
0.5
0.4