【Havok Cloth】Havok Cloth設定編「応用」

クリーク・アンド・リバー社 COYOTE 3DCG STUDIO テクニカルチーム所属の長谷川です。

いよいよ、Havok Cloth 応用編最終回となります!

最終回となる今回は、ローポリのシミュレーションメッシュの作成方法やHavok Cloth上での具体的な設定・パラメータ調整までを一気に仕上げていきます。

シミュレーションの安定性と表現の自由度を両立させる、実践的なクロス表現のまとめとして、ぜひ最後までご覧ください!

目次

  1. シミュレーション用のローポリメッシュの作成
  2. Havok Cloth用の頂点選択と頂点ペイント
  3. Havok Cloth Setup Toolでの設定
  4. 全体
  5. UEでレンダリング
  6. 最後に

※使用モデル

ワトソン・アメリアさん

※使用モーションデータ

/

© 2016 COVER Corp.

シミュレーション用のローポリメッシュの作成

Havok Cloth において、シミュレーション用のメッシュの分割数(割り)は、クロスの動きに大きく影響します。

    • 割りが少ないほど → 硬めの質感
    • 割りが多いほど → 柔らかく、なめらかな動き

そこで応用編では、うねりのあるトップコート、硬めのリボン、髪の毛、それぞれの要素に合わせて、材質や動きの特性を考慮したシミュレーション用メッシュを作成していきます。
今回作成するシミュレーションメッシュと、「基礎編」で作成したシミュレーションメッシュをあわせた全体像になります。

基礎編」では比較的細かいメッシュでもパフォーマンスに問題がなかったため、そのまま流用していましたが、 応用編では同じ細かさのままだと動きが柔らかすぎて表現の意図とズレてしまう場面が出てきます。

そのため今回は、ケージモデルを組むような感覚で、必要最小限の割りでシンプルな構造のローポリメッシュを新たに作成していきます。
このように、シミュレーションメッシュの設計自体をクロス表現の一部と捉えることで、より意図に沿った動きを引き出すことができます。

このあとの工程では、各パーツごとにメッシュの設計方針や実装例を紹介していきます。

トップコート

まずはトップコート部分のシミュレーションメッシュについて解説していきます。

細かい方が元のメッシュ、粗い方が今回新たに作成したローポリのシミュレーションメッシュになります。

元のメッシュでは、シワの溝や縁部分まで非常に細かく割られており、Havok Clothにそのまま使用すると以下のような問題が起きやすくなります。

    • Clothが暴れやすくなる
    • 必要以上に柔らかくなってしまう

そのため今回は、全体をなるべく均等な四角形(ほぼ正方形)で構成するよう意識しつつ、布の落ち方・折れ目をイメージしたシンプルで安定したトポロジーで新たにローポリメッシュを作成しました。

今回のような素材感のコートでは、この程度のメッシュ密度であれば、過度に暴れることなく、程よい揺れが得られるバランスになると考えています。
トポロジーの密度をシンプルに保ちながらも、折れの方向やラインの流れを意識してメッシュを配置することが、安定したシミュレーション挙動につながります。

リボン

次に、リボン部分のシミュレーションメッシュについて解説します。

細かい方が元のメッシュをベースに作成したシミュレーションメッシュで、
粗い方が新たに作成したローポリのシミュレーションメッシュです。

今回のリボンに関しては、以下のような要件を意識して作成しています。

    • トップコートに付属しているため、Havok Cloth上でトップコートにアタッチする
    • 材質としては、やや硬めかつ長さがあり、ピンと張るような揺れ感を目指す

この要件を踏まえて、トップコートよりもさらにポリゴンの間隔を広めに取り、 全体的に剛性が高くなるようにローポリメッシュを構成しています。
特に付け根部分を「Fix」として設定する予定のため、 この部分は変形の少ない均一な四角形になるように整えました。

髪の毛

最後に、髪の毛のシミュレーションメッシュについて解説します。

