🌐
blenderでピタゴラスの木を作る
ピタゴラスの木(Pythagoras tree)をblenderのTissueプラグインで作っている人がいたので、スクリプトで書いてみました。
画像はDEPTHを8でやってますが、実行時間かかるので、載せるコードは4にしておきます。
ひさびさに回転行列とか使って、いい勉強になりました。
import bpy
from math import radians, sqrt, cos, sin
DEPTH = 4
def rot(u, v, r):
return cos(r) * u - sin(r) * v, sin(r) * u + cos(r) * v
def set_materials(depth):
name = f"green{depth}"
bpy.data.materials.new(name = name)
mat = bpy.data.materials[name]
mat.use_nodes = True
node_tree = mat.node_tree
mat_node = node_tree.nodes['Principled BSDF']
mat_node.inputs['Base Color'].default_value = (0, 0.3 + depth/DEPTH, 0, 1)
#mat_node.inputs['Metallic'].default_value = 1
#mat_node.inputs['Specular'].default_value = 1
bpy.ops.object.material_slot_add()
bpy.context.object.active_material=mat
def tree(size, x, y, angle, depth):
bpy.ops.mesh.primitive_cube_add(size=size, location=(x,y,0))
bpy.ops.transform.rotate(value=radians(angle))
set_materials(depth)
if depth:
nsize = size / sqrt(2)
u, v = size/2, size
r = radians(angle)
xr, yr = rot(u, v, r)
xl, yl = rot(-u, v, r)
tree(
nsize,
xr + x,
yr + y,
angle - 45, depth - 1
)
tree(
nsize,
xl + x,
yl + y,
angle + 45, depth - 1
)
tree(3, 0, 0, 0, DEPTH)
Discussion