Коротко
- В Blender 2.8x фиксированные слои сцены, использовавшиеся в эпоху 2.7x, уступили место коллекциям и структуре View Layer.
- Объект можно связать с несколькими коллекциями; при этом новый объект не создаётся.
- Коллекцию можно исключить из активного View Layer, чтобы управлять ею в структуре этого слоя.
- `hide_viewport` и `hide_render` управляют видимостью объекта в разных контекстах.
Чему вы научитесь в этом руководстве?
Сцены архитектурной визуализации могут объединять конструктивную оболочку здания, элементы интерьера, мебель и множество других объектов. По мере роста проекта становится важно группировать элементы сцены и управлять разными рабочими представлениями. Python API Blender позволяет связывать объекты с коллекциями и с помощью View Layer определять, какие части иерархии коллекций будут активны.
В этом руководстве вы научитесь создавать коллекцию с помощью Python, связывать её со сценой, добавлять в неё активный объект и исключать коллекцию из активного View Layer. Также мы рассмотрим различия между настройками видимости объектов и структурой коллекций и View Layer. Примеры основаны на официальной документации Python API Blender и описании API сцены и объектов, опубликованном для Blender 2.80.
Требования
Запускайте примеры в среде Blender, где доступен Python API. Код обращается к активной сцене, а при необходимости — и к активному объекту через bpy. В первом примере новая коллекция создаётся непосредственно с помощью bpy.data.collections.new и связывается с корневой коллекцией сцены; наличие ранее активной коллекции не требуется. Отдельный пример связывает активный объект с новой коллекцией, но пропускает этот шаг, если активного объекта нет.
В документации не указаны конкретная версия Blender, учётная запись пользователя или требования к дополнительному программному обеспечению. Поэтому перед использованием кода проверьте поведение API в установленной версии Blender. Документ для разработчиков Blender 2.80 описывает изменения API периода 2.8x, а актуальные страницы API документируют свойства Scene и Object. Учитывайте эти различия при работе со скриптами для более старых версий.
Настройка структуры коллекций: шаг за шагом
1. Разделите задачи коллекций и View Layer
В эпоху Blender 2.7x сцены можно было организовать с помощью 20 фиксированных слоёв. После изменений API в 2.8x для организации объектов стали использовать коллекции, а для управления видимостью и рендером частей иерархии коллекций — View Layer. Поэтому свойства слоёв сцены из старых скриптов не следует путать с новой системой коллекций.
Коллекции иерархически группируют объекты и другие коллекции. View Layer определяют, какие части этой структуры будут активны. Создание коллекции не перемещает объекты в неё автоматически: их нужно связать с коллекцией отдельно.
2. Добавьте в сцену новую коллекцию
Следующий пример связывает новую коллекцию Mimari_Govde с корневой коллекцией активной сцены. Код создаёт коллекцию, а затем добавляет её в иерархию сцены:
import bpy
scene = bpy.context.scene
collection = bpy.data.collections.new("Mimari_Govde")
scene.collection.children.link(collection)bpy.data.collections.new создаёт новую коллекцию. scene.collection.children.link связывает её с корневой коллекцией сцены. В этом примере не используются активный объект или ранее активная коллекция. Если в файле уже есть коллекция с таким именем, перед повторным запуском скрипта проверьте структуру сцены.
3. Свяжите активный объект с новой коллекцией
После создания коллекции можно добавить в неё активный объект с помощью следующего примера:
obj = bpy.context.object
if obj is not None:
collection.objects.link(obj)Если активный объект есть, он связывается с коллекцией; если его нет, код внутри условия не выполняется. Эта связь не создаёт копию объекта. Согласно документации разработчиков Blender, один и тот же объект может входить в несколько коллекций и при этом остаётся одним объектом.
В архитектурных сценах это позволяет выстраивать структуру группировки без дублирования данных объектов. Однако приведённый код не удаляет объект из его текущей коллекции, а лишь добавляет связь с новой. Поэтому отдельно проверьте другие связи объекта с коллекциями в сцене.
4. Исключите коллекцию из активного View Layer
Если коллекция находится непосредственно под корневой коллекцией сцены, её можно исключить, обратившись к соответствующему LayerCollection в активном View Layer:
bpy.context.view_layer.layer_collection.children["Mimari_Govde"].exclude = TrueЭта строка исключает коллекцию Mimari_Govde из активного View Layer. Чтобы снова включить её, установите для exclude значение False. Код предполагает, что коллекция находится непосредственно в иерархии View Layer. Если она вложена в другую коллекцию, обращаться к ней нужно по соответствующему пути в иерархии.
View Layer управляют тем, какие части структуры коллекций активны. Это не то же самое, что по отдельности менять свойства видимости каждого объекта. Оценивая результат, учитывайте, связаны ли объекты с другими коллекциями и как устроен используемый View Layer.
5. Управляйте видимостью объектов отдельно
Если нужно управлять не видимостью коллекции, а отдельным объектом, используйте свойства объекта. hide_viewport влияет на видимость объекта во вьюпорте, а hide_render — в рендере. Например, чтобы скрыть активный объект при рендере:
obj = bpy.context.object
if obj is not None:
obj.hide_render = TrueЗдесь меняется только видимость в рендере. Для скрытия во вьюпорте предусмотрено отдельное свойство hide_viewport. Выбирайте свойство в зависимости от нужного результата и не используйте эти настройки как взаимозаменяемые.
Распространённые ошибки
Полагать, что объекты добавляются автоматически при создании коллекции: создание коллекции и связывание с ней объекта — разные операции. Добавьте нужный объект в коллекцию отдельно.
Использовать в новом API старые методы работы со слоями сцены: в 2.8x структура коллекций и View Layer изменилась. Не применяйте конструкции вроде object.layers из старых скриптов, не сверив их с актуальной структурой коллекций.
Путать связь с коллекцией с копированием объекта: один и тот же объект может находиться в нескольких коллекциях. Связывание с коллекцией не создаёт новый объект или копию геометрии.
Искать коллекцию не на том уровне иерархии View Layer: пример с исключением предполагает, что коллекция является непосредственным дочерним элементом активного слоя. Для вложенных коллекций путь обращения нужно изменить с учётом фактической иерархии сцены.
Считать видимость во вьюпорте и в рендере одной настройкой: hide_viewport и hide_render — разные свойства. Определите, касается ли проблема вьюпорта или результата рендера, и измените соответствующее свойство.
Влияние на рабочий процесс в архитектуре и визуализации
Коллекции можно использовать для группировки конструктивной оболочки здания, мебели и других элементов сцены, которыми нужно управлять вместе. Структура View Layer позволяет задавать, какие части этой иерархии будут активны. Такой подход помогает поддерживать порядок в сценах, особенно в многочастных проектах, и управлять видимостью на уровне групп.
Этот подход может быть полезен архитектурным бюро, дизайнерам интерьеров и специалистам по archviz, которые хотят создавать повторяемую структуру сцен Blender с помощью Python. Однако источники не обещают совместимость с конкретным движком рендеринга, повышения производительности или преимуществ для определённого оборудования. В проектах следует проверять версию Blender, фактическую иерархию коллекций и рабочий процесс обмена файлами с другими участниками.
Следующие шаги
Сначала запустите пример создания коллекции на копии файла. Затем проверьте шаг связывания с активным объектом и убедитесь, что объект может входить в несколько коллекций. Перед применением кода исключения View Layer проверьте, где находится коллекция в структуре активного слоя.
Затем по отдельности изучите свойства hide_viewport и hide_render, чтобы определить, какой уровень видимости отвечает вашим задачам. Если вы собираетесь использовать скрипты в разных версиях Blender, сверяйтесь с документацией API для нужной версии и тестируйте изменения до их применения к файлу проекта.
Источник и лицензия
Документ “Blender 2.80: Scene and Object API” (K2) в документации Blender Developer описывает изменения в структуре коллекций и View Layer. Документация Blender Python API по Scene (K1) и Object (K4) распространяется по лицензии CC BY-SA 4.0. В руководстве технические сведения из этих источников адаптированы на турецкий язык и изложены с оригинальными примерами.
Источники
Источников: 3Тексты источников не перепечатываются; короткие цитаты отмечены, остальное — наш пересказ и комментарий.
Для архитектурных бюро и команд визуализации в Турции управление коллекциями с помощью Python может сделать организацию сцены более повторяемой. Возможность связывать объекты с разными коллекциями без их дублирования особенно удобна в рабочем процессе команд, проекты которых становятся всё масштабнее.
Вместе с тем эти примеры не обещают сокращения времени рендеринга или повышения производительности на определённом оборудовании. В реальном проекте следует проверить версию Blender и иерархию сцены, а автоматизацию сначала протестировать на копии файла. Источники также не содержат сведений об учётных записях, оборудовании или условиях оплаты.
Частые вопросы
Как создать новую коллекцию в Blender с помощью Python?
Коллекцию создают с помощью `bpy.data.collections.new`, а затем связывают с иерархией коллекций сцены через `scene.collection.children.link`. Объекты нужно добавлять в неё отдельно.
Может ли один объект одновременно входить в несколько коллекций Blender?
Да. Согласно документации разработчиков Blender, один объект можно связать с несколькими коллекциями, при этом он остаётся одним объектом.
В чём разница между `hide_viewport` и `hide_render` в Blender?
`hide_viewport` управляет видимостью объекта во вьюпорте, а `hide_render` — в рендере. Это разные свойства.



