Перейти к содержанию
  • Автор оригинала: Dimonoider

    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 - пьяные шатающиеся повороты в стороны или вышеупомянутая походка.
    • Нравится 26

    Обратная связь

    Рекомендуемые комментарии

    CrazyHackGUT

    Опубликовано

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

    TES-Diesel modding

    Опубликовано

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

    Siegrun

    Опубликовано

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

    orbital

    Опубликовано

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

    IGOR198718

    Опубликовано

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

    damirchikkk

    Опубликовано

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

    • Нравится 1
    686575

    Опубликовано

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

    Alex_andra

    Опубликовано

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

    damirchikkk

    Опубликовано

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

    Fon_Dol

    Опубликовано

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

    • Нравится 1


    Для публикации сообщений создайте учётную запись или авторизуйтесь

    Вы должны быть пользователем, чтобы оставить комментарий

    Создать аккаунт

    Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

    Регистрация нового пользователя

    Войти

    Уже есть аккаунт? Войти в систему.

    Войти

×
×
  • Создать...