Maya nHairで髪を揺らす- 1

Mayaのダイナミクス エフェクトnHairを使って、アニメキャラのポリゴンヘアを揺らします。

まずは作ってみる

まずは髪束のポリゴンオブジェクト一つと頭オブジェクト(立方体)一つを用意して作っていきます。

実物大でポリゴンオブジェクト作成

ダイナミクス シミュレーションをするので、オブジェクトサイズは実際の頭の大きさに近いサイズで作ります。

単純な頭は、立方体を2回スムーズしてから適宜サイズを変更、前後が分かるように鼻付近の頂点を移動して作っています。

髪束は、EPカーブを使い、サイドビューから髪の流れに沿って大まかにカーブを描画(7回クリックしてます。)。次にカーブを選択して、作成 メッシュをスイープ  でチューブ状のポリゴンを作成。最後に 適宜形状を調整しています。

ジョイントを作成

サイドビュー髪束ジョイントを作成します。

ツールオプションで「投影の中心」にチェックを忘れずに。

終わったら「投影された中心にスナップ」をOFFにするのを忘れずに。

ジョイントの方向付け

リギングメニュー」で、スケルトンジョイントの方向付け□(オプション)を選択し、「ジョイントの方向付けオプションを表示します。       

この例の場合、補助軸Y軸として、Y軸の向きワールドXプラス方向に設定しています。
実際は、髪束ごとに配置する方向が異なるので適宜変更が必要ですが、ジョイントはシミュレーションで動くだけなので、ジョイント階層内で向きが揃っていれば問題ないでしょう。

すべてのジョイントを選択 し、[ ディスプレイトランスフォームディスプレイローカル回転軸 ] を選択しています。

スキンバインド

先にスキニングを済ませてしまいます。
スキンのバインド□(オプション)は、図のように設定しています。

「スキンウェイト ペイント」ツールで、ウェイトを明確に整えておきます。
次の動画は、スキンウェイト ペイントの結果を表示しています。

末端のジョイントはウェイトを付けません。

カーブを作成

ジョイントに頂点スナップさせてEPカーブを作成します。
尚、髪のメッシュオブジェクトは隠しておきます。

頭にジョイントを作る

この後揺れを確認するために頭を動かすので、簡単なジョイントNeck – Headを作成し、頭のメッシュオブジェクトにスキンバインドしておきます。
次の動画は、「 ①NeckHeadジョイントを作成、②頭のメッシュスキンバインド、③スキンウェイトHeadジョイントだけで塗りつぶし 」 までを実行しています。

nHair でダイナミックに

準備ができたので、肝心の髪の nHair ダイナミクスを作ります。
作成したカーブを選択し、「Fx メニュー」から [ nHair > カーブをダイナミックに ] を選択します。
オプションがありますが、デフォルトにしておきます。

ダイナミクス システムのノード

「カーブをダイナミックに」nHairを作成すると、アウトライナにいくつかのノードが作られます。

それぞれの役割は下記のようになります。

一番上の hairSystem1 が重要です。 hairSystem1のアトリビュートで「▼ ダイナミック プロパティ」を設定することで、すべてのfollicle [(毛根)= 出力カーブのコントローラ ]の固さや元に戻ろうとする力などの物理的振る舞いを制御できます。

follicle(毛根)は、curve (出力カーブ)をコントロールするノードです。
ここでは髪束(カーブ)が1セットしかないので、follicle(毛根)もひとつですが、複数の髪束がある場合は、それぞれのfollicleを異なる設定にすることも可能です。

curve (出力カーブ)は、このあとジョイントを動かすために使います。

follicleShapeの設定

髪の毛のような動きにするためには、必ず follicleShape ノードで次のように設定します。

①アウトライナでfollicleを選択し、アトリビュートエディタもしくはチャネルボックスを表示。

follicleShapeノードを表示して図のように3項目を設定します。

アトリビュートエディタチャネルボックスどちらでもよいですが、follicleが複数ある場合はチャネルボックスなら一度ですべて同じに設定できます。

IKスプラインハンドルの作成

IKスプラインハンドルの作成」を利用し、出力されるカーブhairSystem OutputCurveヘアジョイントを動かせるようにします。

①「リギング」メニューに切り替え、②スケルトン IKスプラインハンドル□(オプション)を選択します。
オプションで図のように一番上の項目だけ残し後はオフにし、オプションウィンドウを閉じます。

根本ジョイント末端ジョイントhairSystemOutputCurves[curve] の順で選択します。

follicleをHeadジョイントからペアレントコンストレイントする

