ユーザーブロマガは2021年10月7日(予定)をもちましてサービスを終了します

Rigifyを少し使いやすく
閉じる
閉じる

新しい記事を投稿しました。シェアして読者に伝えましょう

×

Rigifyを少し使いやすく

2015-01-18 22:49
    初めまして、Blenderで試行錯誤している者です。

    最近Pythonコードが読めるようになり、Rigifyの機能を少し改変できるようになりました。Rigify機能の中で、自分が気になっていた問題点とその解決方法をまとめます。

    簡単な内容ではありますが、コード改変を行うので記事の内容を実践する際は自己責任でお願いします。

    BlenderとRigifyのバージョンは以下の通りです。
    ・Blender : 2.73
    ・Rigify : 0.4


    問題点

    Rigifyが生成するボーンの中で、ウェイトペイントなどで使用するボーンは図のレイヤーに配置されています。


    [図1:DEF系ボーン配置レイヤー]

    このレイヤー、3Dビューのプロパティパネルからは表示・非表示が切り替えられないので、少し不便です。


    [図2:3Dビュープロパティパネル(コード変更前)]

    この問題の解決方法として、プロパティパネルにボタンを追加し、追加したボタンから図1のレイヤーの表示・非表示を切り替えられるようにします。


    解決方法

    Rigifyのコードを改変するのですが、先にコード変更後の3Dビューをご覧ください。


    [動画1:3Dビュープロパティパネル(コード変更後)]

    追加したボタン(ここでは「変形」ボタン)でレイヤーの表示・非表示を切り替えられるようになります。プロパティパネルから操作できるので、少し作業が楽になります。

    ではコードの改変方法を以下に記述します。

    まず、rig_ui_template.pyをテキストエディタで開きます。
    Blender 2.73の場合、以下の場所にあります。
    ・blender.exeがあるフォルダ/2.73/scripts/addons/rigify/rig_ui_template.py

    578行目以降に、次のコードがあります。

    # Root layer
    code += "\n row = col.row()"
    code += "\n row.separator()"
    code += "\n row = col.row()"
    code += "\n row.separator()\n"
    code += "\n row = col.row()\n"
    code += " row.prop(context.active_object.data, 'layers', index=28, toggle=True, text='Root')\n"

    ブロマガだと折り返しがあるので分かり辛いですが、一番下の赤くなっている二行(583, 584行目)をコピペして、次のように変更します。

    # Root layer
    code += "\n row = col.row()"
    code += "\n row.separator()"
    code += "\n row = col.row()"
    code += "\n row.separator()\n"
    code += "\n row = col.row()\n"
    code += " row.prop(context.active_object.data, 'layers', index=28, toggle=True, text='Root')\n"

    code += "\n row = col.row()\n"
    code += " row.prop(context.active_object.data, 'layers', index=28, toggle=True, text='Root')\n"

    一番下の行のindexの値を29に変更し、textの値をDeformに変更します。29という数字は図1で示したレイヤーに対応します。textの値はプロパティパネルのボタン上に表示されるテキストなので、何でもOKです。

    # Root layer
    code += "\n row = col.row()"
    code += "\n row.separator()"
    code += "\n row = col.row()"
    code += "\n row.separator()\n"
    code += "\n row = col.row()\n"
    code += " row.prop(context.active_object.data, 'layers', index=28, toggle=True, text='Root')\n"

    code += "\n row = col.row()\n"
    code += " row.prop(context.active_object.data, 'layers', index=29, toggle=True, text='Deform')\n"

    以上で終了です。
    Blenderを起動し、metarigを追加、「Generate」ボタンでアーマチュアを生成すると、プロパティパネルに新しいボタンが追加されています。

    textの値として設定した'Deform'は、既に日本語のデータがあるので、日本語化している場合「変形」と表示されます。
    indexの値を変えれば、他のアーマチュアレイヤーも操作できるので、空いているレイヤーにボーンを追加したい時なども便利かもしれません。


    備考

    コード改変後、新規でRigifyアーマチュアを生成する場合この備考は読み飛ばしてください。

    コード改変前に生成されたRigifyアーマチュアについては、内部ファイルを編集する必要があります。アーマチュア生成後は、rig_ui_template.pyを基にrig_ui.pyファイルがプロジェクトファイル内部に生成されています。rig_ui_template.pyの583, 584行目とrig_ui.pyの695, 696行目が対応しているので、上記と同じような改変で対応することが可能です。

    アーマチュアを再生成しても大丈夫な場合は、再生成によってrig_ui_template.pyのコードが適用されます。


    後記

    最初、プロパティパネル右クリックの「ソースを編集」から中身を見ようと思ったのですが、エラーが出て見られず戸惑ったので、記事としてまとめてみました。
    誤字脱字、その他気になった点などあればコメントお願いします。

    広告
    コメントを書く
    コメントをするには、
    ログインして下さい。