【MMD】柔軟剤プラグイン解説(エラー対処編)

柔軟剤プラグインでよく見るエラーとその対処を紹介する。
基本編応用編を先に読んでいる前提)

※あくまで一例なので解決を保証するものではない。


■「準備されていない頂点が含まれています」


他のエラーになった後に「段組み取得」を再実行した場合に表示されやすい。
対処は柔軟剤プラグインのウィンドウをいったん閉じてからプラグインを再実行し、「準備」からやり直す。


■「対象頂点20000越えは重いので、処理を中断します」

モデル表示ウィンドウで材質を絞り込まずに「準備」を実行するとよく出る。
物理を入れたい材質だけ絞り込み表示してからプラグインを実行すること。
ハイポリゴンすぎてスカートだけで20000頂点を超えているような場合は諦める。


■「頂点が選択されていません」

物理を入れたい開始段を指定せずに「段組み取得」を実行すると出る。
モデル表示ウィンドウで開始段の頂点をちゃんと選択状態にしてから「段組み取得」すること。
下の画像のように任意の一段分の頂点だけきっちり選択してあればOK。
モデル表示ウィンドウ左下の頂点/選択頂点表示アイコン →がONになっていないと頂点は表示されないので注意。



「輪形ないしヒモ形を発見できませんでした、処理を終わります」

「段組み取得」実行時に、対象の材質の形状が複雑すぎる、1枚に繋がっていない、など
柔軟剤プラグインを適用できる条件から完全に外れているときに表示される。
これが出たら諦めるか、応用編の解説参照。


「3辺に繋がる点があったため処理を中断しました
 該当頂点を選択状態にします」

「段組み取得」実行時に、横列が分岐して段組みが判断できない箇所があるときに出る。
メッセージにある通り、分岐と判断された該当箇所の頂点がモデル表示画面で選択状態(オレンジのドット)で示される。

解決策としては
・分かる人なら自分でポリ割を修正する
・近傍判定精度の値を大きくしたり小さくしたり変更してみる
 (2つの段の距離が近すぎる構造で近傍判定を広く設定していると、段が融合していると判断されることがある)
・材質の絞り込みが適切か見直す(複雑な形状の材質を除外する)
・開始段に、材質の上端ではなく少し下の段を指定してみる
 (端は頂点が密集してポリ割がゴチャついていることがあるため、そのエリアを避ける)
応用編参照


「途中から開放型になる形状と認識しましたが、直上の段の開始点が上手く決められませんでした
手動で開始点変更処理を行ってください」

裾のボタンを外したシャツやコートのように、上半分が円筒状、下半分が開いた形になっているモデルで「段組み取得」実行時に表示されやすい。
出やすい形状の例:


これが出たらまず「全段の開始点」ボタンを押す。



そうすると以下の赤線で示した箇所のように、各段ごとの横一周の始点となる頂点がオレンジのドットで示される。
裾が開き始める箇所を境に、上下の段で開始点の縦列が断絶して大きくずれているのが分かる。


そこで開始点に設定したい頂点の縦一列を手動で選択し直してから、「選択頂点で開始点変更」を実行すると開始点の縦列を揃えることができる。
プラグインのウィンドウ枠を下に広げると隠しメニューが出る。



開始点を変更したら一旦モデル表示画面で頂点の選択を解除し、再度「全段の開始点」を押すと正常に変更されたか確認することができる。

なお、開始点からどちら周りに剛体を配置するかは「進行方向表示」で確認できるが、以下のように途中の段で進行方向が逆転してしまっている場合がある。


このままでもプラグインの実行は可能で剛体は入るのだが、方向を揃えておきたい場合は進行方向を変えたい段を柔軟剤プラグインのウィンドウで選択状態にし、「進行方向反転」を実行すると向きを揃えることができる。




■「剛体数振分け」を実行しても剛体が設定されない
これはエラーメッセージではなく、剛体振分けを押したとき全ての段の予定剛体数がゼロになってしまい、剛体を正しく割り当てできない誤動作である。完全な円柱のように各段の長さが全く同じ時に発生する。


これが発生した場合は柔軟剤プラグインのウィンドウ枠を下に広げて「予定剛体数の最大/最小をnにおさめる」のチェックを外してから「剛体数振分け」を再実行する。



以上!

【MMD】柔軟剤プラグイン解説(応用編)

柔軟剤プラグインを普通なら適用できない形のスカートにどうにかして適用したい場合の姑息で強引な技を紹介する。

