Документация/Статьи/Обзор системы анимирования

From NeoAxis 3D Engine Wiki

Jump to: navigation, search
Перейти на уровень выше

Contents

Описание

Система анимирования - унифицированная система для настройки анимаций моделей в движке.

Основная работа по настройке анимаций заключается в том, чтобы настроить файл .animationTree для каждой из анимированных моделей. Файл содержит иерархическую структуру, представляющую собой дерево анимаций. В редакторе типов объектов на этот файл должна ссылаться прикрепленная модель, которую необходимо анимировать.

Программисты могут настраивать влияние на состояние дерева анимаций из кода.


Для наглядного понимания работы системы анимирования предлагается посмотреть видео, которое показывает похожий формат от других разработчиков. Также здесь можно прочитать больше об этом формате.


На скриншоте показан открытый файл Robot.type в редакторе игровых объектов. Выделена прикрепленная модель, в которой свойство AnimationTree ссылается на файл дерева анимаций.

AnimationTree.jpg

Формат .animationTree

В данный момент редактор анимационных деревьев еще не создан. До тех пор предлагается создавать файлы анимаций вручную в текстовом редакторе. Существует специальный формат для настройки анимаций, который мы рассмотрим ниже. Файлы с данным форматом имеют расширение .animationTree.

В качестве простого примера рассмотрим файл анимаций робота Robot.animationTree, который находится в SDK в директории Data\Types\Units\Robot\.

blocks
{
	block Output
	{
		uin = 1
		in = 100
	}
 
	/////////////////////////////////////////////
	//Attack trigger
 
	block Trigger
	{
		uin = 100
		triggerName = "fire"
		off = 200
		on = 101
	}
 
	block Animation
	{
		uin = 101
		animationName = "attack"
		speed = 1
	}
 
	/////////////////////////////////////////////
	//Select walk or idle
 
	block Transition
	{
		uin = 200
 
		selectedIndexSource = 201
		animation0 = 400 // go to idle animation
		animation1 = 310 // go to walk
	}
 
	block Parameter
	{
		uin = 201
		parameterName = "move"
		value = 0
	}
 
	/////////////////////////////////////////////
	//Walk
 
	block Direction8Sides
	{
		uin = 310
 
		angleSource = 311
		speedMultiplierSource = 316
 
		forward = 312
		backward = 315
		left = 312
		right = 312
		forwardLeft = 312
		forwardRight = 312
		backwardLeft = 315
		backwardRight = 315
	}
 
	block Parameter
	{
		uin = 311
		parameterName = "moveAngle"
		value = 0
	}
 
	block Parameter
	{
		uin = 316
		parameterName = "moveSpeed"
		value = 1
	}
 
	block Animation
	{
		uin = 312
		animationName = "walkAgressive"
		speed = 0.6
	}
 
	block Animation
	{
		uin = 315
		animationName = "walkAgressive"
		speed = -0.6
	}
 
	/////////////////////////////////////////////
	//Idle
 
	block Animation
	{
		uin = 400
		animationName = "idleAgressive"
		speed = 1
	}
 
	/////////////////////////////////////////////
 
}

Как мы видим, дерево анимаций представляет собой тестовый файл в стандартном формате NeoAxis TextBlock. Файл включает в себя список блоков, соединенных между собой. Каждый блок имеет свой тип и уникальный идентификатор uin. Блоки связаны так, что вместе составляют дерево, корневым блоком которого является блок Output.


Для наглядного понимания работы системы анимирования предлагается посмотреть видео, которое показывает похожий формат от других разработчиков. Также здесь можно прочитать больше об этом формате.


Далее будут описаны блоки.

Блок Output

Данный блок является выходом всего дерева анимаций. Блок является корневым. В дереве анимаций может быть только один блок такого типа.

Имя параметра Тип параметра Описание
in Ссылка на блок Источник анимаций, который будет результирующим во всём дереве.

Блок AnimationSource

Источник анимации. Данный блок проигрывает одну анимацию с заданной скоростью.

Имя параметра Тип параметра Описание
animationName Строка Имя анимации.
speedSource Ссылка на блок Источник скорости воспроизведения анимации. Данный блок будет получать значение скорости воспроизведения анимации из другого блока, который указан в этом параметре.
speed Значение Скорость воспроизведения анимации. Если указан параметр speedSource, то данный параметр игнорируется.

Блок Blend

Блок смешивания анимаций. Блок выбирает две соседние анимации из списка и смешивает их. Анимации выбираются в зависимости от веса, который всегда находится в интервале от 0 до 1. В простейшем случае блок содержит две анимации. Тогда, чем больше будет вес, тем больше будет вес второй анимации. В случае, когда анимаций больше двух, вес будет указывать на две ближайшие анимации. Например, если блок имеет 4 анимации, и вес приближается к единице, то будут смешиваться две последние анимации.

Имя параметра Тип параметра Описание
animation0, animation1, ..., animation{N} Ссылка на блок Источники анимаций.
weightSource Ссылка на блок Источник значения веса.
weightValue Значение Значение веса. Если указан параметр weightSource, то данный параметр игнорируется.

Блок Parameter

Блок на выходе дает значение, которое могут использовать другие блоки как входной параметр.

Программисты могут изменять значение блока извне по его имени.

Имя параметра Тип параметра Описание
parameterName Строка Имя параметра.
value Значение Текущее значение или значение по умолчанию.

Блок Sum

Блок суммирует несколько анимаций.

Пример: Персожан имеет отдельные анимации торса и ног. Данный блок можно использовать для конечного смешивания всех анимация торса и анимаций ног.

