MkItYs

MkItYs > 音楽・漫画・VR・自律制御 > 

images

キャラクタ・メイキング(容姿や体型を変える/表情を変える/髪や服を取り替える):Unity (BlendShapes, Hair, Cloth) , DAZ, VRoid

images

Unity でキャラメイクをするための、いくつかの手法です。

関連


3Dキャラをカスタマイズする:リアル調/アニメ調:DAZ Studio
3Dキャラをカスタマイズする:アニメ調:VRoid Studio
汎用ジョイントの基本(物理ベースのキャラを動かす力):Unity (ConfiguarableJoint)

容姿や体型を変える/表情を変える


DAZ のモデルは、すべてのモーフをUnity に導入することができます。

これはつまり、Unity 上であらゆるキャラメイクができる、ということですーー容姿や体型の変更から表情の操作まで、すべてをUnity 上で実行できます[※1][※2][※3][※4]

ただ導入するモーフの数で、メッシュ上のモーフがある位置は変わってきますーーなのでモーフの指定は、名前から位置を取り出すほうが楽かもしれません:

GameObject shpfce;
SkinnedMeshRenderer mshfce;
int idxmph;
    
mshfce = shpfce.GetComponent<SkinnedMeshRenderer>();
idxmph = mshfce.sharedMesh.GetBlendShapeIndex("...");
mshfce.SetBlendShapeWeight(idxmph, ...);

※1
モーフには、複数のメッシュに定義されたものもありますーーUnity 上でその変形を再現するには、スクリプトでそれらを連動させる必要があります(たとえばDAZ では眼と睫毛のメッシュが分かれているので、まばたきは、それらを連動させて実装する、など)。
※2
モーフでメッシュを変形させることはできますが、ボーンはできませんーーメッシュの変形にともない体や手足の長さを変えたい場合は、それらのスケールを変えることになります。
※3
ただし物理演算を適用したキャラの場合、(編集時は可能ですが)実行時にスケールを変えることはできません(Rigidbody とTransform は相反する演算です)ーーそれでも実行時に物理演算のキャラのスケールを動的に変えたいなら、ジョイント(CharacterJoint / ConfigurableJoint)の接続の位置(anchor, connectedAnchor )を最初に保存し、スケールを変えるごとに再適用することで、破綻をふせぐことができます(そのようにしてモーフの適用とスケールの変更を同時に行っているのが、上の動画です)。
※4
メッシュを変形させずに、モノを重ねることでも、擬似的に凹凸をつけることはできますーーこのとき凹上に変化させるには、モノが重なった箇所に「穴」を開けるよう、シェーダの記述を修正します。

表情を変える:アニメ調(定義された表情セットを使う)


VRoid のモデルは、VRM の規格に沿った形で表情のモーフが定義されていますーーなので表情の操作については、比較的かんたんに行えます:

VRMBlendShapeProxy shptgt;
GameObject objtgt;

shptgt=objtgt.GetComponent<VRMBlendShapeProxy>();
shptgt.SetValues(new Dictionary<BlendShapeKey,float> {
  {BlendShapeKey.CreateFromPreset(BlendShapePreset.Joy),...},
  {BlendShapeKey.CreateFromPreset(BlendShapePreset.Fun),...},
  {BlendShapeKey.CreateFromPreset(BlendShapePreset.A),...},
  {BlendShapeKey.CreateFromPreset(BlendShapePreset.E),...}
});

表情を変える:アニメ調(アゴを動かす)


DAZ のモデルはリアルな人体を模倣しています。なので、口が動けば顎も動きますーーアニメ調でもそういったリアリティを求めるなら、DAZ のキャラクタで実現できます。

髪や服を取り替える


髪や服を取り替えるのに、かんたんに導入できるのはHairやCloth ですーーこれらは、キャラクタのボーンと(ウェィトで)連動するものではないので、どのキャラにもUnity 上で適用することができます:[※1][※2][※3]

:Unity (Hair) , VRM (Hairstyle, SpringBone)
:Unity (Cloth)

※1
Unity のHairは、まだ正式な機能ではありません。
※2
FBX 形式の服のモデルをUnity に導入し〜Cloth を適用する場合、編集画面では表示されるのに、ビルドしたものはデバイス上で実行すると、表示されないことがありますーーこれは、Cloth がメッシュへの読み書きを要求するためなので、次を有効にしておきます(編集画面では、この読み書きの設定は無視されます):
- OBJECT > model > meshes
  > read/write: <yes>
※3
もちろんCloth では限界があり、とくに体に密着するような服は難しいはずですーーなおDAZ では、この問題を「コンフォームドフィギュア」というやり方で解決しているようです(服にもキャラと同じボーンを組み込み、ウェイトをつけ、キャラのボーンと連動させる)ーーたしかに服だけUnity にインポートしてみると、キャラと同じボーンのサブセットが存在しますーーなのでこのボーンをキャラのボーンの位置・回転と一致させれば、連動するはずですが……
https://3dgraph.me/daz-studio/clothing-import-to-dazstudio-from-blender/
http://kotozone.blog55.fc2.com/blog-entry-170.html

髪や服を取り替える:アニメ調(DAZ のモデルにVRiod の髪を適用する)


DAZ のモデルにも、VRiod の髪を適用できます。

次を実行したあと:

VRoid Studio 上で、適用したい髪を、VRoid の体ともにVRM 形式でエクスポート
Unity 上で、VRoid の体と髪を分離

次のように、Vroid の髪をDAZ の体に適用します:

・メッシュ:hairs
  ・変更:親ノード:daz (MESH)
  ・変更:skinned mesh renderer > root bone: daz (hip)
・ボーン:j_bip_c_head
  ・変更:親ノード:daz (head)
・揺れもの:secondary
  ・変更:親ノード:daz
  ・変更:vrm spring bone > center: daz (hip)