voxelcore/doc/ru/vca.md
2026-09-08 20:48:32 +03:00

5.7 KiB
Raw Blame History

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) - синус от x
  • cos(x) - косинус от x
  • tan(x) - тангенс от x
  • noise(x, octaves) - быстрый одномерный шум от x с указанным числом октав
  • noise2d(x, y, octaves) - двумерный шум от x,y с указанным числом октав
  • sign(x) - целое число, указывающее знак x (-1/0/1)
  • rand(low, high) - псевдослучайное дробное число в диапазоне от low до high
  • round(x, places) - округляет значение x до указанного количества знаков после запятой places (опционально).
  • floor(x) - округляет значение x до ближайшего меньшего целого
  • ceil(x) - округляет значение x до ближайшего большего целого
  • exp(x) - e^{x}
  • min(x, ...) - выбирает наименьшее значение из переданных аргументов
  • max(x, ...) - выбирает наибольшее значение из переданных аргументов
  • sqrt(x) - квадратный корень от x
  • log(x) - ln({x})
  • log10(x) - log_{10}({x})
  • deg(x) - конвертирует радианы в градусы
  • rad(x) - конвертирует градусы в радианы

Warning

Использование незадокументированных функций может иметь иметь любые незадокументированные последствия.