Grayちゃんの髪型を変更できるようにしてみた(物理もあるよ)

今回作るもの
(ポニーテールのほうはUV展開も適当、専用のテクスチャもマテリアルも作ってないので汚くて申し訳ありません)
(UV展開してきました。が、綺麗に色が出ない・・・申し訳ありません。これが限界です)
 
大まかな流れは以下のとおりです
1.Grayちゃんの新しい髪型を作る
2.髪のないメッシュ、ツインテールだけのメッシュ、新し髪型だけのメッシュ、この3種類のメッシュをエクスポートする
3.スケルトンをGrayChan_Skeletonを指定して3つのメッシュをインポートする
4.キャラクターBPで髪型のスケルタルメッシュコンポーネントを作製する
5.キャラクターBPで髪型を変更できるようにする
6.各種髪型のアニメーションブループリントを作り、CopyPoseFromMeshで髪型がキャラクターを追従するようにする
7.AnimDynamicで髪の毛を揺らす
以上です
 
さて早速はじめましょう
 

 

自前でモデルを用意出来る方は手順3から見てください
 
まずは下準備としてGrayちゃんのモデルデータをダウンロードします
素晴らしいモデルを配布してくださっている株式会社ガミング様とUE4で手軽に使えるようにしてくださっているらりほま様、本当にありがとうございます
 
次にダウンロードしたデータの中にあるGrayChanProjectで使用するUE4のバージョンを4.12以降に変更しましょう
GrayChanProject.uprojectを右クリック→SwitchUnrealEngineVersionから変更できます
これは手順7で使うCopyPoseFromMeshが4.11で追加されているためです
 
1.Grayちゃんの新しい髪型を作る
 
今回はmodoを使用していきますが基本的にどのDCCでも同じことが出来ると思います
modo以外を使ってる方は
・もとからモデルに含まれているツインテールの先端のボーンの向きを他のボーンに準拠した向きに回転させる
・新しい髪型とそれ用のボーンを作りバインドしておく
これらのことをやって手順2に進んでください
 
以下の手順ですが最適解ではないと思います
modoに詳しい方いらっしゃいましたら指摘していただいたら嬉しです
 
 
まずグレイちゃんのFBXファイルを開きます
次にSetupタブのSetupモードに入ります

f:id:kashiwanotsuru:20160620172238p:plain

TwintailE_RとTwintailE_Lのボーンの回転させます
見難いと思いますがY軸が右、X軸が下、Z軸が(後ろから見て)手前になっています
(ようはTwintailD_◯のボーンの向きに準拠しています)
この作業をしておかないとUE4のAnimdynamicで動きをつけるときに髪の毛が捻じれます

f:id:kashiwanotsuru:20160620172255p:plain

ボーンの向きを整えたらSetupモードを解除します
そうすると髪の毛がねじれていると思うので、上と同じようにボーンを回転させて捻じれを解消します
(この作業をしなくてもAnimDynamicを設定したらうまく動くはずです。でも作業中の見栄えが悪いので今回はやっておきます)
追記:この作業をしても捻くれていました。心も捻じくれました。
 
新しい髪型を作る
 
どんな髪型でもいいのですが今回はポニーテールにします
適当に掃引体とベベルを使い作りました
ボーンも適当に配置してウェイトマップをつけておきます
f:id:kashiwanotsuru:20160620172346p:plain
画像を見て分かる通り先ほどとはボーンの向きが違います
(いわゆるYDirectionZAxisですね、先ほどのツインテールはXDirectionYAxisでした)
本来なら同一モデル内でこのようなことをするのはモーション作製のときに混乱するのでNGです。
ですが今回はボーンの向きとAnimDynamicの設定の関連性を理解しやすいようにこうしておきます
 
 
2.髪のないメッシュ、ツインテールだけのメッシュ、新し髪型だけのメッシュ、この3つのメッシュをエクスポートする
 
 
ではFBXにエクスポートしていきましょう。
System→Preference→FBX I/OからFBXエクスポートの設定をしておきましょう
ここではExportTypeをExportSelectionWithHierarchyにして選択物のみをエクスポートするようにします

f:id:kashiwanotsuru:20160620172414p:plain

 
 
エクスポートするモデル
FBXのファイル名
選択するアイテム
髪のないメッシュ
GrayChanBase.fbx
すべてのボーン
Twintail以下のボーンと新しいボーン以外のメッシュ
GrayChanTwin.fbx
すべてのボーン
Twintail以下のメッシュのみ
新しい髪型(ポニーテール)
GrayChanPony.fbx
すべてのボーン
新しい髪型のメッシュのみ
 
では上記の表にしたがってアイテムを選択し、3つのFBXファイルをエクスポートしていきます
 
