2018/08/13

PoseSpaceDeformationを使ってBlendShapeを流用する

はじめまして。
BACKBONEの田淵です。

今回は、PoseSpaceDeformationを使ったリグのご紹介です。

リグを設計する際にデフォームのクォリティを上げるため、
各関節に補助骨やBlendShapeを設定することがありますが、
私は、大量のキャラに対して同じセットアップが必要な場合は、
補助骨でリグを設計するようにしています。

補助骨とウェイトを流用することで、効率的に他のキャラへ移植が出来ますし、
デフォームのクォリティも保つことが出来ます。

形状が大きく異なるモデルでも、ウェイト調整用の共通のCageモデルを使用することで、
効率よく移植出来ることも利点として考えられます。

一方、BlendShapeで設計する場合は、各キャラごとにターゲットモデルの修正が発生する恐れがあります。
効率の観点から、これまで必要な個所のみでしかBlendShpaeを使用して来なかったのですが、
maya2017から搭載されたPoseSpaceDeformationを使用することで、
これらの問題を気にせずにBlendShapeを使用することが可能となりました。

では、作成方法からご紹介します。

 

Pose Space Deformation

◆Poseの作成

① Deform > Pose Space Deformation > Pose Editorでエディターを開きます。
角度を取得したいJointを選択して、Create Pose Interpolatorボタンをクリックすると、
JointのposeInterpolator(ポーズ補間ノード)が作成されます。

(補足)
Pose EditorのPoses > Create Pose Interpolatorのオプションで

Add Neutral Posesにチェックを入れておくと、
poseInterpolator作成時に初期ポーズ(ニュートラルポーズ)が作成されます。
これは後からでも追加作成が可能です。
poseInterpolatorを選択⇒Pose > Add Neutral Poses。

 

② モデルの形状を修正したいポーズに設定し、Meshを選択して、
Pose EditorのAdd Poseボタンをクリックします。

Name:にBlendShape名を設定し(今回はarm_BS)、BaseMesh:のSelectedにチェックを入れて、
Create Pose Shapeをクリックします。

 

③これで、MeshにBlendShapeが追加され、poseInterpolatorに上記ポーズが追加設定されました。
作成後はEditボタンが赤く表示され、エ
ディットモード状態なのでモデル修正が行えます。

モデル修正後、Editボタンをクリックすると、Editボタンが灰色となりShapeが確定します。
モードを切り替えることで、何度でもモデルの修正が行えますので、
確認しながら修正を行ってください。
TypeをSwing and Twistに切り替えると、Poseの判定にTwist回転も加わります。

(補足)
作成されたPoseのShape情報はBlendShapeに格納されており、
poseInterpolatorからWeight値がコネクションされています。

 

◆Poseの反転

Pose Editorで上記で作成したposeInterpolatorを選択し、右クリックでMirrorを実行すると
Jointの名前のSource(検索する文字)とTarget(置き換える文字)を設定するUIが立ち上がります。

 

② OKをクリックすると、反対側のposeInterpolatorが作成されます。
Mirror実行後にL側に別のPoseを追加しても、再度Mirrorを実行すると、
何度でもR側に反映させることが出来ます。

 

PoseのExport

Pose EditorのFile > Export AllでPoseとShape情報が書き出せます。

 

◆PoseのImport

Pose EditorのFile > ImportでPoseとShape情報が読み込めます。

(補足)
maya2017でImportした際、poseInterpolatorとBlendShapeとのコネクションが
再現されていない場合があります。

poseInterpolator作成時に設定したBlendShape名と同じ名前のBlendShapeを
事前に設定しておくことでコネクションの再現が出来るようです。

 

poseInterpolatorの移植

同じトポロジーのMeshで作成された、プロポーションが異なるモデルを2つ用意しました。
右側のモデルがPoseSpaceDeformationを設定したベースモデル、左側のモデルが新規モデルです。
モデルの名前は同じ名前に設定しておかないと、移植出来ません。
この程度の体格差であれば、問題無く移植出来ます。

 

①PoseSpaceDeformationを設定したベースモデルを選択し、
Pose EditorのFile > Export SelectionでPoseとShape情報を書き出します。

 

②新規モデルを選択し、
Pose EditorのFile > ImportでPoseとShape情報を読み込みます。
Importを行うとこのような感じになります。
ほとんどターゲットの修正は必要無いくらいですね。

 

小ネタ

最後にPose Space Deformationを使った小ネタをご紹介します。

◆肘を曲げた際にTシャツと素体との干渉を避ける方法

①上腕の捻り曲げ成分を分解したJointを設定し、Tシャツの袖部分をこのJointにバインドします。
Twist成分を抜いたJointなので、Tシャツは上腕のTwistの影響を受けません。

 

肘を曲げるとTシャツの袖が素体と干渉しています。

 

② 素体との干渉を避けるために、肘のJointをドライバーとして補助骨を設定してみます。

 

一見よさげですが、上腕をTwistすると補助骨が残ってしまいます。
上腕のTwistも考慮にいれたJointをドライバーにする必要がありそうです。

 

③ 別途、上腕にJointを作成し常に手首を見るように設定します。
作成したJointは、捻り曲げ成分のJoint階層へ格納しておきます。
※手法は色々ありますが、今回はJointにIKを設定し、手首にコンストレインしています。

 

④ ③で作成したJointに対し、poseInterpolatorを作成します。
肘を曲げた際のPoseを作成し、素体との干渉を避けるようにモデルを修正します。

 

このままだと、上腕をTwistした際に、補助骨と同じような結果になります。
上腕をTwistして肘を曲げた際のPoseで、モデル修正が必要です。

 

⑤ 上腕をTwistして肘を曲げた際のPoseを作成し、モデルを修正して完成です。
※モデル形状は詰めておりませんが、ご了承ください!

 

まとめ

PoseSpaceDeformationを用いて移植する際の注意点としては、下記となります。

  • 同じトポロジーのMeshであること
  • Skinのウェイトに差が少ないこと
  • 極端に体格差が無いこと
  • ドライバーは工夫すること

クロスシミュレーションで作成したターゲットを使用すると、
よりリアルな表現にすることも可能です。
是非試してみてください。

ではまた!

 

※免責事項※
本記事内で公開している全ての情報について、その完全性、正確性、適用性、有用性等いかなる保証も行っておりません。
これらの情報のご利用により、何らかの不都合や損害が発生したとしても、当社は何らの責任を負うものではありません。
自己責任でご使用ください。
※モデルご提供※
関隆史様


ブログTOPへ戻る