引言

继上一篇 《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导入渲染图像的资料请关注Devmax其它相关文章!

Blender Python编程实现批量导入网格并保存渲染图像的更多相关文章

  1. ios – 如何使用blender和PowerVR SDK为cocos3d创建一个简单的3d球体

    我是cocos3d的新手.我想创建一个简单的项目–旋转的3d球体.我用搅拌机设计了一个3d球体.所以我想要帮助创建collada文件和pod文件.使用blender和PowerVRSDK创建这个简单的3d对象时应该注意什么.谢谢解决方法如何在搅拌机中制作简单的球体,然后使用JeffLamarche的Blender-to-iOSscript将其导出?这甚至不需要Cocos或PowerVR,但这是一个良好的开端.由于您可以在iOS中轻松地将Cocos与非Cocos类集成,因此可能会有所帮助.你可以更进一步,利

  2. XCode 3.2 Ruby和Python模板

    在xcode3.2下,我的ObjectiveCPython/Ruby项目仍然可以打开更新和编译,但是你无法创建新项目.鉴于xcode3.2中缺少ruby和python的所有痕迹(即创建项目并添加新的ruby/python文件),是否有一种简单的方法可以再次安装模板?我发现了一些关于将它们复制到某个文件夹的信息,但我似乎无法让它工作,我怀疑文件夹的位置已经改变为3.2.解决方法3.2中的应用程序模板

  3. Swift基本使用-函数和闭包(三)

    声明函数和其他脚本语言有相似的地方,比较明显的地方是声明函数的关键字swift也出现了Python中的组元,可以通过一个组元返回多个值。传递可变参数,函数以数组的形式获取参数swift中函数可以嵌套,被嵌套的函数可以访问外部函数的变量。可以通过函数的潜逃来重构过长或者太复杂的函数。

  4. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  5. Swift、Go、Julia与R能否挑战 Python 的王者地位

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  6. 红薯因 Swift 重写开源中国失败,貌似欲改用 Python

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  7. 你没看错:Swift可以直接调用Python函数库

    上周Perfect又推出了新一轮服务器端Swift增强函数库:Perfect-Python。对,你没看错,在服务器端Swift其实可以轻松从其他语种的函数库中直接拿来调用,不需要修改任何内容。以如下python脚本为例:Perfect-Python可以用下列方法封装并调用以上函数,您所需要注意的仅仅是其函数名称以及参数。

  8. Swift中的列表解析

    在Swift中完成这个的最简单的方法是什么?我在寻找类似的东西:从Swift2.x开始,有一些与你的Python样式列表解析相当的东西。(在这个意义上,它更像是Python的xrange。如果你想保持集合懒惰一路通过,只是这样说:与Python中的列表解析语法不同,Swift中的这些操作遵循与其他操作相同的语法。

  9. swift – 有没有办法把SCNNode总是放在别人面前?

    我一直在尝试使用场景工具包创建一个场景,其中指定的对象始终位于其他对象的前面,尽管事实上它实际上位于其他对象的后面.与blender中使用的效果类似.显然,blender使用GUI和大量数学来转换2D对象,但我需要在具有SCNGeometry的SCNNode中使用此效果,换句话说,当前位于场景中的3D对象.我考虑使用类别掩码,但在阅读Apple的文档后,我意识到这对我正在寻找的效果不起作用.有没有人知道在SceneKit中做这个的方法?非常感谢大家,现在以及我从StackExchange获得的所有其他帮助

  10. swift抛出终端的python错误

    每当我尝试启动与python相关的swift时,我都会收到错误.我该如何解决?

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部