電子竹林:Blog2

Tech関係、はてなダイアリーから移転済み...

BlenderのPythonで単純な作成

概要

BlenderPythonなら繰り返しの配置が簡単なので面白い

詳細

  • 基本はbpy.ops.mesh.primitive_cube_add(l) で並べていくだけ。引数はlocation、rotationなど使ってみた。
  • これをScriptingのワークスペースにして、テキスト/新規でスクリプト作って実行しただけ。
  • マニュアルはBlender 2.81 Python API Documentation — Blender Python APIにある。まだまだ概念がイマイチ分かってないので上手く調べられない。
  • 最初にオブジェクトを全部消したい時は次の行を入れる。ただし、カメラもライトも全部削除されるけど
bpy.ops.object.select_all(action='SELECT')   
bpy.ops.object.delete(True) 

立方体を円柱に配置

import bpy
import math
for z in range(0,20,5):
  for d in range(0,360, 20):
    x = 10*math.cos(math.radians(d))
    y = 10*math.sin(math.radians(d))
    lo = (x,y,z)
    ro = (0,0,math.radians(d))
    bpy.ops.mesh.primitive_cube_add(location=lo,rotation=ro)

f:id:zom-1:20191220113239p:plain:w400

立方体を螺旋に配置

import bpy
import math
z = 0
for d in range(0,360*3, 20):
    x = 10*math.cos(math.radians(d))
    y = 10*math.sin(math.radians(d))
    z = z+0.5
    lo = (x,y,z)
    ro = (0,0,math.radians(d))
    bpy.ops.mesh.primitive_cube_add(location=lo,rotation=ro)

f:id:zom-1:20191220113249p:plain:w400

ランダムな大きさの直方体 10x10x10

import bpy
import math
import random
for z in range(0,40,4):
  for y in range(0,40,4):
    for x in range(0,40,4):
      bpy.ops.mesh.primitive_cube_add(location=(x,y,z) )
      bpy.ops.transform.resize(value=(random.random(),random.random(),random.random()))

f:id:zom-1:20191220113245p:plain:w400

  • bpy.ops.mesh.primitive_cube_addの引数ではsizeはあるが各辺で指定出来ないみたい(多分)。なので、bpy.ops.transform.resizeで後から各辺の長さを変えている
  • この処理、かなり遅い。どこが遅くなっているのかまだ調べてないが。
  • 遥か昔にBASICで繰り返しの線を描いてただけで楽しかった時を思い出す。

docs.blender.org