今回は、比較的簡易的な揺れ表現を想定しつつ、自然な動きを出す構成でシミュレーションメッシュを作成していきます。
まず、ベースとなる髪の毛のラインに沿ってメッシュを作成し、枝毛などの分岐部分は別のメッシュに切り分けて、それぞれに対応したシミュレーションメッシュを設定しました。

髪の生え際付近はスキンウェイトで固定し、そこから毛束ごとに揺れが乗るような感覚でメッシュを制作する形になります。
メッシュの密度は、以下のように部分ごとに調整しています。

    • ざっくり動かしたい箇所はメッシュを荒く
    • しなやかになびかせたい箇所はメッシュを細かく

このように、部位ごとの動きの特性に応じた密度設計をすることで、動きに表情を持たせることができます。
このくらいのメッシュの間隔であればきれいに揺らすことができます。

ここでのポイントは、髪の毛のモデルがシミュレーションメッシュにしっかり乗っているかどうかです。
イメージとしては、下の画像のように板メッシュにペタッとモデルを乗せる感じです。

これにて、各部位ごとのシミュレーションメッシュ作成は完了です。
次のステップでは、MayaでのHavok Clothの準備に進んでいきます。

Havok Cloth用の頂点選択と頂点ペイント

ここからは、Maya 上での Havok Cloth を使用するための準備作業について解説します。

各種設定の詳細な挙動や反映結果については、後半の「Havok Cloth Setup Toolでの設定」で解説予定です。 ここでは主に、頂点の選択・頂点ペイントの内容と意図に焦点を当てて進めていきます。

トップコート

「fix」

トップコートの上部をスキンに固定して動かすことで、胴体側に潜り込んでも安定するように設定します。

「BackAngle」

首元の付け根からまっすぐ垂れるようにしたいため、「BoneParticleAngle」の制約をかけたい範囲を選択します。

「BackArmCollision」

腕が前に入り込んだ際に Cloth が暴れないよう、Arm のコリジョンの影響を受けさせたい頂点を選択します。

LocalStiff」 (Dimensions : float)

LocalRange」 の影響を強く与えたい部分を 1(白)として、徐々に弱くしたい範囲をグラデーションで頂点ペイントします。

Dimensions」 は 「float」 を使用します。

頂点ペイントの「Dimensions」の設定方法について補足しておくと

設定したいRaw channels>Exported channels>Export Attributes>Dimensionsで設定することができます。
※頂点ペイントのDimensions(Floatやdistance)の詳しい解説についてはこちらを御覧ください

collidable」 (Dimensions : distance)

コリジョン半径を拡張したい部位を 1(白)として頂点ペイントし、標準値で良い箇所は 0(黒)で塗ります。
Dimensions」は 「distance」を使用します。

「AttachUnder」

リボンとの連携部分。リボンの付け根となる面をそれぞれ選択します。

「AttachUpper」

リボンとの連携部分。リボンの付け根となる面をそれぞれ選択します。

リボン上下

「fix」

リボンの付け根を固定するための頂点選択です。

「attach」

アタッチクロスでトップコートに対してAttach Clothで紐づける頂点を選択します。

Effect」 (Dimensions : distance、Angle)

大きく揺らしたい部分を 1(白)でペイントし、揺らしたくない根元などは 0(黒)で塗ります。
Dimensions」は 「distanceAngle」を使用します。

髪の毛Upper

「fix」

髪の根元部分を固定します。

「Move」

ディスプレイメッシュにてシミュレーションで動かしたい頂点を選択します。

Effect」 (Dimensions : distance、float)

揺らしたい部分を 1(白)でペイント、不要な部分は 0(黒)で塗り分けます。
Dimensions」は 「distancefloat」を使用します。

LocalMin」 (Dimensions : distance、float)

内側方向への動きをどこまで許容するかを制御するペイント。 最も動かしたい箇所を 1(白)、抑えたい箇所を 0(黒)で塗ります。
Dimensions」は「distancefloat」を使用します。

髪の毛Split

「fix」

根元を固定します。

「Move」

ディスプレイメッシュにてシミュレーションで動かしたい頂点を選択します。

Effect」 (Dimensions : distance)

