Search Unity

Unity 5 で可能となった重要なキャラクター表現のひとつである「クロス(Cloth)」について、その設定の仕方と使いこなしについてご紹介します。

こんにちは。Unity Technologies Japan合同会社でコミュニティエバンジェリストを務めています、小林信行と申します。今回はキャラクター表現に役だつ Unity 5 の機能のひとつを紹介したいと思います。

キャラクター表現とダイナミクス

キャラクターを表現するのに、揺れ物(ダイナミクス)は欠かせません。ダイナミクスというのは、別名セカンダリアニメーションと言って、主にFBX経由でインポートされるアニメーション(これを、プライマリアニメーションと呼びます)に対して、髪や服などのいわゆる「揺れ物」の動きを別途、ゲームエンジン上でプライマリアニメーションに加算する形で実現する機能のことを言います。ダイナミクスにはいろいろな手法があります。物理エンジン Physics を使う方法もあれば、スプリングなどの計算式を使うものもあります。それぞれに得意・不得意な面があるので、用途や目的に合わせてその手法が選ばれるのが普通です。

例えば、日本の3Dアニメーションでは、3dsMax の「 Spring Magic 」 というスクリプトがしばしばダイナミクスの手法として採用されています。皆さんがテレビで目にする3Dキャラクターの多くが、このスクリプトによって髪を揺らしているのです。

一方 Unity 上では、従来のジョイントベースの揺れ物表現としては、ユニティちゃんに使われている「Spring Joint」が綺麗な揺れ物を実現してくれましたが、ジョイントベースでは表現できないものもあります。
そこで、Unity 5 で一新された Physics コンポーネントのひとつである、「Cloth」を使ってみましょう。デザインできる服のバリエーションが一新します!

「Cloth」は名前の通り、リアルタイムのクロスシミュレーションを実現する機能です。設定は少々癖がありますが、コツを掴めば効果的な揺れ物表現ができます。
また「Spring Joint」と「Cloth」を使い分けることで、「Cloth」単体では難しい表現も可能となります。

クロスシミュレーションで何ができるのか?

まずは、クロスシミュレーションでどのようなことができるのか、ムービーで見てみましょう。


このように、3Dのメッシュをまるで布(クロス)のように動かすことができるのが、クロスシミュレーションの特長です。これらの特長を十分に活かすと、次のようなキャラクター表現が可能となります。

左側は、おなじみのCRSユニティちゃんです。右側の3Dワルキューレのロングパレオの動きは、全てクロスシミュレーションで実現されています。
途中、「ロングパレオすれすれに、足を地面に踏み込む」という、クロスシミュレーションにとっては大変難易度の高いアクションがありますが、綺麗にクリアしてるのが見て取れると思います。

この「3Dワルキューレのロングパレオ」のようなデザインは、従来のジョイントベースの揺れ物では、表現するのはまず難しいデザインのひとつでした。それが Unity 5 で搭載された Cloth コンポーネントを使うことで、実現可能となったのです。

他にも Cloth コンポーネントは、Blacksmith デモでも使用されています。
Blacksmith デモでは、挑戦者の男の鎧の直垂の部分に使われています。

挑戦者の男が歩いて行くと、鎧の直垂が自然に太ももに沿って、程良く変形しながら動いているのが見て取れます。この直垂部分にはジョイントは一切入ってませんが、クロスシミュレーションを使うことで、それ以上の効果が出ていることはわかると思います。

設定の仕方

Cloth コンポーネントのアタッチは簡単です。Skinned Mesh Renderer がついているゲームオブジェクトに、「Add Component」ボタンより、Physics>Cloth を選択し、コンポーネントをアタッチするだけです。

cloth05

Cloth コンポーネントがアタッチされると、次の様な状態になります。

cloth06

後は、適宜、Cloth のプロパティの調整と、Cloth との衝突を判定するためのコライダーの設定を行います。
まずはわかりやすいコライダーの設定から行っていきましょう。

使用できるコライダーについて

使用できるコライダーは、

