Blender使用python代码绘画:一个简单例子

news2024/9/25 7:20:01

Blender简介

Blender 是一款开源的三维计算机图形软件,它提供了广泛的功能,包括建模、动画、渲染、视频编辑等。Blender还支持Python编程接口,允许用户通过编写脚本来控制和定制软件的各个方面。

Blender的功能非常强大,它被广泛应用于电影制作、动画制作、游戏开发等领域。由于其开源的特性,Blender还拥有一个活跃的社区,用户可以分享插件、教程和艺术作品。

Blender曾用于《流浪地球》最后那个宏大场面:行星发动机从地球表面发射并将地球推向太空的壮观景象的CG生成。

安装

可以直接到官网下载安装程序:Download — blender.org

如果是FreeBSD,可以通过pkg安装,pkg install blender 具体参见:超强动画制作软件blender-CSDN博客

开始写代码

对一个什么都不懂,第一次接触Blender的人,咨询文心一言,让它给写了一个例子代码 

原始代码

import bpy  
  
# 删除默认场景中的所有物体(可选)  
for obj in bpy.data.objects:  
    bpy.data.objects.remove(obj, do_unlink=True)  
  
# 创建一个新的立方体  
bpy.ops.mesh.primitive_cube_add(size=2, location=(0, 0, 0))  
  
# 获取刚刚创建的立方体对象  
cube = bpy.context.object  
  
# 创建一个新的材质  
mat = bpy.data.materials.new(name="Red Material")  
mat.diffuse_color = (1, 0, 0)  # 设置为红色  
  
# 将材质分配给立方体  
cube.data.materials.append(mat)  
  
# 设置渲染引擎为Cycles(如果尚未设置)  
bpy.context.scene.render.engine = 'CYCLES'  
  
# 设置输出文件的路径和格式(可选)  
bpy.context.scene.render.filepath = "/path/to/your/output/file.png"  
bpy.context.scene.render.image_settings.file_format = 'PNG'  
  
# 渲染场景  
bpy.ops.render.render(write_still=True)  
  
# 如果你想要保存.blend文件,你可以使用bpy.ops.wm.save_as_mainfile(filepath="/path/to/your/blend_file.blend")  
# 但请注意,在脚本执行期间,最好避免使用UI操作(如保存文件),因为它们可能会导致问题。  
# 如果你确实需要保存文件,请考虑在脚本的最后部分或外部逻辑中执行此操作。  
  
# 脚本结束

针对例子中的报错,跟文心一言和ChatGPT交互进行改错,最终能够执行不报错。

最终测试代码

import bpy

# 删除现有的所有物体
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete()

# 创建第一个立方体
bpy.ops.mesh.primitive_cube_add(size=2, location=(0, 0, 0))
cube1 = bpy.context.object

# 创建第二个立方体
bpy.ops.mesh.primitive_cube_add(size=2, location=(2, 2, 0))
cube2 = bpy.context.object

# 创建一个新的材质  
mat = bpy.data.materials.new(name="Red Material")  
mat.diffuse_color = (1, 0, 0, 1)  # 设置为红色  
  
# 将材质分配给立方体  
cube1.data.materials.append(mat)  

# 创建一个新的材质  
mat2 = bpy.data.materials.new(name="Red Material")  
mat2.diffuse_color = (0, 0, 1, 1)  # 设置为蓝色  
  
# 将材质分配给立方体  
cube2.data.materials.append(mat2)  


# 添加摄像头
#bpy.ops.object.camera_add(location=(0, -6, 0))
bpy.ops.object.camera_add(location=(0, 3, 3))

camera = bpy.context.object
bpy.context.scene.camera = camera

camera.location = (0, -6, 4)  # 调整摄像头的位置
camera.rotation_euler = (1.1, 0, 0)  # 调整摄像头的旋转角度

# 更新场景,这样变化才会生效
bpy.context.view_layer.update()

# 设置渲染分辨率

bpy.context.scene.render.resolution_x = 1024
bpy.context.scene.render.resolution_y = 768



# 设置渲染路径
bpy.context.scene.render.filepath = 'e:/tmp/rendered_image.jpg'

