Автор Тема: Анимация в Thief  (Прочитано 47076 раз)

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

Оффлайн DimaS

  • Мастер Теней
  • Сообщений: 2545
Жирный оффтоп.
Оффтопик: Вопросы от Chuzhoi. Вопросы от Чужой. Вопросы от незнакомки...
Надо тему переименовать, а то у Чужого пол меняется  :lol:

Оффлайн Zontik

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

Оффлайн Chuzhoi

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

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

Оффлайн Zontik

  • Фантом
  • Сообщений: 17087
    • Тёмное место
Анимация в Thief
« Ответ #33 : 31 Мая 2011 11:15:51 »
Попробуй ai_aware_of_player
Дайте глазам отдохнуть! Тёмное место

Оффлайн Chuzhoi

  • Призрак
  • Сообщений: 10546
Анимация в Thief
« Ответ #34 : 31 Мая 2011 21:47:45 »
Zontik Сработало!

Оффлайн Chuzhoi

  • Призрак
  • Сообщений: 10546
Анимация в Thief
« Ответ #35 : 01 Июня 2011 09:08:40 »
Обнаружил один баг.

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

Поэтому для полноценной анимации нужно создавать движения с уже существующими именами (причем любыми, что за движение и от какого существа - не имеет значения). Я думаю, движения буррика вполне подойдут - ведь в Thief 2 нет бурриков, не так ли?
« Последнее редактирование: 01 Июня 2011 09:18:10 от Chuzhoi »

Оффлайн Zontik

  • Фантом
  • Сообщений: 17087
    • Тёмное место
Анимация в Thief
« Ответ #36 : 01 Июня 2011 10:15:05 »
Что-то ты делаешь не так.
Я создавал для "Истории короля" движения с новыми именами, головы двигались нормально.
У меня, впрочем, есть одно предположение. Ты вносил новые "концепции" движений в дополнительный файл? В базе данных движений есть три файла с отличающимися расширениями, вот в них и нужно вписывать новые имена в дополнение к тому, что ты вписываешь их "куда надо". Кажется, в этих файлах описываются торсы, причем еще задаются какие-то параметры (я так и не понял - какие, делал по аналогии) - возможно, именно с этим и связан твой шейный паралич.
Я бы посоветовал открыть папку MSCHEMAS из "Истории короля" и посмотреть, что я там менял и как. В архиве - только измененные файлы; все добавленные строки я, насколько помню, старался комментировать. Так что разберешься.
Что касается использования "готовых" имен - это плохая практика, что для текстур/звуков, что для движений, и рано или поздно каждый автор приходит к тому, что так делать все-таки не надо. Да и буррики в T2 есть, не в ОМ, так в куче FM.
Да, кстати: я полагаю, ты компилировал базу движений заново? Надеюсь, что да. Это нужно делать после каждого изменения в схемах (но, к счастью, не нужно после изменения самих движений).
И последнее. Насчет ai_aware_of_player я, не подумав, написал глупость. Оно, конечно, работает, но каждый раз при запуске вводить эту команду... Ты же делаешь демку для отладки движений, так? Тогда лучше самого AI сделать невосприимчивым и не париться каждый раз с вводом команд. Еще раз: задай своему AI свойство AI > Core > Team > Neutral, для твоих целей этого будет достаточно.
« Последнее редактирование: 01 Июня 2011 10:19:07 от Zontik »
Дайте глазам отдохнуть! Тёмное место

Оффлайн Chuzhoi

  • Призрак
  • Сообщений: 10546
Анимация в Thief
« Ответ #37 : 01 Июня 2011 14:22:45 »
Я вроде бы все делал как ты описываешь: и moc-файлы (которых три) редактировал, и базу каждый раз перекомпилирую. Единственное отличие: папка MSCHEMAS лежит у меня не в Thief2, а отдельно. При компиляции в Thief2 сбрасывается лишь motiondb.bin - мне казалось, что этого достаточно. Может быть, в этом причина?

Оффлайн Zontik

  • Фантом
  • Сообщений: 17087
    • Тёмное место
Анимация в Thief
« Ответ #38 : 01 Июня 2011 14:34:28 »
Нет, не в этом. Папка MSCHEMAS для игры вообще не нужна, это же скомпилированные в motiondb.bin исходники. Остальное все правильно.
А что, собственно, подразумевается под головой? Шея? Поскольку никакой другой головы в скелете как бы и нет.
Мне трудно судить, не видя самого движения, но, может, это как раз глюк, связанный с неверным отображением в красном-синем-зеленом окошках? То есть ты задаешь координаты, ориентируясь на положение головы в этих окошках, а в реальности никакого движения и нет? И еще вариант - если кадров много, а движение быстрое, может, ты просто не успеваешь увидеть, как голова дергается?
Я бы попробовал сделать медленную анимацию с заведомо отличающимся положением головы - скажем, для простоты всего из двух кадров: смотрит вперед - смотрит назад (как сова). Потом уже можно будет делать какие-то выводы.
Дайте глазам отдохнуть! Тёмное место

Оффлайн Chuzhoi

  • Призрак
  • Сообщений: 10546
Анимация в Thief
« Ответ #39 : 01 Июня 2011 15:38:27 »
Под головой подразумевается именно шея и то, что на ней. В случае слизняка это его передняя часть, но пока я экспериментирую на временной модельке из параллелепипедов.

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

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

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

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

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


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

Оффлайн Zontik

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

Оффлайн Chuzhoi

  • Призрак
  • Сообщений: 10546
Анимация в Thief
« Ответ #41 : 02 Июня 2011 02:53:47 »
Все получилось! Подробности завтра.

Оффлайн Chuzhoi

  • Призрак
  • Сообщений: 10546
Анимация в Thief
« Ответ #42 : 02 Июня 2011 12:30:15 »
Значит, так.

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

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

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

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


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

Оффлайн Dront

  • Мастер Теней
  • Сообщений: 3710
Анимация в Thief
« Ответ #43 : 02 Июня 2011 12:46:48 »
Цитировать
Теперь вопрос. Как все-таки запускать диалоги (чтобы вызвать то или иное движение)?
Необходимо создать самого 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

  • Призрак
  • Сообщений: 10546
Анимация в Thief
« Ответ #44 : 03 Июня 2011 09:34:00 »
Маркер, да еще и обычный... Ладно, будем разбираться!