Rigifyのリグは、単純にスケールしてスケールを適用すると形が崩れてしまう。
この問題は、全てのボーンのストレッチコンストレイントの「元の長さ」を、全て初期値に戻すことで改善する。
この解決方法を紹介する。
もくじ
一旦初期ポーズに戻す
ちゃんと修正できるか確認しやすいように、事前にポーズやキーフレームはなくしておく。
- ポーズモードにする
- 全てのボーンレイヤーを表示する
- 全てのボーンを選択する
- ポーズ > トランスフォームをクリア > すべて を実行して、ポーズをクリアする
- キーフレームが影響しないように、アクションを除去しておく
メッシュとリグのスケールを変える
メッシュとリグのスケールを変更する。カーソル中心でスケールするとよい。
- オブジェクト > スナップ > カーソル → ワールド原点(Shift + S) で、カーソルをワールド座標の中心に移動する
- ヘッダーから、トランスフォームのピボットポイントをカーソルに変更する
- スケール(S)を変更する
スケールを適用する
- オブジェクト > 適用 > スケール で、変更したスケールを適用する
この時点でメッシュとリグがおかしくなるので、これを修正していく。
「元の長さ」設定を全て元に戻す
スケールしておかしくなる問題は、ストレッチコンストレイントの「元の長さ」を全て初期値に戻すことで改善する。
コンソールエディターを開く
スクリプトを実行する
ストレッチコンストレイントのあるボーンを1つ1つ変更しても修正することはできるが、手間なのでスクリプトで一括処理する。
- 対象のリグを選択しておく
- コンソールウィンドウに、下記のコードを貼り付ける
- エンターを2回押して実行する
- bone_count で処理した数がわかる
bone_count = 0 for b in bpy.context.active_object.pose.bones: for c in b.constraints: if c.type == "STRETCH_TO": c.rest_length = 0 bone_count += 1 bone_count
参考
Guide: How to scale a Rigify rig