隅歩つ

書いて理解を深める

Blender PythonAPIでCameraの位置と角度を設定する

作業画面

BlenderのPythonAPIでカメラとライトを扱ったことがありません。

今回はカメラを試してみました。

カメラの位置と角度を設定

まだよくわかっていませんが、位置と角度は設定できました。

以下でカメラの上下左右を調整しています。

camera = bpy.data.objects['Camera']
    x = math.radians(61)
    y = 0
    z = math.radians(22)
    rot = (x, 0, z)
    loc = (5, -12, 8)
    camera.location = loc
    camera.rotation_euler = rot

カメラの上下の調整は以下です。

x = math.radians(60)

カメラの左右の調整は以下です。

z = math.radians(22)

上下60度の場合

60度

上下65度の場合

65度

上下70度の場合

70度

上下73度の場合

73度

作業画面

作業画面

調べるとカメラを使いこなすにはまだまだ知らなければいけないことが多そうです。

全コード

import bpy
import math
import colorsys

NUM = 8


def delete_all():
    for i in bpy.data.meshes:
        bpy.data.meshes.remove(i)
    for i in bpy.data.materials:
        bpy.data.materials.remove(i)


def make_cube(x, y, z):
    loc = (x, y, z)
    bpy.ops.mesh.primitive_plane_add(size=12.0)
    bpy.ops.mesh.primitive_cube_add(location=loc, size=0.8)
    bpy.ops.object.material_slot_add()


def make_cubes(num):
    for x in range(-num, num):
        make_cube(x, 0, 1)


def make_material(name, color):
    ma = bpy.data.materials.new(name)
    ma.use_nodes = True
    bsdf = ma.node_tree.nodes['Principled BSDF']
    bsdf.inputs[0].default_value = color
    bsdf.inputs[4].default_value = 1
    bsdf.inputs[6].default_value = 0.5
    bsdf.inputs[7].default_value = 1
    bsdf.inputs[9].default_value = 0
    bpy.context.object.data.materials.append(ma)
    ma.diffuse_color = color
    return ma


def make_materials(num):
    mats = []
    for i in range(num):
        name = 'color'+str(i)
        rgb = colorsys.hsv_to_rgb(i/num, 1, 1)
        color = (rgb[0], rgb[1], rgb[2], 1)
        mats.append(make_material(name, color))
    return mats


def set_materials(mats):
    index = 0
    for o in bpy.data.objects:
        for m in o.material_slots:
            m.material = mats[index]
            index += 1
            break


def set_camera():
    camera = bpy.data.objects['Camera']
    x = math.radians(65)
    y = 0
    z = math.radians(22)
    rot = (x, 0, z)
    loc = (5, -12, 8)
    camera.location = loc
    camera.rotation_euler = rot


if __name__ == '__main__':
    delete_all()
    make_cubes(NUM)
    mats = make_materials(NUM*2)
    set_materials(mats)
    set_camera()

BlenderユーザーのためのPython入門

BlenderユーザーのためのPython入門

  • 作者:大西武
  • シーアンドアール研究所
Amazon

yuuuha.hatenablog.com