2020年4月30日木曜日

案ずるより産むが易いという話

最近全く Blender の記事を書かないのですが…いや、モデリングはしてます。ただ、Linux の更新時期や Python2 系のサポート終了がありまして。どのタイミングで OS と Blender と Python を同時にアップデートしようかと悩んでいたのですよ。
私のモデリング及び、リギングは自前で書いた Python スクリプトの動作なくしては不可能なんです。
特に、一括ボーンロール値0化と、左右対称頂点グループ作成は…。
で、この度 Ubuntu が 20.04 になり、 Python3 標準となったので、覚悟を決めて移植開始…と、思ったのですが…


  • ボーンロール値一括0化スクリプト
エディットモードでボーンを選択して以下のスクリプトを実行

ソース

import bpy

if bpy.context.mode == 'EDIT_ARMATURE':
    #print('EDIT_ARMATURE')
    for obj in bpy.context.selected_objects:
        #print(obj.name)
        # Use armature only
        if obj.type == 'ARMATURE':
            print(obj.name)
            for bone in obj.data.edit_bones:
                print(bone.name)
                bone.roll = 0

2.8 系、2.7 系両対応
…まったく手直ししないで動作可能でした。


  • 左片方のみのリギングモデルを両面化

コレは備忘録を兼ねて、 Blender 2.8 系で再掲。

1.ボーン(アーマチュア)を編集モードで選択して、右クリック→名前→自動ネーム(左右)
コレでボーン名の最後に左右を示す .L .R が付く。

2.ボーンを編集モードで選択して、右クリック→対称化
コレで反対側のボーンが作られる

3.オブジェクトモードで、リギングしたオブジェクトを選択して以下のスクリプトを流す

ソース

import bpy

if bpy.context.mode == 'OBJECT':
    # print all selected objects
    for obj in bpy.context.selected_objects:
        print(obj.name)
     
        # Use objectmode only
        if obj.type == 'MESH':
            list_add = []
            for vg in obj.vertex_groups:
                pair_name = ''
                length = len(vg.name)
                if vg.name[length-2:] == '.L':
                    pair_name = vg.name[:length-1]+'R'
                if vg.name[length-2:] == '.R':
                    pair_name = vg.name[:length-1]+'L'
                if pair_name != '':
                    if not obj.vertex_groups.get(pair_name):
                        list_add.append(pair_name)
         
            for name_add in list_add:
                print(name_add)
                obj.vertex_groups.new(name = name_add)

2.8 系、2.7 系両対応

コレが…

こうなる

4.オブジェクトモードで、リギングしたオブジェクトを選択してモディファイアを追加→ミラー

5.追加したミラーモディファイアをX軸を選択した状態(デフォルト)で→適用

完成!

…はい、正直拍子抜けでした。
修正したスクリプトコードは左右対称用の最後の3行だけ。…こんな事の為に私は1年待ってしまったのか。
GW中にひとまず、モデリング用マシンを Ubuntu20.04 化して環境を作る予定ですが…遅れをどれだけ取り戻せるやら。

0 件のコメント:

コメントを投稿