Hollow Horizon

Hollow Horizon 

A Certain Developer of a Certain Engine 🙃

130subscribers

83posts

goals3
19 of 25 paid subscribers
Такое количество подписчиков позволяет мне регулярно работать и обновлять движок. А также иногда вкладываться в дизайн и удобство движка.
1 of 3

HollowCore glTF | Контроллер анимации

Уже прошла почти неделя с того, как я начал переписывать систему анимаций. Собственно а зачем она нужна, если прошлая прекрасно работала? Увы, очень многое на ней было нельзя реализовать, например:
- Настроить скорость перехода между анимациями (например, при запуске задержка должна быть меньше, чем при завершении)
- Настроить скорость самих анимаций (Условно, чтобы синхронизировать скорость ходьбы со скоростью передвижения моба)
- Все переходы между анимациями происходили через Bind-позу (Поза в которой сохранён персонаж), т.е. если вам нужно чтобы персонаж будучи в положении лёжа - сел, то раньше такой переход проходил как "лежать -> стоять (Bind поза) -> сидеть".
- Не было возможности плавно переходить от одной анимации к другой (например постепенно из ходьбы в бег)
Теперь же большая часть из этих вещей исправлена, а также появилось больше функционала. Новая система предоставляет не только возможности запуска анимаций, но и много чего ещё.
В первую очередь, создавая контроллер анимаций, вы сможете создать несколько программируемых слоёв.
Сам слой управляет тем, какие анимации и в каких пропорциях нужно применить. У него есть следующие параметры:
1. Имя - название слоя, используется для того, чтобы в случае чего получить слой и изменить его параметры, затриггерить событие и т.п. 
2. Режим наложения (Добавочный / Перезаписывающий). Первый добавляет анимации складывая с прошлой позой персонажа "накапливая" эффект нескольких слоёв, второй же полностью сбрасывает позу персонажа полностью перезаписывая всё своей анимацией.
3. Приоритет слоя - определяет в каком порядке будут применяться слои. Те что меньше - будут применяться первыми, те что больше - последними. Что довольно важно в совокупности с прошлым пунктом.
4. Маска слоя - определяет какие кости сможет изменить анимация на этом слое, например можно сделать чтобы анимация влияла только на верхнюю часть модели, или только на лицо. (пока не учитывает вложенные части и нужно указывать прям все)
5. StateMachine - состояния и переходы.
Состояния - определяют какую(ие) анимации воспроизводить в текущий момент. Одновременно может воспроизводиться только 1 состояние (но можно создать несколько слоёв)
Переходы же определяют, когда нужно завершить одно состояние и перейти в следующее
Параметры состояния:
1. Имя - название состояния (не анимации), используется в переходах.
2. Клип - сама анимация, подробнее ниже. 
3. Древо смешивания - ещё один вид анимации состоящей из нескольких, подробнее ниже.
4. Процедурная анимация - ещё один вид анимации, который можно запрограммировать. (Например поворот головы)
Параметры перехода:
1. from - Из какой анимации
2. to - В какую анимацию
3. condition - условие для перехода
4. duration - время перехода в секундах
5. (Будет когда бенди сделает пример :D) transitionClip - анимация перехода (если вам не нравится автоматически интерполированная)
Клип - сама анимация и её настройки:
1. Имя - название анимации из файла
2. WrapMode - режим обработки анимации: 
- Once: один раз.
- Loop: В цикле.
- PingPong: В цикле до последнего кадра и обратно к первому.
- ClampForever: Остановить проигрывание на последнем кадре
3. Скорость - дополнительная скорость с которой будет проигрываться анимация. К тому же она может быть отрицательной.
Дерево смешивания - один из способов анимации, он состоит из параметра и списка анимаций с весами, например:
Параметр: Скорость моба
Список в формате [Скорость] | [Анимация]:
[0.0]: Клип Idle
[2.0]: Клип Walk
[3.5]: Клип Run
При проигрывании будет выбираться процентное соотношение анимаций, например при скорости 1.5 будет: 25% Idle, 75% Walk и 0% Run. Думаю суть ясна.
Процедурная анимация - способ анимации, при котором нет ключевых кадров, а вам нужно самому рассчитать, где будет какая часть тела в зависимости от времени. Чаще всего используется для анимации головы, инверсивной кинематики и т.п.
Пока что все условия и параметры вроде скорости пишутся на языке схожем с Molang. Я пока не уверен, долго ли эта задумка продержится и может стоит переписать всё на Kotlin… Но тащить огромный компилятор ради парочки анимаций как-то не хочется))
Вот, пока что примерный вариант того, как оно может выглядеть в виде кода. Выглядит достаточно громоздко, но в целом это довольно понятно и легко автоматизируется циклами или Enum'ами.
kts
player_model.animation_controller.kts2.70 Kb
Недавно показывал наработки у себя в Discord, получается что-то вроде такого))
А, ну и самое главное, что будет с анимациями, которые нужно запустить по триггеру, вроде тех, что в диалогах? А всё просто, вы всегда сможете добавлять, менять и удалять эти слои прямо в скрипте. К тому же я оставлю обратную совместимость с прошлыми функциями для анимаций и вполне вероятно даже автоматически генерируемый контроллер (хотя возможно вам всё же придётся указывать названия анимаций вручную, если это не встроенная модель, да и в любом случае, своё всегда надёжнее)
Звучит очень многообещающе, но пока частично не понятно лично мне🤔 будем пробовать
Вопрос: На сколько процентов примерно готов движок для 1.20.1 ? И сколько примерно займёт времени что бы доделать его?
KLOR UNIVERSE TEAM, Клавиша F12, настраивается в настройках управления игры. Насчёт команд без понятия, может быть не все аргументы указал, может быть в скрипте ошибка, нужно по ситуации смотреть.
Вообще лучше пиши в Discord или Telegram, тут я редко бываю, да и файлы тут нормально не прикрепишь.
KLOR UNIVERSE TEAM, Там ещё новая документация готовится, может поможет:
https://hollowhorizon.github.io/hollowengine.github.io/docs/scripting/scene/intro
Subscription levels4

Передовой Хеллоу-Вордер

$0.73 per month
Приобретя эту подписку Вы сможете получить доступ к большинству постов и некоторым бета-версиям мода. Кроме того, Вам станет доступен канал для подписчиков в Discord, где я часто делюсь своими мыслями и наработками.
+ chat

Продвинутый Скриптописец

$3.7 per month
Эта подписка уже открывает посты дороже, чаще всего это доступ к всяким глобальным обновлениям, объяснениям различных сложных механик и прочих фишек мода, о которых большинству не известно. 
+ chat

Магистр Kotlin

$14.5 per month
Это уже довольно солидная цена для подписки, так что с ней у вас будет больший приоритет на голосованиях и вашим идеям и предложениям будет уделено больше внимания :)
+ chat

Верховный Спонсор

$73 per month
Интересно, зачем нужна эта подписка?
+ chat
Go up