最後に各follicle(毛根)頭のジョイントで動かせるようにします。
ここまで髪のジョイント ルート頭のジョイントからは接続していませんでしたが、ここで、folicle(毛根)を介して頭と髪のジョイントがつながるようにします。

Headジョイントfollicle(毛根)を動かすために、ペアレントコンストレイントを使います。

Headジョイント → ❷hairSystem1follicles の順に選択し、❸「リギング」メニューの コンストレイント

ペアレント を選択します。

hairSystem11Folliclesが、Headジョイントからのペアレント コンストレイントによって動くようになります。

インタラクティブ再生

これでとりあえず髪のジョイントを揺らすことができます。

頭または首のジョイントを移動・回転させて確認しますが、「インタラクティブ再生」させることで、キーフレームを打ってアニメーションを作成することなく、HeadまたはNeckジョイントを移動・回転ツールで操作して揺らすことができます。

インタラクティブ再生するには、Fxシェルフを表示し、右端の「インタラクティブ再生」ボタンをクリックします。


バージョンによってはボタンが登録されていないこともあります。その場合は、「Fx」メニューに切り替え、shift + Ctrl キー(Macは、shift + commandキー)を押しながら「フィールド/ソルバ」> 「インタラクティブ再生」を選んでシェルフに登録しておきます。

インタラクティブ再生はループしないので、タイムスライダの再生時間を長めに設定しておくとよいでしょう。
再生時間(フレーム数)を手っ取り早く設定するには、図の数値をダブルクリックして入力します。

隠しておいた髪のメッシュ(Hair_01)を表示し、NeckまたはHeadジョイントを移動・回転ツールで動かして髪を揺らすことができます。

コリジョン(衝突)メッシュオブジェクト

上の動画のようにとりあえず髪の毛ジョイントが揺れますが、頭のメッシュにめり込んでしまいます。
(揺れ方が不自然なのは、最後に調整します。)

髪の毛が揺れ動いたときに、頭や肩など身体のメッシュにめり込まないように「衝突検知」に使うのが「コリジョン」オブジェクトです。(他にも複数のコリジョン オブジェクトを作成できます。)

コリジョン オブジェクトを準備する

実際は肩から上のフェース(髪が衝突する可能性のあるフェース)を複製してつくりますが、今回は頭しかありませんので、頭のメッシュオブジェクト丸ごと複製して使います。

複製したオブジェクト(Head_Collision)は、頭のオブジェクトと同じようにスキン バインドします。
元の頭のメッシュオブジェクトは、スキンウェイトペイント調整しているので(Headインフルエンスで「塗りつぶし」しているだけ… )、頭のスキンウェイトをコリジョンオブジェクトへもウェイトをコピーしておきます。

コリジョンを設定

コリジョン設定は簡単です。
① 準備したコリジョンオブジェクトを選択し、② 「Fx」メニューから、nCloth > パッシブ コライダの作成 を選択します。
(…なぜか nCloth にあります。)

尚、コリジョン オブジェクトは、表示する必要がないので隠しておきます。

次の動画では、コリジョンを設定した後、インタラクティブ再生しながらHeadジョイントを回転させて結果を確認しています。

hairSystemShape のアトリビュート

髪の毛らしい動きに調整します。

アウトライナで「hairSystem1」を選択し、アトリビュートエディタで、「hairSystemShape1」ノードを表示します。

hairSystemShape ▼ダイナミックプロパティ設定

hairSystemShape」の 「ダイナミックプロパティ」の下記矢印の項目を図のように変更します。
ポリゴンメッシュの髪ジョイントカーブを使ってシミュレーションする場合の調整は、とりあえずこのダイナミック プロパティの項目だけで済みます。
髪の長さ、ヘアスタイルに応じて変更は必要ですが、このサンプルの場合は下記の設定とします。

 グラフ(ランプ)の調整

固さのスケール」と「引きつけのスケール」にあるグラフは、左端が毛根(根元)右端が毛先を表してます。
根元から毛先へ向かって値を変化させたいときにグラフを設定します。
尚、グラフの右端にある[ > ]をクリックして拡大表示することで操作しやすくなります。

固さのスケール」、および「引きつけのスケール」のグラフを次の動画のように設定すると、根元は揺れにくく、毛先に向かって揺れやすくなります。

実際は、「ベンドの抵抗」と「ツイストの抵抗」に入力した値が、このグラフの値で乗算されます。
さらに、「▼ フォース」項目の「モーション ドラッグ」の値もこの「固さのスケール」グラフ値の影響を受けます。
グラフ値は、「1.0 ~0.0」なので、結果として値が増えることはありません。
また、「開始カーブに引きつけ」は元のヘアスタイルを維持する値で、ここに値を入れることで「引きつけのスケール」グラフを設定できるようになります。

