Blender3D中更高效的Python脚本

2024-06-08 01:51:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我基本上是建立一个三维散点图使用基本的紫外线球体和运行内存问题时,试图创建超过几百个点一次。我的笔记本电脑只有2.1Ghz处理器,但我想知道是否有更好的方法来编写:

import bpy
import random 

while count < 5:
    bpy.ops.mesh.primitive_uv_sphere_add(size=.3,\
    location=(random.randint(-9,9), random.randint(-9,9),\
    random.randint(-9,9)), rotation=(0,0,0))

    count += 1 

我意识到,有了这样一个简单的脚本,任何性能提升都可能微不足道,但无论如何都想试一试。在


Tags: 方法内存importcountrandom处理器ops笔记本电脑
1条回答
网友
1楼 · 发布于 2024-06-08 01:51:53

一些可能的建议

  • 我将预先计算x,y,z值,将它们存储在mathutil向量中,并将其添加到dict中进行迭代。在
  • 复制应该提供比 实例化新对象。bpy.ops.object.duplicate_move(OBJECT_OT_duplicate=(linked:false, TRANSFORM_OT_translate=(transform)

编辑:

做进一步的研究,每次bpy.ops公司.*被称为redraw函数。一个用户记录生成UV球体所需时间呈指数级增长。在

CoDEmanX向另一个用户提供了以下代码段。在

import bpy

bpy.ops.object.select_all(action='DESELECT')
bpy.ops.mesh.primitive_uv_sphere_add()
sphere = bpy.context.object


for i in range(-1000, 1000, 2):
    ob = sphere.copy()
    ob.location.y = i
    #ob.data = sphere.data.copy() # uncomment this, if you want full copies and no linked duplicates
    bpy.context.scene.objects.link(ob)
bpy.context.scene.update()

那么这只是一个调整代码以设置对象位置的情况

^{pr2}$

相关问题 更多 >

    热门问题