KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программы » Michel Anders - Написание скриптов для Blender 2.49

Michel Anders - Написание скриптов для Blender 2.49

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Michel Anders, "Написание скриптов для Blender 2.49" бесплатно, без регистрации.
Перейти на страницу:

    if (retval):

        idprop['VertexGroup']= vgroup.val

        idprop['NormalAlign']= align.val

Следующий скриншот показывает, как может выглядеть поле ввода для группы вершин:



Заметьте, что скриптовое ограничение также обеспечивает пользователя полем ввода строки VG, которая может ссылаться на группу вершин, но это отличается от поля ввода группы вершин, которую мы показываем пользователю во всплывающих Опциях. Это поле VG будет изменять способ рассматривания ограничением цели. Если здесь задаётся корректная группа вершин, целевая матрица передаваемая в doConstraint(), будет усреднённой позицией вершин в вершинной группе.


Итог

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

• Управлять одним IPO из другого посредством выражения на Питоне

• Обходить некоторые ограничения, присущие управляющим объектам

• Ограничивать движение объектов и костей, добавляя ограничения (constraints)

• Писать ограничение на Питоне, которое привязывает объект к ближайшей вершине на другом объекте

Затем мы взглянем на то, как выполнять некоторое действие всякий раз, когда мы передвигаемся по кадрам в нашей анимации.


5

Действия при изменениях кадров

Кроме тех многих мест, с которыми мы столкнулись, где Питон может быть использован в Блендере, мы теперь посмотрим на скрипты, которые можно использовать для действия при определенных событиях. В этот тип скриптов входят две изюминки - скриптсвязи и обработчики пространства.

Скриптсвязи (Script links) являются скриптами, которые могут быть ассоциированы с объектами Блендера (Меши, Камеры, и так далее, а также Сцены и объекты Мира), и их можно настроить так, чтобы они автоматически срабатывали в следующих случаях:

• Сразу перед рендером кадра

• Сразу после рендера кадра

• Когда кадр сменяется

• Когда объект скорректирован

• Когда данные объекта скорректированы

Объекты Сцены можно связать с ассоциированными с ними скриптами, которые могут вызываться в двух дополнительных случаях:

• При загрузке .blend файла

• При сохранении .blend файла

Обработчики пространства (Space handlers) являются скриптами на Питоне, которые вызываются всякий раз, когда окно 3D-вида перерисовывается или обнаружено действие клавиатуры или мыши. Их основным применением является расширение возможностей интерфейса пользователя Блендера.

В этой главе вы узнаете:

• Что такое скриптсвязи и обработчики пространства

• Как осуществлять деятельность при каждом изменении кадров в анимации

• Как ассоциировать дополнительную информацию с объектом

• Как сделать, чтобы объект появлялся или исчезал, изменяя его слой или прозрачность

• Как осуществить схему, при которой с объектом в каждом кадре связывается различные меши

• Как прибавить функциональности 3D-виду


Анимация видимости объектов

Часто текущей задачей в создании анимации является желание заставить объект исчезать или тускнеть в определенном кадре, либо ради самого эффекта, или чтобы заменить объект другим для достижения некоего драматического воздействия (как например, взрыв или превращение кролика в мяч).

Существует много способов создавать эти эффекты, и большинство из них конкретно не связаны со скриптсвязями, реагирующими на изменения кадра (многие могут также просто быть ключами анимации). Тем не менее, мы посмотрим на два метода, которые можно легко приспособить ко всем ситуациям такого рода, даже к тем, которые не легко осуществить ключами. Например, нам требуется несколько специфическое поведение параметра, которое легко можно сформулировать в выражении, но неудобно ловить в IPO.


Потускнение материала

Нашим первым примером будет изменение диффузного цвета материала. Это будет подобно простому изменению прозрачности (transparency), но на иллюстрациях такие изменения легче увидеть с диффузным цветом.

Нашей целью является выцветание диффузного цвета от черного к белому и обратно, в течении двухсекундного периода. Мы, следовательно, определяем функцию setcolor(), которая принимает материал и изменяет его диффузный цвет (атрибут rgbColor). Предполагается, что частота 25 кадров в секунду и, следовательно, первая строка получает номер текущего кадра и выполняет деление по модулю, чтобы определить, какая часть текущей целой секунды пройдена.

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

import Blender

def setcolor(mat):

   s = Blender.Get('curframe')%25

   if int(Blender.Get('curframe')/25.0)%2 == 0:

      c = s

   else:

      c = 25-s

   c /= 25.0

   mat.rgbCol = [c,c,c]


if Blender.bylink and Blender.event == 'FrameChanged':

   setcolor(Blender.link)

Скрипт заканчивается важной проверкой: Blender.bylink будет Истиной (True), только в том случае, если этот скрипт был вызван как script handler, и в этом случае Blender.event содержит тип события. Мы хотим действовать только при изменении кадра, так что мы проверяем здесь наличие этого события. Если эти условия удовлетворены, мы передаем Blender.link в нашу функцию setcolor(), так как там содержится объект, с которым наш связанный скрипт ассоциирован - в нашем случае это будет объект Material (Материал). (Этот скрипт доступен как  MaterialScriptLink.py в файле scriptlinks.blend.)

Следующим пунктом в нашем списке нужно соединить скрипт с объектом, чей материал мы хотим изменить. Следовательно, мы выбираем объект, и в Окне Кнопок выбираем панель Script. В панели Scriptlinks (Скриптсвязи), мы включаем скриптсвязи (кнопка Enable Script Links) и выбираем кнопку MaterialScriptLinks. (Если нет кнопки MaterialScriptLinks, тогда выбранному объекту не был назначен материал. Убедитесь в том, что он есть.) Там должна теперь появиться надпись Select Script link с кнопкой New (Новый). Щелкните на New, появится выпадающий список с доступными скриптами (файлы в текстовом редакторе). В нашем случае мы выбираем MaterialScriptLink.py, и на этом всё. Мы можем теперь протестировать нашу скриптсвязь, изменяя кадр в 3D-виде (с помощью клавиш стрелок). Цвет нашего объекта должен изменяться при изменении номера кадра. (Если у цвета не видно изменений, проверьте тип отображения в 3D-виде, должно быть solid или shaded.)



Изменение слоев

Если мы хотим изменить видимость объекта, изменение назначенного слоя (слоёв) - более распространённая и мощная техника, чем изменения свойств материала. Изменение назначенного слоя имеет, например, преимущество в том, что мы можем сделать объект полностью невидимым для ламп, которые сконфигурированы на освещение только определенных слоёв, и множество аспектов анимации (например, отклонение частиц воздействием полей) также могут быть ограничены определенными слоями. Также, изменение слоев не ограничено объектами со связанными с ними материалами. Вы можете точно так же легко изменить слой для Лампы или Камеры.

В нашем следующем примере мы хотим назначить объекту слой 1, если количество пройденных секунд - четное, и слой 2, если время в секундах нечетное. Скрипт, осуществляющий это, очень подобен нашему скрипту, изменяющему материал. Реальная работа производится посредством функции setlayer(). Первая строка вычисляет слой, в котором объект должен находиться в текущем кадре, а следующая строка (выделенная) назначает список индексов слоя (состоящий из единственного слоя в данном случае) атрибуту layers объекта. Последние две строки функции setlayer() гарантируют, что изменение слоя действительно станет видимым в Блендере.

import Blender

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*