最も動かしたい箇所を 1(白)、抑えたい箇所を 0(黒)で塗ります。
Dimensions」は 「distance」を使用します。

次のステップでは、これらの情報を実際に Havok Cloth Setup Tool に出力し、設定を行っていきます。

Havok Cloth Setup Toolでの設定

続いて、Havok Cloth Setup Tool を使った実際の設定に進みます。

詳しいパラメーターについては「基礎編」を御覧ください

パラメーターのデバッグのコツ

まず最初に、Havok Cloth の設定を効率よく進めるためのデバッグ方法をご紹介します。実際に試してみてよかった流れです。
まず試したいメッシュ・シミュレーションメッシュをHavok Cloth Setup Toolに持っていき、
New Cloth Wizard」で新しいクロスを作成してみます。

その後、以下のコンストレイントをデフォルトで追加します。

    • StandardLinks
    • StretchLinks
    • BendLink
    • BendStiffness
    • Volume
    • LocalRange

LocalRange」については赤枠のSphere Radiusを「 0 」に設定をしてください。

ここまで準備ができたら Havok Preview Tool に持ち込みます。
Cloth Tools にチェックが入っていることを確認し、「Tools」パネルを開きます。

Cloth Tweeker > Tweek Settings > Sim-Cloth > Constraint Stiffness を展開すると、設定した各種パラメーターがスライダーとして表示され、プレビューしながら調整できます。
このように パラメーターやスペースキーで動かしながらリアルタイムで値が確認できるので非常に便利です。
パラメーターに当たりをつけてから本番セットアップに移ると、作業がスムーズに進められます。

トップコート

今回のセットアップでは、まず一番下に位置するトップコートから設定を行います。
Damping」の値は 「 0.95 」 に設定しています。

「StandardLink」

StandardLink」は、全ての頂点に対して一律「 0.9 」 を設定しています。 やや緩めることで、クロスが伸び切ったときにも自然にのびるような感覚が出せるようにしています。
「 0.2 」より下の値だと不安定になりやすいので、「 0.2〜1.0 」 の間で設定するのがおすすめです。
参考までに 「 0.9 」と「 0.2 」あたりとの比較です

「StretchLink」

今回は、全体を「 0.5 」に設定し、縦方向に少し伸びるような感じにしています。
StretchLink」 を 「 0 」 にすると、重力に引っ張られてクロスがだらんと落ちるような挙動になります。
縦方向の落ち感やたるみがほしい場合は、この値を調整すると効果的です。
参考までに「 0 」 にすると下の gifのようになります。

「LocalRange」

今回は、「基礎編」までの設定に加えて、Local Range Shape Setupを
デフォルトのSphereではなく「Cylinderに設定しています。

Cylinder」 の場合はスキンメッシュの位置を基準に

    • Radius:横方向への移動範囲
    • Max Normal Distance:法線方向+への移動範囲
    • Min Normal Distance:法線方向-への移動範囲

のようになります。
Cylinder」にすると、法線方向プラス・マイナス、横ずれという要素で体感的に設定ができるのでおすすめです。
簡単に画像にするとこのようになります。

今回は下記のように設定します。

    • Radius : 横方向への移動範囲を0.1
    • Max Normal Distance : 法線方向+への移動範囲を0.5
    • Min Normal Distance : 法線方向-への移動範囲を0

Stiffness」の頂点ペイントは画像のようになっています。
下に行くにつれて「LocalRange」コンストレイントを緩めて内側にも垂れるように調整を行っています。
参考までに、「 0 」にしたときとの比較になります。

「BendStiffness」

BendStiffness」は、全体に「 0.2 」を均一に設定して、
ある程度しなやかさを保ちつつも、必要以上にクシャッと潰れないようにしています。

この値は、布の張りや弾性に影響します。

0:ぐしゃっと折れる、しわ寄せが出やすい
1:ピンと張る、シルエットが崩れにくい

参考までに 「BendStiffness」 を 「 01 」 に変えたときの比較例です。

0 」にしたときにはクシャッとしている表現になっているのがわかると思います、

