隅田川沿いを歩きつつ

歩きながら考えたことや感じたこと

Blender PythonAPIでCubeをrotationする

Blender の PythonAPI を勉強中です。

今回は、Blender で PythonAPI で cube を作って、それを回転させたいと思います。

18個のcubeを20度ずつ回転させる

cubeが回っていることがわかりやすいように、18個のcubeを20度ずつ回転させて並べました。

回転させるためのコードは2種類つくりました。

1つ目は、math.piを使いました。

math.pi*2/18*x

2つ目は、角度をradiansで変換しました。

math.radians(x*20)

どちらもmathを使うので、最初にmathモジュールをインポートが必要です。

コード全体は以下となります。

import bpy
import random
import math


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


def make_cube(x, r):
    loc = (x, 0, 0)
    rot = (r, 0, 0)
    cube = bpy.ops.mesh.primitive_cube_add(location=loc, rotation=rot)


def make_cubes():
    for x in range(19):
        r = math.pi*2/18*x
        # r = math.radians(x*20)
        make_cube(x*3, r)


if __name__ == '__main__':
    delete_all()
    make_cubes()

3Dは超初心者なので、回転させるイメージが湧きづらいです。。

何度もやってれば慣れますかね?

yuuuha.hatenablog.com

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

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

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

Blender PythonAPIのsin,cosで螺旋を作る

BlenderPython APIを勉強中です。

今回は、sin、cosの使い方を調べてみました。

コードの説明

まず、sin、cosを使うためにmathモジュールをインポートします。

sin、cosを使う場合にmathモジュールは必須です。

import bpy
import math

書き方は、「math.sin(x)」「math.cos(x)」のように書きます。

また、ラジアンに変換する必要があります。

ラジアンは、「math.radians(x)」と書きます。

x = math.cos(math.radians(i*10))*10
y = math.sin(math.radians(i*10))*10

ちなみに、角度に変換する場合は、「math.degrees(x)」です。

コード全体

コード全体は以下となります。

球体の数は、300個です。

import bpy
import math

NUM = 300
sca = 0.5


def all_delete():
    for item in bpy.data.meshes:
        bpy.data.meshes.remove(item)


def make_cube(x, y, z):
    loc = (x, y, z)
    sphere = bpy.ops.mesh.primitive_uv_sphere_add(
        scale=(sca, sca, sca), location=loc)


def make_cubes(num):
    for i in range(num):
        x = math.cos(math.radians(i*10))*10
        y = math.sin(math.radians(i*10))*10
        z = i/5
        make_cube(x, y, z)


if __name__ == '__main__':
    all_delete()
    make_cubes(NUM)

ちょっとずつ書き方がわかってきて楽しくなってきました。

yuuuha.hatenablog.com

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

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

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

Blender の Python API でマテリアル設定(もっと基本編)

以前、別の記事でマテリアル設定のことを書きました。

そのやり方は本で見たものだったのですが、私には難しく少し理解しづらいものでした。

別のサイトでもっとシンプルで理解しやすいものがで残します。理解しやすいけど使い勝手は悪そうです。けど、わかることは重要です。

コードを書いてみる

単純に書くと以下のようになります。

ma = bpy.data.materials.new('color')
ma.diffuse_color = (1, 0, 0, 1)

しかし、マテリアルは1つではないと思うので、リストに入れます。

ma = []
ma.append(bpy.data.materials.new('color'))

新規作成したマテリアルに色を付ける(ディフューズで設定)。

ma[0].diffuse_color = (0, 1, 1, 1)

そして、オブジェクトに新規作成&ディフューズ設定したマテリアルを設定する。

bpy.ops.mesh.primitive_cube_add()
bpy.context.object.data.materials.append(ma[0])

コードの全体はこちら

最初にオブジェクトとマテリアルを削除しています。

import bpy

for m in bpy.data.meshes:
    bpy.data.meshes.remove(m)

for m in bpy.data.materials:
    bpy.data.materials.remove(m)

ma = []
ma.append(bpy.data.materials.new('color'))
ma[0].diffuse_color = (0, 1, 1, 1)

bpy.ops.mesh.primitive_cube_add()
bpy.context.object.data.materials.append(ma[0])

だいぶ基本的な部分が理解できてきました。

けど、応用して作成しようとすると、すぐにつまづきます。

引き続きBlenderPythonをがんばろうと思います。

yuuuha.hatenablog.com

参考サイト→ http://www3.muroran-it.ac.jp/yt-lab/Blender/blender28.pdf

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

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

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

PythonAPIでMeshをCube状に積み上げる

BlenderPython APIを勉強中です。

今回は、Mesh(Sphere)をCube状に積み上げてみました。

Generative Design系では、よく使うものなのでやってみました。

今回は、マテリアルはなしでシンプルにしてみました。

↓コードはこちら

import bpy

for m in bpy.data.meshes:
    bpy.data.meshes.remove(m)

# Objectの幅
s = 0.45

for i in range(5): # X軸
    for j in range(5): # Y軸
        for k in range(5): # Z軸
            bpy.ops.mesh.primitive_uv_sphere_add(
                scale=(s, s, s), location=(i, j, k))

まず、Meshを削除します。

for m in bpy.data.meshes:
    bpy.data.meshes.remove(m)

次に、X軸・Y軸・Z軸にCubeを5つずつ並べるための座標を設定します。

for i in range(5): # X軸
    for j in range(5): # Y軸
        for k in range(5): # Z軸
            bpy.ops.mesh.primitive_uv_sphere_add(

最後に、X軸・Y軸・Z軸に並べたCubeのlocationを設定します。

bpy.ops.mesh.primitive_uv_sphere_add(
    scale=(s, s, s), location=(i, j, k))

オブジェクトの数が増えれば増えるほど、Pythonで設定したほうが楽になりますね。

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

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

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

Blenderのファイル形式

最近、3Dをやり始めました。

Blender を中心にしているのですが、ファイル形式がよくわかりませんでした。

例えば、TouchDesigner に Blenderで作ったデータを取り込みたくて、Blenderでエクスポートしようとしても見たことがない拡張子が並んでいる。いろいろ試してもうまくいかない。ググってみても、ある程度わかっている人向けの説明が多い。

最近、やっとわかってきました。

『実写合成のためのBlender3DCG制作ワークフロー』という本にわかりやすく書かれていました。

基本は3つ

いろいろあって混乱してましたが、基本は3つのようです。

Blenderではさまざまなデータ形式に対応していますが、3Dモデルを扱う際によく使われるのは「.blend」「.fbx」「.obj」の 3つです。まずはこの 3つを覚えておけば、困ることはあまりないでしょう。

こういうのを求めていました。

「.blend」はBlenderのネイティブファイル形式、「.fbx」と「.obj」は共に汎用性が高く、別の3DCGソフト上でやりとりする際によく使われる形式です。「.fbx」はリグやアニメーションのデータまで記録できるので動きのある 3D オブジェクトに向いており、「.obj」は動きのある記録はできませんが、軽いという特徴があります。どの形式を利用しても構いませんが、「.blend」形式がやはり一番互換性が高いです。素材サイトで購入する際は、データ形式の他、テクスチャやリグのありなしなどを事前に仕様欄で確認できます。

頭の中がすっきりしました。

以前、Blender データを TouchDesigner に読み込むことができたことがあったのですが、そのときは「.obj」でした。その時は、正しいのか間違っているのかわからなかったのですが問題なかったようです。

今は 3D で仕事をしているわけではないので「.blend」はもちろんですが、おそらく「.obj」と「.fbx」だけでいいように思います。

yuuuha.hatenablog.com