こちらは2023年の法政大学の計算技術研究会のアドカレ参加記事です。この段階で半分も埋まってないけど大丈夫か
前にちょっとバズったひらひら布のアニメーションの作り方についての解説です。情報が少ないのでこれまでに得た知見をまとめます。長いです
必要なもの
・Marvelous Designer(使ってるのはMD12)
買い切りなくなっちゃった。ちょっと高い…たまにセールしてるらしいのでそのタイミングで買うといいかもしれない
・必要な素体モデル・モーション
・PCスペック
低いと物理演算とレンダリングにえぐい時間がかかります
・PCの空き容量
動画4分くらいのクロスシミュで100GB以上の大きさのファイル群が生成されます
・やる気と時間
布に敗北してもめげない
手順
1. 素体を読み込んでMarvelous Designerで服を作る
2. UVを設定しておく
3. 素体のAlembicデータを用意する
4. 布を固定する
5. シミュレーションする
6. 書き出してBlenderなどに読み込む
1. Marvelous Designerで服を作る
素体を読み込んで先に服を作っておきます。既にある人は着せて3に飛びましょう
素体のモデルはTポーズで髪なしで用意しましょう。モチベのために入れたい場合は髪なしのモデルをインポートした後で髪だけを追加でインポートしましょう
Auto Fittingを使用する場合は足が浮いているとできないので靴も一緒に
この辺は洋裁の知識が必要になってくるんですが、バーチャルなので型紙で見た目さえ作れれば裁縫の技能はなくてもいける
完全に裁縫のサイトなんですが、でぃあこすさんのサイトが無料型紙が豊富な上、全体図が乗っているのでMDで作りやすいです。裁縫の手順に関してはうさこの洋裁工房さんがとても分かりやすい(うさこさんはMDの記事も上げてる)
MDでの服の作り方に関してはこれだけで記事何本か書けちゃうので割愛 Youtubeのチュートリアルは結構あるのでそちらを見てもらって…
2. UVを設定しておく
服作ったら絶対絶対やりましょう、あとで地獄をみることになります(なんどもやらかしている)
Marvelous Desginer上では服作った段階で型紙と設定された布に応じて色などがいい感じに割り当てられますが、UVはまだ調整されていないので設定してあげる必要があります
UVEditorを開くとUV配置がとんでもないことになっているのが分かります。これを0~1の枠に収まるように配置してあげましょう
これをやり忘れると十数時間かけたシミュレーションをやり直すか、書き出した後でBlenderで泣く泣くUVを設定することになります。
3. 素体のAlembicデータを用意する
Blenderなどのソフトで服を着せるモデルのデータにモーションを流し込んでAlembicデータを作ります。服を着せる関係上、モーションは0フレームがMDで服を着せるのに使ったTポーズ→50フレームあたりがクロスシミュをしたいモーションの開始フレームとなるようにします
私はMMDBridgeを使用してMMDのモーションをAlembicデータを作成してます。(MMDモデル・モーションを使うときは規約をよく確認しましょう MMDBeidgeを使ったAlembic書き出しもまた別で書きたい)
このままのデータを使用すると髪や腕などが服に衝突した際に布が破綻する可能性があるのでそれらを消していきます。
腕はBlenderのマスクモディファイアーを使用して削除しました。袖がある服は作れなくなりますが、シミュレーション速度がすごく上がります
いい感じに不要なものを削ったらAlembicデータを書き出します。なるべくフレーム間の頂点の移動が小さい方がクロスシミュレーションがスムーズにできるのでできる限り高めのfpsで書き出します。フレーム間のモデルの動きが少ない方が破綻しにくいので、フレーム数が倍になっても最終的に早くシミュレーションが終わりがちです。私は普通のモーションなら60fpsで、ロリ神とかの早いモーションは240fpsで書き出してます。
カメラがあったらダメそう?だった記憶があるのでモデルだけ選択して書き出し…(fpsは出力プロパティの方で設定)
書き出したらMarvelous Designerで読み込みます。
4. モデルを読み込んで布を固定する
先ほどのMDのプロジェクトから素体のモデルを削除して、書き出したAlembicを読み込みます。
着せたらそれぞれの型紙ごとに布の粒子間隔を設定していきます
布の粒子間隔は小さい方が綺麗にできますが、一気に遅くなってしまうのでビスチェなどのあまり動かない部分は20mm、スカートやフリルなどの細かい部分は5mmくらいに設定するといい感じになります(全て5mmに設定する狂者もいるようですが…)
全体的にあまり動かない方が早い&破綻しにくくなるので、固定していい部分はどんどん固定していきます
・強化/芯を使用する
あまり動かなくていい部分や動いて欲しくない部分は型紙ごとに強化や芯を設定していきます。襟とか。
・アバターピンで止める
ここも同様。ビスチェの背中側とか、メッシュ自体があまり回転しないところにつけていきます。腕とかにつけると破綻しがち
アバターピンをつけた後、「Attach all pins to avater」をするとピンがアバターにくっついて動いてくれるようになります
・アバターテープで止める
スカートや袖など、円形に体に添う部分はアバターテープで固定することができます。
この子のモデルだとスカートをウェストに固定してます。こうすることでビスチェが布の重さで引き伸ばされることを防ぐ効果もあります。お腹部分の皺とかが欲しい場合は付けない方がいいのですが
スカートがトップスと分かれている場合はスカートが無駄に回転することを防ぐこともできます。
・服同士はタックで固定する
服同士で重なっている部分はタックで固定していきます。このモデルの服とケープ同士とか。これで動いた時のズレを防止できます
タック、ちょっと場所の指定が難しくて使いにくい…背中側とかは2Dパターンの方から指定した
5. シミュレーションをする
いよいよシミュレーションしていきます〜
布のマテリアルごとに布の柔らかさや皺の量など、布のパラメーターを決めます。プリセットの布の和訳がうさこさんのサイトにまとめてあります。
布なんもわからんけどとりあえずバズツイみたいなひらひら布が作りたいって場合はSilk Chiffonを選んでおけば間違いないです
GPU演算は早いんですがアニメーションの動きはかなり微妙なので大人しくCPU演算にします
Simuation Qualityを8以上にします。5以上が良いらしい
これで再生ボタンを押すと演算が始まります。1フレームごとに演算するのでめっちゃ時間かかります。
これで最後までじっくり待ったら完成!!!
…とはいかないです。
やってみたら分かると思うのですが、スカートが捲れ上がったり足が貫通してそのままスカートを持っていったり、貫通した時に布がぐちゃぐちゃになったり……となかなか一筋縄ではいきません。なのでこまめに様子を見てあげて手を加える必要があります。めんどくさい。
破綻した時点で一度止めて手を加えて、再度シミュレーション…を繰り返すのでタイムラインはこんな感じになっていきます。キーフレームの編集機能を使うとマージするとかもできるらしいですが
・スカートが捲れ上がる場合
布のパラメーターを調整して重くするなどの対処もあるのですが、重さで伸びないように同時に布の固さを調整したり、調整するたびにシミュレーションして確かめたりするのはとても時間がかかって大変なので以下の方法でシミュレーションしてます
①SceneTimeWarpで時間をn倍にする
②simulation propertiesの重力を-2400とか(nが大きいならその分下げる)低めにして、基本これでシミュレーション
③布が捲れるところだけ0~-9800の間でちょっと重めに調整してシミュレーションする
これだけ見ると「普通に重力を-9800以下にするのでいいのでは?」と思うのですが、MDのプリセット布は重力を-9800以下にすると重力で布が伸びてしまうため、-9800を超えない方法でやってます
これでロリ神みたいな激しいモーションでも中身が絶対に見えない強固なスカートが完成します
・足が布を貫通する場合
MDはシミュレーション中に布を引っ張って移動させることができます。アニメーション中だとめちゃくちゃ重いので大変なのですが、根気よく引っ張ると足が布を蹴る前に布を避けさせたり、貫通を直したりすることができます。
また、アバターピンはシミュレーション中に追加・削除ができるので一瞬だけ一部をピンで固定しておくのもありです。
ピンを利用すると布を掴むとかもできます。例えばこの動画では手がスカートに触れたタイミングでスカートの布の一部をピンで手に固定することでカーテシーを実現しています。
他にも色々あるかもですが、大体はこれらでどうにかなると思います。ならない場合はモーション修正しましょう。。足や腕などが胴体を貫通する場合は破綻しやすいです
また、MDでシミュレーションしてると布が爆発することがあります(!!!?)。うっかり体と布が交差しているフレームから始めてしまったことなどにこうなります。
この時は突然演算が停止して応答が停止します。
そのときは停止ボタンを押して信じて待つと(!?)意外と止まってくれます。どうやらフレーム毎の演算終了時にしか入力を処理してくれないらしい。PCのスペックによってはそのまま落ちる
ちなみに長めのシミュレーションをしたデータは圧縮できないらしく、途中で保存できません。なので怖い人はシミュレーションデータをこまめに書き出しましょう。
6. 書き出してBlenderなどに読み込む
SceneTimeWarpを1に戻してシミュレーション結果を書き出しましょう
thickにしておくと厚みのある綺麗なモデルで出力されます
60fpsの4分くらいのシミュレーションデータだと書き出すのに1時間以上かかります。
書き出したらBlenderで読み込んで、書き出したDiffuseテクスチャをマテリアルに設定して完成です
コツまとめ
・シミュレーション前にUVを絶対確認する
・Marvelous Designerで使用するAlembicデータは布に衝突しうる不要なもの(髪、腕、靴、アクセサリーなど)をなるべく消しておく
・Alembicデータはなるべくfpsを上げておく
・型紙ごとに粒子間隔を調整する
・強化やピンなどで布が動く部分を減らすことで演算を早くできる
・SceneTimeWarpでフレーム数を倍にして重力を小さくしてシミュレーションする。スカートが捲れるところは重力を0~-9800の間で変える
・掴みやピンを使って布を引っ張って破綻を直す
・どうしても破綻するフレームがある場合はモーションを直す
・セーブができないので心配なら細めに書き出しをする
見ての通り根気さえあれば綺麗な布が生み出せるので皆さん軽率に作ってくださいませ!!