Параметр DoF (глубина резкости) в готовом рендере отвечает за размытие деталей на фоновых или близких к камере объектах. Во время процесса моделирования включенный DoF мешает, поэтому чаще всего его включают только для рендера. Однако для правильной настройки сцены может оказаться полезным включить DoF прямо во вьюпорте.
Включить DoF в 3D вьюпорте вручную можно через меню шейдинга. Нужно развернуть меню и отметить чекбокс «Depth of Field».
Для отключения DoF во вьюпорте, чекбокс нужно снять.
DoF во вьюпорте так же можно включать и выключать через Blender Python API.
Сначала нужно убедиться, что DoF включен для камеры. Получим указатель на текущую активную камеру в сцене:
|
1 2 3 |
active_camera = bpy.context.scene.camera # bpy.data.objects['Camera'] |
И включим для нее глубину резкости:
|
1 |
active_camera.data.dof.use_dof = True |
Так же через указатель на камеру мы можем выставить параметры для DoF. Например, фокусное расстояние и апертуру:
|
1 2 |
active_camera.data.dof.focus_distance = 8 active_camera.data.dof.aperture_fstop = 0.3 |
Теперь включим DoF во вьюпорте.
Для этого нужно поставить свойство шейдинга вьюпорта «use_dof» в значение True.
Чтобы код корректно исполнялся из другого контекста, если, например, мы выполняем скрипт из текстового редактора Text Editor, нужно использовать временное переопределение контекста на контекст вьюпорта.
Получим указатель на рабочую область вьюпорта:
|
1 2 3 4 |
area = next((_area for _area in bpy.context.screen.areas \ if _area.type == 'VIEW_3D'), None) # <bpy_struct, Area at 0x000001E5A7DAB840> |
И в переопределенном контексте уже установим значение нужного нам свойства вьюпорта.
|
1 2 |
with bpy.context.temp_override(area=area): bpy.context.space_data.shading.use_dof = True |
Если нам нужно отключить DoF во вьюпорте, точно так же переопределяем контекст, и устанавливаем значение «use_dof» в False.

.blend file on Patreon