Анимация в Thief

Автор Chuzhoi, 23 мая 2011 05:24:53

« назад - далее »

0 Пользователи и 2 гостей просматривают эту тему.

DimaS

Жирный оффтоп.
[off]Вопросы от Chuzhoi. Вопросы от Чужой. Вопросы от незнакомки...
Надо тему переименовать, а то у Чужого пол меняется  :lol:[/off]

Zontik

1. Не реагировал в игре или в отладочном режиме редактора?
Если вообще - то можно задать ему свойство AI > Core > Team > Neutral. Но он при этом будет реагировать на резкие звуки, найденные тела и другие события, в том числе и спровоцированные игроком.
Если только на время теста в редакторе - то просто включается специальный режим "никто не знает, что игрок тут" - простой командой типа ai_aware_of_player. Точно не помню, поскольку эта команда встроена у меня в пользовательское меню.
Уточни, что именно тебе нужно.
2. Лучший способ - диалог, срабатывающий от нажатия на кнопку. Есть хорошая демка, где таким образом показаны все стандартные движения. Я так понимаю, речь идет об отладке анимации? Тогда в диалоге нужно единственное действие AI - Play Sound/Motion, анимация прописывается в последнюю строку из трех. Можно также добавить следующим действием Frob Object и написать номер кнопки, запускающей диалог - тогда он постоянно будет перезапускаться, ты увидишь движение зацикленным и сможешь любоваться им бесконечно. Поскольку это не игра, процедуру выхода из цикла предусматривать не нужно.
Дайте глазам отдохнуть! Тёмное место

Chuzhoi

clearing, верни, пожалуйста, название темы взад. Во-первых, анимация все-таки в Thief, а во-вторых, вопросы может задать любой желающий.

Zontik
Цитировать1. Не реагировал в игре или в отладочном режиме редактора?
Именно в отладочном.

Zontik

Попробуй ai_aware_of_player
Дайте глазам отдохнуть! Тёмное место

Chuzhoi

Zontik Сработало!

Chuzhoi

#35
Обнаружил один баг.

Если создать новое движение с новым именем, которого еще нет в motions.crf, то в нем не работает анимация головы. Почему не работает и почему именно головы - понятия не имею (меня как программиста всегда забавляли такие "абсолютно нелогичные" глюки). Причем включение файлов прямо в motions.crf не помогает.

Поэтому для полноценной анимации нужно создавать движения с уже существующими именами (причем любыми, что за движение и от какого существа - не имеет значения). Я думаю, движения буррика вполне подойдут - ведь в Thief 2 нет бурриков, не так ли?

Zontik

#36
Что-то ты делаешь не так.
Я создавал для "Истории короля" движения с новыми именами, головы двигались нормально.
У меня, впрочем, есть одно предположение. Ты вносил новые "концепции" движений в дополнительный файл? В базе данных движений есть три файла с отличающимися расширениями, вот в них и нужно вписывать новые имена в дополнение к тому, что ты вписываешь их "куда надо". Кажется, в этих файлах описываются торсы, причем еще задаются какие-то параметры (я так и не понял - какие, делал по аналогии) - возможно, именно с этим и связан твой шейный паралич.
Я бы посоветовал открыть папку MSCHEMAS из "Истории короля" и посмотреть, что я там менял и как. В архиве - только измененные файлы; все добавленные строки я, насколько помню, старался комментировать. Так что разберешься.
Что касается использования "готовых" имен - это плохая практика, что для текстур/звуков, что для движений, и рано или поздно каждый автор приходит к тому, что так делать все-таки не надо. Да и буррики в T2 есть, не в ОМ, так в куче FM.
Да, кстати: я полагаю, ты компилировал базу движений заново? Надеюсь, что да. Это нужно делать после каждого изменения в схемах (но, к счастью, не нужно после изменения самих движений).
И последнее. Насчет ai_aware_of_player я, не подумав, написал глупость. Оно, конечно, работает, но каждый раз при запуске вводить эту команду... Ты же делаешь демку для отладки движений, так? Тогда лучше самого AI сделать невосприимчивым и не париться каждый раз с вводом команд. Еще раз: задай своему AI свойство AI > Core > Team > Neutral, для твоих целей этого будет достаточно.
Дайте глазам отдохнуть! Тёмное место

Chuzhoi

Я вроде бы все делал как ты описываешь: и moc-файлы (которых три) редактировал, и базу каждый раз перекомпилирую. Единственное отличие: папка MSCHEMAS лежит у меня не в Thief2, а отдельно. При компиляции в Thief2 сбрасывается лишь motiondb.bin - мне казалось, что этого достаточно. Может быть, в этом причина?

Zontik

Нет, не в этом. Папка MSCHEMAS для игры вообще не нужна, это же скомпилированные в motiondb.bin исходники. Остальное все правильно.
А что, собственно, подразумевается под головой? Шея? Поскольку никакой другой головы в скелете как бы и нет.
Мне трудно судить, не видя самого движения, но, может, это как раз глюк, связанный с неверным отображением в красном-синем-зеленом окошках? То есть ты задаешь координаты, ориентируясь на положение головы в этих окошках, а в реальности никакого движения и нет? И еще вариант - если кадров много, а движение быстрое, может, ты просто не успеваешь увидеть, как голова дергается?
Я бы попробовал сделать медленную анимацию с заведомо отличающимся положением головы - скажем, для простоты всего из двух кадров: смотрит вперед - смотрит назад (как сова). Потом уже можно будет делать какие-то выводы.
Дайте глазам отдохнуть! Тёмное место

