当前位置: 首页 > news >正文

blender4.5 使用外部IDE(pycharm)编辑脚本(bpy)实践指南

  • blender的内置的脚本编辑器,十分难用,故而我使用了pycharm
  • 首先添加一个python解释器,最好使用blender内部的那个,我是默认安装的目录就在这里:

C:/Program Files/Blender Foundation/Blender 4.5/4.5/python/bin/python.exe

在这里插入图片描述

  • 为这个解释器添加一个新的模块:bpy,有两个方案,一个是手动安装,一个是从pypi自动安装
    • 自动安装:如下图即可,如果搜索没有搜到,等一下,或者关了重开,应该是网络问题,就会有了;
      在这里插入图片描述
    • 手动安装,去这个网址,找到对应版本的whl : *https://download.blender.org/pypi/bpy/*然后执行安装可以:
C:\Program Files\Blender Foundation\Blender 4.5\4.5\python\bin>python.exe -m pip install "C:\Program Files\Blender Foundation\Blender 4.5\4.5\python\bin"

在这里插入图片描述

  • 这样模块就安装好了,此时新建一个py文件,import bpy就应该可以了,代码提示应该也有了:
  • 执行脚本,将写好的py文件,在blender中执行有2种方法,其实是3种;
    参考: https://docs.blender.org/api/4.5/info_tips_and_tricks.html#use-an-external-editor
    • 在blender直接打开外部文件,有变更时刷新即可,ctrl+R可以刷新外部的编辑器变更,出现矛盾是点这个红色按钮,按外部修改即可;在编辑器内点击执行;
      在这里插入图片描述
      在这里插入图片描述
    • 使用这个脚本,直接执行外部文件即可,这是官方推荐的方案;这样就不用刷新了;
import bpy
import osfilename = os.path.join(os.path.dirname(bpy.data.filepath), "demo01.py")
exec(compile(open(filename).read(), filename, 'exec'))

在这里插入图片描述

  • 其他问题,当需要引入"bmesh"等独立模块时,无法引入; 实际是可以引入的,只是编辑器不能识别; 注意注意!!必须先引入bpy才能引入bmesh否则报错,这样的代码就可以执行;虽然没有提示;
import bpy
import bmeshmesh = bpy.data.meshes.new("MyMesh")
bm = bmesh.new()
bm.verts.new((0, 0, 0))
bm.verts.new((1, 0, 0))
bm.to_mesh(mesh)
bm.free()
  • 附一个实例代码
