Quantcast
Channel: 気まぐれブロマガ
Viewing all articles
Browse latest Browse all 56

Blender 小ネタ・その2 - 頂点グループとボーングループを作成するスクリプト

$
0
0

先日、Blender用のPMXエクスポーターの紹介動画を投稿しました。

動画の中ではウェイト関連の話にあえて触れていません。なぜなら、初心者の私にはまだよくわからない点が多いからです。

皆さんは、ミラーモディファイアを追加したメッシュオブジェクトにどのようにウェイトをつけているのでしょうか。
私はいろいろ試行錯誤して、結局次のようなやり方が一番無難に感じました。

  1. ミラーモディファイアの目アイコンを閉じて、ビューに表示しない。
  2. メッシュの実体のあるほう(左側)だけウェイトを塗る。
  3. 右のボーンに対応した空の頂点グループを作成する。
ここまでやってミラモディファイアを表示させると、ミラー状態(右側)のほうもウェイトが塗られたのと同じ状態になり、ボーンを動かすと変形してくれます。

ということで、ミラー側の頂点グループを作成するスクリプトを作ってみました。
MARKER0 = ".L"
MARKER1 = ".R"
# -----------------------------------------------------#
import bpy
j = len(MARKER0) * -1
vertex_groups = bpy.context.active_object.vertex_groups
vertex_group_add = bpy.ops.object.vertex_group_add
vertex_group_names = [x.name for x in vertex_groups]
for x in vertex_group_names:
if x.endswith(MARKER0):
name1 = x[:j] + MARKER1
if name1 not in vertex_group_names:
vertex_group_add()
vertex_groups.active.name = name1
スクリプト冒頭部分2行の変数定義は、左右のマーカーです。各自のモデルの状態に合わせて書き換えてください。もし右側に実体を作ってミラーさせているのなら、MARKER0のほうに右のマーカーを、MARKER1のほうに左のマーカーを定義してください。

対象のオブジェクトをアクティブにしてから、このスクリプトをBlenderのテキストエディターで開き(Alt O、またはコピペ)、スクリプトを実行(Alt P)してください。例えば「shoulder.L」なら「shoulder.R」という空の頂点グループを作成します。

ミラーの場合はこうしたほうがいいんだよ、というのがあればご指摘ください。


グループつながりで、ボーングループの話もついでに。
ボーングループはいつも決まったパターンがあるという場合に、スクリプトでボーングループだけ作ってしまうと楽そうです。とくにPMXエクスポーターではボーングループをPMX表示枠に代用しているので、MMD標準モデルに従ったボーングループを作ることになります。そこで、スクリプトを作ってみました。
groups = [
"IK",
"体(上)",
"髪",
"腕",
"指",
"体(下)",
"足",
]
themes = ["THEME{:0>2}".format(x) for x in range(1, 21)]
# -----------------------------------------------------#
import bpy
active_object = bpy.context.active_object
if active_object.mode != "POSE" and bpy.ops.object.mode_set.poll():
bpy.ops.object.mode_set(mode="POSE")
bone_groups = bpy.context.active_object.pose.bone_groups
group_names = {x.name for x in bone_groups}
group_add = bpy.ops.pose.group_add
for x, y in zip(groups, themes):
if x not in group_names:
group_add()
bone_groups.active.name = x
bone_groups.active.color_set = y
スクリプト冒頭の変数groupsのところで、作成するボーングループの名前を列挙します。上記ではMMDの表示枠の名前にしたため日本語を使っています。日本語を使う場合は、このスクリプトをファイルに保存するときに文字コードをUTF-8にすることが必要です。Blenderのテキストエディターを使って保存するとよいでしょう。
変数themesにはカラーセットの名前のリストを代入します。このスクリプトは機械的にカラーセットを割り当てていますが、お好みのものがあれば、「"THEME02"」などと個別に名前を列挙したリストにします。

アーマチュアをアクティブにしてこのスクリプトを実行すると、一気にボーングループを作成できます。ボーンの登録は手作業で。

Viewing all articles
Browse latest Browse all 56

Trending Articles