Blender Python 编程 :批量导入网格与截图

正文第一句加入“我正在参加「创意开发 投稿大赛」详情请看:掘金创意开发大赛来了!

继上一篇 《Blender Python 编程:快速入门》 我们已经了解了 Blender Python 脚本的基本概念。接下来让我们了解如何用 Python 编程实现一些 有意思的功能(减轻部分工作量)。

image.png

打开 Blender 中的文本编辑器,让我们开始编码。这个过程的主要步骤包括

  • 导入所有必需的库
  • 删除默认的立方体对象和相机
  • 编写几个 for 循环来导入多个猴子网格
  • 创建相机
  • 最后保存渲染的图像

image.png

导入库

为了实现我们的项目,我们将进口三种主要必需品。首先,我们将导入 bpy 库,它将允许用户在 Blender 文本编辑器中访问 Python 环境。我们将从这个库中导入一些功能,以方便访问。最后,我们还将导入用于执行不同类型计算的 math 库。在这个特殊的场景中,数学库主要用于计算用于测量旋转角度的欧拉角。需要导入的库如下:

import bpy
from bpy import context, data, ops
import math
复制代码

移除默认对象和相机

我们的下一个目标是从 Blender 环境中删除所有不必要的元素。可以通过两种方式执行此操作。一种方法是使用 delete 函数并将 use_global 参数设置为 False 。另一种方法是创建一个 for 循环,并在默认屏幕中检查所有对象,选择正在寻找的特定类型的对象,并删除适当(认为不必要的特定项目)的元素。下面是执行以下操作的代码块。

#  Remove The Default Cude Object
# bpy.ops.object.delete(use_global=False)

bpy.ops.object.delete(use_global=False, confirm=False)

for o in bpy.context.scene.objects:
    if o.name == "Cube":
        bpy.ops.object.delete(use_global=False)
复制代码

添加多个猴子网格

在下一步,我们将在各自的位置添加相应的多个猴子网格。为了执行这个步骤,我们将把三个变量初始值设为零。这三个变量分别表示 x 轴y 轴z 轴。我们将相应地修改这些变量,以获得猴子网格的最佳位置。count 变量用于根据需要改变这些轴的位置。

# Create multiple monkey meshes
x = 0
y = 0 
z = 0

count1 = 0
count2 = -5

for i in range(3):
    # Import the monkey mesh
    bpy.ops.mesh.primitive_monkey_add(location = (x + count1, y + count1, z))
    count1 += 5
    
for i in range(2):
    # Import the monkey mesh
    bpy.ops.mesh.primitive_monkey_add(location = (x + count2, y - count2, z))
    count2 += -5
复制代码

image.png

创建相机

一旦我们完成了创建多个猴子网格,我们可以添加一个相机来查看我们的对象和他们的整体视图。我们将设置场景和创建我们的相机,并将相机镜头设置为 30 mm。默认的相机尺寸通常是 50 mm 。但是,我们将使用这个特定的大小,以便在指定的范围内所有对象都清晰可见。然后,我们将创建相机对象,并设置相机的位置和旋转角度。

位置 将决定相机的位置,在那里我们将有最好的视角,所有对象呈现在屏幕的可见区域。旋转角度 由角度转换为弧度,这是在前面的编码部分中引入的数学库的帮助下完成的。我们将指定沿所有三轴旋转的角度(弧度),以便 位置旋转角度 都被正确放置。我们将场景收集链接到当前的相机,并确保当前选择的相机被设置为活动

### Creating A New Camera Angle
scn = bpy.context.scene

# create the second camera
cam = bpy.data.cameras.new("Camera")
cam.lens = 30

# create the second camera object
cam_obj = bpy.data.objects.new("Camera", cam)

# Locations
cam_obj.location.x = 16
cam_obj.location.y = -6
cam_obj.location.z = 8

# Rotations
cam_obj.rotation_euler[0] = math.radians(64)
cam_obj.rotation_euler[1] = math.radians(0)
cam_obj.rotation_euler[2] = math.radians(47)

scn.collection.objects.link(cam_obj)

# Set the Camera to active camera
bpy.context.scene.camera = bpy.data.objects["Camera"]
复制代码

保存渲染的图像

创建多个猴子网格和放置我们的相机在所需位置后的 最后一步 是保存图像。在我们保存图像之前,我们将渲染我们的图像,并将其存储为 “.png” 格式。渲染基本上是将 Blender 空间中的 3d 场景转换为二维视图,以便更容易以打印形式可视化。为了执行这个步骤,我们将设置路径,并将三维模型场景从相机的角度渲染成二维图像,保存在指定路径的目录中。一旦我们的图像被渲染和保存,我们可以恢复之前的路径来执行进一步的计算和操作。

# Setting the path for the first image captured in the first camera
FILE_NAME = "1.png"
FILE_PATH = "D:\\Cool Projects\\Paperspace\\3-D Models\\1.png"

# Save Previous Path
previous_path = bpy.context.scene.render.filepath

# Render Image
bpy.context.scene.render.filepath = FILE_PATH
bpy.ops.render.render(write_still=True)

# Restore Previous Path
bpy.context.scene.render.filepath = previous_path
复制代码

猜你喜欢

转载自juejin.im/post/7127926500900208653