# 渲染图像
bpy.ops.render.render(write_still=True)

执行代码

上面这段代码有两种运行方式:

一种方式是运行Blender软件,在软件里进入scripting 工作区,然后在文本区输入这段代码,按“三角形”运行图标开始运行即可。

第二种运行方式是纯python执行,建立一个文件testblender.py 文件,写入这段代码,然后直接执行python testblender.py 即可。执行之前需要先安装blender的库,使用

pip install bpy 

然后执行

python testblender.py
Fra:1 Mem:23.91M (Peak 24.98M) | Time:00:01.83 | Syncing Cube
Fra:1 Mem:23.98M (Peak 24.98M) | Time:00:03.10 | Syncing Cube.001
Fra:1 Mem:23.99M (Peak 24.98M) | Time:00:03.10 | Syncing Camera
Fra:1 Mem:23.99M (Peak 24.98M) | Time:00:03.12 | Rendering 1 / 64 samples
Fra:1 Mem:23.99M (Peak 24.98M) | Time:00:03.66 | Rendering 26 / 64 samples
Fra:1 Mem:23.99M (Peak 24.98M) | Time:00:03.74 | Rendering 51 / 64 samples
Fra:1 Mem:23.99M (Peak 24.98M) | Time:00:03.77 | Rendering 64 / 64 samples
Saved: 'e:\tmp\rendered_image.png'
Time: 00:04.29 (Saving: 00:00.49)

只需要四秒,两个正方形,正方形涂色,渲染过程就结束了!

再次修改blender代码,再次执行后,发现只要一秒多一点了。不知道是不是blender内部有加速机制,就像c编译的时候,如果保留中间文件,那么再次编译的时候速度会快很多。

调试

报错无法渲染, 没有摄像机

>>> bpy.ops.render.render(write_still=True)  
错误: 无法渲染, 没有摄像机

Traceback (most recent call last):
  File "<blender_console>", line 1, in <module>
  File "/usr/local/share/blender/3.6/scripts/modules/bpy/ops.py", line 113, in __call__
    ret = _op_call(self.idname_py(), None, kw)
RuntimeError: 错误: 无法渲染, 没有摄像机

添加一个摄像机,可以选择用菜单添加,也可以选择在代码里添加:

# 添加摄像头
#bpy.ops.object.camera_add(location=(0, -6, 0))
bpy.ops.object.camera_add(location=(0, 3, 3))

camera = bpy.context.object
bpy.context.scene.camera = camera

camera.location = (0, -6, 4)  # 调整摄像头的位置
camera.rotation_euler = (1.1, 0, 0)  # 调整摄像头的旋转角度

写入错误:(No such file or directory)无法保存


>>> bpy.ops.render.render(write_still=True)  
错误: 写入错误:(No such file or directory)无法保存 '/path/to/your/output/file.png'

Traceback (most recent call last):
  File "<blender_console>", line 1, in <module>
  File "/usr/local/share/blender/3.6/scripts/modules/bpy/ops.py", line 113, in __call__
    ret = _op_call(self.idname_py(), None, kw)
RuntimeError: 错误: 写入错误:(No such file or directory)无法保存 '/path/to/your/output/file.png'
修改文件到指定的地方,比如windows10里放到e:盘:

# 设置渲染路径
bpy.context.scene.render.filepath = 'e:/tmp/rendered_image.jpg'

报错sequences of dimension 0 should contain 4 items, not 3

Python: Traceback (most recent call last):
  File "C:\Users\Admin\Documents\无标题.blend\文本.001", line 17, in <module>
ValueError: bpy_struct: item.attr = val: sequences of dimension 0 should contain 4 items, not 3
维度序列应该是4个而不是3 ,原来blender物体维度需要RGB+透明度,是四个变量,

而文心一开始给的例子里面只有RGB,所以报错。加入透明度,1代表完全不透明

# 创建一个新的材质  
mat = bpy.data.materials.new(name="Red Material")  
mat.diffuse_color = (1, 0, 0, 1)  # 设置为红色  

颜色设置的@通道没有用

