この記事ではUnityのコンポーネントのひとつ「Cloth」を使用して、3Dモデルのメッシュを布のように表現する方法について説明します。
コンポーネントの使用方法から、基礎的な使い方を説明します。
物理表現を理解し、VRの制作に活かしましょう!
サンプル
今回作成する、Cloth コンポーネントをアタッチしたPlaneがSphereに衝突するシミュレーションです。
どのようなものが作れるのか、確認してみましょう。
準備
Unityのプロジェクトを起動し、新しいシーンを作成しましょう。
今回シーン内には、Cloth コンポーネントをアタッチするPlaneと、それに衝突するSphereを作成します。
ヒエラルキーウィンドウ上で右クリックをし、3DModel > Plane 及び Sphereを選択し、作成しましょう。
PlaneのTransformは以下のようにします。
SphereのTransformは以下のようにします。
シーンウィンドウは以下のようになります。
これで準備ができました。
Cloth コンポーネント
PlaneにCloth コンポーネントを追加しましょう。
Planeを選択した状態で、インスペクターウィンドウの「Add Component」から「Cloth」を選択して追加しましょう。
これでCloth コンポーネントを追加できました。
コンポーネントを見ると、さまざまなプロパティを調整できます。
プロパティ
Cloth コンポーネントの各プロパティと機能は以下のようになります。
プロパティ | 機能 |
Stretching Stiffness | クロスの伸縮率を設定します。 |
Bending Stiffness | クロスの曲げ剛性を設定します。 |
Use Tethers | 動いているクロスのパーティクルが固定されたパーティクルから、遠くに離れ過ぎるのを防ぐ制限を適用します。 |
Use Gravity | クロスに重力加速度を適用します。 |
Damping | モーションの減衰係数を設定します。 |
External Acceleration | クロスに外部から一定に加えられる加速度を設定します。 |
Random Acceleration | クロスに外部からランダムに加えられる加速度を設定します。 |
World Velocity Scale | ワールド空間でのキャラクターの動きがクロスの頂点にどのくらい影響を与えるかを設定します。 |
World Acceleration Scale | ワールド空間でのキャラクターの加速がクロスの頂点にどのくらい影響を与えるかを設定します。 |
Friction | キャラクターと衝突したときのクロスの摩擦係数を設定します。 |
Collision Mass Scale | 衝突するパーティクルの密度をどのくらい増加するかを設定します。 |
Use Continuous Collision | 衝突の安定性を向上させるために継続的な衝突を有効にします。 |
Use Virtual Particles | 衝突の安定性の向上のために、ひとつの三角形ごとにひとつの仮想パーティクルを加えます。 |
Solver Frequency | 一秒間ごとのソルバー反復の回数を設定します。 |
Sleep Threshold | クロスのスリープのしきい値を設定します。 |
Capsule Colliders | クロスインスタンスが衝突するカプセルコライダーの配列を設定します。 |
Sphere Colliders | クロスインスタンスが衝突するスフィアコライダーの配列を設定します。 |
プロパティーに関して:Unity マニュアル「Cloth」より引用
https://docs.unity3d.com/ja/2019.3/Manual/class-Cloth.html
各項目の詳細な設定は衣服などを表現する際に調整します。
今回は基礎的な使い方を学ぶためだけなので、省略します。
PlaneとSphereを衝突させる
今回は基礎的な使い方としてPlaneとSphereを衝突させてみましょう。
Cloth コンポーネントはRigidbodyをアタッチしなくても、Gravity(重力)が発動します。
この状態で再生してみましょう。
この状態で再生しても、PlaneとSphereは衝突せず、通過してしまいます。
Cloth コンポーネントのプロパティを設定して、衝突させます。
Sphere Colliders
Cloth コンポーネントをアタッチした3Dモデルを、ほかの3Dモデルと衝突させる方法の代表的なやりかたは、Cloth コンポーネントの「Sphere Colliders」を使う方法です。その説明をします。
Planeを選択した状態で、インスペクターウィンドウのCloth コンポーネントを確認しましょう。
プロパティの「Sphere Colliders」を設定することで衝突させることができます。
左の▶をクリックし、メニューを表示させます。
メニューを表示すると「Size」と書かれたプロパティが現れます。
このSizeの値はCloth コンポーネントに当たり判定を設定するColliderの数となります。
現在は「0」となっているため、当たり判定を設定するColliderの数が0のため(Sphereを当たり判定と設定していないため)、衝突しません。
このSphere Collidersに、シーン上のSphereを設定します。
Sphere CollidersのSizeの値を1にします。
すると、新しく「Element 0」というプロパティが表示されます。
First / Secondとありますが、今回はFirstのみを使います。
Firstのプロパティーの「None」の空欄部分に、ヒエラルキーウィンドウ上のSphereをドラッグ&ドロップしましょう。
これでシーン上のSphereはPlane(Cloth)の当たり判定に設定されました。
実際に再生してみましょう。
実際に衝突して、布のような動きを表現してくれました。
別のSphereを作成して衝突させる場合は、再度同じようにCloth コンポーネントのSphere Collidersの設定をしましょう。
また、プロパティー上の「Capsule Colliders」は同じように、Capsule Colliderを当たり判定に設定することができます。
人などに当たり判定を設定したい場合はCapsule Collidersを使用しましょう。
STYLYへアップロード
この布の表現を応用していろいろな作品制作に使ってみましょう!
布の表現を追求することで、衣服や旗など現実のオブジェクトをシミュレーションすることができます。
今回は基礎的な使い方のみを解説しましたが、別の記事では衣服や旗などを作れるようにします!
最後にSTYLYへアップロードしましょう。今回はプレハブでアップロードします。
プレハブでアップロードする際には、SphereとPlaneを空のGame Objectにし、Game Objectをプレハブ化しアップロードしましょう。
アカウント作成方法
NEWVIEW SCHOOL ONLINEの紹介
VR/ARコンテンツ制作に必要なUnity・PlayMakerを基礎から応用まで学べ、STYLYで配信されている魅力的なコンテンツの制作過程(制作技術も公開します)を学べるNEWVIEW SCHOOL ONLINEを開講中です。