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)