将diffuse_color 的第四个参数设置为0,应该是透明,但是最终渲染完之后发现跟设置为1没有区别

mat = bpy.data.materials.new(name="Red Material")  
mat.diffuse_color = (1, 0, 0, 0)  # 设置为红色  

问题待解决。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1677646.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL和吉客云单据接口对接

MySQL和吉客云单据接口对接 源系统:吉客云 杭州吉客云网络技术有限公司是经国家认定的高新技术企业&#xff0c;是国内领先的SaaSERP软件服务商&#xff0c;致力于为企业提供安全稳定、高可用性和高扩展性的一站式数字化解决方案。 写入目标:MySQL MySQL是最流行的数据库之一&a…

【C语言】水仙花数

问题 水仙花数&#xff08;Narcissistic number&#xff09;也被称为超完全数字不变数&#xff08;pluperfect digital invariant, PPDI&#xff09;、自恋数、自幂数或阿姆斯壮数数&#xff08;Armstrong number&#xff09;。 它是指一个n位数&#xff08;n≥3&#xff09;…

推荐系统学习笔记(一)

A/B测试 随机分桶--哈希函数随机分 如果某个实验组指标明显优于对照组&#xff0c;则值得推全 分层实验 问题&#xff1a;流量不够用怎么办&#xff1f; 同层互斥----避免一个用户被两个实验影响 不同层正交----每层独立随机分配用户 为什么不能全都用正交&#xff1f; 同…

【机器学习:IT行业的现在与未来】技术应用与趋势探索

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 &#x1f381; 引言&#x1f300; 当前机器学习技术的深度剖析与实践展示&#x1f3af; 算法与架构的革新轨迹&#x1f4c8; 数据科学与基础设施的融合进化&#x1f512; 安全、隐私与伦理&#xff1a;技术的道德指南针&…

【Maven】简介_下载安装

1.maven简介 项目管理工具项目对象模型 project object model (POM) 一个项目&#xff1a;清理、编译、测试、打包、发布、部署 1.1 为什么需要使用maven 组装机和品牌机的概念IDE &#xff08;集成开发环境&#xff09;不是万能的依赖大量的手工操作&#xff0c;编译、测试、…

Odin:免费轻量化BAS工具,守护企业网络安全新利器!

墨云科技依托多年安全验证经验积累&#xff0c;推出免费轻量化安全验证工具——Odin。墨云Odin安全验证工具从设计上极大的简化了BAS的任务流程&#xff0c;专为企业持续安全运营设计&#xff0c;提供轻量化、全方位的安全策略有效性验证。 Odin提供综合攻击模拟服务&#xff0…

scratch求和 2024年3月中国电子学会图形化编程 少儿编程 scratch编程等级考试四级真题和答案解析

目录 scratch求和 一、题目要求 1、准备工作 2、功能实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、pytho…

Spring MVC(一)

1 Spring MVC概述 我们在之前学习Servlet的时候&#xff0c;认识了在WEB开发中MVC设计模式&#xff0c;其最为经典的设计就是&#xff0c;通过控制器&#xff08;Controller&#xff09;分离模型&#xff08;Model&#xff09;和视图&#xff08;View&#xff09;。在具体的WEB…

【408精华知识】计算机系统结构

感觉教材和网络上对于计算机系统的结构描述都比较模糊&#xff0c;我自己对其进行了总结&#xff0c;并且画出图&#xff0c;不过因为学习的还是不够深入和全面&#xff0c;有的地方肯定是有问题的&#xff0c;烦请大家批评指正&#xff0c;我会进行修改~ 文章目录 零、结构图总…

OpenAI 新发布的 GPT-4o,有血有肉的Ai来了,可实时语音视频交互

今天&#xff0c;OpenAI又又又开发布会了。 在大众心里&#xff0c;现在也基本上都知道&#xff0c;奥特曼是一个贼能PR的人。 每一次的PR的时间点&#xff0c;都拿捏的极其到位&#xff0c;精准的狙击其他厂商。比如说上一次Sora&#xff0c;其实你会发现从头到尾就是一个PR的…

中腾食品上海食堂承包创新食堂空间,构建企业第三文化沙龙