・Sphere(球)
・Capsule(カプセル)
・Sphere 2個による円錐型

の三種類です。各コライダーを組み合わせることも出来ます。

cloth07

Cloth コンポーネントのプロパティについて

cloth08

Cloth コンポーネントには多くのプロパティがありますが、調整する必要があるプロパティはさほど多くはありません。調整する必要があるプロパティに関しても、大きく3つのブロックに含まれているプロパティを順番に調整していくのが良いでしょう。3つのブロックは、

・「布の動きの質感」を作り出すプロパティ
・「Cloth」の使用目的に応じて設定するプロパティ
・シミュレーションの精度をあげるためのプロパティ

と用途が別れています。その他のプロパティは、特別な目的に用いる場合を除いて、基本デフォルトのままで問題ありません。

「布の動きの質感」を作り出すプロパティの調整

Stretching Stiffness/Bending Stiffness
⇒布の延びと捻れへの堅さを制御します。
・Stretching が1に近づくと「延びにくく」なります。
・Bendingが1に近づくと「捻れにくく」になります。

Damping
⇒モーションの減衰係数。
・1に近づくほど、クロスのモーションが「重め」になります。
・0に近づくほど、クロスのモーションが「はずみやすく」なります。

まず、この3つのプロパティを調整することで、設定したい「布の動きの質感」を作ります。

例えば、「薄い絹でできた布」を表現したいならば、Bendingは小さめ(0.2程度)に、Dampingは0.3程度にするとよいでしょう。一方、「厚めの布」を表現したいのならば、Bendingは大きめ(1に近い程度)に、Dampingも大きめ(0.8など)にしてやります。

この辺りは、Cloth を適用するメッシュの密度と、各人のイメージに依存しますので、実際にモーションを再生しながら、プロパティを調整していくとよいでしょう。

その為には一番最初に見たような、「布を球の上に落とす」みたいな単純なシーンを作って、各プロパティの癖をテストしてみるのがよいと思います。

「Cloth」の使用目的に応じて設定するプロパティ

World Velocity Scale / World Acceleration Scale
⇒Clothコンポーネントがついているオブジェクトのモーションに対し、
・Velocity Scale:速度(ベクトル)から受ける影響力を設定します。
・Acceleration Scale : 加速度から受ける影響力を設定します。

Friction
⇒コライダーとの摩擦係数。
・1に近づく程、摩擦が大きくなります。
・0に近づく程、すべりがよくなります。

これら3つのプロパティは、Cloth をどのような目的で使用するかによって決めるとよいでしょう。ダンスでの揺れ物の場合には、Acceleration Scale のほうを主に設定します。

最後に残った「シミュレーションの精度をあげる」ためのプロパティを設定する前に、やらなければいけない作業がありますので、まずはそちらを済ませておきましょう。

特定のジョイントに「固定」する

Cloth シミュレーションは、物理シミュレーションのひとつですので、多くの場合、「Use Gravity」にチェックすることで、重力を考慮したシミュレーションを行います。

その時に、特定のジョイントに「固定」しておかないと、困ることが発生します。
例として次の2つのムービーを見てください。

固定をしていない場合

Hipジョイントに固定した場合

Hipジョイントに固定したものは、どんなに動かしても地面には落ちませんが、固定をしていないものは、動かしすぎると滑り落ちて地面に落ちていくことがわかると思います。

cloth11

例えば、スカートなら、多くの場合、腰(Hip)のジョイントにウェイトづけられていると思います。
Cloth をスカートのメッシュに適用して、スカートが Hip ジョイントから滑り落ちないようにするために、Cloth コンポーネントの「Edit Constraints」で拘束します。

cloth12

Visualization を「Max Distance」にして、Paintボタンを ON、Max Distance にチェックして、値を0に設定します。

cloth13

Sceneビュー上で、スカートの上部の頂点を赤く塗りつぶしていきます。赤く塗りつぶされた頂点が、Hipジョイントに拘束されることになります。

cloth14