3.スケルトンにGrayChan_Skeletonを指定して3つのメッシュをインポートする
 
先ほどエクスポートしたFBXファイルをインポートします
注意する点はもとからプロジェクトに入っているGrayChan_Skeletonを選択することだけです

f:id:kashiwanotsuru:20160620172442p:plain

 
ポニーテールようにボーンを追加したのに新しくスケルトンを作製しなくていいのかと思われる方がいるかもしれませんが
先端に追加するボーンに限りスケルトンの再利用は可能です
詳しくは公式ドキュメントを参照してください
 
4.キャラクターBPで髪型のスケルタルメッシュコンポーネントを作製する
 
ThirdPersonBPフォルダ内のThirdPersonCharacterのブループリントを開きViewportにうつります
AddComponentからSkeletalMeshを追加、Hairを名前をつけてキャラクターメッシュの階下に配置します

f:id:kashiwanotsuru:20160620172456p:plain

 
Hairのトランスフォームをリセットします
LocationとRotationがすべて0になったと思います

f:id:kashiwanotsuru:20160620172504p:plain

 
5.キャラクターBPで髪型を変更できるようにする
 
EventGraphに移り髪型変更するためのBPを組みましょう
特に特別なことはしていません
HairAnimClass(AnimInstansClass)は後ほど作るのでここではまだ指定しません
ツインテールとポニーテールのコメント欄のHairMesh変数には先ほどインポートしたGrayChanTwin.fbxとGrayChanPony.fbxをSetしておきましょう

f:id:kashiwanotsuru:20160620172516p:plain

 
6.各種髪型のアニメーションブループリントを作る
 
GrayChanTwin.fbxとGrayChanPony.fbxのアニメーションBPを作ります
まずはポニーテールの方のアニメーションBPをいじっていきましょう
アニメーションBPを開くとまずいつもどおりのGrayちゃんが表示されるので表示されるメッシュを変更します
Meshの下のボックスをクリックしてGrayChanPonyを選択します

f:id:kashiwanotsuru:20160620172530p:plain

すると以下のようになっていると思います

f:id:kashiwanotsuru:20160620172542p:plain

 
EventGraphでCopyPoseFromMeshノードで使うためのキャラクターメッシュを変数化しておきます

f:id:kashiwanotsuru:20160620172553p:plain

 
AnimGraphに移り、今作った変数とCopyPoseFromMeshを以下のように繋ぎます
こうすることでこのポニーテールがキャラクターのアニメーションに追従するようになります
(CopyPoseFromMeshは4.10以前でのMasterPoseComponentの強化版ですね)

f:id:kashiwanotsuru:20160620172604p:plain

 
ツインテールのアニメーションBPも同様に作ります
 
ThirdPersonCharacterBPに戻りAnimClass変数に今作ったアニメーションBPをSETしてください

f:id:kashiwanotsuru:20160620172614p:plain

 
7.AnimDynamicで髪の毛を揺らす
 
アニメーションBPに戻りAnimDynamicの設定をします
AnimDynamicの詳しい説明はAlweiさんがブログに書いてくださっています
 
ポニーテール
まずはこのようにAnimDynamicsノードを配置します

f:id:kashiwanotsuru:20160620172634p:plain

 
次にAnimDynamicsノードの設定です
・4.12からSimulationSpaceという欄が追加されました
Worldに設定するとどうやらWorldスペースでシミュレーションしてくれるようで、ジャンプしたときにも髪の毛の動きが追従します
ComponentとWorldで比べてみると面白いです
・長いものをゆらゆら揺らしたいのでChainにチェックを入れます
・BoundBoneが根本、ChainEndが先端のボーンです
 
ここで手順1で書いたポニーテールのボーンはYDirectionZAxisであるという話が活きてきます
・BoxExtentsは今回は正方形ではなく安定させるためにY方向、つまりDirectionの軸を少し短めにしましょう
・LocalJointOffsetもボーンがYDirectionなのでY方向にすこしおしだしましょう

f:id:kashiwanotsuru:20160620172920p:plain

どうでしょうか、ポニーテールは可愛く揺れているでしょうか
うまくいったらツインテールのほうも作っちゃいましょう
 
 
BoxExtentsとLocalJointOffset以外はポニーテールと同じです
ツインテールのボーンはXDirectionでした
なのでBoxExtentsはX方向に少し短めに、LocalJointOffsetはX方向に少し押し出しています
(しかし、負の方向に押し出しさないとダメな理由は全くわかりません。どなたか・・・どなたか・・・)

f:id:kashiwanotsuru:20160620172931p:plain

 
ではプレイボタンを押して髪が揺れる華麗なGrayちゃんを眺めましょう!
うまくできましたら各種コンストレイントをいじって挙動を調整してみましょう
それではおつかれさまでした!