import randomimport bpy# 删除所有的集合
for obj in bpy.data.collections:bpy.data.collections.remove(obj)# 删除所有的对象
for obj in bpy.data.objects:bpy.data.objects.remove(obj, do_unlink=True)# 删除所有的网格体
for obj in bpy.data.meshes:bpy.data.meshes.remove(obj)# 清理孤儿对象(定义了,但是未使用的数据,或者说未连接到场景集合上的)
bpy.ops.outliner.orphans_purge(do_local_ids=True, do_linked_ids=True)# 获取第0个场景的集合对象
scenes0 = bpy.data.scenes[0].collection# 创建2个集合,都连接到场景0上
c1 = bpy.data.collections.new("collection01")
scenes0.children.link(c1)c2 = bpy.data.collections.new("collection02")
scenes0.children.link(c2)# 定义网格体的顶点和面,边会自动推断
tetrahedronVertexes = [(0, 0, 0),  # 顶点 A(原点)(1, 0, 0),  # B(0, 1, 0),  # C(0, 0, 1),  # D(尖顶)
]
tetrahedronFaces = [(0, 1, 2), (0, 1, 3), (1, 2, 3), (0, 2, 3)]# 创建一个四面体的网格体
myTetrahedronMesh = bpy.data.meshes.new("myTetrahedronMesh")
myTetrahedronMesh.from_pydata(tetrahedronVertexes, [], tetrahedronFaces)
myTetrahedronMesh.update()# 创建好27个对象,都使用一个网格体,也就是上面的四面体
for i in range(3):for j in range(3):for k in range(3):obj = bpy.data.objects.new(f"obj{i}_{j}_{k}", myTetrahedronMesh)# 对象按照阵列分布位置把obj.location = (i, j, k)# 所有的对象均连接到集合1上c1.objects.link(obj)# 再创建一个曲线数据块
myCurveMesh = bpy.data.curves.new("myCurve", type='CURVE')
myCurveMesh.dimensions = "3D"
myCurveMesh.resolution_u = 12# 每个曲线有需要包含若干含样条,定义样条和样条点
spline = myCurveMesh.splines.new(type="BEZIER")
points = spline.bezier_points
points.add(1)
points[0].co = (0, 0, 0)
points[1].co = (-1, -1, 1)# 创建曲线的对象,并且连接到场景根节点(场景集合)
myCurveObj = bpy.data.objects.new("obj_curve", myCurveMesh)
scenes0.objects.link(myCurveObj)# 或者调用ops操作来创建对象也是可以的,效率略低
# 例如创建一个nurbs圆球,会自动连接到当前活动的集合中的
bpy.ops.surface.primitive_nurbs_surface_sphere_add(radius=1, enter_editmode=False, align='WORLD', location=(1, -1, 0), scale=(1, 1, 1))######以下是材质的内容######## 定义一个参数化的材质
customMaterial = bpy.data.materials.new("customMaterial")
customMaterial.use_nodes = True
nodes = customMaterial.node_tree.nodes
links = customMaterial.node_tree.linksnodes.clear()# 添加 Principled BSDF 和输出
bsdf = nodes.new(type="ShaderNodeBsdfPrincipled")
output = nodes.new(type="ShaderNodeOutputMaterial")
links.new(bsdf.outputs[0], output.inputs[0])# 添加 Attribute 节点(读取 "BaseColor" 属性)
attr = nodes.new(type="ShaderNodeAttribute")
attr.attribute_name = "customColors"  # ← 关键:属性名
attr.attribute_type = "OBJECT"# 连接颜色
links.new(attr.outputs["Color"], bsdf.inputs["Base Color"])# 获取集合1中的所有对象,并赋予一个材质,且每个对象颜色都不同
for obj in c1.objects:# 为每个对象创建一个自定义属性-颜色,然后由材质读取此属性,以输出不同的颜色;这样就可以定义自定义属性obj["customColors"]= (random.random(), random.random(), random.random(),1)# 将材质赋予到网格上
myTetrahedronMesh.materials.append(customMaterial)# !!!!!!!!!!!!!!!!!!!!!!!!如果需要查看某个对象的属性可以执行这个!!!!!!!!!!!!!!!!!!!!!!!!!!! #
# obj = bpy.data.objects['obj0_0_0']
# for prop in obj.bl_rna.properties:
#    print(prop.identifier, ":", prop.description)
http://www.dtcms.com/a/548968.html

相关文章:

  • 计算机的一点基础知识
  • 广州网站建设 乐云seo国外优秀论文网站
  • CSS 图像拼合技术
  • 【C++】模板进阶 | 继承
  • 排名优化网站建设长沙网站建设优化
  • 厦门网站优化服务pyhton做网站
  • 论文阅读笔记——数据增强
  • 如何裁剪YOLOv8m的大目标检测头并验证其结构
  • 扩展阅读:目标检测(Object Detection)标注
  • MR30分布式IO:破局锂电池制造产线,引领高效生产新变革
  • AI赋能科研创新:ChatGPT-4o与DeepSeek-R1在学术研究中的深度应用指南
  • 《数据库系统》SQL语言之分组查询与分组过滤(理论理解分析+实例练习)
  • 家乡介绍网页设计海口seo网络推广
  • 【ROS2】动作服务器:rclcpp_action::Client 详解
  • 红松APP首秀北京老博会,“有温度的科技”赋能退休兴趣生活
  • 【ZEGO即构开发者日报】Soul AI Lab开源播客语音合成模型;腾讯混元推出国内首个交互式AI播客;ChatGPT Go向用户免费开放一年......
  • 数据库基础-数据库的三级模式
  • 图书馆网站建设调查问卷wordpress小工具自定义
  • 前端兼容性与调试技巧完全指南
  • 深度解析 Rust 的数据结构:标准库与社区生态
  • 关于组态软件的三个误解
  • 需要使用耐高温过炉治具的产品类型
  • qt QPushButton 启用选中状态(按钮可切换状态)
  • 河北云网站建设免费空间做网站
  • webrtc代码走读(十二)Transport-cc协议与RTP扩展头
  • 前端多版本零404部署实践:为什么会404,以及怎么彻底解决
  • k8s的包管理工具helm3--流程控制语句(3)
  • Kubernetes 实战入门核心内容总结
  • F042 A星算法课程推荐(A*算法) | 课程知识图谱|课程推荐vue+flask+neo4j B/S架构前后端分离|课程知识图谱构造
  • STM32H743-ARM例程34-BootROM