Blender Python编程实现批量导入网格并保存渲染图像

目录
  • 引言
  • 导入库
  • 移除默认对象和相机
  • 添加多个 “猴头” 网格
  • 创建相机
  • 保存渲染的图像

引言

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

Blender 并不是唯一一款允许你为场景编程和自动化任务的3D软件; 随着每一个新版本的推出,Blender 正逐渐成为一个可靠的 CG 制作一体化解决方案,从使用油脂铅笔的故事板到基于节点的合成。

事实上,你可以使用 Python 脚本和一些额外的包来批处理你的对象实例化,程序化地生成东西,配置你的渲染设置,甚至获得你当前项目的自定义统计数据,这是非常棒的功能! 这是一种减轻繁琐任务负担的方式,同时也能让开发者参与到这个创造性工具社区中,而不仅仅是美术人员。

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

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

导入库

为了实现我们的项目,我们将进口三种主要必需品。首先,我们将导入 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

创建相机

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

位置(location) 将决定相机的位置,在那里我们将有最好的视角,所有对象呈现在屏幕的可见区域。旋转角度(rotation_euler) 由角度转换为弧度,这是在前面的编码部分中引入的数学库的帮助下完成的。

我们将指定沿所有三轴旋转的角度(弧度),以便 位置 和 旋转角度 都被正确放置。我们将场景的 collection 链接到当前的相机,并确保当前选择的相机被设置为活动

### 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 场景转换为 2D 视图,以便更容易以打印形式可视化。

为了执行这个步骤,我们将设置路径,并将三维模型场景从相机的角度渲染成二维图像,保存在指定路径的目录中。一旦我们的图像被渲染和保存,我们可以恢复之前的路径来执行进一步的计算和操作。

# 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

以上就是Blender Python编程实现批量导入网格并保存渲染图像的详细内容,更多关于Blender Python导入渲染图像的资料请关注我们其它相关文章!

(0)

相关推荐

  • Blender Python编程实现程序化建模生成超形示例详解

    目录 正文 什么是超形(Supershapes, Superformula) 二维超形 n1 = n2 = n3 = 1 n1 = n2 = n3 = 0.3 其他特别情况 例子 1 例子 2 例子 3 例子 4 例子 5 奇异的形状 三维超形 Blender 生成超形 详细代码和注释如下 正文 Blender 并不是唯一一款允许你为场景编程和自动化任务的3D软件; 随着每一个新版本的推出,Blender 正逐渐成为一个可靠的 CG 制作一体化解决方案,从使用油脂铅笔的故事板到基于节点的合成.

  • Blender Python编程创建发光材质示例详解

    目录 前言 正文 在 Python 脚本中创建一个着色器 我们的想法 具体代码与注释 创建发光材质 具体调用代码 前言 Blender 并不是唯一一款允许你为场景编程和自动化任务的3D软件; 随着每一个新版本的推出,Blender 正逐渐成为一个可靠的 CG 制作一体化解决方案,从使用油脂铅笔的故事板到基于节点的合成. 事实上,你可以使用 Python 脚本和一些额外的包来批处理你的对象实例化,程序化地生成东西,配置你的渲染设置,甚至获得你当前项目的自定义统计数据,这是非常棒的功能! 这是一种减

  • Blender Python编程快速入门教程

    目录 Blender Python 编程 数据访问 访问集合 访问属性 数据创建/删除 自定义属性 上下文 Context 运算符 Operators (Tools) Operator Poll() 将 Python 集成到 Blender 的方式 示例运算符 示例面板 数据类型 原生类型 内部类型 Mathutils 类型 动画 Blender Python 编程 支持的特性: 编辑用户界面可以编辑的任何数据(场景,网格,粒子等). 修改用户首选项.键映射和主题. 使用自己的设置运行工具. 创

  • Blender Python编程实现批量导入网格并保存渲染图像

    目录 引言 导入库 移除默认对象和相机 添加多个 “猴头” 网格 创建相机 保存渲染的图像 引言 继上一篇 <Blender Python 编程:快速入门> 我们已经了解了 Blender Python 脚本的基本概念.接下来让我们了解如何用 Python 编程实现一些 有意思的功能(减轻部分工作量). Blender 并不是唯一一款允许你为场景编程和自动化任务的3D软件; 随着每一个新版本的推出,Blender 正逐渐成为一个可靠的 CG 制作一体化解决方案,从使用油脂铅笔的故事板到基于节点

  • Python编程批量实现md5加密pdf文件

    Python编程实现批量md5加密pdf文件今天在某公众号看到一个关于pdf文件加密模块的介绍,突然有了一个想法,编写一个批量加密某目录下的所有pdf文件.结合md5加密和文件查找等知识,实现这个想法. 运行环境: OS:macOS Monterey Version 12.3.1(英文版) IDE:PyCharm 2020.1 代码分享如下: # 文件      :pdf加密.py # IDE      :PyCharm # 导入加密模块 import pikepdf # 导入操作模块 impo

  • python Django批量导入不重复数据

    本文为大家分享了python Django批量导入不重复数据的实现代码,供大家参考,具体内容如下 程序如下: #coding:utf-8 import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "www.settings") ''' Django 版本大于等于1.7的时候,需要加上下面两句 import django django.setup() 否则会抛出错误 django.core.exceptions

  • python Django批量导入数据

    前言: 这期间有研究了Django网页制作过程中,如何将数据批量导入到数据库中. 这个过程真的是惨不忍睹,犯了很多的低级错误,这会在正文中说到的.再者导入数据用的是py脚本,脚本内容参考至自强学堂--中级教程--数据导入.  注:本文主要介绍自己学习的经验总结,而非教程! 正文:首先说明采用Django中bulk_create()函数来实现数据批量导入功能,为什么会选择它呢? 1 bulk_create()是执行一条SQL存入多条数据,使得导入速度更快; 2 bulk_create()减少了SQ

  • Python编程实现线性回归和批量梯度下降法代码实例

    通过学习斯坦福公开课的线性规划和梯度下降,参考他人代码自己做了测试,写了个类以后有时间再去扩展,代码注释以后再加,作业好多: import numpy as np import matplotlib.pyplot as plt import random class dataMinning: datasets = [] labelsets = [] addressD = '' #Data folder addressL = '' #Label folder npDatasets = np.zer

  • python批量导入数据进Elasticsearch的实例

    ES在之前的博客已有介绍,提供很多接口,本文介绍如何使用python批量导入.ES官网上有较多说明文档,仔细研究并结合搜索引擎应该不难使用. 先给代码 #coding=utf-8 from datetime import datetime from elasticsearch import Elasticsearch from elasticsearch import helpers es = Elasticsearch() actions = [] f=open('index.txt') i=

  • Python编程实现超炫动态排序图

    目录 用 python 制作超燃动态排序视频 1,数据预处理 2,图表绘制 3,制作的图表转化为视频.动画 用 python 制作超燃动态排序视频 在开始之前,先贴张图,之前网上一段时间下面这种排序风格视频很火,下面这张图当作是视频其中的一帧. 制作这样视频的原理:就是把不同的帧组合在一起拼接成视频:把不同时间的排序图拼接在一起,拼接在一起形成一个随时间快速变化的动画,转化成视频,为了观看效果加一首很燃的BGM,最后的效果很赞. 这种视频 python 也能做,基本上分为三大部分,主要用到的就是

随机推荐