私のモデリング及び、リギングは自前で書いた 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 件のコメント:
コメントを投稿