DevelopmentPronama-chan

[Python] プロ生ちゃん Blender アドオン開発!

慧: こんにちは! Python Advent Calendar 2014 兼 プロ生ちゃん Advent Calendar 2014 の1日目の記事で、3DCG 制作ソフトウェア「Blender」の話題だよ。

Blender だけど、Blender Advent Calendar 2014 とか Blender Advent Calendar 2014 の記事じゃないよ。

Python で Blender アドオン開発!

Blender は、Python スクリプトでいろいろ操作したり、拡張機能を Python で作れるんだよね。というわけで、私、モデリングは全然できないんだけど、Blender アドオンを作ってみたよ。

まず、何もしない最小の Blender アドオンは、こんな感じ。

do-nothing.py
bl_info = {
    "name": "Do Nothing Addon",
    "category": ""}

def register():
    pass

def unregister():
    pass

このファイルを、Windows の場合は、Blender Foundation\Blender\2.7x\scripts\addons に配置すると、アドオンとして使えちゃうよ。有効にしても何もしないんだけどね。

スプライトアニメ表示アドオン!

そして今回作ったのがコレ! Blender 画面にスプライトアニメを表示してくれるアドオンで、画面右から左へ私が走っていくよ。Spacebar menu から呼び出してね。

このアドオンで、3DCG 制作が便利になったりとかは、何もないけど……! ダウンロードは、GitHub から。

pronama-chan-blender-add-on

元ネタは プロ生ちゃん IDE に匹敵する Blender アドオン。エイプリルフールネタのアドオンみたいなんだけどね……。開発者の CoDmanX さんに連絡したら、GPL のコードだったから、これを改造したよ。

アドオンは、このテクスチャ画像を読み込んでコマアニメとして表示しているの。

texture

コードに直接いろいろ値を書いてるけど、もし別のテクスチャ画像を使ってアニメを表示したいって人は、PronamaChanSprite クラスあたりを編集するとだいたいうまくいくかも。

blender-add-on.py
# テクスチャの UV テーブル
spriteUV = ((0,     0, 0.125, 0.1875),
            (0.125, 0, 0.125, 0.1875),
            (0.25,  0, 0.125, 0.1875),
            (0.375, 0, 0.125, 0.1875),
            (0.5,   0, 0.125, 0.1875),
            (0.625, 0, 0.125, 0.1875))

# スプライト制御
class PronamaChanSprite:

    # 開始設定(今回の場合、x 座標の初期値だけ外部から指定する)
    def setup(self, x):
        self.x = x
        self.y = random.random()
        self.current_index = random.randint(0, len(spriteUV) - 1)
        self.scale = 1 # テクスチャ画像のスケール(1倍にすると画面の縦幅の大きさで描画される)

    # 更新処理(描画ごとに呼ばれる)
    def update(self, aspect):
        # スプライトインデックス更新
        self.current_index += 1
        if self.current_index >= len(spriteUV):
            self.current_index = 0

        # 移動
        self.x -= 0.015 * aspect # 0.015 は移動量
        if self.x <= 0:
            # 左側に移動したら位置を再設定
            self.setup(1 + self.scale * 0.125 * aspect) # 0.125 はテクスチャ内でのキャラの横幅

spriteUV にコマ数分のテクスチャ内の位置・大きさを設定してて、テクスチャ画像の幅は 1。左下の座標が (0, 0) になるよ。

ちょこっと説明

アドオンのコードでは、オペレータクラス VIEW3D_OT_pronama_chan を定義して、アドオンの登録時(register)に、このオペレータクラスを登録。

オペレータクラスでは、描画のコールバックの登録や、タイマーの処理を行って、画面を更新。

描画のコールバック関数で、OpenGL 関連の関数を操作してテクスチャとポリゴンを描画……という感じ。

全コードは、GitHub を確認してね。わかる範囲でコメントを入れてるよ。

おわり!

というわけで以上だよ。気になった人は Blender + Python 試してみてね。Python スクリプトでモデリング操作的なのもトライしようと思ったんだけど、少し間に合わなかったのでまた次の機会!

プロ生ちゃん Advent Calendar 2014 は、まだ募集中だから参加してみてね。私のはちょっと手が込んでたかもしれないけど、こんな感じの内容であれば OK!

sample.py
print("Pronama-chan")

あと、素材 も活用してくれたら嬉しいな。