5.9 KiB
VCA
Текстовый формат анимации, использующий синтаксис VCM.
VCA файл состоит из набора директив, порядок следования которых не влияет на порядок применение трансформаций.
Директивы применяются к переданной цели, которая может быть скелетом сущности и камерой.
При использовании скелета, в директиве указывается имя кости через атрибут bone:
@move bone имя_кости ...
Директивы отвечают за отдельные скалярные значения, такие как x, y, z и т.д., указываемые через атрибут by:
@move bone hand by y ...
На данный момент доступны два вида описания кривых, дающих значение f(t) = x где t - время:
Директивы анимации
@move- смещение объекта/кости@rotate- поворот объекта/кости@scale- масштабирование объекта/кости (множитель)@zoom- масштаб камеры (множитель)
Мета-информация
Информация о анимации в файле настраивается через директиву configure:
fps- частота кадров, являющаяся делителем при рассчёте длительностиframes- число кадров анимации, являющееся делимым при рассчёте длительностиduration- явно указанная длительность в секундах (требуется указание fps при наличии ключевых кадров)rotation-order- указывает порядок применения углов Эйлера при вращении (так как порядок директив не учитывается форматом). Примеры: XYZ, ZYX, YZX.
Мета-информация применяется глобально. Поведение не зависит от её положения в файле, но рекомендуется располагать её в начале.
Кривые с ключевыми кадрами
Требуется через атрибут curve указать тип кривой:
const- значения не интерполируются, сменяясь в момент достижения ключевого кадраlinear- ломанная линия, используется линейная интерполяцияbezier- ключевые кадры кривой Безье с явно указанными левой и правой касательными (lx, ly, rx, ry)
Ключевые кадры описываются в последующем {...} блоке в виде упорядоченных @key директив:
@rotate by z curve linear {
@key ...
@key ...
}
Ключевой кадр должен содержать номер кадра frame и значенин value. Для bezier кадров также описываются касательные.
Пример для curve bezier:
@key frame 138 value 53.00411 lx 127.067 ly 53.00411 rx 138.001 ry 53.00411
Кривые через выражения
Через атрибут описывается функция f(t) = x где t - время в секундах.
Пример: func (sin(t * 2.5) + pi).
Операции доступные в выражениях:
a + b- сложениеa * b- умножениеa / b- делениеa % b- деление по модулюa ^ b- возведение в степень
Константы доступные в выражениях:
piчисло πeчисло Эйлера
Функции доступные в выражениях:
sin(x)- синус от xcos(x)- косинус от xtan(x)- тангенс от xnoise(x, octaves)- быстрый одномерный шум от x с указанным числом октавnoise2d(x, y, octaves)- двумерный шум от x,y с указанным числом октавsign(x)- целое число, указывающее знак x (-1/0/1)rand(low, high)- псевдослучайное дробное число в диапазоне от low до highround(x, places)- округляет значение x до указанного количества знаков после запятой places (опционально).floor(x)- округляет значение x до ближайшего меньшего целогоceil(x)- округляет значение x до ближайшего большего целогоexp(x)-e^{x}min(x, ...)- выбирает наименьшее значение из переданных аргументовmax(x, ...)- выбирает наибольшее значение из переданных аргументовsqrt(x)- квадратный корень от xlog(x)-ln({x})log10(x)-log_{10}({x})deg(x)- конвертирует радианы в градусыrad(x)- конвертирует градусы в радианы
Warning
Использование незадокументированных функций может иметь иметь любые незадокументированные последствия.