【適用が難しいパターン1】
以下のように材質が分かれていたり、複雑な装飾がついていたりする場合。



まずは最もシンプルなポリ割で面積の多い「ベース生地」に使えるパーツを探す。
この例だと表布または裏地がベース生地にするのに丁度よい。

とりあえずベース生地にのみ普通に柔軟剤を適用する。
そうすると、適用した表布だけ布っぽくなり、フリルや音符や裏地が取り残されてしまうはずである。


ここからフリルなどにもベース生地と同じ動きをさせるための方法が2つに分かれる。


プランA:雑な方法
スカートと一緒に動いてほしいパーツを絞り込み表示し、全選択し「近位置ボーンでウェイト設定」を実行するだけ。楽だがウェイトは粗くなる。
※「選択ボーンのみ」のチェックは外しておく



プランB:ウェイト転送する方法
柔軟剤を適用したベース生地のみを絞り込み表示し、全選択してウェイト転送プラグイン
https://bowlroll.net/file/375
でウェイト情報を外部ファイルとして一時保存する。



保存したら逆にベース生地以外のフリルや裏地のみ全選択し、保存したウエイト情報を読み込んで適用する。



そうするとこんな感じにベース生地のウェイトが他のパーツに塗られるので、一体として動くようになる。




注意点としては

・プランAの近位置ボーン塗りよりはプランBのウェイト転送の方が仕上がりは綺麗になる

・リボンや名札プレートなど、ベース生地から大幅に出っ張るような装飾は上手く変形しない
(例えばリボンは結び目の根元に近いスカートボーン単体100%でウェイトを塗るほうが綺麗になる)

・ひだが立体的なスカートや多重構造のスカートにも一応この方法で適用できるが、細かいめり込みは発生しやすい


【適用が難しいパターン2】
こういうスリットが複数入ってる構造。
裾がタコ足状に分かれて広がっている場合も同じ。


まずパターン1の方法と同じく「スリットが入ってないシンプルなベース生地」を用意して(用意できない場合は材質コピーや結合を活用して自分で作る)、ベース生地に柔軟剤を適用してからウェイトを本命の材質に転送する。

そうすると物理演算で動くようにはなるが、実際にはスリット部分の剛体はジョイントで横に繋がっているので、切れ目が無いのと同じような挙動になってしまう。
(↓スリット部につられて周りの布まで持ち上がっている)



そこでスリット部分のジョイントを削除することで物理的にも切れ目を入れる。
削除するときは操作対象を”J”だけにし、ジョイント表示サイズを小さくすると選択しやすい。

また、スリットの形状にもよるが、基本的にはスリット部分の「横ジョイント」と「斜めジョイント」のみ削除すること。


上手くジョイントを削除できれば、物理演算でもスリットできちんと切れている動きになる。



【適用が難しいパターン3】
ワンピースやコートのように袖まで一体になっている服の裾だけ物理を入れたい場合。


これは単純に「段組み取得」を実行する前の始点選択の際に、物理を入れたいスタート地点の横列を選択すればよい。
柔軟剤プラグインは服の上端ではなく途中から選択してもいいのである。



要は物理を入れたい範囲のトポロジー(この場合は裾のあたり)が適用可能な構造であれば、首周りや袖などの無関係な部分は複雑な形状をしていても関係なく適用できる。



■まとめ

「複雑な形状の場合はシンプルなトポロジの別材質をベース生地として一時的に用意して、そちらに柔軟剤を適用してからウェイト転写する」

「布の切れ目(スリット)は、後から剛体やジョイントを消すことで作れる」

という考え方を覚えておけば柔軟剤プラグインを使える範囲が広がる。

とりあえず以上!

【MMD】柔軟剤プラグイン解説(基本編)

ななななななな様の柔軟剤プラグインv017の使い方を非公式に我流で解説していく。
非公式なので誤りが含まれる可能性があるのであらかじめ了承されたし。

