This is translation of Aligorith's [Animating in 2.5] Getting to grips with Keying Sets article
[Анимация в 2.5] Разбираемся с Keying Sets
Последние месяцы я наблюдаю путаницу с некоторыми аспектами системы анимации в 2.5, связанную с Кеинг Сетами (Keying Sets). Это новая, достаточно важная функция, нацеленная на улучшение работы с анимацией, но многие люди, кажется, не знают о ней. Так что, если вам интересно почему вы получаете "странное" сообщение об ошибке при попытке поставить ключ, или просто вам интересно узнать что-то новое и сделать процесс анимации проще - читайте дальше :)
Сначала немного истории... (времена 2.4x)
Многие могут быть не в курсе, что вы используете кеинг сеты дольше, чем думаете (подразумевается, что вы работали с версиями 2.4х).
![]() | |
| Меню вставки ключевого кадра в 2.48 (http://www.blender.org/development/release-logs/blender-248/animation-tools/) |
Еще в 2.48 я подчистил код системы анимации, и также код создания ключей (ключевых кадров). До этого, каждый пункт IKEY-меню (имеется ввиду меню, вызываемое клавишей "I" - прим. перев.) соответствовал одному из кучи if-условий в одном огромном куске кода, вызывавшие "insertkey()" для каждого канала анимации.
В процессе чистки 2.48 я переделал этот монолитный кусок в первую версию кеинг сетов - в примитивную, жестко прописанную систему, которая содержала небольшой (максимум 32 пункта) список adr-кодов (adrcodes), на которые ставились ключи.
"adrcodes" - это число, которое использует IPO-кривая для определения свойства (property), на которое она может влиять. Это ограниченное число было жестко прописано в Блендере, и добавление новых adr-кодов для "новых" свойств, или изменение существующих, было весьма болезненно, т.к. требовало дублирования определений и их настроек в 5-ти разных местах.
С новой системой я смог упростить и сделать более последовательным весь код для обработки IKEY-меню и расстановки ключей, который сегодня является базой для кода ключевых кадров в 2.5.
Поэтому каждый раз, когда вы ставили ключ в 2.48, на самом деле вы использовали кеинг сеты. IKEY-меню было просто списком всех сетов, доступных в данном контексте.
Анимато и Кеинг Сеты - Свежий старт
Как часть проекта 2.5 был создан новый "API данных" (позже известный как "RNA", в дополнение к нашему файл-формату "DNA"). Он действует как слой между данными (свойствами), хранящимися в DNA, и множеством различных мест, которые вы, как пользователь, используете для доступа/изменения этих свойств. Он предоставляет информацию о наименовании свойств, их диапазоне, типе, и различных проверочных штуках, чтобы вы всё не сломали. Этот слой используют: UI контролы/виджеты, Python API, система анимации. Анимато (система анимации) фактически использует RNA как ядро доступа к данным.
Самая важная особенность RNA здесь - это "путь данных" (data paths), т.е. цепочка идентификаторов, используемая для доступа к свойству, переданному начальным ID-блоком. Если вы работали с новым Python API в 2.5, вы уже знаете, что это выглядит как строка "bpy.data.objects["ObjectName"]." (последняя часть здесь может быть любым типом ID-блока, как например лампа, мир, кости и т.д., но здесь я использую объект, как наиболее часто используемый тип) или "bpy.context.active_object." в начале строк кода, которые вы использовали.
Еще одна важная вещь, о которой я должен упомянуть в связи с RNA, это различие между свойствами-массивами и стандартными свойствами. По сути, "массив" это свойство, которое хранит несколько значений, как суб-свойства. По другому, это можно представить себе как корыто с именем (идентификатор свойства), а внутри него есть несколько ковшей, в которых находятся цветы разного цвета. Вы обращаетесь в цветку говоря "Я хочу цветок во втором (например) ковше". Примером такого свойства-массива в Блендере являются все трансформы (положение, поворот, масштаб), и обратиться с положению объекта по оси Х можно как "location[0]", или "location[x]", или "location.x".
На самом базовом уровне, кеинг сеты являются эффективным способом задать набор подобных путей, вместе с ID-блоками (от которых они дожны быть отделены) и любыми другими опциями, которые должны быть приняты во внимание, когда создаются новые ключевые кадры.
Типы кеинг сетов
Существует два основных типа кеинг сетов - "Встроенные" (Builtin) и "Абсолютные" (Absolute).
Встроенные это те, которые всегда доступны (разрешены контекстом) в Блендере. Они (похожи на те, что) показываются в IKEY-меню по умолчанию - "Location", "Rotation", "Scaling" и их друзья. В общем-то всё, что нужно о них знать, это что они определены с помощью Питона и они могут проверять контекст, чтобы понять на какое свойство надо воздействовать. Это значит, что вы НЕ можете добавлять/удалять свойства из этих сетов, по крайней мере пока не отредактируете код на Питоне, определяющий что они используют. Если вы хотите добавить еще несколько "встроенных" сетов, то вы найдете их в папке scripts/keyingsets/ (в новых версиях в scripts/startup/keyingsets_builtins.py - прим. перев.). Учтите, что это может быть слегка запутанно для новичка в Питоне, хотя ничего сложного в этом нет. Оставим эту тему в качестве упражнения для читателя и/или будущих постов :)
Абсолютные должны быть вам более интересны, т.к. они определяются пользователем и хранятся в сцене. Вы можете немного улучшить ваш рабочий процесс настроив и используя их. Вы сможете ставить ключ на всю кучу нужных свойств одной кнопкой (или одним кликом, если хотите) и спасете себя от разочарования, забыв поставить где-то ключ. Этот способ имеет значительные преимущества, особенно для современных аниматоров, работающих методом pose-to-pose, когда в ключевых позах ключ ставится на все контрольки сразу.
Абсолютные должны быть вам более интересны, т.к. они определяются пользователем и хранятся в сцене. Вы можете немного улучшить ваш рабочий процесс настроив и используя их. Вы сможете ставить ключ на всю кучу нужных свойств одной кнопкой (или одним кликом, если хотите) и спасете себя от разочарования, забыв поставить где-то ключ. Этот способ имеет значительные преимущества, особенно для современных аниматоров, работающих методом pose-to-pose, когда в ключевых позах ключ ставится на все контрольки сразу.
Определение кеинг сетов
Способ 1: Контекстное меню ПКМ
В большинстве случаев, простейший способ добавить свойсво в кеинг сет - использовать контекстное меню ПКМ, с помощью которого вы ставите ключи и добавляете драйверы. Выберите "Add to Keying Set" (или, в случае свойства-массива, "Add All to Keying Set"). Это способ, который знают большинство людей.
Способ 2: Хоткеи
Также я должен упомянуть, что здесь также можно воспользоваться хоткеями.
1) Наведите курсор на свойство
2) Нажмите "K" для добавления свойства в кеинг сет, "Alt-K" для удаления.
Случайное нажатие этих клавиш (при этом, не зная о них) довольно частая причина случаев "не могу поставить ключи".
Аналогичным способом работают "I" и "Alt-I" для создания ключевых кадров, а "D" и "Alt-D" для драйверов. А также, знаете ли вы, что копирование/вставка значений не требует клика на свойстве, достаточно навести мышь. И последний маленький совет - клавиша "0" (ноль) сбрасывает в значение по умолчанию, хотя для большинства свойств значения по умолчанию пока не определены в RNA.
Способ 3: Просмотр дата-блоков
Хотя для большинства свойств предыдущий способ работает хорошо, иногда может случиться, что вы не сможете его использовать. В таких случаях вы можете попробовать воспользоваться просмотром дата-блоков в аутлайнере. Я уже упоминал этот способ в нескольких FAQ, но я также приведу его здесь для полноты.
1) Перейдите в Outliner (правое верхнее окно в дефолтной раскладке) и поменяйте режим на 'Datablocks'.
2) Найдите и раскройте список ID-блоков (например, Objects, Scenes, Worlds, Materials и т.д.), где находятся данные, которые вы хотите анимировать.
4) Раскрывайте его, нажимая на знак "+" пока не найдете нужное вам свойство.
5) Щелкните на пустом месте в той же строке, что и свойство. Строка подсветится светло-серо-голубым.
6) Как и раньше, нажмите "К", чтобы добавить свойство в активный кеинг сет, "Alt-K" для удаления. (На всякий случай, постарайтесь убрать курсор мыши с колонки со значениями, иначе вы можете добавить свойство и его путь).
Способ 4: Кнопки в сцене
Да, есть и четвертый(!) способ. С его помощью вы так же можете редактировать настройки (абсолютных) кеинг сетов, и управлять свойствами, которые в них входят. По сути, это практически тоже самое, что и предыдущий метод, где вы сами задаете путь. Единственное отличие в том, что здесь нет визуального представления путей, из которых вы можете выбирать.
Настройки кеинг сетов
В редакторе свойств (Properties Editor), во вкладке "Scene" вы найдете настройки для редактирования "абсолютных" кеинг сетов. См. скриншот:
Панель 1: "Keying Sets"
Эта панель показывает Абсолютные Кеинг Сеты, доступные в текущей Сцене. Используя кнопки "+/-" вы можете добавлять/удалять сеты.
Кнопки ниже списка управляют активным сетом (который обычно, но не всегда, выделен в списке. Подробности дальше). Короткое описание, что они делают:
- Name: задает имя кеинг сета
- Export to File: этот оператор создает Питон-скрипт с командами, который может воссоздать кеинг сет в другом файле. В частности это полезно для риггеров (или для аниматоров), которые создают сеты для рабочего персонажа, и могут импортировать их в другой шот (сцену), если необходимо. Так же, это хорошая демонстрация API кеинг сетов, если вам интересно, как они работают.
- Keyframing Settings: это переключатели, которые определяют как будут создаваться ключевые кадры для всех свойств в кеинг сете. Они не являются взаимоисключающими, можете выбрать любую комбинацию
- Insert Keyframes - Only Needed: эта опция будет стараться уменьшать количество дублирующих ключей при добавлении ключевых кадров, таким образом сохраняя анимационные кривые чистыми и понятными.
- Insert Keyframes - Visual: эта опция применяется только при создании ключей для трансформов. Вместо простого чтения значений локальных трансформов (т.е. заданных вами для объектов/костей), также учитывается влияние констреинтов.
- F-Curve Colors - XYZ to RGB: когда анимационные кривые (F-Curves) создаются кеинг сетом (ключевые кадры должны быть где-то, правильно?), они будут раскрашены так, чтобы оси XYZ соответствовали цветам RGB (Х = красный, и т.д.) вместо "радужных" цветов по дефолту. Учитывая, что кнопка по умолчанию нажата, эта опция не особо важна, хотя лично я предпочитаю разные цвета вместо RGB...
Панель 2: Active Keying Set
Эта панель позволяет редактировать набор свойств, которые входят в кеинг сет. Как и в панели выше, "+/-" добавляет/удаляет свойства в кеинг сет.
Давайте пройдемся по кнопкам под списком:
- ID-Block selector: помните, как я раньше говорил о ID-блоках и путях, связанных с ними? Вот, этот селектор позволяет выбрать ID-блок, который будет использоваться.
- Темный выпадающий список позволяет выбрать тип ID-блока (т.е. Object, Mesh, Lamp, Camera и т.д.)
- Поле рядом позволяет выбрать конкретный ID-блок выбранного типа
- Data Path: см. выше, чтобы вспомнить что это. Поле определяет путь к свойству ID-блока, выбранного выше.
- Array Target: см. выше, если забыли, что значит "массив". Настройки в этой группе определяют как "массив" должен быть обработан, если вы выбрали свойство-массив:
![]() |
| Entire Array On (Весь массив: Вкл.) |
![]() |
Entire Array Off (Весь массив: Выкл.)
|
- Entire Array: Если включено (по умолчанию) - на каждое значение в массиве будет ставится ключ. Это удобно при создании ключей для всех компонент некоторых трансформов (т.е., Location X+Y+Z) или Color (Diffuse R+G+B).
- RNA Array Index: Если опция Entire Array отключена, эта настройка становится видимой. Она дает вам возможность выбрать конкретную компоненту, что добавить её в сет. Например, я хочу добавить только положение по Y, то я поставлю значение 1 (ЗАМЕЧАНИЕ: массивы нумеруются с нуля, т.е. so X=0, Y=1, Z=2 или R=0, G=1, B=2, и т.д.)
- F-Curve Grouping: возможно, это очередной момент, который требует объяснения, поскольку сбивает людей с толку. См. ниже описание, т.к. я думаю, что тут всё не поместится :)
- Keyframing Settings: то же самое, что и в первой панели, за исключением того, что они применяются к конкретному свойству. Эти настройки добавляются к настройкам кеинг сета, например, если опция "Visual" у кеинг сета включена, то Visual здесь бесполезна, но если нет, то включение Visual здесь включит Visual Keying только для конкретного свойства.
Разбираемся с группированием кривых (F-Curve Grouping)
Как и с настройкой "F-Curve Colors", кривые (F-Curve) "группируются" только когда кривая должна быть создана, что бы поставить ключи (т.е. когда нужная кривая еще не существует).
Когда я говорю "группа", я подразумеваю те "зеленые" каналы в редакторах анимации. Эти "группы кривых" НЕ являются какими-то специальными "каналами костей" или "группами костей" (хотя и могу так использоваться). Например:
(группа выделена красной рамкой. Заметьте, имя группы контролируется кеинг сетом, и ничем другим. Так же, кроме начального создания групп и каналов, кеинг сеты НЕ ограничивают вас в редактировании их, как это делает Maya).
Итак, что за способы группировки предлагают Кеинг сеты?
- Keying Set Name: этот способ основной для только созданных целей свойств в Абсолютных Кеинг Сетах, т.к. надеюсь что ваши сеты уже имеют вменяемые имена, объясняющие почему на этих свойствах стоят ключи, так что группировка их вместе только улучшает результат.
- Named: этот способ позволяет вам задать любое имя. Наиболее подходит если у вас есть несколько костей в одном сете, но вы всё равно хотите, чтобы кривые были сгруппированы с небольших группах (т.е. по имени кости, по группе костей, и т.п.)
- None: возможно, что кривые у вас вообще не сгруппированы. Хотя это и не удобно, если у вас много каналов, но может быть вполне нормально если у вас их всего один или два и/или смешиваете кеинг сеты просто наводя мышь и ставя ключи.
Но самые проницательные могут заметить, что чего-то не хватает для полной истории. Я приведу здесь ответ на баг-репорт, который я недавно написал:
Расстановка ключей через операторы (т.е. IKEY меню в 3D-вьпорте, или заголовок таймлайна) использует Кеинг Сеты. [Имена по умолчанию применяются ТОЛЬКО для встроенных Кеинг Сетов, которые появляются в меню при запуске].
Вставка ключей с помощью кнопок (т.е. меню ПКМ или клавиша "I" над кнопкой) пропускает кеинг сеты, т.е. здесь всего одно свойство и понятно что делать. Однако, нет никакой другой информации, кроме того, что мы хотим поставить ключ.
Теперь, когда дефолтный способ группировки для [встроенных] кеинг сетов был выбран так, что если вы просто начнете анимировать, ваши кривые будут сгруппированы, вместо одного длинного списка:
- Каналы, не связанные с костями, по умолчанию получают имя Кеинг сета, так что если вы добавили несколько свойств в кеинг сет (например, цвет материала + масштаб объекта), вы легко их найдете в группе с соответствующим именем.
- Каналы костей по умолчанию группируются таким образом, чтобы вы могли найти все кривые, связанные с костью. Правда, это означает что по умолчанию мы теряем ассоциацию Группа Кости <-> Группа Экшена, но это предполагает, что вы скорее всего захотите точно отредактировать одну кость, а не группу костей.
Однако, как я уже говорил, если пропускаем Кеинг сет, то мы ничего не знаем о группах, так что они просто игнорируются.
Использование кеинг сетов
Теперь мы знаем как задать и редактировать кеинг сеты, но как с ними работать?
Если вы делаете простую анимацию, вы можете продолжать работать так же, как в 2.4х. Создать позу персонажа, выбрать нужные контрольки, нажать "I", чтобы вызвать меню со встроенными кеинг сетами, и выбрать нужный. Это работало раньше, работает сейчас, но это не самый эффективный способ.
Задаем активный кеинг сет
Задав "активный кеинг сет", многие действия по расстановке ключей становятся гораздо проще и надежней.
Простейший способ сделать это - использовать элементы управления в заголовке таймлайна, как на следующем скриншоте:
1) Щелкните на текстовом поле (рядом с иконкой ключа)
2) Откроется список с именами всех кеинг сетов, встроенных и созданных в сцене.
3) Можете начать набирать имя и нажать Enter, когда закончите (список отфильтруется по имени, которое вы набираете) или просто щелкните по нужному имени.
4) Скажем, в предыдущем шаге я щелкнул по 'LocRotScale'. Теперь LocRotScale является активным сетом, а таймлайн выглядит так:
Теперь я могу анимировать и, как обычно, нажимать клавишу "I", но меню не будет постоянно спрашивать, какой кеинг сет я хочу использовать, ведь я уже сказал это Блендеру.
Изменение активного кеинг сета
Скажем, теперь я хочу анимировать что-то еще, но ставить ключи только на Location.
Для начала проделаем этот долгий путь:
1) Снова щелкните на текстовом поле. В зависимости от способа, которым вы задали активный сет (набрали имя или щелкнули по списку), список может выглядеть так:
2) Не бойтесь! Нажмите клавишу Backspace и текст исчезнет
3) Теперь решающий шаг: нажмите Enter для очистки текстового поля. Если вы щелкните в любом месте, все изменения отменятся и появится старое значение.
(4) Теперь, если хотите, можете задать другой сет.
Вам не всегда нужно очищать старый кеинг сет, чтобы задать новый. После выполнения второго шага (нажать Backspace) вы можете сразу задать новый активный сет.
Другой способ задать активный кеинг сет
В 3D-вьюпорте также возможно задать активный сет с помощью хоткеев. Нажав Ctrl-Shift-Alt-I вы откроете меню, похожее на IKEY меню, но только меняющее активный сет.
Когда я добавил эту функцию, я думал, что это удобно. Подумав еще раз, я решил, что это слегка неявный/запутанный способ. Но по крайней мере сейчас, когда я задокументировал эту функцию, может быть люди решат, что она незаменима ;)
Другие клёвые штуки, которые вы можете делать с активным кеинг сетом
На скриншоте выше вы могли заметить две кнопки рядом с текстовым полем активного сета. Они предназначены для добавления или удаления ключевых кадров используя активный кеинг сет.
Авторасстановка ключей и Активный Кеинг Сет
С помощью небольшой настройки, вы можете сделать процесс анимации очень удобным, хотя возможно лишь некоторые предпочтут этот способ.
В любом случае, если вы пойдете в настройки User Preferences - Editing - Auto Keyframing, вы увидите опцию под названием "Only Insert for Keying Set" (см. скриншот):
Если вы включите её и выберите активный кеинг сет, все инструменты использующие Авторасстановку ключей (Auto Keyframing) ( такие как Transform tools, Clear Transforms, Paste Pose, и т.д.) будут запрашивать Активный Кеинг Сет, чтобы поставить ключ, вместо того, чтобы использовать их собственные кеинг сеты, как они считают необходимым. Основная выгода в том, что если вы хотите быть уверени, что каждый раз, когда вы ставите ключ, вы ставите ключи на всю позу сразу, это будет выполняться каждый раз автоматеически.
Решаем проблемы с кеинг сетами
Я думал просто упомянуть о некоторых ошибках, которые вы можете получить при работе с кеинг сетами или вообще ставя ключевые кадры.
No suitable context info for Keying Set
Эта ошибка возникает, когда:
- Кеинг сет требует, что бы был выбран особый тип данных (т.е. все встроенные кеинг сеты требуют, чтобы увас был выбран какой-то объект или кость)
- Используется встроенный сет "Available", и объект, на который вы пытаетесь поставить ключи, еще не имеет никаких ключей/анимационных кривых, так что некуда поставить ключи.
Keying Set failed to insert any keyframes
Эта ошибка происходит, когда:
- Путь данных (data-path) и/или элемент массива не могут быть разрешены корректно
- Это может быть из-за отсутствующего кода Блендере (в RNA, точнее) для определения пути, для получения данных свойства из ID-блока. Если найдете что-то подобное, пожалуйста, отправьте баг-репорт с темой "Missing RNA Path Defines for..."
- Вы сделали опечатку (если задавали путь вручную). Перепроверьте всё :)
- Анимационная кривая (или группа) заблокирована, из-за этого невозможно поставить ключ.














No comments:
Post a Comment