При моделировании “по референсу” бывает нужно, чтобы разметочная сетка 3D сцены отображалась поверх изображения-референса. Так удобнее выставлять привязки и соотносить строимую модель со сценой в целом.
Для начала добавим в сцену изображение-референс.
1 2 3 4 5 6 7 8 |
area = [area for area in bpy.context.screen.areas if area.type == "VIEW_3D"][0] with bpy.context.temp_override(area=area, region=area.regions[-1]): bpy.ops.object.empty_image_add( filepath="D:/ref.jpg", align='VIEW', rotation=(1.5708, -0, -0), background=False ) |
Изображение-референс добавляется в сцену при помощи оператора empty_image_add(). Так как этот оператор контекстно-зависимый, для того чтобы вызвать его из консоли или окна редактирования скриптов и текста Text Editor, нужно использовать переопределение контекста temp_override().
В параметрах оператора мы передаем полный путь к встраиваемому изображению, устанавливаем выравнивание по 3D вьюпорту и сразу поворачиваем его вертикально относительно оси Z.
Теперь получить указатель на встроенное изображение мы можем через список объектов сцены.
1 2 |
bpy.data.objects['Empty'] # bpy.data.objects['Empty'] |
Чтобы “проявить” сетку сцены на изображении, мы можем использовать два механизма.
Первый – сделать изображение прозрачным.
Для этого мы должны включить прозрачность, установив значение параметра use_empty_image_alpha изображения в True.
1 |
image.use_empty_image_alpha = True |
Как мы видим, сетка проявляется на изображении сразу же, даже несмотря на то, что степень прозрачности по умолчанию стоит равной 1, т.е. объект считается не прозрачным.
За отображение объектов в 3D сцене отвечает свойство color, которое есть у всех объектов. Четвертый канал свойства color отвечает как раз за прозрачность. Поэтому, чтобы увеличить прозрачность объекта в сцене, нам нужно снизить значение свойства color[3].
1 |
image.color[3] = 0.33 |
Обратите внимание, что при увеличении прозрачности, объекты расположенные за нашим изображением-референсом, тоже становятся видны. Причем их видимость зависит от значения прозрачности нашего изображения – чем прозрачность выше, тем сильнее проступают объекты, расположенные сзади.
Второй вариант включения отображения сетки сцены на изображении-референсе – изменить его относительное расположение.
За это отвечает параметр empty_image_depth, который может принимать три значения: “DEFAULT”, “FRONT” и “BACK”.
Поставим этот параметр в значение “BACK”.
1 |
image.empty_image_depth = 'BACK' |
Сетка сцены опять же становится полностью видна на нашем изображении-референсе.
В этом случае объекты, расположенные позади изображения, также становятся сразу и полностью видны и будут перекрывать наш референс.