IdleMarker — что это такое, как создать новый и сделать модель поведения NPC в разное время суток.

Для работы ИИ (Искусственного интеллекта) в игре используется NavMesh. После создания навмешей для NPC требуются AI пакеты, которые сделают его «живым» (Вкладка AI Packages в меню Actor). Каждому NPC лучше прописывать определенный набор Default пакетов, наиболее важным из которых будет является Sandbox пакет (DefaultSandboxLocEditor1024 – например).

Приписав персонажу пакет, вы увидите, как тот бродит с места на место, пьет и закусывает. Для того, чтобы как-то разнообразить жизнь актера, используется фурнитура (WorldObjects/Furniture/...) и набор маркеров, таких как IdleMarkers.

Для начала разберемся, что за зверь такой этот IdleMarker. В словоблудии уже говорилось, что эти маркеры позволяют разнообразить поведение NPC в какой-либо локации. Более того, они позволяют, не прибегая к скриптам и сценам создавать модель поведения NPC  в разное время суток, но это уже зависит от AI-пакетов.

Именно благодаря IdleМаркерам стражники патрулируют улицы городов, а Драконий Предел ежедневно очищается от пыли и мусора двумя безустанными служанками. Сами по себе IdleМаркеры наследуют анимации, заложенные для каждого NPC. К сожалению, не все анимации пригодны для использования в маркерах, но самое главное не это, а то, что десятки анимаций так и небыли использованы разработчиками игры. Теперь, когда дело сказано, можно приступить к поэтапному разбору и созданию IdleMarker'a.

Создание IdleMarker'a на основе доступных анимаций

Откроем ObjectWindow > раздел Miscellaneous > IdleMarker. Здесь мы видим список из уже доступных маркеров: 

Жмем правой кнопкой мыши по этому пространству и создаем новый IdleMarker. Перед нами появляется окно IdleMarker:

Тут стоит остановиться на каждом из параметров окна:

  1. Поле Marker Model – его трогать не стоит. Модель маркера уже заложена и будет использоваться в окне рендера;
  2. Child Can Use – могут ли дети использовать маркер;
  3. Ignored By Sandbox – будет ли маркер игнорироваться актерами (применимо в ситуациях, когда маркер выполняет специальную анимацию для какой-либо сцены в каком-либо квесте;
  4. Do Once – маркер будет использован один раз;
  5. Поле Idle Timer Setting – настройка времени выполнения данного маркера. Не все маркеры могут быть настраиваемы этим параметром;
  6. Пункты Random и Run In Sequence отвечают за случайное или последовательное выполнение IdleАнимаций в случаях, когда ваш маркер содержит сразу несколько анимаций;
  7. Этими стрелочками можно регулировать порядок распределения маркеров в списке, соответственно изменять последовательность их выполнения (не забываем про пункт 6).

Разобравшись со свойствами окна, переходим к добавлению новой анимации в наш маркер. Нажимаем на пустое поле правой кнопкой мыши и выбираем New. Перед нам окно Select Idle. Мы видим список всех IdleАнимаций, доступных для использования в IdleМаркерах, кроме того есть поле выбора актера и окно просмотра:

Выберем себе актера, для которого нам нужно получить список анимаций. Обратите внимание, при смене актеров меняется и список. Вы можете упорядочить список по имени или ID. По умолчанию список упорядочен по дате:

Я выбрал Ульфрика Буревестника и получил список доступных анимаций. Обязательно учтите следующее:

  • Список анимаций идентичен для всех играбельных рас, в том числе детей. Для всех пауков, к примеру, будет одинаковый список состоящий из нуля доступных анимаций.
  • В данном списке содержатся где-то 250-300 анимаций. В IdleМаркерах применимы лишь 150. Как правило все они начинаются со слова Idle.
  • Многие анимации не будут проигрываться актерами. К этому нужно привыкнуть и смириться. Вероятно, это есть баг самой системы IdleМаркеров.
  • Все анимации добиваний (около 80) можно найти в этом списке. К сожалению при их исполнении актеры не используют оружие из инвентаря. Они просто машут руками.
  • Не возвращайте окно выбора Актера в позицию NONE – это приводит к вылету редактора.
  • Вероятно, в превью-окне должен был работать рендер самой анимации, дабы вы не включали по 100 раз игру для тестирования. Увы, что сломано, то сломано.
  • Некоторые анимации имеют начало, зацикленную часть выполнения и конец. Используйте либо начальную, либо срединную фазу (в названии анимации слова Start\Enter и Instant).
  • Некоторые анимации наследуют объекты, такие как кинжалы, бутылки, чашки, метла. Добавлять их в инвентарь самому персонажу не нужно. Однако, например анимация чистки меча наследует оружие из инвентаря актера.

Для примера я выбрал анимацию IdleAstrid (Финальная миссия за Темное Братство, обгоревшее тело Астрид «распято» на полу). Далее жмем OK. И выбираем место для своего маркера:

По быстрому я собрал прототипную ячейку, не забыл про сетку путей, Ульфрика и сам маркер:

В результате Ульфрик подходит к маркеру и растягивается на полу:

Не находите это немного скучным и не обыгранным? Так давайте изменим окружение под этот маркер:

И вот сцена преобразилась, она уже может поведать какую-то историю. Ульфрик Буревестник стал жертвой имперского произвола, либо у Авентуса Аретино появились новые заказы для Темного Братства. Первый этап пройден.

Расширение списка доступных IdleАнимаций для использования их в системе IdleMarker

А что если нам мало стандартных анимаций? А есть ли другие анимации? Давайте разбираться. На верхней панели найдите Gameplay, далее Animations:

Перед нами окно Idle Animations. Здесь мы видим каталоги с анимациями для разных типов существ, в том числе для фурнитуры и активаторов:

Запомним это место. Теперь нам необходимо выбрать анимацию, которую мы хотим использовать в качестве IdleМаркера. Для этого откроем в окне Object Window наших NPC. (Actors > Actor):

Находим своего актера, открываем, переходим на вкладку Animation (список анимаций также доступен через Preview Window):

Тут работает рендер анимаций. Все, что нам нужно - это выбрать себе анимацию по вкусу. Естественно лучше искать среди анимаций, начинающихся со слова Idle. Изначально я выбрал анимацию шатающейся пьяной походки (А такая есть и нигде не используется, сюрприз да?), но она не сработала на IdleМаркере. Поэтому возьмем анимацию написания письма пером в сидячем положении (Два сюрприза за день – да вы везунчик!):

Теперь запомним ее название. В моем случае это IdleWriteTableChairIdle.hkx. Название нужного нам AnimEvent’a будет примерно таким же. Возвращаемся к окну Idle Animations. Итак, нам нужен набор анимаций для «разумных рас». Это каталог Actors\Character\Behaviors\0_Master.hkx:

Тут мы видим много подкаталогов с различными действиями для игрока. Ничего не трогаем, листаем вниз до папки LOOSE:

Открыв эту папку, мы видим до боли знакомую картину – тот самый список анимаций, доступных при создании IdleМаркера (разве что сортировка алфавитная). Жмем куда-нибудь в это место правой кнопкой мыши > Insert Child. Получаем новую анимацию, без имени. (отображение вверху списка), придумываем ей ID:

 

В самом окне имеются дополнительные параметры:

  • Sequence, Blocking, No attacking не трогаем. Они не используются в данном разделе.
  • Looping Seconds используется для задания цикличности выполнения действия.
  • Replay Delay – задержка перед повторным выполнением анимации.
  • Conditions – пропишите условия для выполнения анимации. Тут вы ограничены только свей фантазией. Можно поставить зависимость от чего угодно (погода, пол, раса, уровень и еще десятки условий – все зависит от вас).
  • AnimEvent – само окно для выбора анимационного события:

Начинаем искать нашу анимацию. Мы видим действие IdleWriteTableChairEnterInstant. То, что нужно. Кстати, там еще есть анимации для разных типов кресел: будь то с левосторонним «входом» или правосторонним. Нам же не принципиально. Заметьте, название AnimEvent'a и Havok Анимации не совпадает, но очень похоже:

Выбираем нужную анимацию, нажимаем Close. Открываем свой IdleMarker. Нажимаем New. Получаем список доступных анимаций. Находим там свою IdleАнимацию:

Дважды кликаем по ней, сохраняем маркер и если он у вас уже где-то размещен – смотрим результат в игре:

И вот вроде бы все хорошо. У Ульфрика появилось письмо, он старательно выводит на нем пустоту что пишет. Но. Где стул? А где плавная анимация посадки на этот стул? Непорядок. Давайте разбираться:

Как видите, иногда приходится «помогать» IdleАнимациям нормально выглядеть. Можно было бы подставить какую-нибудь табуретку или камень для Ульфрика, но это не профессиональный подход.

Итак, нам нужно заставить Ульфрика проиграть IdleАнимацию тогда, когда он сядет за стул. Определенный стул, а не кровать или скамейку:

Для этого нам нужен сам Ульфрик. Открываем его как Reference самой локации, переходим на вкладку Scripts и создаем новый скрипт (Add > New > «Вводим название» > OK). Затем правой кнопкой по нему > Edit Source:

Открывается текстовое окно, там мы видим только: Scriptname (Имя вашего скрипта) extends ObjectReference

Сменяем ObjectReference на Actor и полный скрипт выглядит так:

Scriptname (Имя вашего скрипта) extends Actor
Idle property AnimIdle auto
ObjectReference property Chair auto
Event OnSit(ObjectReference akFurniture)
     If akFurniture == Chair
          PlayIdle(AnimIdle)
     EndIf
EndEvent

В данном случае, как только Ульфрик использует фурнитуру (OnSit), при условии, что наша фурнитура  - нами выбранное кресло (Chair), проигрывается наша IdleАнимация (AnimIdle). Нажимаем  File > Save. Скрипт скомпилирован. Остается дать скрипту знать, какую фурнитуру ему нужно учитывать, и какую анимацию проигрывать:

Дважды кликаем левой кнопкой мыши по имени скрипта / правой кнопкой мыши по названию > Edit Properties. Выбираем наше AnimIdle. В окне Pick Object мы видим тот самый список анимаций, доступных только для IdleМаркеров, в который мы занесли новую. Затем в Chair выбираем наше кресло.

Проверим в игре:

Ульфрик садится в кресло, достает пергамент и начинает писать. Великолепно! Сцена обыграна логично (Стол выберете сами).

Гениальность системы искусственного интеллекта Скайрима в том, что он не станет заставлять NPC 100% выполнять вашу анимацию, если его не попросить. Как видите пока один Ульфрик пишет, второй закусывает, а третий запивает:

Минутка словоблудия

В Скайриме зашито множество анимаций, пригодных для использования IdleМаркерами. Почему разработчики их не использовали? Мы не знаем, но ничто не мешает вам использовать эти анимации не только для скриптовых сцен, но и для обычных ситуаций и локаций так, чтобы они стали необычными. 

Вот небольшой список (далеко не полный) Havok Анимаций (просмотр во вкладке Actor), которые не найти в повседневном Скайриме, либо их использовали единожды (Даю начало названия, каждая анимация имеет два-три варианта или стадий исполнения):

  • AOBarTableMug...hkx - пьяные песни и размахивание кружкой сидя за столом.
  • AOBarTablePassOut...hkx - уснул, лицо на стол (или в тарелку).
  • AOBarTableSaluteLoop...hkx - тост за любовь, за детей, за удачу, за Скайрим!
  • Chair_SoupIdle...hkx - использовалось по квесту с Гурманом. Когда двойник императора ел суп и давился им.
  • CraftingEnchantingBenchCast.hkx - персонажа начинает круговые взмахи руками на пентаграммой, затем резко их опускает, в общем именно так планировалось накладывать заклинания.
  • CraftingEnchantingBenchDrop.hkx - персонаж кладет на стол зачарования вещь\камень душ.
  • CraftingEnchantingBenchIdleCircle.hkx - персонаж очерчивает пентаграмму пальцем.
  • IdleBlessingKneel...hkx - персонаж преклоняет колено и одной рукой касается земли (можно обыграть поиск следов на земле)
  • IdleDrunk...hkx - пьяные шатающиеся повороты в стороны или вышеупомянутая походка.
Автор: Dimonoider
34

Комментарии

Добавить комментарий

Хорошая статья! Забираю к себе в коллекцию. Автору огромное спасибо.

Благодарность от меня и от сестренки. Может, доберемся и до серьезного моддинга.

Спасибо за статьи))) инфа полезная))

