1

私は基本的に、プリミティブUV球を使用して3D散布図を作成しており、一度に数百を超えるポイントを作成しようとすると、メモリの問題が発生します。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 

このような単純なスクリプトでは、パフォーマンスの向上は無視できる可能性が高いと思いますが、とにかく試してみたかったのです。

4

1 に答える 1

2

いくつかの可能な提案

  • x、y、z値を事前に計算し、それらをmathutilベクトルに格納して、それをdictに追加して繰り返します。
  • 複製は、新しいオブジェクトをインスタンス化するよりも少ないメモリフットプリントを提供する必要があります。bpy.ops.object.duplicate_move(OBJECT_OT_duplicate=(linked:false, TRANSFORM_OT_translate=(transform)

編集:

さらに調査を行うと、bpy.ops。*が再描画関数と呼ばれるたびに表示されます。あるユーザーは、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()

次に、オブジェクトの場所を設定するためにコードを適応させる場合です。

obj.location = location_dict[i]
于 2013-02-28T17:15:56.033 に答える