また、作者ご本人の配布動画の説明と解説ページ(https://ch.nicovideo.jp/na7)は既に見ているものとして、解説はそれ以外の部分に絞る。

プラグイン本体は↓



■適用できる形状/そのままでは適用できない形状

【適用できる形状】
・円筒形
・円筒形にスリット1本
・1枚の布
のいずれかで、横列が枝分かれや合流せずに1段ずつ数えられる形なら概ね適用可能。


トポロジー(ポリゴン割り)が上記のようになっていれば外観やアウトラインはぐにゃぐにゃに曲げてあっても問題ない 。
(例えば巻きスカートは伸ばせば1枚の布なので適用可能)

旗やマントのような、筒になっていない布にも使える。

※適用できる構造のはずなのにエラーになる場合、プラグインウィンドウの下枠を引っ張って詳細メニューを出し、以下の設定を変えることで実行できる場合がある。
・「予定剛体数の最大/最小をnにおさめる」のチェックを外す
・「経路が単一でなくても~頑張る」のチェックを入れる




【そのままでは適用できない形状】
以下のような形状だとそのままでは適用できなかったり、エラーにならなくても剛体が上手く入らなかったりする。ただ、強引に適用する方法も無くはない(応用編解説参照)

・フリルなどの複雑な装飾がスカート本体と同じ材質で縫い付けてあるもの



・1枚ポリではなく縁の厚みがあるもの



・布を重ねたような多重構造になっているもの



・スリットが2本以上入っているもの



・横列が途中で融合したり分岐したりして段があやふやなもの
 (以下の例だと赤線の部分が何段目なのか判断できない)



■基本パラメタ設定





【近傍判定精度】
密集している頂点を1つの頂点・剛体として集約する判定の広さ。

頂点が同じ場所に複数重なっていたり、デザインの都合で折り目部分だけ頂点が密集していたりするとき用の設定。

図の例だと青丸のペアの頂点の距離より近傍判定の広さがぎりぎり大きくなるように設定すれば、2つの頂点で剛体1個になる。





【剛体の段数】
右上の剛体の段数で、縦に何段の構造にするか決めることができる。
例えばデフォルト(5)だとモデルのポリゴンがいくら細かくても剛体は5段配置になる。


ロンスカでここをケチるとろくなことにならないので膝下より長い丈なら10段は積むべき(自論)。マキシ丈なら15~20段くらいあっても良い。

なお、1頂点1剛体化したい場合はモデルのスカートのポリゴン段数と同じ段数を指定する。
モデルの段数は中央の剛体配置表の「段」で確認できる。
以下の例だと段の一番下が21なので、0段目と足して22段が最大段数になる。



試しに22段を指定して実行すると、上の5段の例と比べて22段すべての列に剛体が分散して入ることが分かる。



【剛体数の上限】

適用対象の部位に割り当てる剛体数。
多いほうが布っぽくなるが処理も重くなるので悩みどころ。

たまに勘違いされているが柔軟剤プラグインは1頂点1剛体化用ツールというわけではなく、本来は指定した数の剛体を上手く散らばしてだいたい均一に配置してくれるのが利点なのである。
※スカートの頂点数よりも大きな数を入れると1頂点1剛体にすることもできる、と考えるのが正しい。
なお、実際に配置される剛体の数がスカートの頂点の数を超えることはないので、1頂点1剛体化したい場合は"10000"などの極端に大きな数を指定すればよい。

私の感覚だと剛体数による処理の重さの目安は
 ~100 低スぺに優しい
 ~200 モデル単独なら余裕。3人以上の共演は危険
 ~500 リアルタイム処理(60fps)の上限
 ~1000 物理ONのままで操作できる上限
 ~1600 グラボがGeforceの環境でボーン数過多による強制終了が起きない上限
 1600~ 扱いに特殊な訓練が必要
となる。

【振り分けボタン】
段数と剛体上限を決めて振り分けを押すと左の表に段ごとの予定剛体数が入る。
(指定段数がモデルの構造より少ない場合、剛体が入らない段は0になる)

「裾の円周が長い段には多く」のように、自動的に剛体の密度を考慮した分配になるが32-32-32のように規則的な分布にしたければセルをクリックすれば手動入力でも変更できる。




【回転制限の緩め度】
これはジョイントの硬さ、つまり布の硬さと考えてよい。


小さいと復元力の強い膨らんだスカートやレザーのような動きになり、
大きいと真下に垂れさがるシルク系の布になる。

ジョイントの向きごとに3種類あるが、よく分からない場合は全て同じ数字で揃えて問題ない。
私の好みは60くらい。


【最下段剛体質量】
支点となる腰周りの剛体は必ず質量1になるように固定されており、
下段(スカートの場合は裾)の質量をここで指定する


間の段の質量は
最上段:1.0 ~ 最下段:指定した値
で自動的にグラデーションになるように設定される


概ね、小さくした方が軽やかに、伸びにくくなる。
1に近づけるほど重力に負けて伸びやすくなるので小さめを推奨。


【追加オブジェクト名称】
柔軟剤で追加されるボーンや剛体の名前を決める。
演算の動きには影響しないのでデフォのままでもいい。

複数部位に適用する場合には
 スカート:sk
 マント:mt
のように別にした方が分かりやすい。

※長いとMMDのボーン名称の長さ制限で不具合が出やすくなるのでなるべく2文字程で簡潔に


【親ボーン指定】
柔軟剤で生成されるボーンの親ボーンを決める。

スカートの場合はモデルの下半身ボーンを指定するのが普通。
(マントなら上半身2などになる)
操作しやすいようにあらかじめ下半身ボーンの子にスカート親ボーンなどを作っておいてそれを指定するのも良い。

ちなみに柔軟剤プラグインだとスカート全体の親が単一のボーンになり、縦の列のボーンが親子関係にならないが、物理演算で動かすならボーンを繋ぎ直す必要はない。
※ジョイントで繋がっていればボーンの親子関係は演算に影響しないため。



■適用後にやるべきこと

剛体タブで追加された剛体をシフト+左クリックで全部選んで諸々の設定を行う。


・剛体グループを決める(他の部位で使われていない番号にする)
 ※ただし16番はMMD本体の床剛体なので使わないこと

・非衝突グループを設定する(体・尻・足などスカートと当たる剛体のグループを確認してその番号のチェックを外す)
※これをしないと接触判定がない

・剛体の形状
必要に応じてサイズや形状を変える。

MMDのジョイントの強度は剛体のサイズが小さすぎると弱くなるため、デフォルトのサイズ0.2の球ではスカートが崩れやすくなる恐れがある。
その場合は剛体のサイズを0.25~0.3以上にすると安定しやすい。



また、球型だと剛体の隙間が大きくなってしまう場合は箱(板)剛体にしてサイズを広げることで貫通しにくくなる。柔軟剤プラグインで作成した剛体は「高さ」が厚みになるように配置されているので、サイズの高さだけ小さめで他2つを大きくすると薄い板になる。



・剛体の物理パラメータ変更

一例だが、ふわふわの布にしたい場合は移動減衰を上げるとよい。
(0.99~0.999999程度。1.0は特殊な動きになるので性質を理解していないなら使わない方が良い)
また、膝や腕に引っ掛かりやすくするなら摩擦を1にする。
反発は基本的にゼロのままでよい。


 応用編に続く!

【MMD】水面エフェクト解説

ビームマンP様の水面エフェクトv5.xの fxファイル内で設定するパラメタを非公式に我流で解説する。
エフェクト本体は↓


■水面のアニメーション速度ベース:BaseWaveSpd

水面全体の波の揺らぐ速度(モデルが触って出る波紋は別)
高くすると揺らぎが速くなる

揺らぎの形は同じフォルダのheight.png依存で
ベタ塗りだと水鏡のようになりムラがあると水面がデコボコになる
(height.pngはプリセットに同梱されている)





■反射係数:refractiveRatio
カメラの角度による鏡像の見え方に影響?
0に近いと水面を横から見た時に鏡像が薄まる
1に近いとほぼ全反射

0.02~0.001くらいが適正?






■反射力:reflectParam
水面に映る鏡像の濃さに影響
反射係数と似ているが
こちらは0に近いと全反射に近づき、
1に近いほうが鏡像が薄くなる

0.5~0.99くらいの間で調整





■垂直ガウスぼかし強さ:V_Gauss_pow
カメラが水面から遠いときの鏡像のボケ具合
1に近いとカメラが離れた時に鏡像がぼやけ、0に近いと離れてもボケない

ロングショットでも鏡像を見せたいかどうかで決める







■水面の上下幅:WaveHeight (Water2_Hhi_○○専用)
海や荒れた川のように、細かい波とは別に水面自体を大きくうねらせたい時のうねりの高さ
嵐の海を表現するときは高くするといいっぽい(上げすぎるとカオス)


■スクロール速度:UVScroll
水面が流れる方向を( )の中にX・Z座標で指定する
(0,0)で流れない
水流を速くしすぎると非常にカオスな見た目になる

なお、水面エフェクト自体にモデルのスカートなどを押す機能はないので
水流を表現するには重力操作なども併用するとよい


■水面分割数:WaveSplitLevel
水面のSiを上げて広い範囲に配置したい時に引き伸ばし表示だと波が粗くなるので、タイルパターンのように同じ形の波を使い回して個々の波の綺麗さを保つ際の分割数

ただしモデルの出す波紋には効果がない

Siを500以上にするなら16、部屋くらいの広さなら1か4で充分

(イメージ図)



■水面の荒さ:WaveStrength
波の立ちやすさ
1でMAX、0で波が立たなくなる

1に近すぎるとガビガビしやすいので0.2~0.8くらいで調整





■スペキュラの鋭さ:SpecularPower
いわば波紋のハイライトの強さ
小さくするほど波に光沢が出る

ステージが暗いときにこれが高いと波が見えないので
波紋を強調してファンタスティックにしたい時は8~16くらいまで下げる

逆にキラキラしすぎてうるさい場合は128~256くらいにする



■スペキュラ色: SpecularColor
波のハイライトの色を( )の中にRGB形式で指定する

例えば(1,0.1,0.1)のように赤を強めるとスクショのようになる
普通は変更する必要なし




■深度フォグ最低距離:float DepthFog_min
水が濁りはじめる深さ?
名前から推測すると、これを大きくすると水中のモデルが浅い位置にいる時に濁らずハッキリ見える

……のだと思うが効果を体感できたことがないので基本デフォルトのまま

■深度フォグ効果量:DepthFog
水の濁り度
高くすると濁って暗い水になり、水中の深い位置や遠い位置が霞んで見えなくなる

微妙な違いで効果が大きいので透明感を出すなら思いっきり下げる






■深度フォグの色:WaterColor
水の色をRGBで指定する
青い海や赤錆の汚水など、表現に応じて着色する

WaterLightController.pmxを使用する場合はそちらの表情モーフのフォグ色が優先されるためfx内のパラメータで指定する意味はあまりない

画像はfloat3(0.0,0.5,0.6)で青緑を強調した例



■生成する波の強さ:float WavePow
モデルが水面に接触した時の波紋の大きさに影響
1に近いほど高い波紋が立ち、0で波紋が出ない

実際の波紋の大きさはこの値×MMDでの水面のSiのため
これが小さくてもSiが大きければ巨大な波紋になる

普通は0.5~0.8くらい


■波の減衰力:DownPow
波が消える速さに影響

1に近いほど波紋がどこまでも走っていくサラサラの水になり、
0に近いと波紋が伝わらないネバネバの水になる

0.9以下はすごい勢いでネバネバ化するため0.9~0.99の間で調整を推奨


■影の凹凸強さ:ShadowHeight
MMDで水面アクセの影チェックボックスをOnにした時の
水面に映る影の見え方に影響

ShadowHeightは0に近いほど影が伸び、1に近いほど縮む?
(普段、変更しないため詳細不明)

■影の濃さ:ShadowPow
MMDで水面アクセの影チェックボックスをOnにした時の
水面に映る影の見え方に影響

ShadowPowは1に近いほど影が薄くなり、0に近いと濃くなる






■火線の強さ:CausticsScale

水面からの屈折反射が虹色の光の網のような揺らぎを生む効果の強さ

何を言っているのか分からないと思うのでスクショ参照

1に近いほどキラキラして0に近いと出なくなる






■火線の減衰力:CausticsPow
上記と同じく屈折反射の光の網の見え方に影響

0に近いほど広範囲に光が出て、1に近いほど光る範囲が限定的になる?

CausticsScale を大きくしても、こちらが充分に小さくないと効果が出なかったりする






色収差:Chromatic
水面が揺らいで、映ったモデルが色ブレして表示されるときの見え方に影響

色ブレさせたくない場合は(0,0,0)のようにR・G・Bの3要素を同じ値にする

3色のバランスを偏らせると色ブレが出る

画像はG(緑)が強いため、スカートの鏡像が緑と補色の紫にブレて表示されている



■水面の計算速度:WaveSpeed
モデルが水面に触れて生じる波紋が疾走する速度
大きいほど速く広がる

浅い水では速く、深い水では遅くするとリアリティが増す

実際の速さはこの値 × 水面アクセのSiで決まるため
Siが大きい場合はWaveSpeedは小さく

また、出力fpsが高いと波紋はMMD上の再生より速くなる


■水面のぼかし値:WaterGause
水面のブラーの強さらしいが効果をハッキリ実感したことがないので
とりあえずデフォルトで良いと思われる

以上! 終わり!