Построение скелета, распределение весов и снаряжение
Отрывок из книги
3D-моделирование и анимация лица: методики для профессионалов
Джейсон Осипа
Компьютерное издательство "Диалектика"
Глава 11
Построение скелета, распределение весов и снаряжение
Следует сразу признать, что в этой главе представлена всякая всячина, состоящая из разнообразных советов, методов, приемов и обходных путей, которые уместно привести именно здесь. Итак, добро пожаловать в мастерскую, где создается неотразимый вид анимационных персонажей.
Сначала мы займемся распределением весов в созданной ранее модели головы. За исключением шеи, головы и глаз, все остальное в этой модели приводится в действие посредством сочленений, а это не так уж и много. Затем вы ознакомитесь с тем, как пользоваться снаряжением по сценарию ss2_eyes, чтобы добиться полноценного функционирования глаз. И наконец, мы коснемся вопросов смыкания губ и более плотного, чем обычно, прилегания уголков рта.
В этой главе...
Распределение весов в модели головы
Снаряжение глаз и век по сценарию ss2_eyes
Распределение весов в модели головы
Распределение весов от головы до скелета персонажа составляет основу всего строения головы. Но прежде чем распределять веса любых точек по каким-либо сочленениям, необходимо иметь в своем распоряжении скелет.
Расположение сочленений
Итак, для распределения весов необходимо создать соответствующие сочленения. Для этого выберите команду Skeleton>Joint Tool (Скелет>Инструмент сочленений) из меню анимации в Maya. Как только инструмент Joint будет активизирован, щелкните один раз, чтобы создать сочленение, а затем еще раз, чтобы создать еще одно сочленение. Для того чтобы завершить создание сочленений, нажмите клавишу <Enter> или <Return>, и тогда инструмент Joint завершит данный процесс.
Расположение сочленений головы и шеи
На рис. 11.1 показано, где именно располагаются сочленения. Начинать следует с главного сочленения, которое станет родительским для всех остальных сочленений. А для создания сочленения шеи достаточно щелкнуть на том же самом месте. Далее следует щелкнуть на том месте, где должна поворачиваться голова. Эта точка находится приблизительно в углу челюсти, если смотреть сбоку. И в завершение остается добавить конечное сочленение головы. И хотя это необязательно делать по каким-либо формальным причинам, данная операция упрощает выделение сочленения головы, поскольку проводит соединительное звено между сочленением головы и конечным сочленением.
Рис. 11.1. Расположение сочленений головы и шеи
Расположение сочленений глаз
Сочленения глаз располагаются особенно тщательно. Ведь достаточно немного сместить их, и тогда веки и даже глаза будут совершать странные движения при вращении сочленений глаз: веки могут пересекаться, а глаза выпадать из орбит.
Сдублируйте конечное сочленение головы и переименуйте его копию в LEye_Joint (Сочленение левого глаза). Ограничьте расположение этого сочленения левым глазным яблоком, а затем удалите только что созданный узел ограничения в окне Hypergraph (Гиперграф), где он располагается непосредственно под сочленением LEye_Joint. Дважды сдублируйте это сочленение и переименуйте одну его копию в LUprLid_Joint (Сочленение левого верхнего века), а другую — в LLwrLid_Joint (Сочленение левого нижнего века). Расположение сочленения левого глаза приведено на рис. 11.2.
Рис. 11.2. Расположение сочленения левого глаза
Создание сочленений правого глаза
Для создания сочленений правого глаза можно, конечно, воспользоваться доступным в Maya инструментом Mirror Joint (Зеркальное отображение сочленения), но я не рекомендую этого делать, чтобы не усложнять связывание и функционирование снаряжения глаз, описываемое далее в этой главе. Вместо этого лучше создать такие сочленения вручную аналогично описанному выше. Для этого выделите все сочленения на левой стороне головы и сдублируйте их на правую сторону, расположив их соответственно в области правого глаза. Измените в их именах букву L на R в соответствии с правой стороной лица и избавьтесь от приставки 1, которая добавляется к их именам при дублировании. Вот, собственно, и все! На рис. 11.3 показаны все сочленения скелетной части головы, шеи и глаз на своих местах.
Рис. 11.3. Сочленения головы, шеи и глаз находятся на своих местах
Расположение челюсти
В этой книге речь идет о применении форм, а не сочленений для челюсти. Но иногда привязка к сочленению челюсти оказывается полезной в процессе ваяния форм лица. Расположение челюсти как сочленения не вызывает особых затруднений. Для достижения особого реализма (я пытался это сделать с переменным успехом) сочленение челюсти следует располагать в точке ее подвешивания, т.е. впереди ушей и приблизительно на той же высоте. Движение челюсти в этом случае будет фактически состоять из вращения и перемещения, но мы пойдем более простым и вполне допустимым путем, расположив сочленение челюсти в ее углу, как показано на рис. 11.4. При этом веса распределяются аналогично приведенному на рис. 11.5. Но если все это не делается ради ваяния форм, то вводить такое сочленение в скелет персонажа не следует.
Рис. 11.4. Место расположения сочленения челюсти, способствующего построению форм
Рис. 11.5. Область воздействия челюсти
Соединение геометрической формы глазного яблока со скелетом
Для достижения этой цели не существует лучших или худших путей, а имеются лишь разные возможности. В частности, глазные яблоки можно соединить родительской связью с сочленениями глаз или привязать их к скелету и распределить их веса только по сочленениям глаз аналогично остальной голове. А если преобразования геометрической формы глаз и их сочленений точно совпадают, то движения глаз могут быть даже ограничены их сочленениями. Следовательно, для достижения желаемого результата можно выбрать любой путь — лишь бы он оказался оправданным. Я лично предпочитаю соединять глазные яблоки родительской связью с сочленениями глаз, если не создаю снаряжение для сжатия и растягивания модели персонажа.
Привязка головы
Под привязкой в Maya подразумевается закрепление точек за соединениями. В других приложениях трехмерной анимации этот процесс может называться построением оболочки или распределением весов. В Maya данный процесс заключается в следующем: как только скелет будет построен, снаряжен и выбран, выделяются объекты, веса которых требуется распределить, а затем выбирается команда Skin>Bind Skin>Smooth Bind q (Оболочка>Привязать оболочку>Сгладить привязанное). Программа попытается автоматически определить те точки, которые должны двигаться вслед за сочленениями, но поскольку в скелете имеется целый ряд расположенных друг за другом сочленений, она обычно не в состоянии решить, что, например, делать с участком вокруг глаз.
Порядок распределения весов
Для коррекции весов оболочки выберите команду Skin>Edit Smooth Skin>Paint Skin Weights Tool q (Оболочка>Правка сглаженной оболочки>Инструмент раскрашивания весов оболочки). Установите значение 1 параметра Opacity (Непрозрачность) и выберите Replace (Замена) в качестве операции раскрашивания, а также значение 1 соответствующего параметра. При распределении весов следует прежде всего заменить любое или уже существующее распределение весов, заполнив (после активизации кнопки Flood) все вершины в модели головы вплоть до верхнего узла, который уместно назвать MasterSkel (Основной скелет). Благодаря этому все веса назначаются для данного сочленения, а распределение любых других весов отменяется. Дальнейшее распределение весов осуществляется вниз по иерархии, причем на каждой стадии выделяется область вершин и происходит их заполнение. Итак, следуя вниз по иерархии и имея широкие возможности для распределения весов, можно гарантировать, что ни одна точка не останется без внимания, а если таковая и останется, то она будет перемещаться относительно сочленения, расположенного выше нее по иерархии. Это означает, что ее перемещение окажется достаточно близким к правильному, а в результате передвижения персонажа по сцене в пространстве не будет оставаться зависших точек. После этого остается воспользоваться функцией сглаживания (Smooth), чтобы сделать переходы между отдельными участками модели менее резкими. На рис. 11.6 приведен пример распределения весов по сочленениям основного скелета, шеи и головы соответственно.
Рис. 11.6. Общие участки основного скелета, шеи и головы, которые требуют распределения весов
Проверка положений головы
Вместо того чтобы распределять веса в исходном положении модели головы вслепую, рекомендуется устанавливать голову в определенное положение и корректировать распределение весов. Это фактически дает возможность наблюдать за перемещением точек в разное положение выравнивания и делает процесс коррекции весов более наглядным. Так, самая лучшая проверка для головы и шеи состоит в том, чтобы повернуть голову. На рис. 11.7 приведено основное рабочее положение головы.
Рис. 11.7. Вид основного положения головы, используемого для распределения весов в области шеи
Распределение весов в области век
Рассматриваемому здесь снаряжению скелета присущ один существенный недостаток: сочленения век и глаз располагаются друг над другом, и поэтому зеркальное отображение их весов осуществимо с большим трудом. Даже если проявить чудеса находчивости, успех гарантируется лишь на 70%. Прежде чем приступать к массовому распределению весов в области век, выделите каждое из них и откройте редактор атрибутов (Attribute Editor). В целом ряде версий Maya имелся атрибут сочленения под названием joint labeling (присваивание меток сочленениям). Рассмотрение основного назначения этого атрибута выходит за рамки этой книги, но все же мы попробуем найти ему применение в контексте распределения весов. Присвойте с левой стороны головы метку сочленения Left and Root (Левая и корневая) глазу, метку Left and Hip (Левая и бедренная) верхнему веку и метку Left and Knee (Левая и коленная) нижнему веку, а с правой стороны лица — метку Right and Root глазу, метку Right and Hip верхнему веку и метку Right and Knee нижнему веку соответственно. На первый взгляд присваивание меток бедер и колен глазам и векам кажется несколько странным, но не спешите с выводами.
Самый лучший способ распределения весов в области век аналогичен рассмотренному выше и состоит в том, чтобы повернуть сочленение в определенное положение и начать корректировать значения в точках каркаса до тех пор, пока данное положение будет оставаться внешне правильным. Как правило, я начинаю с левого верхнего века, поворачивая его приблизительно на 30–40°. Затем я полностью распределяю веса всей передней кромки века по его сочленению века, заставляя тем самым двигаться веко.
Итак, откорректируйте вращение сочленения верхнего века так, чтобы оба века сходились вместе, если, конечно, в этом есть необходимость. Затем распределите веса в каждой области точек на верхнем веке таким образом, чтобы оно повторяло очертания нижнего века и оба века сходились правильно.
После коррекции весов передней кромки века (некоторые ее примеры приведены на рис. 11.8) продолжите работу, введя дополнительные ряды точек на веках и постепенно сужая их действие.
Рис. 11.8. Три стадии распределения весов в области век: первые ряды, их уточненная форма и остальная часть века
Распределение весов полезно распространить намного дальше от области вокруг глаз до век, но в очень малых количествах. Как правило, я распределяю веса даже выше бровей, но понемногу, чтобы вся охватываемая область смещалась плавно, когда глаза открываются и закрываются.
Покончив с верхними веками, сделайте то же самое с нижними веками. Веса в области нижних век распределяются легче, поскольку не нужно следить за тем, чтобы они не пересекали зрачок. Нужно лишь повернуть сочленения нижних век наполовину величины вращения верхних век, а в остальном данный процесс аналогичен описанному выше.
Зеркальное отображение весов
И в завершение вы можете, если требуется, зеркально отобразить веса слева направо, выбрав команду Skin>Edit Smooth Skin>Mirror Skin Weights q (Оболочка>Правка сглаженной оболочки>Зеркально отобразить веса оболочки). Установка конкретных параметров этой команды зависит от выбранной оси зеркального отображения. Так, если ось Y направлена вверх, а ось Z — вперед, то подойдут установки параметров, приведенные на рис. 11.9. Но самое главное — выбрать вариант Label (Метка) из обоих раскрывающихся списков Influence Association (Ассоциативная связь), чтобы извлечь пользу из присвоенных выше меток. Как правило, зеркальное отображение сочленений, расположенных в одном месте, выполняется в Maya не совсем верно, и поэтому нет никакой гарантии, что присвоение меток будет вообще использовано, тем не менее, оно повышает шансы на успех. Если такой способ сработает, значит, вам повезло, а если нет — повторите на правой стороне лица то, что было сделано на левой, уповая на то, что в следующий раз вам повезет больше. В конце концов, распределения весов с каждой стороны лица требуют лишь два сочленения.
Рис. 11.9. Параметры настройки инструмента Mirror Skin Weights
Ресницы
В этой книге не рассматриваются такие черты лица, как ресницы. Если вы собираетесь создать объекты ресниц, вам придется распределить их веса по сочленениям век и построить переходные формы для любых положений, в которых форма век изменяется посредством плавной модификации переходных форм на лице.
Снаряжение глаз и век по сценарию ss2_eyes
За исключением простого распределения весов, снаряжение глазных яблок и век может превратиться в весьма трудоемкую задачу. Только представьте, сколько всего нужно для воссоздания даже самых мелких фрагментов так называемого “естественного” поведения, рассмотренного в главах 2, 3, 7–9, где высота расположения верхнего века выполняет роль эмоционального признака, а следовательно, требует отслеживания относительно зрачка и радужной оболочки глаза. Не забудьте и о том, что нижнее веко на самом деле не двигается, кроме тех моментов, когда оно смещается вверх образующейся складкой или вниз роговицей. Добавьте к этому тот факт, что при отслеживании поперечного движения может возникнуть потребность придать всей области вокруг глаз вид, более похожий на плоть. Таким образом, не существует простых способов составления выражений или дерева узлов, которые позволили бы автоматически решить все подобные задачи, но имеется полуавтоматический способ, предполагающий ввод некоторой исходной информации.
Ведь заранее невозможно предсказать расположение осей X, Y и Z в сцене или особенности строения скелета персонажа, если это не сделано в строгом соответствии с подробными указаниями, например, теми, что приведены выше, и поэтому полуавтоматический вариант снаряжения не опирается на конкретные оси или пределы движения глаз и век, требуя более абстрактного подхода.
Для того чтобы понять, что имеется в виду под абстрактным подходом, откройте окно ss2_eyes, щелкнув на пиктограмме глаза, находящейся на полке SS2. (Подробные указания по установке полки SS2 со сценариями с прилагаемого к этой книге компакт-диска приведены во введении к книге.) Столь громоздкий интерфейс в этом окне способен привести в уныние кого угодно. Но не отчаивайтесь, ведь на самом деле он намного проще в обращении, чем по внешнему виду (если окно на экране вашего монитора не похоже на рис. 11.10, раскройте его).
Окно ss2_eyes можно открыть по-разному — все зависит от установленной на вашем компьютере версии Maya и операционной системы. Главное, чтобы вы могли видеть его содержимое полностью.
Как следует из рис. 11.10, окно ss2_eyes состоит из трех основных функциональных областей. Меню, находящиеся в верхней части этого окна, позволяют создавать новые сети узлов для глаз и управлять связями с главным узлом снаряжения глаза. Во второй основной области представлена информация о левом глазе и веке, а в третьей — информация о правом глазе и веке.
Рис. 11.10. В окне ss2_eyes имеется строка меню, все элементы интерфейса, необходимые для указания входящих и исходящих узлов правой и левой стороны лица, а также области переменных!
В левой и правой частях данного окна представлена аналогичная информация, только она относится к управлению левыми и правыми глазами и веками соответственно. Кроме того, в левой и правой частях окна имеются подобласти, в заголовках которых указаны следующие обозначения: inputs — входящие (рис. 11.11, а), outputs — исходящие (см. рис. 11.11, б) и variables — переменные (см. рис. 11.11, в).
Рис. 11.11. Три области элементов управления каждым глазом: входящих (а), исходящих (б) и переменных (в)
На первый взгляд такое количество элементов управления кажется чрезмерным, но если присмотреться повнимательнее к каждой области таких элементов, то можно заметить, что они повторяют одно и то же окно в миниатюре, поэтому на отдельных этапах работы со снаряжением ваше внимание будет сосредоточено главным образом на конкретной мелкой области, аналогичной той, что показана на рис. 11.12. В таком миниатюрном окне вы можете выбрать отдельный узел сети и соответствующие атрибуты для управления, что, согласитесь, не так уж и плохо.
Рис. 11.12. Такое миниатюрное окно служит для выбора объекта и атрибута в качестве управляемого входящего или исходящего узла
Итак, рассмотрев вкратце составные части данного интерфейса, перейдем к их применению в конкретном процессе снаряжения. Для этого загрузите сцену из файла \Chapter_Files\C11\tutorial_cartoonEyes_normal.ma на прилагаемом к данной книге компакт-диске. Если окно ss2_eyes еще не открыто, щелкните на пиктограмме глаза, находящейся на полке SS2. В верхней части открывшегося окна должно появиться сообщение No network loaded (Отсутствует загруженная сеть), и если щелкнуть на любой из кнопок или полей ввода, то они не будут функционировать, поскольку для нормальной работы данного инструмента на сцене должна присутствовать сеть узлов глаза. Для создания сетей в вашем распоряжении имеются три основных способа, причем все они доступны в виде команд меню Create в окне ss2_eyes. Первый способ, Generate Eye Network Only (Формировать только сеть узлов глаза), позволяет создать лишь основной вариант сети без пользовательского интерфейса. Этот способ больше подходит для пользователей с техническим уклоном, предпочитающих настройку данной системы на очень специфический лад. А для остальных вполне подойдут способы Generate Eye Network And Controls (Формировать сеть узлов и элементы управления для глаза) и Generate Eye Network And Controls (Diverge) (Формировать сеть узлов и элементы управления для глаза с расхождением). Первый из них, Generate Eye Network And Controls, позволяет создать снаряжение для независимого управления каждым глазом с помощью цели и реквизитов, или элементов управления, а второй, Generate Eye Network And Controls (Diverge), — создать единый, направленный элемент управления и цель, но при этом получить возможность для схождения и расхождения глаз (подробнее данный способ рассматривается в разделе “Снаряжение для смещения и расхождения” далее в этой главе). А до тех пор выберите команду Generate Eye Network And Controls. В итоге окно обновится, и в нем останется немного цвета, но появится множество заполненных полей и небольшая схема управления в сцене (рис. 11.13).
Рис. 11.13. Первое из двух автоматически формируемых снаряжений глаза
Ошибки формирования сети
Независимо от выбора команды из меню Create в системе возможны условия для появления ошибок. По этой причине в ней предусмотрено извещение о подобных ошибках. Все, что мешает созданию снаряжения и требует исправления, должно отображаться в обычном месте, где появляются сообщения об ошибках и предупреждения, т.е. в правом нижнем углу окна Maya.
Исправьте указанную ошибку и начните все сначала.
Кроме того, в данный инструмент встроена специальная защита от формирования в одной сцене нескольких сетей узлов глаз. Для снаряжения двух персонажей в одной сцене не существует особых ограничений, однако это существенно усложняет и загромождает сцену, поэтому в подобных случаях выводится окно, в котором вы должны подтвердить формирование еще одной сети, помимо уже имеющейся, что обычно не рекомендуется.
Исходящие узлы
А теперь перейдем непосредственно к снаряжению. Выделите на сцене левый глаз (этот загруженный объект называется leftEye) и щелкните на кнопке Select (Выделить) в миниатюрном окне L eye control up/down (Управление перемещением левого глаза вверх и вниз) из области Left Outputs (Исходящие узлы левой стороны лица). Объект leftEye появится в поле node слева от указанной выше кнопки. Далее щелкните на кнопке RX (Вращение вокруг оси X), расположенной ниже данного поля (рис. 11.14). Таким образом, левый глаз окажется связанным со своим снаряжением, которое им управляет! Для того чтобы убедиться в этом, переместите элемент управления lEye, показанный на рис. 11.15, обратив внимание на то, куда именно переместится глаз. Ниже области элементов управления перемещением левого глаза вверх и вниз находится область L eye control left/right (Управление перемещением левого глаза влево и вправо). Если левый глаз все еще выделен, щелкните в этой области сначала на кнопке Select, а затем на кнопке RY (Вращение вокруг оси Y). Попробуйте опять переместить элемент управления lEye, обратив внимание на то, что теперь управление движением глаза осуществляется по двум осям. Далее выделите левое верхнее веко (объект leftUpperLid), перейдите к расположенной справа области L upper lid up/down (Управление перемещением левого верхнего века вверх и вниз) и щелкните сначала на кнопке Select, а затем на кнопке RX. Повторите эту же процедуру в области L upper lid left/right (Управление перемещением левого века влево и вправо), выбрав на этот раз кнопку RY. Если теперь переместить элемент управления левым глазом (lEye) в сцене, то можно заметить, как веко отслеживает движение глаза. А для перемещения самого века вы можете воспользоваться элементом управления lupperlid, находящимся на сцене. Повторите эти же операции для правого глаза и век, элементы управления которыми находятся в правой части рассматриваемого здесь пользовательского интерфейса.
Рис. 11.14. Вид миниатюрного окна с присоединенным узлом и атрибутом
Рис. 11.15. Элемент управления левым глазом
По завершении этого процесса элементы управления исходящими узлами в пользовательском интерфейсе должны выглядеть так, как показано на рис. 11.16. Дважды щелкните на всех именах объектов, указанных в полях, чтобы получить возможность поэкспериментировать с элементами управления, наблюдая за перемещением глаз и век.
Рис. 11.16. Области исходящих узлов левой и правой стороны лица с присоединенным элементом управления lEye
Следует иметь в виду, что помимо связывания любого атрибута перемещения или вращения с таким поведением, как перемещение вверх и вниз или влево и вправо, вы должны также связать снаряжение произвольной ориентации с данной схемой управления. Как только снаряжение будет связано, может обнаружиться, что перемещению входящего узла вверх/вниз может соответствовать перемещение глаза вниз/вверх, а следовательно, если элемент управления перемещается вниз, глаз перемещается вверх, и наоборот. Для исправления такого поведения вам, скорее всего, придется настроить соответствующие множители и переменные.
Множители и переменные
А теперь, когда интерфейс связан с глазными яблоками и веками, находящимися на сцене, настало время воспользоваться множителями и переменными. Множители находятся там же, где и элементы управления входящими узлами, поскольку это наиболее подходящее для них место. Ведь множитель оказывает непосредственное воздействие на расположенный рядом входящий узел. А переменные оказывают более глобальное действие на общее поведение системы тем или иным образом. Проще говоря, одного перемещения вверх и вниз в заданных пределах для глаз недостаточно. Для того чтобы убедиться в этом, выберите все элементы управления глазами на сцене и перетащите их в самый верх, чтобы направить глаза и веки вверх. Затем перейдите в окно ss2_eyes и измените с -30 на -50 значение в поле multiplier (Множитель) из области L eye control up/down, как показано на рис. 11.17. В итоге левое глазное яблоко сместится вверх на 20 . Если теперь переместить элементы управления глазами вверх и вниз, то можно заметить, что левый глаз сместится больше, чем правый. Подобным образом можно очень просто видоизменить снаряжение конкретного персонажа! Как упоминалось выше, если глаза перемещаются не в том направлении, этот недостаток можно исправить с помощью множителей. Так, если значение -50 задает приемлемые пределы перемещения глаза в одну сторону, то для его перемещения в противоположную сторону в тех же пределах достаточно изменить это значение на 50.
Рис. 11.17. Изменение множителя для конкретного входящего узла
Множители имеются практически для всех входящих узлов. Поэкспериментируйте с ними, чтобы добиться нужных результатов для вашего персонажа. Ради экономии времени вы можете также выбрать соответствующие команды копирования из меню Utils (Утилиты) в окне ss2_eyes (рис. 11.18). Так, если значения множителей для правого глаза должны быть такими же, как и для левого глаза, их можно просто ввести в соответствующих полях правой части интерфейса, но, помимо этого, воспользоваться командой Copy Left Multipliers To Right (Копировать множители с левой стороны лица на правую). Остальные команды из меню Utils действуют аналогичным образом и не требуют особых пояснений. Следует, однако, избегать копирования входящих узлов, поскольку это будет означать, что управление левой и правой сторонами лица будет осуществляться совершенно одинаково. Так, если выполнить команду Copy Left Inputs To Right (Копировать входящие узлы с левой стороны лица на правую), элементы управления правой стороной лица вообще не будут оказывать никакого действия, а элементы управления левой стороной лица будут управлять обоими глазами и веками. Впрочем, это иногда бывает даже полезно, если для глаз требуется только один элемент управления. (Аналогичным образом действует способ снаряжения с расхождением, рассматриваемый далее в этой главе.)
Большинство множителей в рассматриваемом интерфейсе не требуют особых пояснений, поэтому перейдем к описанию назначения каждой из переменных.
Рис. 11.18. Команды меню Utils
Переменные Spread between lids
Эти переменные определяют степень разделения верхнего и нижнего век, т.е. насколько градусов нужно повернуть верхнее веко, чтобы оно достигло нижнего. Для того чтобы поупражняться в настройке этих переменных, загрузите сцену из файла \Chapter_Files\C11\tutorial_cartoonEyes_normal.ma на прилагаемом к этой книге компакт-диске, если она еще не загружена, и попробуйте установить значение 60 одной из переменных, чтобы закрыть веки полностью.
Переменные Cornea Push Radius
Эти переменные определяют “виртуальный” радиус смещения роговицы относительно нулевой точки глаза. Если глаз направлен вниз, то приходится смещать нижнее веко, чтобы оно не мешало ему смотреть. Настраивая эти переменные, можно определить оптимальную степень смещения роговицы.
Переменные Cornea Push Weight
Эти переменные выполняют функцию множителя по отношению к эффекту смещения роговицы. Они предназначены для тех видов снаряжения, на которые изменение радиуса смещения роговицы не действует. Для исключения данного эффекта достаточно установить нулевое значение этих переменных.
Переменные Upper Lid Limit
Эти переменные определяют пределы вращения верхних век. Такие пределы необходимо устанавливать для того, чтобы при поднятии или расширении глаза верхнее веко не вдавливалось в голову.
Переменные Lower Lid Limit
Аналогично упомянутым выше переменным, эти переменные определяют пределы вращения нижних век.
Переменные Upper Lid Up/Down % Follow
Как упоминалось в предыдущих главах, желательно, чтобы верхнее веко следовало за радужной оболочкой и зрачком глаза. Но если оно полностью повторяет движение глаза, то его движение может выглядеть механическим и не совсем верным. Эти переменные позволяют определить в процентах степень, до которой верхнее веко будет повторять движение глаза вверх и вниз. В тех случаях, когда глаза и веки имеют разную ориентацию, для такого или иного вида отслеживания движения глаз можно фактически задать отрицательное значение этих переменных.
Переменные Upper Lid Left/Right % Follow
Вместе с упомянутыми выше переменными эти переменные способствуют созданию “вязкого” окружения глаза и в действительности смягчают движение всей области глаза. Проще говоря, эти переменные позволяют определить в процентах степень, до которой верхнее веко будет повторять движение глаза влево и вправо.
Переменные Lower Lid Up/Down % Follow
Эти переменные определяют степень, до которой нижнее веко будет повторять движение глаза вверх и вниз.
Переменные Lower Lid Left/Right % Follow
Эти переменные также определяют степень, до которой нижнее веко будет повторять движение глаза, но на этот раз влево и вправо.
Переменные Blink Line
Мигание является неотъемлемой частью поведения век и обычно происходит по линии мигания или ниже нее. Линия мигания представляет собой часть общего разделения век, после которого верхнее веко пытается привязаться к нижнему веку и не отслеживать непосредственно движение радужной оболочки и зрачка глаза. Так, если разделение век составляет 60, а линия мигания — 40, то последние 20 градусов вращения рассматриваются как некая “доля закрывания” век, чтобы гарантировать закрытие век, когда они действительно закрываются.
Разделение век не должно совпадать с линией мигания
Если установить одно и то же значение в полях переменных разделения век и линии мигания, то снаряжение будет вести себя некорректно, а верхние веки начнут хлопать при малейшем изменении их входных атрибутов.
Снаряжение скелета
Ознакомившись с элементами рассматриваемого здесь интерфейса, вы можете приступать к снаряжению своей модели. К сожалению, а может быть, и к счастью, — в зависимости от того, как на это посмотреть, — мне нечего добавить к тому, что уже было сказано при рассмотрении примера снаряжения рисованных глаз. Вам остается лишь взять скелет своего персонажа и аналогичным образом привязать сочленения век к исходящим узлам век, а глаза — к исходящим узлам глаз, и все! Если же расположение осей окажется иным, у вас есть возможность повернуть глаза, определить их движение вверх/вниз и влево/вправо, привязать его к соответствующим осям, а затем настроить множители и переменные, чтобы добиться желаемого результата!
Применение снаряжения по сценарию ss2_eyes для технической постановки
Большая часть того, что делается в данном снаряжении, остается под спудом и незаметно для пользователя, поэтому в данном разделе даются некоторые пояснения того, что происходит на самом деле. Эти пояснения могут оказаться полезным для тех, кто занимается технической постановкой, т.е. созданием и подготовкой снаряжения персонажей для производства.
Входящие и исходящие узлы можно приводить в действие и использовать как угодно. Единственное отличие между ними состоит в том, что исходящие узлы могут воздействовать на несколько объектов, тогда как элементы ввода — на отдельные объекты. Именно поэтому кнопки Select All (Выделить все) и Break All (Разделить все) имеются только в областях интерфейса для входящих узлов. Они позволяют видеть и оказывать воздействие на все задействованные в снаряжении объекты, а не только на отдельно отображаемые объекты. Кроме того, для использования элементов управления входящими узлами tx, ty, tz, rx, ry или rz не существует каких-то установившихся правил. Они выбраны просто потому, что воплощают наиболее распространенные виды преобразования (перемещения и вращения по трем осям). Если один из этих шести элементов используется для управления объектом, то его кнопка становится красной и под ним появляется текстовая подсказка. Но если объект соединен для управления входящим узлом и появляется в поле узла, а соответствующие кнопки не подсвечены, то это визуальное отличие будет единственным для данного пользовательского интерфейса.
Для связывания специализированного снаряжения шести основных атрибутов объекта, возможно, окажется недостаточно, поэтому доступ к атрибутам для связывания может быть осуществлен следующим упрощенным способом. Если у вас имеется действующая сеть узлов глаза, то в конце строки меню должен появиться элемент Loaded (Загружено) с указанием имени сети на сцене. Так, если сеть называется EyeNetwork, то данный элемент меню будет обозначен как Loaded: EyeNetwork. Выберите из этого меню команду Open Connection Editor (Открыть редактор связей), чтобы открыть окно Connection Editor, по обе стороны которого отображается сеть узлов глаза. Выделите нужный вам объект и перезагрузите его с той стороны окна Connection Editor, где вам удобнее всего устанавливать непосредственную связь с данным объектом.
Но прежде чем устанавливать непосредственную связь, полезно выяснить, что, собственно, требуется найти среди атрибутов. Соответствующая информация об атрибутах представлена в окне ss2_eyes в упрощенном виде с помощью усовершенствованного присваивания меток. В следующем разделе поясняется, каким образом метки присваиваются отдельным атрибутам.
Присваивание меток атрибутам в узле сети
Всем атрибутам в узле сети глаза присвоены метки для удобства их распознавания. Основным идентификатором для атрибутов служит приставка In, Mult, Var, Int или Out. Так, атрибуты с приставкой In относятся к входящим узлам системы. Приставка Mult обозначает множитель входящего узла и служит основным средством различения элементов управления входящими и исходящими узлами. Что касается входящих узлов и множителей, то практически любой входящий узел может быть сделан действующим. Единственное правило состоит в том, что входящие и исходящие атрибуты по умолчанию принимают нулевое значение. Приставка Var в конце метки обозначает поведенческую переменную, к которой приходится обращаться лишь на начальной стадии снаряжения конкретного персонажа. Если персон