その逆に「 1 」 にしたときは突っ張りがあるような表現になっていると思います。
なので、使い分けの一例としては、

  • 脇の下や動きの多い部分 → 値を 「 0 」 に近づける
  • 裾や輪郭を保ちたい部分 → 値を 「 1 」 に近づける

今回は全体的に、折り曲げたりすることが多いので、
少し張りをもたせつつ、突っ張りすぎないように「 0.2 」を均一に設定しています。

「BoneParticleAngle」

BoneParticleAngle」 コンストレイントは、指定したパーティクルがある軸を中心に回転しすぎないよう制限するために使用します。

その回転軸(=平面)は、ユーザーが指定したボーンの方向を基準とします。
影響を与える頂点は、あらかじめ「BackAngle」の頂点選択で指定しておきます。 Min Angle / Max Angle の両方は、動かしたくない(=回転させたくない)ため「 0 」 に設定しています。

今回の設定では、「Spine1」 を基準ボーンとして使用し、Axis の X を「 1 」 に設定。 つまり、「Spine1のX軸を中心に制限をかける」という意味になります。
その状態でオフセットが「 0 」の場合、以下のように青いプレーンがパーティクルの動作制限領域として表示されます。

さらに Origin Offset の Y を「 1 」 に変更すると、制限平面の位置がずれ、下のように変化します。

このように、基準となるボーンの軸とオフセット値をもとに、クロスの回転可能な範囲を平面で制限することができます。
今回の場合、首元からストンと自然に垂れてくれるようなシルエットを保ちたいため、 「Spine1」を基準に、内側へ入りすぎないよう角度を制限しています。
※わかりやすさのために他のコンストレイント値は一時的に調整しています。

「Volume」

今回は、トップコート全体の形状を軽く保つ目的で、全体に「 0.01 」 を均一に設定しています。 この値で、必要以上に張らず自然な硬さを表現できます。

「Collision Options」

最後に、Collisionについてです。

BackArmCollision」という頂点選択で、影響を与える頂点を制限しています。
これにより、Collisionの影響を与える範囲を限定することができます。
腕を前に突き出した際に、腕の構造上どうしてもシルエットを保つためには体の中に入ってしまうため、
不安定にならないように胴体部分のトップコートには影響を与えないようにしています。

リボン

次に上側・下側の2本のリボンに対する設定を解説していきます。
Damping」は「 0.1 」に設定しています

共通設定

今回のリボンは、やや硬さと重みのある質感を想定しています。
そのため、形状が歪みにくくなるように、以下のコンストレイントを追加しています。

  • StandardLink
  • StretchLink
  • BendLink
  • BendStiffness
  • Volume

※すべてデフォルト設定のまま使用しています。

そこに加えて「BoneParticleAngle」を3つ追加していきます。
パラメーターが上側と下側で少し違うため、別で解説をしていきます。
まず、なぜ3つ追加するのかというと

  • トップコートにめり込まないようにするため
  • 上側や下側のリボンがお互いにめり込まないようにするため
  • 前後の揺れを抑えるため

の3つの役割を持たせています。

トップコートにめり込まないようにするためのBoneParticleAngle – RibbonUpper

RibbonUpper の方から説明をしていきます。

Min Angleを「 0 」、Max Angleを「 30 」に設定し、AxisのXを 「 1 」、Origin OffsetのYに「 1 」を入れます。

そうするとこのような形で「Spine1」の動きに合わせてリボンがこれ以上たれてこないようになります。

トップコートにめり込まないようにするためのBoneParticleAngle – RibbonUnder

RibbonUnder では、下にトップコートがあり上にもリボンがあるため、ほとんど動かないようにMax Angleを「 2 」に設定しています。
その他の設定は同じです。

上側や下側のリボンがお互いにめり込まないようにするためのBoneParticleAngle – RibbonUpper

こちらはMin Angleを「 0 」、MaxAngleを「 20 」に設定しています。
そしてAxisは変わらずXに「 1 」を、Origin OffsetのZに「 1 」を入れています。
このコンストレイントでは上下の移動幅を制限しています。

