Коротко
- Систему единиц измерения сцены можно задать как METRIC через unit_settings в Scene.
- Положение объекта задаётся тремя координатами с помощью свойства Object.location.
- Метод Scene.frame_set() устанавливает кадр сцены и обновляет объекты и слои просмотра.
- Документация Blender API описывает соответствующие свойства для масштаба, отображения единиц и управления объектами.
Чему вы научитесь в этом руководстве?
При архитектурном моделировании и визуализации в Blender вместо многократной ручной настройки сцены можно выполнять определённые операции с помощью Python API. Это помогает последовательно повторять одни и те же шаги в разных файлах. В этом руководстве вы зададите для сцены систему единиц METRIC, измените положение объекта, создадите простой источник света и установите кадр анимации. Примеры основаны на описаниях Scene, Object и UnitSettings в официальной документации Blender Python API.
Приведённый код — это небольшие исходные примеры, которые нужно адаптировать под собственные файлы проектов. Поскольку они могут изменить расстановку объектов в сцене, сначала рекомендуется проверить их на копии файла. В примерах не предполагается использование какого-либо конкретного движка рендеринга, плагина или инструмента архитектурного моделирования.
Требования
Понадобятся Blender и доступ к Python API. В качестве источников используются актуальные страницы документации Blender API, однако в предоставленном материале не указан номер конкретной версии Blender. Поэтому перед использованием кода в производственном файле проверьте совместимость свойств с документацией для установленной версии. В примерах не указаны требования к учётной записи, платной лицензии или дополнительным плагинам.
Запускайте фрагменты кода в контексте Python внутри Blender; в примерах документации используются модуль bpy и активный слой просмотра. Перед запуском команды убедитесь, что выбраны нужные файл, сцена и слой просмотра. Пример изменения положения объекта работает с первым объектом сцены, поэтому в пустой сцене сначала выполните шаг по созданию объекта.
1. Настройте систему единиц сцены
Данные Scene содержат не только объекты, но и настройки, связанные со временем и рендерингом. Систему единиц можно выбрать через свойство сцены unit_settings. В документации API для system перечислены варианты NONE, METRIC и IMPERIAL. Пример ниже задаёт для активной сцены метрическую систему:
import bpy
scene = bpy.context.scene
scene.unit_settings.system = 'METRIC'Эта операция изменяет только настройку системы. В документации свойство scale_length описывается как масштаб, используемый для преобразования размеров между единицами Blender и реальными величинами. Используйте это значение осознанно и последовательно на протяжении всего проекта; при сравнении размеров моделей из разных файлов учитывайте влияние этой настройки. Поскольку в источнике для свойства length_unit указано только значение DEFAULT, здесь мы не присваиваем ему другие, не описанные в документации значения.
Чтобы проверить текущие значения настроек единиц, можно вывести свойства на экран:
import bpy
settings = bpy.context.scene.unit_settings
print(settings.system)
print(settings.scale_length)
print(settings.use_separate)Свойство use_separate описано как настройка, определяющая, будут ли единицы отображаться парами. Этот код считывает значения, но ничего не меняет. Перед переходом к следующим шагам сравните вывод с требованиями проекта к отображению размеров.
2. Измените положение объекта в сцене
Свойство location в блоке данных Object задаёт положение объекта по трём координатам. Приведённый ниже код присваивает новое значение первому объекту сцены, если в ней есть хотя бы один объект:
import bpy
scene = bpy.context.scene
if len(scene.objects) > 0:
obj = scene.objects[0]
obj.location = (5.0, 5.0, 5.0)Координаты в примере совпадают со значениями положения из базового примера работы с объектами в документации API. Замените их на нужные координаты для своей модели. Поскольку код обращается к первому объекту, заранее проверьте порядок объектов в сцене и убедитесь, что выбран нужный объект. В проектах с несколькими объектами присвоение положения не тому объекту может нарушить расстановку модели.
В документации также описаны положение, вращение и масштаб объекта, а также матрица преобразования в мировом пространстве. В этом руководстве рассматривается только базовое свойство location; вычисления через матрицы или связи с родительским объектом не выполняются. Если в архитектурной модели важно сохранить существующую иерархию, изменение положения следует оценивать с учётом родительских объектов и настроек ограничений.
3. Добавьте в сцену источник света
В официальном примере API показано, как создать блок данных источника света, связать его с объектом и добавить этот объект в коллекцию активного слоя просмотра. Пример ниже повторяет тот же базовый порядок действий, меняя название и положение источника света:
import bpy
view_layer = bpy.context.view_layer
light_data = bpy.data.lights.new(name="Mimari Test Isigi", type='POINT')
light_object = bpy.data.objects.new(
name="Mimari Test Isigi",
object_data=light_data
)
view_layer.active_layer_collection.collection.objects.link(light_object)
light_object.location = (5.0, 5.0, 5.0)
light_object.select_set(True)
view_layer.objects.active = light_objectПорядок действий важен: сначала создаётся блок данных источника света, затем — использующий эти данные объект. После добавления объекта в активную коллекцию он появляется в сцене. Последние строки выбирают объект и делают его активным. В примере не задаются мощность света для рендеринга и другие параметры освещения, поэтому он не гарантирует конкретную яркость или результат рендеринга.
4. Задайте кадр анимации с помощью кода
Свойство frame_current в Scene указывает текущий кадр. Документация API рекомендует использовать метод frame_set(), чтобы сразу обновить данные анимации и слои просмотра. Например:
import bpy
scene = bpy.context.scene
scene.frame_set(25)Номер кадра приведён только в качестве примера; он автоматически не меняет начало и конец диапазона сцены. В документации Scene свойства frame_start и frame_end описаны отдельно. Если сцена содержит анимацию или движение камеры, убедитесь, что нужный кадр входит в диапазон проекта и что состояние объекта на этом кадре соответствует ожиданиям.
Чем это полезно для архитектурной визуализации?
Для архитекторов, дизайнеров интерьеров и специалистов по визуализации эти примеры могут стать основой для управления с помощью кода такими задачами, как подготовка сцены, повторное размещение объектов и выбор кадра анимации. Если команда делится стандартом настройки сцены, явное указание таких параметров, как система единиц, помогает отслеживать, какие именно свойства изменяются. Однако примеры не выполняют автоматическое проставление размеров, сопоставление координат между файлами или настройку рендеринга.
В источниках нет информации о системных требованиях, стоимости лицензии или конкретных плагинах. Перед применением сделайте резервную копию файла, проверьте, что выбрана нужная сцена, и подтвердите совместимость с документацией API для установленной версии Blender. Особенно важно сначала проверить примеры, зависящие от порядка объектов, на небольшой тестовой сцене, а не запускать их сразу в крупном проекте.
Распространённые ошибки
Запускать код изменения положения объекта в пустой сцене: если первого объекта нет, не к чему применить новое положение. В примере это проверяется условием.
Считать систему единиц и значение масштаба одним и тем же: в документации
systemиscale_length— отдельные свойства. Изменение одного не означает автоматического изменения другого.Забывать добавить объект в коллекцию: в официальном примере с источником света добавление нового объекта в активную коллекцию — часть процесса, необходимая для его появления в текущей сцене.
Не проверять диапазон кадров:
frame_set()задаёт текущий кадр, а свойства, управляющие начальным и конечным кадрами, задаются отдельно.
Что делать дальше
Сначала проверьте код, который считывает настройки единиц, затем запустите пример изменения положения на одном тестовом объекте. Прежде чем добавлять код создания источника света в существующий файл проекта, проверьте его в новой сцене. После этого явно укажите целевой объект, координаты и номер кадра для собственного рабочего процесса. Проверка сцены и ожидаемого состояния объекта после каждого изменения снижает риск применить код не к тому объекту.
Источники и лицензия
Это руководство адаптировано на турецкий язык по страницам Object, Scene и UnitSettings документации Blender Python API. Все три источника распространяются по лицензии CC BY-SA 4.0. Основные сведения об использовании API и описания свойств в примерах кода основаны на этой документации.
Источники
Источников: 3Тексты источников не перепечатываются; короткие цитаты отмечены, остальное — наш пересказ и комментарий.
Для архитектурных бюро и команд визуализации в Турции главная ценность этих примеров в том, что они помогают сделать базовые этапы подготовки сцены наглядными и воспроизводимыми — ещё до перехода к сложной автоматизации. Такие операции, как выбор системы единиц, положения объекта и кадра, могут показаться мелочами, но их можно включить в контрольный список при создании общего стандарта файлов внутри команды.
При этом руководство не является готовым пакетом для автоматизации проекта: оно не решает полностью задачи преобразования размеров или настройки рендеринга. Поскольку в источниках нет сведений о стоимости установки и лицензии, не следует заранее предполагать экономическую выгоду. Бюро должны проверять код в своей версии Blender и на резервной копии файла, уделяя особое внимание выбору объекта и масштабу сцены.
Частые вопросы
Как задать для сцены Blender систему единиц METRIC с помощью Python?
Для свойства `unit_settings.system` активной сцены можно указать `'METRIC'`. В документации API среди систем единиц перечислены `NONE`, `METRIC` и `IMPERIAL`.
Какое свойство используется для изменения положения объекта в Blender с помощью Python?
Свойству `location` в блоке данных Object присваивается значение из трёх координат. Заранее проверьте, что код обращается к нужному объекту.
Как задать кадр анимации в Blender с помощью Python?
Текущий кадр можно задать методом `frame_set()` для Scene. Этот метод не изменяет диапазон начального и конечного кадров.



