Layout 双视口固定
自动切到 Layout 工作区,左侧固定为相机渲染视图,右侧固定为 Solid 透视视图,并设置 Cycles 预览参数。
做什么
- 清理默认 Cube,开启 Cycles GPU 预览
- 在 Layout 工作区垂直分屏:左渲染+相机,右 Solid 透视
- 若已是多视口,按 X 坐标兜底修正左右配置
用法
在 Blender 里 Scripting 工作区打开下方脚本,或 Text Editor → Open 加载 layout-viewports.py,点击 Run Script。

源码
import bpy
def setup_layout_viewports_fixed():
# 确保在 Object 模式
if bpy.ops.object.mode_set.poll():
bpy.ops.object.mode_set(mode='OBJECT')
# 1. 基础场景清理与 Cycles 渲染设置
if "Cube" in bpy.data.objects:
bpy.data.objects.remove(bpy.data.objects["Cube"], do_unlink=True)
bpy.context.scene.render.film_transparent = True
bpy.context.scene.render.engine = 'CYCLES'
bpy.context.scene.cycles.device = 'GPU'
bpy.context.scene.cycles.use_denoising = True
bpy.context.scene.cycles.preview_samples = 10
bpy.context.scene.cycles.samples = 10
# 2. 找到并切换到 Layout 工作区
layout_workspace = bpy.data.workspaces.get("Layout")
if layout_workspace:
bpy.context.window.workspace = layout_workspace
bpy.context.view_layer.update()
else:
print("未找到名为 'Layout' 的工作区。")
return
# 3. 获取 Layout 工作区对应的 screen
window = bpy.context.window
screen = layout_workspace.screens[0] if layout_workspace.screens else window.screen
view_3d_areas = [area for area in screen.areas if area.type == 'VIEW_3D']
# 如果 Layout 里只有一个大视口,则执行切分
if len(view_3d_areas) == 1:
original_area = view_3d_areas[0]
# 记住切分前原始视口的 ID
original_area_id = original_area.as_pointer()
# 强制执行分屏(Blender 默认会把新生成的视口放在右边,并激活它)
with bpy.context.temp_override(window=window, screen=screen, area=original_area, region=original_area.regions[0]):
bpy.ops.screen.area_split(direction='VERTICAL', factor=0.5)
# 重新获取 Layout 里的 3D 视口
new_view_3d_areas = [area for area in screen.areas if area.type == 'VIEW_3D']
# 找出哪个是原来的(左边),哪个是新生成的(右边)
left_area = None
right_area = None
for area in new_view_3d_areas:
if area.as_pointer() == original_area_id:
left_area = area
else:
right_area = area
# 4. 精准配置左右视口
if left_area and right_area:
left_space = left_area.spaces.active
right_space = right_area.spaces.active
# 左边:渲染模式 + 摄像机
right_space.shading.type = 'RENDERED'
right_space.region_3d.view_perspective = 'CAMERA'
# 右边:Solid模式 + 透视
left_space.shading.type = 'SOLID'
left_space.region_3d.view_perspective = 'PERSP'
print("【成功】左边已固定为相机渲染,右边已固定为Solid模式。")
return
# 如果原本就是多窗口状态,直接通过 X 坐标兜底强制刷一遍
view_3d_areas = [area for area in screen.areas if area.type == 'VIEW_3D']
view_3d_areas.sort(key=lambda a: a.x)
if len(view_3d_areas) >= 2:
view_3d_areas[0].spaces.active.shading.type = 'RENDERED'
view_3d_areas[0].spaces.active.region_3d.view_perspective = 'CAMERA'
view_3d_areas[1].spaces.active.shading.type = 'SOLID'
view_3d_areas[1].spaces.active.region_3d.view_perspective = 'PERSP'
print("【兜底成功】已通过坐标强制修正:左边渲染相机,右边Solid。")
if __name__ == "__main__":
setup_layout_viewports_fixed()