Имя параметра Тип параметра Описание
animation0, animation1, ..., animation{N} Ссылка на блок Источники анимаций.

Блок Transition

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

Пример: Персонаж может находиться в трех состояниях: стоит, сидит, лежит. Параметр animation0 будет ссылаться на анимацию стояния, animation1 на анимацию сидения и animation2 на анимацию лежания. В зависимости от значения индекса (0, 1, 2), персонаж будет то стоять, то сидеть, то лежать.

При изменении индекса, блок может плавно смешивать значения старого и нового значений. Для этого необходимо указать время перехода. По умолчанию время перехода равно 0.2 секунды.

Имя параметра Тип параметра Описание
animation0, animation1, ..., animation{N} Ссылка на блок Источники анимаций.
selectedIndexSource Ссылка на блок Источник значения индекса.
selectedIndex Значение Значение индекса. Если указан параметр selectedIndexSource, то данный параметр игнорируется.
transitionTimeSource Ссылка на блок Источник значения времени перехода.
transitionTime Значение Значение времени перехода. Если указан параметр transitionTimeSource, то данный параметр игнорируется.

Блок Trigger

Блок-переключать. Блок может быть в одном из двух состояний, активен или неактивен. В неактивном состоянии блок на выходе имеет значение параметра off. При активации блок будет выдавать значение параметра on. Блок автоматически выключается, когда анимация параметра on завершается.

Типичный пример использования блока - прыжок персонажа. Когда персонаж прыгает, то необходимо прервать все анимации и воспроизводить анимацию прыжка. При прыжке активируется данный блок. После того, как блок активирован, на его выходе будет значение параметра on. Параметр on должен ссылаться на анимацию прыжка.

Программисты могут активировать блок из кода, обращаясь к нему по имени.

При переключении блок может плавно смешивать значения параметров off и on. Для этого необходимо указать время перехода. По умолчанию время перехода равно 0.2 секунды.

Имя параметра Тип параметра Описание
triggerName Строка Имя переключателя.
off Ссылка на блок Источник, когда блок выключен.
on Ссылка на блок Источник, когда блок включен.
transitionTimeBlock Ссылка на блок Источник значения времени перехода.
transitionTime Значение Значение времени перехода. Если указан параметр transitionTimeBlock, то данный параметр игнорируется.

Блок Direction8Sides

Данный блок похож на блок Transition, за исключением того, что индекс определяется по углу. Блок удобно использовать для анимации ног персонажей, когда необходимо создать анимации движения персонажа. Поддерживается до 8 направлений. Блок можно использоваться и для меньшего количества направлений, например для четырех сторон или меньше.

При изменении угла, блок может плавно смешивать значения старого и нового значений. Для этого необходимо указать время перехода. По умолчанию время перехода равно 0.2 секунды.

В блоке можно указывать множитель скорости анимаций.

Имя параметра Тип параметра Описание
forward, forwardLeft, forwardRight, left, right, backward, backwardLeft, backwardRight Ссылка на блок Источники анимаций.
angleSource Ссылка на блок Источник значения угла.
angle Значение Значение угла. Если указан параметр angleSource, то данный параметр игнорируется.
speedMultiplierSource Ссылка на блок Источник значения множителя скорости.
speedMultiplier Значение Значение множителя скорости. Если указан параметр speedMultiplierSource, то данный параметр игнорируется.
transitionTimeSource Ссылка на блок Источник значения времени перехода.
transitionTime Значение Значение времени перехода. Если указан параметр transitionTimeSource, то данный параметр игнорируется.

Блок LookAt

Данный блок похож на блок Transition, за исключением того, что индекс определяется по двум углам, горизонтальному и вертикальному. Блок удобно использовать для анимации взгляда персонажа, когда необходимо сделать так, чтобы персонаж мог смотреть по сторонам. Поддерживается до 9 направлений. Блок можно использоваться и для меньшего количества направлений, например для четырех сторон или меньше.

При изменении углов, блок может плавно смешивать значения старого и нового направлений. Для этого необходимо указать скорости по каждому из углов, горизонтальному и вертикальному. По умолчанию скорость перехода равна нулю, что означает, что переход должен быть осуществлен мгновенно.

В блоке можно указывать множитель скорости анимаций.

Имя параметра Тип параметра Описание
leftUp, leftCenter, leftDown, centerUp, centerCenter, centerDown, rightUp, rightCenter, rightDown Ссылка на блок Источники анимаций.
horizontalAngleSource Ссылка на блок Источник значения угла по горизонтали.
horizontalAngle Значение Значение угла по горизонтали. Если указан параметр horizontalAngleSource, то данный параметр игнорируется.
verticalAngleSource Ссылка на блок Источник значения угла по вертикали.
verticalAngle Значение Значение угла по вертикали. Если указан параметр verticalAngleSource, то данный параметр игнорируется.
speedMultiplierSource Ссылка на блок Источник значения множителя скорости.
speedMultiplier Значение Значение множителя скорости. Если указан параметр speedMultiplierSource, то данный параметр игнорируется.
horizontalAngleSpeedSource Ссылка на блок Источник значения скорости изменения угла по горизонтали.
horizontalAngleSpeed Значение Значение скорости изменения угла по горизонтали. Если указан параметр horizontalAngleSpeedSource, то данный параметр игнорируется.
verticalAngleSpeedSource Ссылка на блок Источник значения скорости изменения угла по вертикали.
verticalAngleSpeed Значение Значение скорости изменения угла по вертикали. Если указан параметр verticalAngleSpeedSource, то данный параметр игнорируется.