Формат анимации (.anm)
Общая информация про формат .anm
Формат .anm используется для хранения анимации скелетных моделей в движках семейства GEM.
GEM RTS поддерживает все версии формата анимации, начиная с GEM1.
Файл может содержать:
• информацию о версии формата; • параметры диапазона кадров; • карту анимируемых костей; • данные о видимости костей; • анимационные ключи; • мешевую анимацию; • комментарии.
Структура файла
EANM
version
FRMS
frame_max + 1
CMNT
size
comment[size]
BMAP
bone_count
bones [bone_count]
bone_name
цикл по кадрам
FRMN | FRM2 | FRM3Описание содержимого файла
Чанк EANM
Заголовок файла, который является верификатором содержимого. Подтверждает, что файл содержит анимацию.
FourCC
uint8[4]
4
EANM
version
int16[2]
4
Версия формата.
Первые 2 байта содержат major, вторые 2 байта содержат minor :
0x00040000 версия 4.0 (GEM1, Soldiers Heroes of World War II)
0x00060000 версия 6.0 (GEM2, Men of War)
0x00060001 версия 6.1 (GEM2.5, Majesty2; GEM RTS, Men of War II) GEM RTS поддерживает все версии
Чанк FRMS
Определяет максимальный номер кадра в анимации.
Структура данных
FourCC
uint8[4]
4
FRMS
frame_max + 1
int32
4
Значение на 1 больше максимального номера кадра
Чанк CMNT
Чанк комментария. Также является признаком формата, поддерживаемого в движке GEM3.
Структура данных
FourCC
uint8[4]
4
CMNT
size
uint16
2
Размер комментария в байтах
comment
char[size]
1+
Текст комментария
Чанк BMAP
Карта костей анимации. Поддерживает лоды через суффикс _lod<номер_лода> в имени кости.
Структура данных
FourCC
uint8[4]
4
BMAP
bone_count
int32
4
Количество костей в карте.
Несмотря на тип int32, версия 6.1 поддерживает не более 255 костей
bones
struct[bone_count]
Массив костей
Описание массива костей
bone_name
string8/24 string32
1+
Название кости.
Если используется формат GEM3, применяется string8/24.
Для более старых форматов используется string32.
Циклы кадров
После карты костей идет последовательность данных кадров анимации.
Дальнейшая структура данных кадра определяется идентификатором чанка формата кадра.
FRMN
V1
Поддерживается начиная с GEM1
FRM2
V2
Поддерживается начиная с GEM2
FRM3
V3
Поддерживается начиная с GEM2.5 / GEM RTS
*) GEM RTS поддерживает все версии формата.
Формат кадра V1 (FRMN)
Поддерживается начиная с GEM1.
Структура данных
Верификатор кадра V1
FourCC
uint8[4]
4
FRMN
frame_no
int32
4
Номер кадра
Чанк BONE
Содержит анимацию отдельной кости.
Для файлов с версией кадра V1 из-за особенностей формата чтение чанков BONE должно выполняться по следующему алгоритму:
Прочитать следующее значение FourCC без изменения позиции потока.
Если достигнут конец файла или конец текущего контейнера, завершить чтение.
Если значение FourCC равно FRMN, FRM2 или FRM3, завершить чтение.
Если значение FourCC равно BONE, прочитать следующий чанк BONE.
Если значение FourCC равно MATR, VISI или MESH, прочитать соответствующий чанк компонента.
Любое другое значение FourCC считается ошибкой.
Чтение значения FourCC без изменения позиции потока (peek) не должно изменять текущее положение указателя чтения.
FourCC
uint8[4]
4
BONE
index
int32
4
Индекс кости из карты BMAP
Чанк MATR
Матрица трансформации кости.
FourCC
uint8[4]
4
MATR
matrix
float[3][4]
48
Матрица 3x4.
Содержит:
позицию
ориентацию
масштаб
Чанк VISI
Видимость кости.
FourCC
uint8[4]
4
VISI
visibility
int32
4
Флаг видимости.
Значения:
0— невидимая1— видимая
Чанк MESH
Мешевая анимация.
FourCC
uint8[4]
4
MESH
size
int32
4
Размер данных мешевой анимации
mesh_data
byte[size]
Данные мешевой анимации
Формат кадра V2 (FRM2)
Поддерживается начиная с GEM2.
Структура данных
Описание формата кадра V2
FourCC
uint8[4]
4
FRM2
frame_no
uint16
2
Номер кадра
key_count
uint8
1
Количество анимированных ключей в кадре
keys
struct[key_count]
Структура описания ключей
Структура ключа struct[key_count]
bone_map_index
uint8
1
Индекс кости из карты BMAP
key_flags
uint16
2
Битовая маска анимируемых параметров
Битовая маска key_flags
0x0001
Позиция
0x0002
Ориентация
0x0004
Признак отзеркаленной матрицы
0x0008
Включение видимости
0x0010
Выключение видимости
0x0020
Мешевая анимация
0x0040
Масштаб
Условные данные анимационного ключа
В файле присутствуют только те данные, для которых установлен соответствующий флаг в битовой маске.
position
float3
12
Позиция
orientation
float3
12
Нормализованная форма кватерниона
scale
float3
12
Масштаб по осям XYZ
mesh
struct
Mешевая анимация
mesh.size
int32
4
Размер данных
mesh.data
byte[size]
1*[size]
Бинарные данные мешевой анимации
Формат кадра V3 (FRM3)
Используется в GEM2.5 и GEM RTS.
Структура данных
Описание формата кадра V3
FourCC
uint8[4]
4
FRM3
frame_no
uint8
uint16
uint32
1
2
4
Размер поля зависит от frame_max.
Используется:
uint8, еслиframe_max <= 255uint16, еслиframe_max <= 65535uint32, еслиframe_max >= 65536
key_count
uint8
1
Количество анимированных ключей в кадре
keys
struct[key_count]
Структура описания ключей
Структура ключа struct[key_count]
bone_map_index
uint8
1
Индекс кости из карты BMAP
key_flags
uint16
2
Битовая маска анимируемых параметров
Битовая маска key_flags
0x0001
Позиция
0x0002
Ориентация
0x0004
Признак отзеркаленной матрицы
0x0008
Включение видимости
0x0010
Выключение видимости
0x0020
Мешевая анимация
0x0040
Масштаб
Условные данные анимационного ключа
Ниже описанные поля присутствуют, если установлен соответствующий флаг в битовой маске.
position
float3
12
Позиция
orientation
float3
12
Нормализованная форма кватерниона
scale
float3
12
Масштаб по осям XYZ
mesh
struct
Mешевая анимация
mesh.size
int32
4
Размер данных
mesh.data
byte[size]
1*[size]
Бинарные данные мешевой анимации
Последнее обновление