設定結果

上記のhairSystemShapeの ▼ダイナミック プロパティ設定」のとおりに設定した結果が、次の動画になります。

次は、▼ダイナミックプロパティの各設定を変えて挙動の変化を比較していきます。

ダイナミック プロパティを調整する

「Maya2026 ヘルプ hairSystemShapeノード」に、すべてのプロパティ項目についての説明がありますが、文章による説明が主なため分かりにくい点もあります。  

そこで、ヘア ダイナミクス シミュレーションの結果を調整するための「▼ダイナミック プロパティ」項目の中で、下記の主なプロパティについて検証してみました。

「開始カーブに引きつけ」

「 開始カーブに引きつけ 」は、ショートヘアなどで、開始時のヘアスタイルをある程度維持したいときに値を大きくします。
逆にサラサラのロングヘアなどでは「0.0」もしくは小さ目にします。ただし、完全に「0.0」にしてしまうと、その下の項目「引きつけスケール」グラフ調整が無効になります。この場合、髪の根元近くのスタイルを維持するには極小さめの値を入れると良いでしょう。

次の動画は、「 開始カーブに引きつけ 」「0.000」「1.000」で比較しています。
他の設定値はデフォルトです。

「引きつけのダンプ」

「開始カーブに引きつけ」に値を入れたときの、元の形に戻ろうとする力をダンプ(間引く・削減する)します。
ヘアの戻りの速度を遅くし、弾力性を抑えてゴムっぽさが緩和できます。

次の動画では違いが分かりにくいかもしれませんが、「 引きつけのダンプ 」「0.000」「1.000」で比較しています。
尚、「 開始カーブに引きつけ 」は、両方とも「0.200」に設定、他の設定値はデフォルトです。

「モーションドラッグ」

「▼フォース」項目の「モーションドラッグ」は、ヘルプでは「毛根の動きに相対的なヘア カーブの動きをダンプします。」と書かれています。
要するにこの値を上げると、カーブの根元の動きの作用、および重力の影響を弱めることができます。

この値を「1.000」にすると動きが極端にスローになり、変形するまでの時間が長くなります。
一方、ヘルプによると、設定値の選び方によっては、ボビングやウィグルなどの余分で好ましくない動きを解消できると書かれています。

「モーションドラッグ」「固さのスケール」で、根元から毛先までをグラフ編集できるので、下記のように設定することで、根元よりも毛先の動きを比較的動きを大きくできます。

次の動画では、「固さのスケール」グラフを上の図の設定とし、「モーションドラッグ」の値を「0.600」「0.200」で比較しています。
尚、他の設定はすべてデフォルトです。

「ベンドの抵抗」「ツイストの抵抗」

「ベンドの抵抗」は、曲がろうとする力に対する抵抗値で、大きくするほど曲がりにくくなります。
「ツイストの抵抗」は、捻じれの力に対する抵抗値で、大きくするほど捻じれにくくなります。
「▼固さのスケール」のグラフ調整では、「ベンドの抵抗」「ツイストの抵抗」の値を乗算して調整することができます。 図のようなグラフにすることで、根元は曲がりにくく、毛先は曲がりやすなります。

次の動画は、「ベンドの抵抗 」「ツイストの抵抗」を両方ともに「10.000」「50.000」で比較しています。
他の設定値はデフォルトです。
「固さのスケール」のランプ(グラフ)は未設定で平坦な状態です。

「ダンプ」

「▼フォース」項目の「ダンプ」は、曲げや変形の力をダンプ(間引く・削減する)します。デフォルト値の「0.0」では、他の各プロパティの設定に基づいてシミュレーションされますが、「ダンプ」を極端に大きくすると重力や他の力の影響が弱くなります。

次の動画は、「ダンプ」の値を「0.100」に設定しています。
他のダイナミック プロパティは、デフォルト設定です。

以上が、hairSystemShapeのダイナミック プロパティの主な設定項目の比較になります。

適宜アニメーションをプレビューしながら、ヘアポリゴンの長さや大きさ、形状に合った設定を探していきます。

「▼ 乱気流」で簡易な「風」を表現

最後に、hairSystemShapeのダイナミック プロパティ「▼ 乱気流」を設定して風でなびく髪を表現します。

ダイナミックプロパティ

乱気流を設定する前に、下記のようにプロパティを見直して変更しています。

乱気流の設定

ここでは下記のように設定してみました。

次の動画が設定結果になります。(乱気流の影響が分かりやすいように、頭のアニメーションはOFFにしています。)

ここまで単純なモデルで髪束はひとつだけの説明でしたが、複数の髪束をキャラクターモデルに設定した例についてはページを改めて紹介します。