Тема: Сложные скриптовые сцены (choreographed scenes) в редакторе FacePoser Ключевые слова: создание сцены с несколькими NPC, создание продвинутой анимации См. также: logic_choreographed_scene, scripted_sequence
Замечание: Несмотря на обилие информации, освоить FacePoser очень легко,
т.к. большинство операций весьма наглядны. Содержание
Введение
Используя энтити scripted_sequence, можно задавать для NPC лишь отдельные заранее заданные анимации, которые к тому же будут смотреться несколько "кустарно" - в том плане, что каждый NPC действует обособленно. Безусловно, можно отчасти разнообразить подобные скриптовые сцены триггерами, но гораздо эффективнее будет создание комплексной интерактивной сцены в редакторе FacePoser. Впоследствии такую сцену можно добавить на карту с помощью энтити logic_choreographed_scene. FacePoser позволяет разнообразить сцену мимикой "актёров" (Actors), может заставить NPC смотреть друг на друга либо на игрока (с поворотом головы или взгляда), ускорять/замедлять анимацию, делает удобной синхронизацию движений и действий "актёров". Помимо этого, в Вашем распоряжении есть редактор фонем (входит в FacePoser) для добавления к звуковому файлу с речью специальных меток, управляющих синхронизацией губ любого NPC (человека), который будет произносить данную фразу. Примечание: добавленная редактором фонем информация не искажает звук, но при редактировании полученного файла в стороннем звуковом редакторе (например, Sound Forge) эта информация теряется. Следовательно, обработка в редакторе фонем должна быть последней операцией над файлом с речью, который добавляется к игре. Некоторые термины и замечания: Хореография - последовательность команд (сохраненных в *.vcd-файле), задающих для подконтрольных NPC скриптовое (полускриптовое) поведение - анимации, мимику, речь, а также различные триггеры искусственного интеллекта - явно или подразумеваемые в дальнейшем на карте. Эти команды и формируют сложную скриптовую сцену (choreographed scene). Речь - не обязательно использовать logic_choreographed_scene, чтобы NPC просто произнес определенную фразу (для таких случаев хватит и ambient_generic). Но если фразу надо произнести в определенный момент, в сочетании с некоторой анимацией - в этом случае хореография существенно облегчает синхронизацию. Формат речевых файлов должен быть *.wav (несжатый) 44100 Гц либо Microsoft ADPCM 4-бит. Синхронизация губ - создается редактором фонем автоматически (начало и длительность каждой фонемы), тем не менее, наилучший результат дает ручная доводка полученной схемы (см. далее). Мимика - сделана в виде набора простейших движений лица (например, улыбка или открытие/закрытие глаз), регулируемых бегунками. Анимацию мимики можно хранить непосредственно в *.vcd-файле сцены, либо в отдельном *.txt-файле (т.н. многократно используемые выражения). Анимации тела - можно смешивать (сочетать) без пауз и резких переходов между ними, изменять интенсивность, и либо изменять скорость воспроизведения в любые моменты времени (Gestures), либо скорость выполнения анимации в целом (Sequences). Сопрягаемые анимации - не затрагивают все тело NPC и представляют собой отдельные элементы (жесты). Подразумевают использование только в сочетании с основными анимациями (тела), добавляя "актёрам" выразительность. На основные анимации влияния не оказывают (не нарушают их). Замечание: на данный момент лицевая мимика sneer_left, по-видимому, заменена на smile. Ограничения и требования Перед работой с редактором фонем крайне рекомендуется установить Microsoft Speech SDK (SAPI) версии 5.1, без которого автоматическое создание фонем будет невозможным, и Вам придется вручную расставлять команды синхронизации губ NPC для каждого нового речевого файла. Для готовых речевых файлов, созданных Valve для игр Half-Life 2 выполнять синхронизацию губ не требуется - она уже сделана. Важное замечание: на данный момент автоматическое построение фонем в Windows Vista невозможно и всегда приводит к ошибке Last Extraction Result: An Error occurred during extraction. Необходимо следить за соответствием анимаций NPC и интонацией произносимых ими фраз (например, радостные жесты сочетаются только с радостными фразами и возгласами). В противном случае сцена будет выглядеть рассогласованной, а действия NPC несуразными. Вы ограничены применением лишь тех анимаций, которые были созданы Valve в серии Half-Life 2. Используя только редактор FacePoser, создать свои собственные анимации невозможно. Вам придется подбирать удачные сочетания, либо создавать новые модели NPC с добавлением новых анимаций. Для комфортной работы с FacePoser необходимо разрешение экрана как минимум 1024х768, поскольку интерфейс редактора громоздкий (много окон). Важную роль играет размер окна для просмотра сцены - чем оно больше, тем удобнее работать. Замечание: в связи с особенностями адаптации движка к различным платформам (кроме PC), начиная с Half-Life 2: Episode 2 (Orange Box) в игре будут доступны только те сложные скриптовые сцены (choreographed scenes), которые определены в специальном файле scenes.image. В случае оригинальных игр Valve этот файл находится в соответствующем *.gcf-файле. Однако при создании модификаций файл scenes.image должен находиться в каталоге /scenes Вашего мода. Если были созданы новые сцены в редакторе FacePoser, при закрытии редактора задается вопрос Rebuild scenes.image? Необходимо ответить утвердительно - файл scenes.image обновляется с учетом всех сцен в каталоге /scripts. Если необходимо использовать в моде оригинальные сцены Valve, их можно достать из *.gcf-файлов программой GCFScape и скопировать в каталог /scripts Вашего мода (соответственно затем обновить файл scenes.image, выбрав пункт меню File -> Rebuild scenes.image… редактора FacePoser). Важное замечание: если Вы создаете мод Half-Life 2: Episode Two (т.е. на движке OrangeBox), NPC в игре перестанут разговаривать. Причина кроется в том, любое событие, в котором NPC произносит фразу (для npc_citizen: приветствовать игрока, передать патроны, предупредить группу о появлении врагов и пр., также для других говорящих NPC), проигрывается в виде сцены (*.vcd-файла). Естественно, при создании мода информация об этих сценах отсутствует, поэтому в игре NPC молчат. 1 решение: с помощью программы GCFScape достать файл scenes.image из файла episode two content.gcf и скопировать в каталог /scenes Вашего мода. Однако такой способ исключает добавление собственных сцен. 2 решение: с помощью той же программы достать все файлы сцен из соответствующих *.gcf-файлов, скопировать в тот же каталог. Затем выполнить Rebuild scenes.image…, после чего все оригинальные файлы сцен можно удалить, оставив лишь созданные Вами дополнительно. Например, в файле half-life 2 content.gcf в каталоге hl2/scenes/npc находятся сцены основных фраз npc_citizen. Там есть и другие сцены, которые не обязательно включать в scenes.image. Будет достаточно папок male01 и female01. Их необходимо скопировать в каталог /scenes Вашего мода в такой же иерархии (т.е. /scenes/npc/male01 и scenes/npc/female01). Затем выполнить команду Rebuild scenes.image… в редакторе FacePoser, а в окончательной версии мода их можно удалить - все равно движок будет брать их из файла half-life 2 content.gcf. Замечание: если планируется сделать мод независимым от наличия Half-Life 2 у игроков, в окончательной версии файлы оригинальных сцен нужно оставить. Подготовка речевых файлов для сцены Перед добавлением речевого файла в сцену убедитесь, что он отвечает указанным ниже требованиям:
Примерный образец Soundscript-файла: Имена звуковых файлов не должны содержать пробелов. <Имя сцены>.<Имя "актёра">_<имя звука> { channel CHAN_VOICE soundlevel SNDLVL_TALKING wave "<путь к звуковому файлу относительно каталога /sound>" }Необходимо также вставить в речевой файл информацию о фонемах, чтобы вызвать (и синхронизировать) движение губ NPC во время проигрывания этого файла. Поскольку редактор фонем запускается как часть FacePoser, работа с ним будет рассмотрена ниже. Начало работы над сложной сценой. Сохранение сцены Запустите Source SDK, выберите конфигурацию Вашего мода, затем запустите редактор (пункт Face Poser). Окно редактора FacePoser выглядит примерно так: Важное замечание: при первом запуске обратите внимание на правый нижний угол окна FacePoser - там будут находиться закладки с условными именами всех загруженных моделей "актёров". С помощью этих закладок можно добавлять и убирать 3D-модели "актёров". Внизу слева находятся закладки окон-редакторов, встроенных в FacePoser. Двойным щелчком л.к.м. можно выводить/скрывать соответствующие окна. Если закладки с "актёрами" отутствуют, выберите пункт меню File -> Load model…, чтобы загрузить модель "актёра" - это будет необходимо в дальнейшем для просмотра сцен. Появится диалоговое окно Open, в котором просто выберите картинку с подходящим NPC и нажмите кнопку Open. Модель загрузится в FacePoser, а в правом нижнем углу добавится закладка для нее. В дальнейшем, с помощью этих закладок можно выгружать лишние модели и управлять отображением в 3D-окне просмотра сцен. Для создания новой сцены выберите пункт меню Choreography -> New… Откроется окно Сохранить как - выберите местоположение будущего файла сцены (в каталоге /scenes Вашего мода) и задайте имя сцены. Нажмите кнопку Сохранить, при этом файл не создается сразу - необходимо также добавить хотя бы одного "актёра". Появится окошко Create Actor, в котором необходимо ввести условное имя первого (или единственного) "актёра" сцены и нажать OK (об именах актёров см. далее). После этого можно выполнять сохранение цены (Choreography -> Save) - сначала будет выдан вопрос о том, что файл сцены с атрибутом "только для чтения", просто ответьте утвердительно, чтобы разрешить его перезапись. Важное замечание: никогда не используйте символ " (двойная кавычка) в названиях "актёров", каналов и событий. В противном случае сцена вообще не откроется (определяется как поврежденная), и придется вручную исправлять неправильные участки (например, в программе Блокнот). Обратите внимание, что нижняя треть редактора FacePoser содержит временнóй график, на котором будут отображаться все события сцены. Здесь можно выполнять с ними основные манипуляции. Вверху временнóго графика находятся: полоса с бегунком (позволяет выбирать определенный момент сцены, а также запускать в прямом/обратном направлениях воспроизведение), кнопки Старт, Пауза и Остановка (управляют воспроизведением сцены), регулятор скорости воспроизведения (от 0.00 до двукратной скорости). Далее идет информация о масштабе временнóго графика (масштаб изменяется с помощью колесика мыши), количество действий (для отмены/возврата), линия с отметками времени (в секундах для нормальной скорости воспроизведения). Ниже начинается область "актёров", каналов и событий - основная рабочая область. Замечание: в редакторе не определено большинство т.н. "горячих клавиш", например, сохранение через Ctrl + S не работает. Добавление "актёров" и каналов - основных составляющих сцены Нажмите п.к.м. на временнóм графике и выберите пункт New -> Actor… из контекстного меню. Появится окошко Create Actor, в котором надо ввести условное имя "актёра" сцены и нажать OK. Важное замечание: если Вы хотите, чтобы в качестве "актёров" можно было указывать любых NPC (людей), имена "актёров" необходимо задавать как !targetN, где N - число от 1 до 8. Для энтити logic_choreographed_scene в этом случае определяются атрибуты Target 1…Target 8 (по числу "актёров"). В противном случае сцена будет выполняться только с теми NPC, чьи имена (атрибут Name) совпадают с соответствующими именами "актёров", и атрибуты Target 1…Target 8 энтити logic_choreographed_scene определять не нужно. Также имя "актёра" можно задать как !picker, в этом случае во время игры действия этого "актёра" будет выполнять тот NPC, на которого смотрит игрок. Но здесь уже необходимы триггеры. Теперь для созданного "актёра" нужно добавить канал. Именно внутри канала можно добавлять необходимые элементы сцены. Для создания канала нажмите правую кнопку мыши внутри прямоугольника, которым ограничена область созданного "актёра". Пример: для новой сцены и созданного единственного "актёра" с именем !target1 искомая область показана на рисунке (т.е. нажать п.к.м. внутри нее) В контекстном меню выберите пункт New -> Channel… - появится окно Create channel, в котором нужно задать имя канала (если "актёров" несколько, также можно выбрать из списка нужного "актёра"). Введите имя канала (например, Speech - если в этом канале будут речевые файлы). Подавляющее большинство элементов сцены добавляется только внутри каналов. Замечание: с помощью каналов удобно разбивать сцену на отдельные части, каждую из которых можно активировать/отключать, чтобы переключать их влияние на сцену. Если вы работали с редакторами изображений, которые используют слои (например, Adobe Photoshop или Paint Shop Pro), можете отождествлять каналы как раз с такими слоями. Двойной щелчок л.к.м. на имени "актёра" или канала переключает их состояние - активен/неактивен. Щелчок по кнопке-стрелке рядом с именем каждого актёра позволяет сворачивать/разворачивать его область (вместе с каналами). Обработка речевого файла (синхронизация движения губ NPC) Когда Вы добавляете в сцену новый речевой файл, не из числа готовых (серии Half-Life 2), при попытке назначить его какому-либо NPC (в FacePoser или на карте через ambient_generic) Вы увидите, что звучащий файл никак не влияет на NPC, который должен его "произносить" - губы NPC остаются неподвижными. Чтобы вызвать движение губ, необходимо добавить специальную информацию к речевому файлу - фонемы. Искомый файл должен находиться в каталоге /sound Вашего мода. Откройте окно Phoneme Editor, внизу окна должна быть активна закладка Phonemes. Основная область окна отведена для отображения звука и добавленных в него фонем (сейчас она пуста). Нажмите п.к.м. в основной области и выберите Load… в контекстном меню. Появится окно Открыть, в котором укажите речевой файл (в *.wav-формате) и нажмите кнопку Открыть. В основной области появится отображение звука (аналогично звуковому редактору), а также полоса с бегунком (для перехода в произвольную точку звука) и некоторая информация о загруженном звуке. Если теперь проиграть звук (кнопка Play (SpaceBar) либо Пробел), NPC еще не будет шевелить губами. Загруженный звук окружает прямоугольная рамка, поделенная на сегменты (временные интервалы по 0.5 сек). Нажмите п.к.м. внутри этой рамки и выберите Redo Extraction из контекстного меню. Появится небольшое окошко Word List, в единственном поле (Sentence) которого надо ввести английскими буквами транскрипцию речевого файла, т.е. его произношение на слух (например, для фразы "Так точно!" транскрипция будет "taktochna"; фраза из примера произносится быстро, поэтому пробел-пауза в транскрипции отсутствует). Нажмите кнопку OK или Enter. Будут сформированы фонемы, при этом сверху отображения звука появятся прямоугольники со словами транскрипции, а внизу - прямоугольники с фонемами. Об удачном завершении операции сигнализирует зеленая надпись прямо под областью звука: Last Extraction Result: successful. В противном случае будет сообщение об ошибке (красного цвета) или предупреждение (желтого цвета). Если фонемы были созданы хотя бы частично, нажмите п.к.м. внутри рамки, ограничивающей звук, и выберите Commit extraction из контекстного меню. После этого фонемы внедряются в речевой файл, и можно проверять синхронизацию губ NPC (проиграть звук). Если губы NPC движутся естественно в течение всей фразы - речевой файл готов к использованию и подходит для произношения его любым говорящим NPC. Еще раз нажмите п.к.м. внутри рамки, ограничивающей звук, и выберите Save из контекстного меню. Обработка речевого файла для синхронизации губ завершена. Замечание: на время работы с редактором фонем в каталоге с речевым файлом <имя файла>.wav создается также файл <имя файла>_work.wav, который содержит все изменения. Если Ваша работа прервалась до момента сохранения готового звука, в следующий раз просто откройте этот вспомогательный рабочий файл. Если автоматическое построение фонем оставляет желать лучшего (несоответствие фонем транскрипции, либо речь оказалась слишком неразборчивой), придется вручную корректировать результат. В случае слишком длинного речевого файла (фонемы вообще не созданы) надо разбить его на небольшие части (до 10 сек) и каждую обработать отдельно. Не забудьте, что длинные паузы также неудобны. Совет: если в речевом файле достаточно длинная пауза (около 1 сек и более), и автоматическое построение фонем привело к ошибке, попробуйте отменить последнее действие и снова сделать Redo Extraction, но на этот раз введите транскрипцию только для наиболее длинной непрерывной фразы. Скорее всего это даст положительный результат, а недостающие фонемы можно добавить вручную. Передвигайте бегунок в пределах каждой фонемы, чтобы выявить неправильные моменты синхронизации. При этом проигрывается соответствующая часть речевого файла. Фонемы выделяются л.к.м., снять выделение можно также л.к.м. на пустой области в пределах графика построенных фонем (см. ниже), либо нажать п.к.м. на выбранной фонеме и выбрать Deselect all из контекстного меню. Рисунок поясняет, где проходят условные границы области редактирования фонем: Исправление фонем состоит из следующих способов:
Замечание: далее по тексту выражение "добавить фонемы" не связано с редактором фонем, хотя означает, в конечном смысле, то же самое, но применительно к создаваемой сцене. События сцены Работая над сценой, Вы увидите, что NPC в каждый момент времени, когда для него не задано ни одного события, принимает неподвижное положение - стоя, с разведенными в стороны руками. В игре NPC будет вести себя нормальным образом, если, конечно, его не заставляют выполнить несуществующие анимации. Примечание: любое, однажды добавленное событие, можно отредактировать, нажав п.к.м. в пределах его области на временнóм графике и выбрав самый верхний пункт - Edit Event '<имя события>'… контекстного меню. Событие также можно перемещать по графику (изменяется время его начала) и менять его длину (т.е. его длительность по времени). Некоторые события (например, звуковое) допускают только перемещение по временнóму графику. Чтобы удалить событие, выберите его, затем нажмите клавишу Delete либо нажмите п.к.м. и в контекстном меню выберите пункт Delete event '<имя события>'. Примечание: условное имя (Name) события не обязательно вводить вручную. Если это поле осталось пустым, при создании события (по кнопке OK) имя генерируется автоматически. Добавление выражений (фонем) Выражения (фонемы) - не что иное, как движения лицевых мышц NPC, используемые для имитации разговора (совместно с проигрыванием речевого файла) и выражений лица. Несмотря на это, элементы-выражения не обязательно использовать для синхронизации губ, т.к. правильно обработанный (в редакторе фонем) речевой файл сам по себе вызывает движение губ "говорящего" NPC. Выражение удобнее всего использовать, если "актёр" должен просто "шевельнуть губами" или сохранять определенную мимику в течение всей сцены. В процессе работы над выражениями в каталоге мода создается папка expressions для каждой из загруженных моделей (NPC). В редакторе FacePoser окно Expressions позволяет просматривать существующие выражения и добавлять их в сцену перетаскиванием л.к.м. - при этом в сцену автоматически добавляется готовое выражение. Возможно также перетаскивание выражений на треки лицевой анимации (см. ниже Добавление события "лицевая анимация" (мимика)). Нажмите п.к.м. на временном графике, в пределах области канала, в том месте, с которого начнется движение губ "актёра". В контекстном меню выберите пункт Expression… - появится окно Create Event : Expression. Поле Name определяет условное имя выражения, его можно оставить пустым. В первом поле Expression из выпадающего списка выберите класс фонемы:
Во втором поле Expression (оно без заголовка, сразу под первым) из выпадающего списка выберите конкретную фонему по ее условному обозначению. Примечание: узнать, какой эффект дает та или иная фонема, можно открыв окно Expressions (см. закладку внизу FacePoser) двойным щелчком л.к.м. Нажмите OK (оставив все остальные настройки без изменений). На временном графике появится полоса, характёризующая созданное выражение. Ее можно передвигать и изменять длину, тем самым изменяя время начала и длительность этого выражения. Для изменения амплитуды (ослабления) выражения служит окно Ramp, в котором строится огибающая амплитуды. Щелчком л.к.м. при нажатой клавише Ctrl добавляются узловые точки огибающей (изначально окно Ramp выглядит пустым). В дальнейшем выбранные точки можно передвигать вверх/вниз л.к.м., влево/вправо п.к.м., а также удалять клавишей Delete. Окончание выражения показано вертикальной линией. Добавление звуковых событий Нажмите п.к.м. на временном графике, в пределах области канала, в том месте, начиная с которого будет проигрываться звук. В контекстном меню выберите пункт WAV File… - появится окно Create Event : Speak. Поле Name определяет условное имя звукового события, его можно оставить пустым. Далее возможны два варианта:
Нажмите OK (оставив без изменений остальные настройки). На временном графике появится полоса с выделенными границами звука, под ней написано имя звукового события, а также некоторая дополнительная информация. Она не представляет особого интереса, поэтому во избежание нагромождения рекомендуется скрыть ее, нажав маленький треугольник в начале временного графика канала. Примечание: в качестве звукового файла можно добавить любой звук (не обязательно речь), однако такое рекомендуется делать не для "актёра"-NPC, либо вообще добавить нужный звук уже на карте, а в сцене задать его воспроизведение через триггер (см. далее). Добавление анимаций Нажмите п.к.м. на временном графике, в пределах области канала, в том месте, с которого начнется анимация. В контекстном меню выберите пункт Sequence… - появится окно Create Event : Sequence. Поле Name определяет условное имя анимации, его можно оставить пустым. В поле Sequence выберите нужную анимацию. Нажмите OK (оставив без изменений остальные настройки). На временном графике появится полоса, под которой написано имя анимации. Можно передвигать полосу и изменять ее размер. Для изменения амплитуды (ослабления) анимации служит окно Ramp, в котором строится огибающая амплитуды. Щелчком л.к.м. при нажатой клавише Ctrl добавляются узловые точки огибающей (изначально окно Ramp выглядит пустым). В дальнейшем выбранные точки можно передвигать вверх/вниз л.к.м., влево/вправо п.к.м., а также удалять клавишей Delete. Окончание анимации показано вертикальной линией. Для более гибкой настройки анимации рекомендуется использовать расширенную анимацию (см. далее). Добавление расширенных анимаций Расширенная анимация позволяет редактирование в разумных пределах - скорости и амплитуды отдельных частей и моментов. Это своего рода полуфабрикат, из которого можно сделать очень выразительные анимации. Нажмите п.к.м. на временном графике, в пределах области канала, в том месте, с которого начнется расширенная анимация. В контекстном меню выберите пункт Gesture… - появится окно Create Event : Gesture. Поле Name определяет условное имя расширенной анимации, его можно оставить пустым. В поле Gesture выберите нужную анимацию. Флажок Sync Exit tag to next gestures Entry tag вынуждает синхронизировать окончание расширенной анимации с началом следующей расширенной анимации, но только если она находится в том же канале. Результат при установке флажка выглядит следующим образом:
Пример: сначала создана расширенная анимация holdhands с установленным флажком Sync Exit tag to next gestures Entry tag (верхний кадр), а затем добавлена еще одна расширенная анимация give с позиции времени 3.5 сек (нижний кадр) Обратите внимание, как растянулась первая анимация (окончание), чтобы синхронизироваться со второй. Если теперь изменять вторую анимацию, первая будет корректироваться; если изменять первую анимацию, то ее окончание (end) будет неподвижным. При удалении второй анимации первая восстанавливает гибкость настроек. Нажмите OK (оставив без изменений остальные настройки). На временном графике появится полоса, под которой написано имя расширенной анимации. Можно передвигать полосу и изменять ее размер. Также на полосе расположены четыре треугольника, означающие условные части анимации - специально выделенные временные теги (Timing Tags): apex ("гребень"), accent (акцент - наиболее выраженная точка), loop (цикл) и end (окончание). Как правило, в большинстве анимаций Valve использует следующие теги:
Для управления тегами служит окно Gesture. В нем отображается настройка тегов для выбранной расширенной анимации. На полосе Original Time показано оригинальное (по умолчанию) положение тегов во времени. На полосе Playback Time можно передвигать указатели тегов, изменяя таким образом их положение во время воспроизведения анимации. В результате можно изменять относительную длительность частей анимации. Для изменения амплитуды (ослабления) расширенной анимации служит окно Ramp, в котором строится огибающая амплитуды. Щелчком л.к.м. при нажатой клавише Ctrl добавляются узловые точки огибающей (изначально окно Ramp выглядит пустым). В дальнейшем выбранные точки можно передвигать вверх/вниз л.к.м., влево/вправо п.к.м., а также удалять клавишей Delete. В этом окне также показаны теги анимации, но их нельзя передвигать. Окончание расширенной анимации показано вертикальной линией. Добавление нулевой анимации Нулевая анимация оставлена для обратной совместимости. Раньше это событие предотвращало взаимное усреднение анимаций (если они накладывались во времени). В настоящее время усреднение по умолчанию отключено, но может быть добавлено при необходимости. Нажмите п.к.м. на временном графике, в пределах области канала, в том месте, с которого начнется нулевая анимация. В контекстном меню выберите пункт NULL Gesture… - появится окно Create <NULL> Gesture : Gesture. Нажмите OK (оставив без изменений остальные настройки). На временном графике появится темная полоса с именем NULL. Можно передвигать полосу и изменять ее размер. Добавление события "посмотреть на актёра" Нажмите п.к.м. на временном графике, в пределах области канала, в том месте, с которого начнется событие. В контекстном меню выберите пункт Look at actor… - появится окно Create Event : LookAt. Поле Name определяет условное имя события, его можно оставить пустым. В поле Look At Actor выберите "актёра" или цель, на которую посмотрит текущий "актёр". Возможные значения:
Флажок Use Pitch/Yaw позволяет корректировать поворот головы. При этом бегунок Pitch сдвигает голову вверх/вниз (100…-100), а бегунок Yaw сдвигает голову влево/вправо (100…-100). Замечание: если цель взгляда - игрок (!player), корректировка поворота головы не работает. Нажмите OK (оставив без изменений остальные настройки). На временном графике появится полоса, под которой написано имя события. Можно передвигать полосу и изменять ее размер. Допустимо изменение амплитуды события (окно Ramp). Чем больше амплитуда, тем выразительнее поворот головы "актёра". На движение глаз амплитуда не влияет. Обратите внимание, что взгляд подконтрольного "актёра" всегда максимально возможно поворачивается к цели. Если "актёр" расположен под большим углом к цели (от 90° и выше), эффект может быть неестественным. Рекомендуется предварительно повернуть туловище (или всего) "актёра" с помощью события "повернуться к актёру" (Face Actor). Альтернативный вариант - настроить атрибуты Pitch и Yaw для данного события, либо скорректировать огибающую амплитуды (Ramp), смягчив эффект. Замечание: в качестве цели взгляда можно указать произвольное имя энтити. Для этого необходимо также откомпилировать карту (полная компиляция), на которой находится данная энтити. В принципе, необязательно (не играет роли), можно ассоциировать сцену в FacePoser c откомпилированной в *.bsp картой (команда Associate .bsp () контекстного меню временного графика). Таким образом движок "узнает", где искать энтити с указанным именем. Если в дальнейшем понадобится отключить привязку сцены к карте, необходимо открыть файл сцены (при закрытом FacePoser) в текстовом редакторе (например, Блокнот) и убрать строку mapname "<путь к карте>" целиком. Эта строка находится почти в самом конце сцены, перед секцией scalesettings. Добавление события "переместиться к актёру" Нажмите п.к.м. на временном графике, в пределах области канала, в том месте, с которого начнется событие. В контекстном меню выберите пункт Move to actor… - появится окно Create Event : MoveTo. Поле Name определяет условное имя события, его можно оставить пустым. В поле Move At Actor выберите "актёра"-цель, к которому будет перемещаться текущий "актёр". Возможные значения:
В следующем поле выберите тип перемещения. Возможные значения:
Полоса с бегунком Stop Distance определяет, на каком расстоянии от цели (в юнитах) "актёр" остановится. Дистанция, на которой "актёр" должен остановиться, должна быть не менее 33 для NPC-людей (human_hull). Флаг Force Short Movements заставляет "актёра" уменьшать ширину шага, когда он приблизится к цели, что иногда выглядит более естественным. Нажмите OK (оставив без изменений остальные настройки). На временном графике появится полоса, под которой написано имя события. Можно передвигать полосу и изменять ее размер. Замечание: если цель перемещения "актёра", в свою очередь, двигается сама, то "актёр" будет следовать за целью, пока позволяет длительность события (при отсутствии прерываний движения). Желательно, чтобы длительность события совпадала с ожидаемым временем перемещения "актёра" в игре. Ввиду того, что актёры перемещаются, используя собственную систему ИИ, рекомендуется выставлять флажок Event must be complete for paused scene to resume (событие должно быть закончено в паузе сцены для продолжения) совместно с использованием команды Section Pause (см. далее). Это необходимо постольку, поскольку заранее неизвестно, какое время понадобится "актёру", чтобы дойти до цели в игре. Таким образом, происходит синхронизация с остальными действиями, чтобы сцена не "разрушилась". Замечание: в качестве цели перемещения можно указать произвольное имя энтити. Для этого необходимо также откомпилировать карту (полная компиляция), на которой находится данная энтити. В принципе, необязательно (не играет роли), можно ассоциировать сцену в FacePoser c откомпилированной в *.bsp картой (команда Associate .bsp () контекстного меню временного графика). Таким образом движок "узнает", где искать энтити с указанным именем. Если в дальнейшем понадобится отключить привязку сцены к карте, необходимо открыть файл сцены (при закрытом FacePoser) в текстовом редакторе (например, Блокнот) и убрать строку mapname "<путь к карте>" целиком. Эта строка находится почти в самом конце сцены, перед секцией scalesettings. Добавление события "повернуться к актёру" Нажмите п.к.м. на временном графике, в пределах области канала, в том месте, с которого начнется событие. В контекстном меню выберите пункт Face actor… - появится окно Create Event : Face. Поле Name определяет условное имя события, его можно оставить пустым. В поле Face Actor выберите "актёра"-цель, к которому повернется текущий "актёр". Возможные значения:
При снятом флажке Lock facing (twist but don't turn) "актёр" поворачивается всем телом и остается в таком положении. При включенном - только верхней половиной туловища, а по окончании события возвращается в прежнее положение. Нажмите OK (оставив без изменений остальные настройки). На временном графике появится полоса, под которой написано имя события. Можно передвигать полосу и изменять ее размер. Замечание: если цель поворота "актёра", в свою очередь, двигается сама, то "актёр" будет поворачиваться вслед за ней, пока позволяет длительность события (при отсутствии прерываний движения). Добавление события "срабатывание триггера" Это событие позволяет добавлять определенные скриптовые действия при воспроизведении сцены в игре, аналогично энтити trigger_*, только безусловные. Суть события в том, что оно заметно расширяет возможности по созданию сцен - в точно заданное время сцены на карте будут происходить действия, которые невозможно сделать в редакторе Face Poser, но которые легко реализуемы в редакторе Hammer. В самой сцене происходит лишь срабатывание одного из 16 триггеров, а реакция на него задается в энтити logic_choreographed_scene с помощью событий OnTrigger1…OnTrigger16. Пример: в определенный момент сцены необходимо включить монитор, висящий на стене, чтобы NPC, находящийся рядом с игроком, мог переговариваться с NPC на мониторе. Без использования события срабатывание триггера результата можно достигнуть такими способами как:
В результате не нужно ни измерять время, ни делить сцену. Нажмите п.к.м. на временном графике, в пределах области канала, в том месте, с которого начнется событие. В контекстном меню выберите пункт Fire Trigger… - появится окно Create Event : FireTrigger. Поле Name определяет условное имя события, его можно оставить пустым. В поле Scene Trigger выберите номер триггера от 1 до 16. Нажмите OK (оставив без изменений остальные настройки). На временном графике появится небольшая вертикальная черточка, под которой написано имя события. Черточку можно передвигать. --- Создание статической мимики лица (независимо от сцены) --- В основном, используется для экспериментов с выражениями лица "актёра". Статическая мимика не меняется во времени, не зависит от сцены и не сохраняется вместе с ней. Это всего лишь удобное средство для подбора выражения лица. Однако можно сохранить мимику для последующего использования (пункт меню Expression -> Save). Предварительно задать имя файла можно при создании нового выражения - командой меню Expression -> New… (в диалоговом окне Сохранить как ввести имя файла). Чтобы использовать полученные выражения в игре, надо также выполнить команду Expression -> Export to VFE для каждого из них. В дальнейшем сохраненные выражения появляются в списках в окне Expressions, а также в списках в окне Create Event : Expression (см. выше Добавление выражений (фонем)). Для работы со статической мимикой используйте окно Flex Sliders, предварительно расположив камеру в окне 3D-вида (3D View) напротив лица "актёра" (пункт меню Options -> Center on Face). За имитацию отдельных мышц лица отвечает каждая из групп "флажок - полоса с одним/двумя бегунками". Флажок отвечает за включение/выключение "мышц" лица - аналогично каналам (или слоям). Бегунок сверху полосы () регулирует степень эффекта. Передвигается л.к.м и принимает оттенок синего цвета, в зависимости от величины эффекта. Присутствует на полосе всегда. Бегунок снизу полосы () регулирует баланс эффекта (смещение влево/вправо). Передвигается п.к.м. и принимает оттенок красного цвета, в зависимости от смещения баланса в ту или иную сторону от центра. Присутствует на полосе только для тех эффектов, которые изначально отражаются на обе половины лица, но допускают несимметричную мимику (например, эффект "закрыть глаза" можно видоизменить на "подмигивание"). Пример: группа corner_puller ("улыбка, не разжимая губ") Кнопка Zero Sliders сбрасывает все настройки в начальное положение. Кнопка Get Tracks устанавливает все бегунки так, чтобы их положение совпало с уровнями соответствующих огибающих для выбранной лицевой анимации (см. далее). То есть в окно Flex Sliders копируются значения огибающих окна Flex Animation в точке, где расположен бегунок на временном графике - копирование происходит с заменой текущих значений. Кнопка Make Keyframe производит противоположное действие - уровни всех огибающих в точке бегунка на временном графике становятся равными соответствующим значениям бегунков окна Flex Sliders. То есть в окно Flex Animation добавляются уровни огибающих в текущей точке времени (с заменой старых значений) - своего рода ключевой кадр лицевой анимации. Другими словами, эти две кнопки выполняют синхронизацию с преимуществом лицевой анимации или статической мимики, соответственно. Замечание: синхронизацию рекомендуется делать как можно реже и как можно аккуратнее, особенно Make Keyframe, поскольку можно легко испортить результат. Кнопка Menu вызывает небольшое меню - Check All (включить все группы), Uncheck All (выключить все группы) и Invert Selection (выключить включенные и включить выключенные группы). Замечание: "мышцы" лица двигаются независимо друг от друга, кроме отдельных сочетаний, так что в принципе возможно создание неестественных выражений лица. Смешивание нескольких эффектов может дать совершенно новое выражение лица, т.е. "целое не всегда равно просто сумме частей". Доступные виды мимики (по анализу лица Барни Калхуна) см. в следующем разделе. Добавление события "лицевая анимация" (мимика) Это событие реализует динамичное изменение выражения лица "актёра" - допустимы любые сочетания возможных эффектов с огибающими степени выраженности и баланса. Нажмите п.к.м. на временном графике, в пределах области канала, в том месте, с которого начнется событие. В контекстном меню выберите пункт Flex animation… - появится окно Create Event : FlexAnimation. Поле Name определяет условное имя события, его можно оставить пустым. Нажмите OK (оставив без изменений остальные настройки). На временном графике появится полоса, под которой написано имя события. Можно передвигать полосу и изменять ее размер. Допустимо также изменение общей амплитуды события (окно Ramp). Редактирование эффектов движения мышц лица выполняется в окне FlexAnimation (предварительно выберите событие л.к.м.). Это окно должно выглядеть примерно следующим образом: Если окно пустое, отмените выбор события (клавиша Esc либо л.к.м. в пустой области временного графика), установите бегунок перед началом события, затем выполните сброс настроек в окне Flex Sliders (кнопка Zero Sliders). Снова выберите событие лицевой анимации и перейдите в окно Flex Animation. Сверху вниз расположены: полоса с бегунком (выбор момента анимации, а также проигрывание вперед/назад), информация о количестве действий (для отмены/повтора), название события, время начала анимации в сцене, полоса массового выделения (для выделения контрольных точек сразу всех активных эффектов на заданном отрезке времени). Далее идет список треков эффектов. Синяя вертикальная полоса означает окончание анимации. По умолчанию все эффекты отключены (напротив названия эффекта отображается слово disabled). Чтобы раскрыть/свернуть трек эффекта нажмите п.к.м. на названии и выберите подменю Expand/Collapse (соответственно) в контекстном меню. Раскрыть трек можно и двойным щелчком л.к.м. на его названии. Для подменю Expand (развернуть) возможны пункты: Track '<название эффекта>' - раскрыть текущий свернутый трек; All tracks - раскрыть все треки; Used tracks - раскрыть рабочие треки (в которых были изменения). Для подменю Collapse (свернуть) возможны пункты: Track '<название эффекта>' - свернуть текущий раскрытый трек; All tracks - свернуть все треки; All tracks except '<название эффекта>' - свернуть все треки, кроме текущего. Трек эффекта становится активным (enabled), если начать его редактирование. Изменять можно степень эффекта и его баланс; для этого служат два режима трека - editmode: <amount> (степень эффекта) и edimode: <left/right> (баланс эффекта). Переключение выполняется нажатием п.к.м. в окне трека и выбором пункта Edit <amount>/Edit <left/right> контекстного меню, соответственно (либо клавишей Пробел). В одно и то же время доступен только один из режимов трека.
Можно выделять рамкой несколько контрольных точек активного трека, двигая мышь при нажатой л.к.м. Выделенную группу точек можно передвигать влево/вправо п.к.м., масштабировать (вверх/вниз) л.к.м. При масштабировании точки, достигшие границ трека, "упираются" в них, таким образом соотношение точек по вертикали нарушается. Можно также копировать содержимое трека целиком (Ctrl + C или Copy в контекстном меню) и вставлять с заменой старых значений (Ctrl + V или Paste в контекстном меню) в другие треки. Примечание: учтите, что именно при задании степени эффекта (<amount>) он будет виден на лице "актёра". Изменение баланса эффекта видно только в том случае, если задана огибающая степени эффекта. Чтобы запретить отображение эффекта, нажмите п.к.м. в свободной области соответствующего трека и выберите пункт Disable '<название эффекта>' в контекстном меню. Если эффект уже запрещен, в контекстном меню отображается пункт Enable '<название эффекта>' - разрешить отображение эффекта. Таким образом, треки схожи с каналами (или слоями) и определяют, какие эффекты движения мышц лица будут использоваться на лице "актёра". Выделение временного отрезка для всех треков одновременно выполняется л.к.м. на полосе массового выделения. Снять выделение можно щелчком л.к.м. на свободном участке полосы. Пример: вид окна Flex Animation при редактировании треков эффектов Обратите внимание, что контрольные точки всех треков эффектов в пределах выделенного отрезка времени приняли красный цвет (цвет выделения). Замечание: "мышцы" лица двигаются независимо друг от друга, кроме отдельных сочетаний, так что в принципе возможно создание неестественных выражений лица. Смешивание нескольких эффектов может дать совершенно новое выражение лица, т.е. "целое не всегда равно просто сумме частей". Доступные виды мимики (по анализу лица Барни Калхуна):
Можно использовать готовые (оригинальные или созданные ранее) выражения, добавляя их в событие лицевой анимации перетаскиванием л.к.м. из окна Expressions. При этом в соответствующих треках эффектов, формирующих это выражение, появляются изменения. В дальнейшем добавленные выражения можно редактировать. Несколько полезных советов
Когда использование лицевой анимации неэффективно
Добавление команды для ИИ NPC В сцене можно управлять NPC не только прямым включением анимаций, но и косвенным - через подачу команд искусственному интеллекту. Правда, второй метод обладает существенным недостатком - NPC, в основном, не всегда реагируют на подобные команды. К сожалению, FacePoser предлагает (в выпадающем списке) все возможные варианты, и придется действовать методом проб и ошибок. В частности, большинство команд сделаны именно для управления Аликс Вэнс (npc_alyx). Замечание: в FacePoser реакции NPC на такое событие не наблюдается. Можно использовать эти команды для вывода отладочных сообщений в консоли (с помощью debugtext). Нажмите п.к.м. на временном графике, в пределах области канала, в том месте, с которого начнется событие. В контекстном меню выберите пункт Generic(AI)… - появится окно Create Event : Generic. Поле Name определяет условное имя события, его можно оставить пустым. Выпадающий список Generic AI Event содержит возможные варианты команд ИИ. Выберите один из вариантов:
В следующем списке выберите цель команды ИИ - всегда обязательно, даже если это сам "актёр". Возможные значения:
Нажмите OK (оставив без изменений остальные настройки). На временном графике появится полоса, под которой написано имя события. Можно передвигать полосу и изменять ее размер. Добавление события "разрешить случайное поведение" Замечание: по-видимому, не работает в Episode One и OrangeBox. Небольшая проверка не дала удовлетворительного результата. По-умолчанию, во время выполнения сцены подконтрольные "актёры" перестают использовать случайные движения и фразы (например, вне сцен npc_citizen часто произносят фразы типа "Давайте займемся делом", "Я уже ничего не чувствую" и т.д.). Однако бывают случаи, когда необходимо, чтобы второстепенные "актёры" (которые в данный момент не выполняют никаких действий, но участвуют в сцене) "не стояли столбом и вели себя естественно". Для этого и предназначено данное событие. Нажмите п.к.м. на временном графике, в пределах области канала, в том месте, с которого начнется событие. В контекстном меню выберите пункт Permit Responses… - появится окно Create Event : Permit Responses. Поле Name определяет условное имя события, его можно оставить пустым. В поле Permit можно вводить одно или несколько правил случайного поведения, разделяя их знаком ; (точка с запятой). Нажмите OK (оставив без изменений остальные настройки). На временном графике появится полоса, под которой написано имя события. Можно передвигать полосу и изменять ее длину. Добавление события "подсцена" (заранее созданной сцены) FacePoser позволяет создание сцены по принципу конструктора. Если часть рабочей сцены была создана ранее в виде отдельного файла (сцены), ее можно включить в текущую. Замечание: поддерживается включение сцен только с одним каналом. Нажмите п.к.м. на временном графике, в пределах области канала, в том месте, с которого начнется событие. В контекстном меню выберите пункт Sub-scene… - появится окно Create Event : SubScene. Поле Name определяет условное имя события, его можно оставить пустым. В поле Sub-scene введите имя сцены, либо нажмите кнопку Choose File…, чтобы выбрать файл сцены. Нажмите OK (оставив без изменений остальные настройки). На временном графике появится полоса, под которой написано имя сцены. Полосу можно передвигать. Команды, влияющие на сцену в целом Есть несколько обособленных "суперкоманд", которые влияют на сцену в целом. Они добавляются также через контекстное меню, но доступны при нажатии п.к.м. в любой точке временного графика. В контекстном меню выберите подменю New, а затем - конкретную команду. Секция паузы (с синхронизацией событий сцены) Эта команда является прекрасным способом синхронизации (или прогнозирующего поведения). Чаще всего используется в сочетании с событием "переместиться к актёру", поскольку в редакторе FacePoser невозможно заранее определить время, которое понадобится "актёру", чтобы дойти до цели. Конечно, можно использовать флажок события - Event must be complete, но бывает необходимо, чтобы следующее действие началось еще до окончания текущего. Например, если установить команду паузы за 2 секунды до окончания события "переместиться к актёру", то в игре пауза будет активирована в тот момент, когда "актёру" останется 2 секунды до указанной цели. Аналогичные действия возможны для любых событий. Поскольку пауза влияет на сцену целиком, она приостанавливает выполнение до тех пор, пока:
Нажмите п.к.м. на временном графике, в том месте, где будет команда. В контекстном меню выберите пункт New -> Section Pause… - появится окно Add Pause Point. В поле Name необходимо ввести имя команды. Если необходимо, чтобы сцена автоматически продолжилась или прервалась через определенное время (независимо от процесса синхронизации), включите флажок Automatically и выберите из списка Cancel (прервать) либо Resume (продолжить). В поле after … seconds введите нужное время (в секундах). Обратите внимание, что эта настройка не повлияет на уже выполняющиеся события. Нажмите OK (оставив без изменений остальные настройки). Сверху временного графика появится синий треугольник с идущей вниз от него пунктирной линией. Треугольник можно передвигать. Примечание: в редакторе FacePoser сцена доходит до секции паузы и останавливается. Повторное нажатие кнопки воспроизведения проигрывает сцену далее. В игре синхронизация выполняется правильно. Петля сцены (зацикливание) Команда позволяет повторить сцену с более ранней точки. Обратите внимание, что повтор сцены с середины события или цикл между концом события и началом аналогичного события приводят к нежелательным эффектам. Принцип установки петли - от текущей точки к более ранней. Нажмите п.к.м. на временном графике, в том месте, где будет правая граница петли. В контекстном меню выберите пункт New -> Loop… - появится окно Add Loop Point. В поле Name необходимо ввести имя команды. В поле Start Time указано время, соответствующе правой границе (можно изменить). В поле Loop to укажите время, соответствующее левой границе (по умолчанию это начало сцены). В поле Loop Count (-1 = forever) укажите количество повторов (при этом -1 означает бесконечный повтор, 0 означает ни разу - по умолчанию). Нажмите OK. Сверху временного графика появится розовый треугольник с идущей вниз от него пунктирной линией. Под треугольником расположены: знак (правая граница цикла) и имя команды. Треугольник можно передвигать. В точке левой границы петли расположена короткая розовая сплошная линия с именем команды и знаком (левая граница цикла). Линию передвигать нельзя (только задавать положение редактированием петли). Замечание: вложенные циклы срабатывают только при первом проходе, т.е. цикл внутри цикла корректно не работает. Псевдоокончание сцены Имитирует нормальное окончание сцены, вынуждая энтити logic_choreographed_scene реагировать на событие OnCompletion (если, конечно, такая реакция задана в редакторе Hammer). На саму сцену не оказывает никакого влияния. Допустима установка произвольного количества таких команд, но в игре срабатывает только первая, а потом возникает ошибка Scene '<имя сцены>' with X stop point events! Вместо X будет конкретное число псевдоокончаний сцены. Нажмите п.к.м. на временном графике, в том месте, где будет псевдоокончание. В контекстном меню выберите пункт New -> Fire Completion… - появится окно Add Fire Completion. В поле Name необходимо ввести имя команды. В поле Start Time указано время, соответствующе псевдоокончанию (можно изменить). Нажмите OK. Сверху временного графика появится красный треугольник с идущей вниз от него пунктирной линией. Треугольник можно передвигать. Статьи (рус): Подробный тутор по Face Poser'у, Звуковой кэш Статьи (eng): http://developer.valvesoftware.com/wiki/Faceposer
Номер статьи: 18
|