Chuzhoi

Под головой подразумевается именно шея и то, что на ней. В случае слизняка это его передняя часть, но пока я экспериментирую на временной модельке из параллелепипедов.

Я уже какую только анимацию ни пробовал. И дело не в неправильном отображении в Motion Editor, и не в слишком быстрой анимации.

Попробую описать проблему более подробно:
- если я создаю новое движение и присваиваю ему новое имя, то шея в игре не двигается. Если я беру то же самое движение, но сохраняю его под любым именем, позаимствованным из motions.crf, то шея в игре приходит в движение, причем оно полностью соответствует движению в ME.
- если я беру любое из стандартных движений из motions.crf, и сохраняю его под новым именем, то шея не двигается. Если же я пересохраняю его под старым именем, или использую любое имя из архива motions.crf (неважно, какое), то шея приходит в движение.

Естественно, после каждого такого переименования редактируется mos-файл, перекомпилируется motiondb.bin и перезапускается Dromed.

В таких экспериментах я вчера провел весь вечер, и в конце концов решил использовать буррика.

Сегодня я еще раз попробую, а также посмотрю движения из "Истории Короля".


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

Zontik

Без интерполяции у меня бы элементарно не хватило терпения создать даже хотя бы одно движение.
По описанию совершенно ясно, что проблема у тебя действительно есть, и она какая-то странная.
Я не помню сейчас точно, как называется движение, в котором наверняка использованы движения головы - кажется, это одна из вариаций Kingseat, где AI как бы читает книгу, слегка поводя при этом головой справа налево. Думаю, что у скрипача (Violinist) голова тоже подвижна, хотя не на 100% уверен.
Такое ощущение, будто мы оба забыли сделать какой-то важный шаг в алгоритме. То есть я забыл сейчас, а тогда помнил, и все получалось.
Подожди, подожди...
ЦитироватьЕстественно, после каждого такого переименования редактируется mos-файл, перекомпилируется motiondb.bin и перезапускается Dromed.
А как насчет другого файла, в котором, собственно, и описывается движение? Один из тех, которых в папке не три, а много? Забыл упомянуть?
Если бы ты имел дело с DromEd раньше, ты бы заметил аналогию со звуковыми схемами для диалогов. В "общих" файлах (аналог MOC) указывается "концепция" диалога (то есть его название), а отдельные фразы и соответствующие им голоса и имена WAV-файлов описываются в другом файле, "частном".
Со схемами движений все очень похоже. Так что там насчет "частных" файлов (MOS, кажется?)? Ты их дописываешь?
Дайте глазам отдохнуть! Тёмное место

Chuzhoi

Все получилось! Подробности завтра.

Chuzhoi

Значит, так.

Цифра 1 после имени движения в mos-файле, как я уже писал, означает интерполяцию. Полагая, что интерполяция - это очень хорошо, я ее и ставил после всех движений, которые делал и тестировал. То, что при 30 fps она совершенно не видна, а также то, что в стандартных mos-файлах она используется крайне редко, меня не смутило.
Оказалось, что именно цифра 1 убирает движения головы. Стоит ее заменить на 0 (или 4) - голова начинает нормально крутиться.

Кстати, я до сих пор не уверен, что я правильно понял значение цифры 1, но при 2-3 fps это выглядело именно как интерполяция при переходе от одного движения в цепочке к другому.

Кстати, обнаружил еще один эффект - если использовать уже существующее имя движения (как я хотел с бурриком), то оба этих движения (стандартное и кастомное) суммируются и получается смесь движений. Раньше этого я не замечал - видимо, потому, что тестовая модель, на которой я провожу эксперименты, состоит из туловища, головы и левой руки (без суставов), а не все игровые движения затрагивают именно эти суставы.

Остается непонятным, почему в этом случае я видел нормальные повороты головы - ведь база движений (motiondb.bin) существует в одном-единственном экземпляре, в ней для данного движения прописан вполне конкретный режим (единица), и никаких наложений этой единицы на что-то другое по идее быть не должно.


Теперь вопрос. Как все-таки запускать диалоги (чтобы вызвать то или иное движение)?

Dront

ЦитироватьТеперь вопрос. Как все-таки запускать диалоги (чтобы вызвать то или иное движение)?
Необходимо создать самого AI и маркер (обычный). Маркер будет отвечать за ход событий: ему нужно прописать скрипт (S -> Scripts у него в свойствах) TrapConverse и связать его с AI связью AIConversationActor. Обязательно нужно проставить номер (скажем, 1).
Затем, чтобы диалог можно было включить кнопкой, связываем кнопку с маркером связью ControlDevice.
После чего прописываем, за какое движение отвечает маркер: у него в свойствах AI -> Conversations -> Conversation. Выбираем самый первый шаг (00), откроется большое окошко. Тут достаточно определить первый и единственный шаг - проигрывание движения. Это пункт Play sound/motion. Движение, которое нужно воспроизвести, записать надо как третий (Последний! Не первый, не второй.) аргумент. И выбрать актёра, который будет это движение воспроизводить - это ActorOne.

Можно сделать также по аналогии с демо-миссией Yandros'а, где показаны все движения. Название не помню, но на том же Keep of metal and gold или Thiefmissions по поиску по автору найти легко.
"You cannot run from life as you did from us, Garrett! Life has a way of finding you..."
"Beware the dawn of the Metal Age."

Chuzhoi

Маркер, да еще и обычный... Ладно, будем разбираться!