上側や下側のリボンがお互いにめり込まないようにするためのBoneParticleAngle – RibbonUnder

上にリボンがあるためMax Angleを「 2 」に設定しています。
同じ用にその他の設定は同じです。

左右の揺れを抑えるためのBoneParticleAngle – RibbonUpper

最後に横の揺れを抑えるコンストレイントです。
「Spine1」を基準としてAxisのYに「 1 」を、OffsetのZに「 1 」を入れています。
Min Angle は「 -10 」で、Max Angleは「 15 」を入れています。
Min とMax で数値が違うのは、右と左で揺れる幅を変えたかったためです。
左側のMinではリボンが短いため右寄りは動かないようにし、リボンが長い右側は左側よりも動くようにしました。

左右の揺れを抑えるためのBoneParticleAngle – RibbonUnder

こちらはリボンの長さが逆になっているので、MinAngleを「 -15 」にしてMaxAngleを「 10 」にしています。

「Cloth Attach」

最後にトップコートに2つのリボンをアタッチすれば終わりになります。

Cloth ToolsのWind機能を使用して揺らしてみたものです。

なおアタッチについては、「基礎編」で紹介されている通りになりますので、詳しくはこちらを御覧ください。

髪の毛

髪の毛については主に、頂点ペイントのEffectを使って制御しています。

Damping」は「 0.5 」になります。

髪の毛ではディスプレイメッシュの方でも頂点の選択をしているのでそちらの設定を忘れずに行うようにします。
MeshDeform の Output の 「Vertices」で動かしたい頂点を登録した頂点選択で、シミュレーションする頂点を制限することができます。

共通部分のコンストレイント

StandardLinkStretchLinkBendStiffnessVolumeはそれぞれデフォルトです。
また、Splitの方には、「BendLink」をプラスで追加しています、設定はデフォルトです。

「LocalRange」

ここではトップコートで紹介したように Shape の「Cylinder」を使用しています。

また、強く揺らしたいところに頂点ペイントEffectを塗ったと思いますが、それを使って
Override Scale」をします。
それぞれ、上から「 0 ~ 0.03 」、「 0 ~ 0.3 」、「 0 ~ -0.03 」 となっています。
髪の毛の下側をペイントで強く塗って、毛先だけが揺れるようにしている感じになります。

枝毛(Split)の方も同じ用に、髪の毛の下側をペイントで強く塗って「Override Scale」で調整し、毛先だけが揺れるようにしている感じになります。

「Cloth Attach」

最後にアクセサリーをHairにアタッチして終了です。

全体

Preview Toolで見てみるとこのような感じになります

UEでレンダリング

最後に

ここまで長きにわたり記事をご覧いただき、ありがとうございました。
Havok Clothの特性や制御方法を少しでも深く理解する助けとなっていれば幸いです。
なお、CEDEC 2025では7月23日(09:30~10:30)第13会場で行われるHavok様のセッションに登壇予定です。
ご興味のある方はぜひチェックしてみてください!

※使用モデル

ワトソン・アメリアさん

※使用モーションデータ

/

© 2016 COVER Corp.

hasegawa enzo

クロスシミュレーションやセットアップ、ツールの作成を主に行っています。お絵描きがすきです。

投稿者記事

  1. 【Havok Cloth】補助骨編「応用」

    2025-07-01

関連記事

  1. 【Havok Cloth】スカート編 (基礎)

    2025-05-06

  2. 【Havok Cloth】ネクタイ 時計編 (基礎)

    2025-05-20

  3. 【Havok Cloth】内側コート編 (基礎)

    2025-05-13

  4. 【Havok Cloth】エクスポート編(UE)

    2025-06-03

スキルレーダーチャート

テクニカルアーティスト専用
スキルレーダーチャート
どなたでも無料でご利用いただけます。

ABOUT

TECH COYOTE​

テクニカルアーティストのためのまとめサイトです。​
本サイトでは、ツール開発、業務効率化等について情報発信をしていきます。

COYOTE 3DCG STUDIO

C&R Creative Studios

難易度別

RECENT TWEET

ページ上部へ戻る