在快节奏的现代职场生活中&#xff0c;企业食堂已不再是简单的餐饮供应地&#xff0c;而是逐渐演变成为员工休息休闲、互动体验、阅读思考的重要场所。中腾国际团餐产业集团通过专业的定制化食堂承包&#xff0c;在企业食堂内部打造企业第三文化空间&#xff0c;为员工提供一个…

基于ProxySQL中间件实现MySQL的读写分离

目录 ProxySQL简介 ProxySQL安装 配置YUM仓库 YUM安装 关于读写分离的实现 集群信息 测试读写分离 测试总结 ProxySQL Configuration CLI ProxySQL简介 ProxySQL是一个高性能的MySQL协议代理&#xff0c;它支持多种数据库后端&#xff0c;包括Amazon Aurora、RDS、Cl…

外卖订餐总后台系统原型

页面数量&#xff1a;共 210 页 源文件格式&#xff1a;rp格式&#xff0c;兼容 Axure RP 9/10 应用领域&#xff1a;O2O领域、网上订餐、外卖行业 文章展示不够全面&#xff0c;如有兴趣请联系作者 该原型作品为外卖订餐总后台管理系统&#xff0c;定位偏向美团外卖与饿了么一…

unapp写微信小程序封装水印相机组件怎么实现?

<template><view><!-- <cu-custom bgColor"bg-gradual-blue" :isBack"true"><block slot"backText">返回</block><block slot"content">编辑资料</block></cu-custom> --><…

让大模型更贴近人类认知水平,上海AI实验室发布首个因果推理评测体系CaLM

近日&#xff0c;上海人工智能实验室&#xff08;上海AI实验室&#xff09;联合同济大学、上海交通大学、北京大学及商汤科技发布首个大模型因果推理开放评测体系及开放平台CaLM&#xff08;Causal Evaluation of Language Models&#xff0c;以下简称“CaLM”&#xff09;。首…

MySQL:MySQL索引结构为什么选用B+树?

一、前言 当我们发现SQL执行很慢的时候&#xff0c;自然而然想到的就是加索引。在MySQL中&#xff0c;无论是Innodb还是MyIsam&#xff0c;都使用了B树作索引结构。我们知道树的分类有很多&#xff0c;MySQL中使用了B树作索引结构&#xff0c;这是为什么呢&#xff1f; 本文将从…

HOJ 修改首页 和后端logo图片 网页收藏标识ico 小白也会的方法

HOJ 是一款优雅知性的在线评测系统&#xff0c;像一位温文尔雅的女性&#xff0c;你会慢慢喜欢上她的。 制作图片素材 用图像编辑软件 比如 **光影魔术手4.0** 制作以下素材 logo.a0924d7d.png 为前台导航栏左边的logo&#xff0c; 600*200 backstage.8bce8c6e.png 为后台侧…

虚拟化技术 在vCenter Server创建数中心、添加主机

一、实验内容 1.安装Flash 2.在vCenter Server创建数中心、添加主机 二、实验主要仪器设备及器材 1.安装有64位Windows操作系统的台式电脑或笔记本电脑&#xff0c;建议4C8G或以上配置 2.在Windows Server 2008 R2已安装vCenter Server 3.Adobe Flash Player 12.0.0.70.e…

数据结构【顺序表】

文章目录 1.顺序表的概念线性表物理结构逻辑结构 2.顺序表的分类2.1静态顺序表2.2动态顺序表 3.顺序表接口的实现头文件(SQList.h)如下源文件初始化顺序表销毁顺序表插入扩容尾插头插 封装扩容函数删除尾删头删 查找元素在指定位置前插入数据情况一(指定的位置不是首元素)情况二…

CMF认证是什么?怎么报名?考试费用多少?有必要参加培训吗?

CMF认证是由国际变革管理学院&#xff08;CMI&#xff09;颁发的一种认证&#xff0c;旨在评估个人在变革管理领域的知识和技能&#xff0c;并确认其在该领域具备专业能力。通过学习和理解变革管理知识体系&#xff08;CMBoK&#xff09;&#xff0c;参与者可以掌握变革管理的理…