BlenderのPython処理スピードに関する下調べ
概要
BlenderのPythonが遅いので速くするヒントを得ようと試したが、あまり意味なかった...
詳細
- まずは200の立方体を作るプログラムを次のように100回実行して時間の変移を見てみる。
import bpy import time def addOps200Time(addOps): ''' return sec for 200 times bpy.ops.mesh.primitive_xxx_add ''' bpy.ops.object.select_all(action='SELECT') bpy.ops.object.delete(True) # delete all start = time.time() for z in range(0,10,5): # x2 for y in range(0,40,4): # x10 for x in range(0,40,4): # x10 addOps(location=(x,y,z)) return(time.time()-start) resultTable = [] for i in range(100): resultTable.append(addOps200Time(bpy.ops.mesh.primitive_cube_add)) for t in resultTable: print(t)
- 結果は、最初の200個は1.5秒だが100回繰り返すと200個で4.1秒と徐々に増加していく。ただし、この繰り返しを続けると全体にさらに遅くなっていく。三回やった結果が次のグラフ。Blender自体を再起動すれば元に戻るようだ。高速化のヒントはイマイチ分からない。
-(追記) もしやと思って、繰り返しの部分を次のように内包表記にしてみたが、ほとんど変化なかった。bpy.opsの処理自体が遅いってことだろうなあ。
[addOps(location=(x,y,z)) for z in range(0,10,5) for y in range(0,40,4) for x in range(0,40,4)]