Книга: Написание скриптов для Blender 2.49

Группы вершин

Группы вершин

Группы Вершин  (Vertex groups) являются способом организации наборов вершин в пределах меша. Меш может иметь любое количество групп вершин, и любая вершина в пределах меша может быть членом более, чем одной группы вершин, или может не принадлежать никакой группе вершин совсем.  Вновь созданный Меш-объект не содержит никаких определённых групп вершин.

В их основной форме, группы вершин являются ценным средством в идентификации определённых частей сложного меша. Назначая вершины в вершинные группы, разработчик модели в конечном счете обеспечивает людей, например, риггеров или текстурщиков, средствами для легкой идентификации и выбора частей модели, с которой они хотят работать.

Все же использование групп вершин идет гораздо дальше простой идентификации. Множество модификаторов мешей ограничивают своё влияние до определенной группы вершин, а арматуру можно сконфигурировать так, чтобы при деформации меша влияние каждой кости было привязано к единственной группе вершин. Мы увидим примеры этого позже.

Группа вершин является не просто набором вершин. С каждой вершиной в вершинной группе можно связать вес (weight, от нуля до единицы), который используется множеством модификаторов для более точной настройки их влияния. Вершина может иметь различные,  связанные с ней, веса в каждой вершинной группе, которой принадлежит.

Жуки, которых мы создаем с помощью creepycrawlies.py - отличный пример довольно сложного меша со многими отчётливыми частями, для которых было бы очень полезно определить группы вершин. Не только для того, чтобы упростить выбор части по имени, например головы (head), но также, чтобы облегчить себе жизнь, если мы хотим оснастить (rig) модель. Наши основные инструменты в создании групп вершин - методы Меш-объектов, перечисленные в следующей таблице:

Метод:

addVertGroup(group)

Действие:

Добавляет новую пустую группу вершин.

Метод:

assignVertsToGroup(group, vertices,weight,mode)

Действие:

Добавляет список индексов вершин к существующей группе вершин с данным весом.

Замечание:

Mode (режим) определяет что делать, когда вершина уже является членом группы вершин. Смотри основной текст относительно деталей.

Метод:

getVertsFromGroup(group, weightsFlag=0,vertices)

Действие:

Возвращает список индексов вершин (по умолчанию) или список (индекс, вес) кортежей (если weightsFlag = 1).  Если список vertices определён, возвращаются только вершины, присутствующие в этом списке и в группе.

Метод:

removeVertsFromGroup(group, vertices)

Действие:

Удаляет список вершин  vertices из существующей группы вершины. Если список не определен, то удаляются все вершины.

Метод:

renameVertGroup(groupName, newName)

Действие:

Переименовывает группу вершин

Метод:

getVertGroupNames()

Действие:

Возвращает список всех имен групп вершин.

Метод:

removeVertGroup(group)

Действие:

Удаляет группу вершин

Замечание:

НЕ удаляет реальные вершины.

Важно понимать, что создание группы вершин и назначение вершин в неё - это два различных действия. Создание новой пустой группы вершин выполняется посредством вызова метода addVertGroup() вашего Меш-объекта. Он принимает единственную строку в качестве аргумента и она будет именем группы вершин. Если уже есть группа вершин с таким именем, к имени будет добавлен цифровой суффикс, чтобы предотвратить совпадение имён, например: TailSegment может стать TailSegment.001.

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

Вес должен быть величиной между 0.0 и 1.0; любой вес больше, чем 1.0 отсекается до 1.0. Вес меньший или равный 0.0 удалит вершину из группы вершин. Если Вы хотите назначить различный вес вершинам в одной и той же группе вершин, Вы должны назначать их в группу с помощью отдельных вызовов метода assignVertsToGroup().

Режим назначения (mode) бывает трёх видов: ADD, REPLACE, и SUBTRACT. ADD добавит новые вершины к группе вершин и свяжет с ними нужный вес. Если какие-нибудь из вершин в списке уже присутствуют, вес к ним будет добавлен. REPLACE заменит вес, связанный с индексами в списке, если они входят в вершинную группу, или ничего не сделает в противном случае. SUBTRACT попытается вычесть вес у вершин в списке и снова ничего не сделает, если они не входят в группу вершин. Чаще всего при добавлении полностью новых групп вершин в меш Вы будете использовать режим ADD.

Оглавление книги


Генерация: 0.036. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз