Как эффективно изменить один и тот же параметр для нескольких объектов в Blender?
Начиная с одного куба, я изменил некоторые свойства (материал, цвет, атрибуты отражения), а затем продублировал объект на десяток кубов, разместив их на сцене. После рендеринга я бы хотел изменить цвет всех из них. Как мне сделать это эффективно?
Я уже нашел несколько способов:
- В режиме объекта выберите все объекты (
B
, затем выберите прямоугольник), соедините сеткиctrl-j
изменить цвет,tab
в режим редактирования,P
снова отделить объекты. Это вполне возможно, поскольку сетки всех моих объектов не соприкасаются. Основы документов - Кто-то написал скрипт на Python для подобных вещей, здесь
Номер 1 подвержен ошибкам и слишком утомителен для регулярного использования. Номер 2 более специализирован и гораздо хуже. Простое выделение нескольких объектов и изменение значения не работает, поскольку выбор свойств применяется только к активному объекту, который является только одним из выбранных.
Поскольку это частый случай использования, я, вероятно, упускаю простой способ. Что это?
5 ответов
Хотя я не нашел наиболее предпочтительного решения для простых кнопок или графического интерфейса, оказалось, что взломать собственный код Python в Blender проще, чем можно подумать.
Кубики, с которыми я работаю, больше похожи на камни домино. Впоследствии все объекты, похожие на домино, имеют имя, начинающееся с "Домино". Очень легко изменить все объекты в сцене на основе их имени:
for o in bpy.data.objects:
if not "Domino" in o.name:
continue
o.rigid_body.mass = 500
o.rigid_body.friction = 0.4
o.rigid_body.restitution = 0.95
o.rigid_body.angular_damping = 0.2
o.rigid_body.linear_damping = 0.05
Чтобы использовать этот код, я просто открыл новое окно (перетащите маленький верхний прямоугольный значок в любое существующее окно Blender), изменил тип окна на "Python Console" (нижний левый значок выбора типа окна), а затем вставьте приведенный выше код в Это.
Код можно редактировать во внешнем текстовом редакторе. В качестве альтернативы можно также открыть окно текстового редактора внутри Blender. После сохранения сцены и консоль Python, и внутренний текстовый редактор сохраняются вдоль трехмерной модели, что обеспечивает очень хороший рабочий процесс.
Нахождение правильных имен объектов - таких как bpy.data.objects["Domino.033"].rigid_body.mass
это очень просто, потому что Blender показывает их при наведении указателя мыши на любое поле ввода формы. Если вы определили объект, используйте Python dir()
функция, чтобы получить список всех известных методов и атрибутов объекта. Там может быть больше, чем графический интерфейс позволяет изменить или использовать.
Это было намного проще, чем я думал. Это, вероятно, объясняет, почему можно подумать о каких-то сложных манипуляциях, для которых нет элемента графического интерфейса - это просто намного легче обрабатывать в коде. Я, вероятно, буду использовать это для дублирования и расположения объектов вдоль линий, окружностей, спиралей вместо использования собственных атрибутов массива Blender. Это позволит облегчить последующие корректировки положения.
Если вы просто хотите изменить один параметр для нескольких объектов, нажмите RMB на элементе управления (например, в текстовом поле) и выберите " Копировать в выбранный".
Активировать 3D-вид: копировать меню атрибутов в пользовательских настройках и вызывать его с помощью ctrl+c, если вы хотите скопировать модификаторы или что-то подобное
http://wiki.blender.org/index.php/Extensions:2.6/Py/Scripts/3D_interaction/Copy_Attributes_Menu
Вот совет Blender 3D: чтобы работать с кучей объектов одновременно, включите плагин "Копировать атрибуты", который поставляется вместе с Blender, но не включен по умолчанию: откройте "Настройки пользователя", нажмите "Дополнения", затем найдите "Скопировать атрибуты", чтобы найти плагин "3D-вид: Копировать меню атрибутов". Включите плагин, затем закройте настройки.
Для использования:, в 3D-виде выберите один или несколько объектов TARGET, затем, наконец, выберите объект SOURCE. Нажмите "Ctrl-C" на клавиатуре и увидите меню каждого типа атрибута, который вы можете скопировать. Нажмите один (например, масштаб), и вы увидите, что масштаб исходного объекта будет применен к ранее выбранным объектам.
Вот ручная запись http://wiki.blender.org/index.php/Extensions:2.6/Py/Scripts/3D_interaction/Copy_Attributes_Menu
Это в ответ на:
http://obasandbox.wordpress.com/2011/10/23/cg-blender-setting-properties-on-multiple-objects/
Этот ответ изменяет все объекты без копирования и вставки и без сценариев.
- Сначала выберите только один из объектов, которые нужно изменить (иначе некоторые вкладки могут не отображаться).
- Затем выберите все объекты, которые нужно изменить (порядок не имеет значения).
- Теперь, когда вы изменяете необходимое свойство (щелчком или перетаскиванием), удерживайте Alt при этом. Это изменит свойство для всех выбранных объектов.
Обратите внимание, что это работает даже для таких вещей, как ввод значений в поля x, y, z на панели инструментов преобразования. Просто нажмите Alt при щелчке по полю, отпустите Alt, введите нужное значение, нажмите Enter, готово.
Мне любопытно, почему вы не можете просто настроить материал. Blender позволяет легко повторно использовать элементы объекта. Вы можете иметь 100 объектов, которые разделяют одну сетку. Вы можете иметь 100 мешей, которые разделяют набор из 4 материалов.
Я представляю, что у набора домино будет 21 сетка (для всех комбинаций 1-6 x 1-6). В этих сетках будет 2 или 3 материала (один для пипсов и еще один или два для тела). При правильной привязке вы можете изменить цвет на всех пунктах, изменив один материал, используемый всеми сетками.
Использование Python для массового изменения объекта очень мощно и применимо для очень многих проблем, но иногда решение проще.