как этот трюк в fallout 4 проделать?

а как самому создать женственную походку для женских НПС , возможно такое через CK?

А есть ли idlemarkers для игрока, как например присесть скрестив ноги, или присесть спустив ноги с уступа. И можно ли переделать idlemarkers для нпс под игрока. Например, чтоб игрок облокотился о стенку или грел руки у костра.

Хорошо, да не без вопросиков)

Присоединюсь к пользователю с ником damirchikkk - пытаюсь в моде дать игроку возможность писать пером за столом как нпс (успешно кста), лежать на лужайке, как охотники на горячих источниках, листать книги, как нпс коллегий магов и бардов. И вот никак! Очень нужны советы, какие ключи и какие образцы мебели использовать. На невидимые стулья и лежанки не реагирует. Может, у кого из пользователей есть способы? Я видела в паре модов, как игрок может лежать, но рассмотреть, как оно сделано не смогла. Кругом были новые текстуры в виде восклицательных знаков. Тогда я вообще только начинала )) Я хочу иметь возможность сидеть по-турецки и на сундуках и всяко разно исполнять.

Alex_andra, ну, во-первых ради таких простых анимаций не стоит теребить СК... ведь есть моды... и для действий игрока(типа Dovahkiin-Relaxes-Too)... и/или просто раскидать аним-маркеры в игре, для НПЦ ( вроде - VWR Idle Markers). А на счет восклицательных знаков - это из-за BSA архивов DLC. Вскрывать их - на свой страх и риск.
А про "всяко-розно исполнять" - это вам нужен мод DAR с кучей его возможностей (в виде отдельных модов на его основе)

Нету этих Havok Анимаций в CK, что у вас в конце списка указаны.

Авторизуйтесь, чтобы оставить новый комментарий. Или зарегистрируйтесь.