この塗りつぶしは、やり直す時にはClothコンポーネントを一度外して再設定する必要があるので、少しづつ調整をしたほうがよいでしょう。

3Dワルキューレの場合、ロングパレオのメッシュを Hip ジョイントにウェイト付けをした後で、主にロングパレオの腰の部分を Max Distance の値を0(赤)で設定しました。この設定は、腰の部分の布はしっかりと Hip ジョイントに拘束されるようにし、それ以外の部分は自由に動くように意図しているからです。(あと、むやみにスカートがはだけないようにする、という目的もあります。)

cloth15

Blacksmith デモの挑戦者の男の直垂の場合、腰の辺りの Max Distance の値は0(赤)、途中真ん中あたりで値が一番大きい 0.6(緑)になり、末端部分は 0.4 程度(黄)になっていることが見て取れると思います。これは、腰付近は Hip ジョイントに拘束されていますが、それが末端のほうにいくとそこそこ緩められているということです。結果、足の動きに合わせて、直垂が太ももを避けつつ、揺れるというアクションを実現しています。

cloth16

なおもうひとつのプロパティである「Surface Penetration」は、共に設定はしていません。通常の使用の範囲内では、こちらのプロパティの設定はしないでかまいません。

Cloth シミュレーションの精度をあげる

特定のモーション等で、Clothシミュレーションの精度をあげたい時があります。
例としては、「足を踏み込む」みたいな動作がある場合、パレオなどにClothシミュレーションをしていると、頂点の一部がコライダーに引っかかり、板ポリのようなものが出現することがあります。

cloth17

その場合「Solver Frequency」の値を、通常(120)の2倍以上に設定します。
設定値はメッシュの密度に依存します。

Cloth シミュレーションを使いこなすための Tips

以下に Cloth シミュレーションを上手に使いこなすための Tips をいくつかあげておきますので、参考にしてみてください。

1. シミュレーション設定を始める前に、スケールを確認すること。
(なるべくUnity上で全体にスケールはかけずに、モデル側でサイズを事前に調整しておく)

2. Clothシミュレーションをするメッシュの密度はなるべく高めのほうが綺麗な結果が得られる。
(その代わりマシンパワーも必要になる)

3. Cloth同士の接触判定はできないので、「服」に「ベルト」を組み合わせたいような場合には、他の方式との組み合わせを考える。(「Spring Joint」も使うなど)

4. コライダーとして、接触判定用と形状維持用の2種類を使い分ける。

5. ダイナミクスを使用する時には、必ずウォームアップタイムを準備する。
 ※ウォームアップタイム:ダイナミクスが安定するまでの予備時間のこと

最後に設定しました3Dワルキューレのクロスに設定したプロパティ値を参考までに公開いたします。
ロングパレオのメッシュの分割密度をかなり上げてありますので、以下のような設定になっています。

cloth18

それでは、Unity を使った新しいクロスシミュレーションの世界をお楽しみください!

クレジット

■3Dワルキューレとは
本文内で使用させていただいたキャラクターモデル「3Dワルキューレ」は、「ワルキューレの冒険 時の鍵伝説」に登場するワルキューレをもとに、株式会社バンダイナムコエンターテインメントにて新たに作成したものです。

■カタログIPオープン化プロジェクトとは
「カタログIPオープン化プロジェクト」とは、バンダイ・ナムコ統合10周年記念企画として、株式会社バンダイナムコエンターテインメントが実施している、ネットワークエンターテインメントのさらなる事業域の拡大を目的とした取り組みです。クリエイター登録することで、カタログIP(同社保有のオリジナルIP)17タイトルを使った二次創作が、デジタルコンテンツの領域において可能となります。参加には、クリエイター登録が必要です。作品の公開は日本国内のみとなります。

公式サイト http://open.channel.or.jp/
公式ツイッターアカウント https://twitter.com/876cafe
©BANDAI NAMCO Entertainment Inc.

コメント受付を終了しました。

  1. Say what?

    Looks like a good cloth information source, but I don’t understand a thing. ^^