2013-02-28 55 views
1

我基本上是使用原始UV球構建3D散點圖,並且在試圖一次創建超過幾百個點時遇到內存問題。我限制在我的筆記本採用了2.1GHz的處理器,而是想知道是否有寫這個更好的方法:在Blender3D中更有效的Python腳本

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 

我意識到這樣一個簡單的腳本任何性能增加可能是微不足道的,但想給無論如何這是一槍。

回答

2

一些可行的建議

  • 我會預先計算的X,Y,Z值,將其存儲在mathutil載體,將其添加到字典進行遍歷。
  • 複製應該提供比實現新對象更小的內存佔用量。 bpy.ops.object.duplicate_move(OBJECT_OT_duplicate=(linked:false, TRANSFORM_OT_translate=(transform)

編輯:

做進一步的研究它每次出現bpy.ops *稱爲重繪功能。一名用戶記錄了爲了產生紫外球所需的時間呈指數增長。

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() 

然後,它僅僅是適應代碼設置對象位置

obj.location = location_dict[i] 
+0

肯定的情況。真棒。我正在做的事情實際上使重複更有意義 - 應該在動畫過程中產生好的效果。謝謝! – 2013-03-01 00:40:33