揺れモノ超ド素人がKawaiiPhysicsを使って、感覚を頼りに女性キャラクターモデルのKawaiiを増す方法まとめ

**可愛いは揺れモノ超ド素人でもKawaiiPhysicsで作れる！！**

[Unreal Engine (UE) Advent Calendar 2021](https://qiita.com/advent-calendar/2021/ue)、1日目です。

仕事で[KawaiiPhysics](https://github.com/pafuhana1213/KawaiiPhysics)を使う機会があったのですが、揺れモノ設定を仕事でしたことが無く、頼れる人もいないために自分の感覚で四苦八苦しながら対応したので、その時に得た感覚らしきものを書きます。
[KawaiiPhysicsの最新版](https://github.com/pafuhana1213/KawaiiPhysics/releases/tag/20201202-v1.7.0)をそのまま使用したので、他のモデルで揺れモノ設定をする場合に若干役立つかもしれません。

~~KawaiiPhysicsを使用したサンプルプロジェクトを作成したので、よろしければ参考にしてください。~~

・2021/12/1 追記
公開用のサンプルプロジェクトを作成していたのですがトラブルが発生したため、公開できるレベルに至ってません。
記事も大幅に書き直す必要もあって調整が間に合わなかったため、後日改めて公開します。申し訳ございません。

# まず初めに
自分の感覚を元にベストで可愛い揺れモノの物理挙動を設定したので、物理的な説明としては意図的に間違っている部分があります。

『可愛ければOK』が大前提のため、

- 現実に沿った物理的、学術的に正しい揺れ
- アニメーション全てにおいてキャラが映えるような揺れ
- 最適化

は一切書いてませんのでご了承ください。

# 作業環境

| 項目 | 内容 |
|:-|:-|
|UE4バージョン|27.1|
|KawaiiPhysicsバージョン|[20201202-v1.7.0](https://github.com/pafuhana1213/KawaiiPhysics/releases/tag/20201202-v1.7.0)|
|OS|Windows10|
|CPU|Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz   2.60 GHz|
|GPU|GeForce RTX 2080|
|メモリ|16.0 GB|

# 書くこと

<dl>
  <dt>KawaiiPhysicsを利用した3Dモデルの揺れモノの揺らし方</dt>
  <dd>一つの例としてみてください。</dd>
  <br/>
  <dt>自分が感じた揺らし方の感覚、好み</dt>
  <dd>揺れモノを含めた知識はないので、自分の感覚、好みを頑張って言語化しています。</dd>
  <dd>その為、曖昧で根拠に欠けるような内容が多いため、学術的な揺れ方をお求めの方は参考資料、もしくは<a href="https://cedil.cesa.or.jp/">CEDEC</a>等で探してください。</dd>
  <br/>
  <dd>ここに書かれていることよりは説得力が段違いです。</dd>
  <br/>
  <dt>女性キャラクターモデルの揺れモノ設定において参考になる設定値</dt>
  <dd>ここに記載する内容は全て、女性キャラクターモデルの揺れモノ設定値になります。</dd>
</dl>

# 書かないこと

<dl>
  <dt>KawaiiPhysicsのプラグインビルドのやり方</dt>
  <dd><a href="https://docs.unrealengine.com/4.26/ja/ProductionPipelines/Plugins/">公式ドキュメント</a>を見たり、「UE4 プラグイン　ビルド」で検索してください。</dd>
  <dd><strong>最低限プラグインのビルドが自力で出来る</strong>、という前提で書いています。</dd>
  <br/>
  <dt>KawaiiPhysicsの詳細な解説や最適化</dt>
  <dd>あくまでも『自分好みの理想の揺れ方を追求している』ので、KawaiiPhysicsプラグインの詳細解説や最適化を求める方は参考資料の方を見てください。</dd>
  <br/>
  <dt>男性キャラクターモデルの揺れモノ設定において参考になる設定値</dt>
  <dd>どなたかカッコよさを増す揺らし方を教えてほしい </dd>
</dl>

# KawaiiPhysicsの個人的な利点、欠点

個人的に感じた、KawaiiPhysicsの利点、欠点を簡潔にまとめました。

## KawaiiPhysicsの利点

* 現行のPhysXに比べて設定が楽で暴れが比較的発生しにくい
* AnimDynamicsノードに比べて設定項目が少ないのに、個人的に求める揺れ方をする物理挙動を設定しやすいので、揺れモノに詳しくなくてもクオリティアップしやすい
* 物理挙動としてスプリングが不要な場合、回転軸のみのKawaiiPhysicsで十分満たしている
* カプセルコリジョンが設定できる。
→AnimDynamicsは**スフィア**と**平面**のみ
* iOS,AndoridのモバイルもOK。
→仕事ではUE4.27で使用しました。

## KawaiiPhysicsの欠点

個人的には微々たるものですが、

* 回転軸のみのため、スプリングを使いたい場合はAnimDynamicsノードを使用する。
* 筒状のクロスに設定した場合、アニメーション次第ではメッシュの貫通を完全に防ぐのが難しいので、[クロスツール](https://docs.unrealengine.com/4.27/ja/InteractiveExperiences/Physics/Cloth/Overview/)で設定したほうが短時間でクオリティがアップする...かも。
→モデルとアニメーション次第になります
* 意図的にアニメーションを映えさせる揺れ方を設定することはできない
→映えさせる揺れ方をしたいなら、**アニメーションシーケンスで手付けするしかない**と思います。

だと思います。

## 使用したサンプルモデル

再配布の許可が出ている[ニコニ立体、マスコットキャラクター『アリシア・ソリッド』](https://3d.nicovideo.jp/alicia/)と[バトルコスユニティちゃん](https://unity-chan.com/download/index.php)をお借りしました。

https://3d.nicovideo.jp/alicia/

https://unity-chan.com/download/index.php

## 目指したゴール

KawaiiPhysicsで設定値を調整するにあたり、目指したゴールは以下の通りです。

**キャラクターを『可愛く』見せる揺れ方をする設定をする**

これを満たすために、テーマを定義したほうが個人的に仕事をしやすかったので、以下のテーマを設定しました。

**『ゆるふわ』で『良い匂い』がしそうな揺れ方**

上記テーマを決めたのは以下の動画のコメントを見たからです。

https://nico.ms/sm28412981

揺れモノ研究として上記動画を見た時、コメントで

「いい匂いがする」
「桃の香りがしそう」

等があって、「なるほど、これだー！」と思い目標として採用しました。
キャラクターとして『可愛い』を感じる一つの要因にはなるかと思います。

## 揺らす対象

人型の女性キャラクターで揺れモノを設定する場合、大雑把に分けると大体以下の通りになるかと思います。

- 髪<br/>→超短髪や坊主設定のキャラクターは除きます
- 胸
- ネクタイ<br/>→服の上に出ている等、揺れても不自然ではないデザインに限ります
- セーラー服のスカーフ
- イヤリング等、揺れるのに違和感を感じないアクセサリー全般
- スカート
- 燕尾服の後ろ裾等、パーツが揺れることに違和感を感じない服全般

色々書きましたが仕様的に揺らしてほしい部分は、基本的にボーンとウェイト指定が済んでいるので、揺れ対象のボーンをKawaiiPhysicsのノードで指定しましょう。

## 基本的なKawaiiPhysics設定

各プロパティの詳細は[Wiki](https://github.com/pafuhana1213/KawaiiPhysics/wiki/%E5%90%84%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6--About-each-parameters)と[サンプルプロジェクト](https://github.com/pafuhana1213/KawaiiPhysics)を確認してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/3d13b60e-de9d-8737-ffd3-475157821db3.png)
どのような影響を受けるのかは、サンプルプロジェクトを触りながらWikiを見るのが、理解が深まる近道です。

ここでは実際に各プロパティを調整していて内に感じた感覚を書いています。

:::note info
ここで書く『感覚』とは、『<strong>ゆるふわ</strong>で<strong>良い匂い</strong>がしそうな揺れ方』を目指す為に各プロパティの調整を繰り返してた結果、見えてきた<strong>コツ</strong>みたいなものです。
:::

また、Teleport Distance Threshold等、記載していないプロパティに関しては、KawaiiPhysicsのサンプルプロジェクトで設定された値を、そのまま使用したため説明は省略します。

## 1.揺らしの調整

可愛い揺らし方の実現のため、調整したのは以下の通りです。

### Physics Settings構造体

調整で一番触った構造体です。
『ゆるふわ』で『良い匂い』がしそうな揺れを目指す為に、特に以下のプロパティを触りました。

| プロパティ名 | 解説 |
|:-:|:-|
|Damping|値が小さいほど加速からの減衰が少ないので、激しく揺れます。<br/>0は基本的に揺れっぱなしになります。<br/>値が大きくなればなるほど減衰がかかるので、揺れ始めが重く感じるようになったり、揺れ幅が小さくなります。|
|Stiffness|曲がりやすさの値です。<br/>0になると元の形に戻らなくなるので、疑似無重力状態になります。<br/>値が大きくなると元の形に戻る速さが変わります。<br/><br/>値が大きくなるとDampingの値を小さくして加速度を増しても、揺れなくなっていきます。|
|Limit Angle|回転制限の最大角度です。0であれば360度自由に動きます。<br/>角度を20以下に抑えることで硬めかつ控えめに、後はアニメーションを見ながらメッシュめり込みと暴れが発生しない範囲で丁度いい揺れ方をする角度を探りました。<br/><br/>主にめり込みと暴れの防止で調整する値です。|

基本的に**Damping**と**Stiffness**の二つを調整します。

羽が舞うように、軽さを感じるような『ふわっ』とした揺れを目指す場合、Dampingの値を調整して揺れが鈍くなるタイミングで、Stiffnessを調整すると求める揺れに近づくと思います。

調整していると唐突に「『良い匂い』がする気分にさせる、羽が舞うような『ふわっ』とした揺れ方」が現れます。
自分の心の声で『それだ！』と叫ぶタイミングがあり、そこを目指してひたすら調整しました。

※感覚的で曖昧なことを書いて申し訳ないです。自分の語学力ではこれが限界でした...

### 各種カーブアセット

揺れ方として例を一つあげると、

『最初は加速をつけて激しく揺らしたいけど、最後には急激に減衰をかけて『ふわっ』と舞うような動きをさせたい』

のように、時間につれて**Damping**と**Stiffness**の値を変えたい場合はカーブアセットを使用します。

※揺れ方に関して感覚の話をして申し訳ないですが、自分の語学力ではこれが限界でした...

カーブアセットをDampingで使用した場合の動作例です。

- 使用したカーブアセット<br/>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/25e40030-d144-3f79-a0fc-c850bde35f3f.png)

- Physics SettingsのDampingを以下に設定<br/>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/0b1b848b-0133-363a-c5f7-0c5c5ca035b6.png)

|カーブアセットの有無|Gif|
|:-:|:-:|
|有|![sample_c.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/751f47a4-855f-6bc8-39fb-1576b800aa8c.gif)|
|無|![sample_n.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/71bedaff-20b6-df23-3477-251c0179d651.gif)|

※設定が雑なのでGifは参考程度でお願いします。

カーブアセットの使用有無で揺れの固さがgifの通り変わるので、上手く調整すれば可愛いを感じさせるための揺れクオリティのアップに繋がります。

:::note
ただし、カーブアセットは<strong>必ず使う必要はありません</strong>。

『<strong>実際にあった話。デフォルト設定の場合、カーブアセットが指定されていると毎回値を読みに行くのですが…その負荷が全体の約1/3を占めてました。</strong>』
※<a href="https://pafuhana1213.hatenablog.com/entry/2019/07/26/171046">揺れ骨用自作AnimNode「Kawaii Physics」の内部実装解説的なもの その1</a>より引用

カーブアセットを使わずに求める揺れ方がPhysics Settingsの値設定のみで出来れば一番です。
カーブアセットを使う場合は、<strong>STATコマンドで負荷を見ながら</strong>適応するか否かを判断してください。
:::

### External Force

重力の値です。

3Dモデルによりますが、服の形状や長髪のボーンで揺らす際に、揺れモノのボーンを**重力計算によって垂らすことを前提**とする場合、位置、角度を意図しない値に設定される場合があります。

丁度いいところに**[ユニティちゃんSunny Side Upモデル](http://unity-chan.com/contents/guideline/?id=ssu_urp)**に重力計算が必要な揺れボーンが設定されているので、こちらにExternal Forceを適応します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/42c46989-7990-7b9b-d4f2-5116ed407437.png)

左右のおさげ、しっぽにKawaiiPhysicsを付けてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/96763007-d72a-419e-0e4f-c6a7aa0c113e.png)

以下のようにPhysics Settingsの値を設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/a58dbe5c-5e61-aca1-ad4b-7a004eb0940d.png)

External Forceは**AnimDynamicsのGravity Override**のように各X,Y,Zの座標方向に重力計算を行います。
試しに以下の値を設定してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/d9171017-f994-a890-09a9-c4145f576b9e.png)
※使用したモデルはZ座標が高さだったので、Zにマイナスの値を入れていました。

|External Force Zの値|Gif|
|:-:|:-:|
|0|![sample_force_false.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/6e3a7aca-e9d9-b603-79bb-be0a06be8792.gif)|
|-5000|![sample_force_true.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/eccbc7df-a8f5-1b79-f3ab-a223f97039b1.gif)|
明らかに重力計算が入っているGifがより自然な揺れ方をしています。

KawaiiPhysicsは**元の形に戻る性質**があるので、上記のように『**重力を考慮しないと形状記憶合金のように常に元の位置に戻ってしまい、不自然さが増してキャラクターの可愛さを半減させてしまう**』場合に使用します。

:::note info
AnimDynamicsのGravity Overrideと同じく、<strong>比較的大きな値を入れないと重力計算による反応がビューワーで確認できない</strong>ので、まず-5000等、比較的大きな値を入れ適切な重力のベクトルを確認後、アニメーションを見ながら適切な値に増減するのがいいかと思います。
:::

## 2.暴れの抑制

物理で揺らすとどうしても出てしまうのが、意図しないタイミングで制御不能な大幅な揺れ、動いていないのに小刻みな揺れが発生する、いわゆる暴れの問題です。

暴れを完全に防ぐのは難しいですが、KawaiiPhysicsは少なくとも今まで触ってきた物理シミュレーションシステムの中では、適切に調整すれば暴れが発生しにくいシステムと個人的には思っています。

~~デフォルトのPhysXはよく暴れてくれたので、KawaiiPhysicsの暴れはカワイイほうですｗ~~

### Physics Settings構造体

| プロパティ名 | 解説 |
|:-:|:-|
|Radius|メッシュめり込みを防ぐために値を不必要に大きくすると、揺れた際に各コリジョンが不用意に衝突して暴れてしまう頻度が多くなります。<br/><br/>なるべく衝突しない値に設定するのが理想ですが、各ボーンのコリジョンの隙間が大きくなるとメッシュの貫通、及びめり込みが発生する場合もあるため、調整は結構難しい部分でもありました。|
|Limit Angle|Wikiに書かれていますが、こちらの角度を調整することによって暴れの抑制することができます。<br/><br/>少なくとも0以外を設定しましょう。0は**360を設定しているのと同じ**なので、暴れた際に激しく揺れます。|

:::note info
Wikiに書かれている通り、Limit Angleを低くすれば暴れが発生する頻度は低くなりますが、角度を抑えすぎてしまうと『よく見ないと揺れてるか判断できないレベル』になってしまい、<strong>針金が中に仕込まれた印象を抱いてしまい</strong>、可愛さが半減してしまいます。
アニメーション、もしくはモデルをコントローラー等で移動させて、揺れ方のクオリティを調整しましょう。
:::

## 3.めり込みの抑制
一番頭を悩ませた部分です。
各Limitを使用すれば防げますが、「肩まで届くぐらい長いもみあげ」や「スカート等筒状メッシュ
」のめり込みを防ぐにはある程度の工夫が必要でした。

### Physics Settings構造体

| プロパティ名 | 解説 |
|:-:|:-|
|Radius|値が大きければ大きいほどLimitと衝突しやすくなりますが、コリジョン衝突による不必要な暴れも発生させてしまうので、慎重に値調整をする必要があります。|
|Limit Angle|筒状メッシュの場合、Limit Angleを少なくすることによってめり込みが発生することがよくありました。<br/>アニメーションを見ながら、適切な角度に調整してください。|

:::note info
ユニティちゃんに限らずですが、<strong>揺れモノのボーンは次の節までの長さが一致しない</strong>ことが大半なので、めり込みと暴れを防ぐ適切なコリジョンを調整しにくいと思います。
その場合カーブアセットを利用して、ボーンごとにRadiusの値をある程度調整することが可能です。
:::

- 以下のカーブアセットを使用した場合のコリジョン形状の変化<br/>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/05183fca-f1cb-c7e2-79e7-6f0f343313be.png)

|カーブアセットの有無|画像|
|:-:|:-:|
|有|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/3e5d7361-bb0f-7e1d-4088-5a161e308246.png)|
|無|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/36f822ca-a8c0-5660-7f06-6121c7513e71.png)|
※Radiusの値は10を設定しています。

適切にカーブを設定できればめり込みと暴れの軽減に繋がるため、揺れのクオリティがアップします。
めり込みと暴れが酷い場合はカーブアセットの適応も一手です。

### 各種Limit

めり込みを防ぐために使用するものです。各Limitの使い方は、大体以下の通りです。

- Sphere Limit

基本頭。場合によっては手に使用
Capsule Limitが便利すぎてそちらを使用していますが、検証してSphereのみで問題なさそうであればSphereに適宜入れ替えました。

- Capsule Limit

基本は上腕、前腕、大腿、下腿、体の細長いといえる部分。
頭に使用する場合もあります。

とにかく便利なLimitでした。
しかし、『筒状メッシュ』や『長さが違う揺れボーンによりRadiusの間隔が少し空き気味な場合』はめり込んだり、そのまますり抜け貫通する場合があるのでPlane Limitを使いながら、適材適所を見極めてください。

- Plane Limit

筒状メッシュが触れるメッシュ部分。スカートであれば股関節にあたるボーンにつけてました。
後ろ髪、燕尾服のテイル部分であれば腰あたりのボーン、しゃがむアニメーションがあり、地面に触れる可能性がある場合はルートボーン、などなど地味に使い道があります。

画像の通り青色の大きい矢印が向いている方に衝突判定が発生するので、ビューワーを駆使しながら角度を適切に調整してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/f0292115-74c1-9eb0-64f6-71521e0a7d1b.png)

形状の設定はできませんが衝突範囲が大きいのでPlane Limitを使用してクオリティ的に問題なければこちらを使用するのが一番楽です。

---

適切な値と角度は各モデルごとに調整してください。
エディターで角度やオフセット調整できるのがホント楽でした。ありがたい機能です。

### Planar Constraint

回転軸の固定です。
Planar Constraintを設定することで不用意な方向の揺れがある程度は制限されるため、メッシュにめり込まなくなくなり、クオリティアップに繋がる場合もあります。

回転軸固定後、アニメーションのビューワーを見て揺れのクオリティ影響有無を必ず確認してください。

# 実際にKawaiiPhysicsを設定して揺らしてみた

実際にKawaiiPhysicsを利用して可愛く揺らしてみましょう。
~~以下、サンプルのGifです。~~

・2021/12/01追記
言い訳させてください。すみません。
サンプルで使用した再配布可能の3Dモデルアセットを使用した際に予期せぬ致命的バグが発生して記載内容に大幅な矛盾が生じてしまったため、代用としてユニティちゃんとアリシアちゃんで再設定したのですが、めり込み問題が解決せず完成品として公開できるレベルでないため、急遽ですが仕事で関わったAlche様より、公開されたPV動画のリンクを貼るのと『物理設定の値公開のみ』はOKとの返事は頂きました。

以下、仕事で携わったPV動画のリンク先になります。

https://www.youtube.com/watch?v=zLOzNkaAhlw

これから記載する内容及び設定値は上記動画を見ると、多少わかりやすいかもしれません。

## 各部位の揺らし方まとめ

各部位を揺らして、キャラクターモデルを可愛く見せるための設定まとめです。
全てのモデルに当てはまることではないため、一つの例としてご覧ください。

以下、キャラクターの魅力を増す揺れモノに対して記載しています。

* 髪
* スカート
* 胸

## 髪

髪に関しては『ゆるふわで良い匂いがしそうな揺れ』を目標にして調整しています。
髪の部位は大きく分けて、３つに分けてPhysicsSettingsを調整しています。

* 前髪
* サイド（もみあげ）
* 後ろ髪

### 前髪

地味に苦労したのは前髪の揺れです。
というのも、揺らし方次第ではモデルの可愛さを２倍以上減らしてしまう揺れのタイミングがあるからです。

|前髪調整|画像|
|:-:|:-:|
|無|![前髪サンプル1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/95f13346-d81b-4d28-dadd-628b4675cfb4.png)|
|有|![前髪サンプル2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/732ebce2-107b-ad3f-4228-01f57a2a2a3d.png)|
※角度が違いますが、スクショを撮った際のアニメーション位置はほぼ同一です。

この画像を見ていただければ理解できるかと思います。
前髪の捲れ方次第で、極端な印象のギャップが発生しています。

何故なのかGoogleで検索したところ、前髪のカットにより他人にどのような印象を与えやすいか、簡単にまとまっているブログがありました。

https://mine-3m.com/articles/104507

前髪のカットでここまで変わるものだと改めて認識させられました。

:::note info
前髪は3Dモデルだけでなく、実写の映像作品に出演している方々も意識されているようです。
前髪が乱れることで他人に与える印象を意識させることを考えるきっかけになった声優、大橋彩香さんの発言です。（50秒～1分2秒あたり）

<iframe width="560" height="315" src="https://www.youtube.com/embed/ppVXjNmcykg?start=50" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

簡単に発言内容をまとめると、大体映像でカットされた部分が『<strong>強風で前髪が乱れてデコが見えたために使えなかった</strong>』とのことです。
発言内容から事務所の方針と思われるので理由は推測ですが、<strong>事務所が指定した前髪が、意図しない原因によって崩れたことによる印象の極端なギャップを防いでいる</strong>と思われます。
:::

前髪の揺れに関して要約すると、

**デザインとしてデコを見せるのがOKとしているモデルを除き、デコを見せてしまう前髪の揺れ方は暗黙のNG**

となるわけです。

:::note info
逆にギャグの演出でやるなら、印象が崩れることによるギャップで笑いを狙いやすいので、LimitAngleを調整して大きく揺らしたほうがいいかもしれません。
:::

サンプルモデルのユニティちゃんを例に示すと、

* デコが見えない範囲で横、前後に揺れるのはOK
* デコが見えてしまった場合は**ユーザーに与えたい印象の極端な崩れが発生してしまう**のでNG

となります。
それを防ぐために前髪は左右、よく見れば揺れてる程度に抑えればいいと思います。

言葉に上げるとしたら

* PlanarConstraintでデコがめくり上がる部分の回転軸を固定
* LimitAngleを10～30ぐらいで、自然にちょっとだけ揺れる角度を調整
* Dampingで加速を調整
* Stiffnessは最初は値を小さめ（0.015とか）に設定し、曲がり方が不自然であれば値を上げて調整していく
* 顔の部分にSphereLimit or CapsuleLimitを仕込む。ボーンは首か頭の部分でLimitがアニメーションしても頭に追従する位置、回転のoffsetを指定
* クオリティアップとしてCurveを仕込み、Dampingは最初は加速があるが、最後は強い減衰がかかるように調整し、より自然でサラサラしているような揺れ方を目指す

上記を意識して行いました。

:::note info
実際、前髪の揺れについて勉強するため3Dモデル化したVtuber動画をたくさん見ましたが、前髪は揺れてるのを意識しなければわからない程度に大体収められていたので、この揺れ方を目指すようにしました。
:::

以下、設定例です。参考になれば幸いです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/e6966a0f-53e5-bb7a-fe99-f2f07b73b7cf.png)

Stiffnessに以下のカーブを入れています。最初がサラサラと揺れる気がします。プラシーボ効果かもしれませんｗ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/9fa2499d-828c-5a2b-4909-bdbd27a7efb5.png)
※ホントに効果あるかはモデル次第となります。

### 後ろ髪

後ろ髪に関してはただ、

- 軽さを出す揺れ方
- 余韻を残す揺れ方

この二点を意識して設定しました。

後ろ髪は分けるとしたら

- 肩より下まで伸ばしてるロング
- 肩より上のショート

で調整が変わります。

こちらに関しては、以下のような **振り子のアニメーション解説記事** を参考にしています。

https://ryowaks.com/quicktips-layered-follow-through/

※参考資料に一通り漁った記事を載せています。

ロングヘアーの場合は大きく揺らすようにPhysics Settingsを設定し、揺れた後の余韻を感じられるようにカーブで調整しました。

- Physics Settings
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/04efe703-9922-caec-d441-14266cbf5547.png)

- カーブアセット

|カーブ名|画像|
|:-|:-:|
|Damping|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/2482ee90-3d50-7391-4277-6f77c9cf11f1.png) |
|Stiffness|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/e4d5163d-c9ef-907c-6878-97557dab0b02.png)|
|Limit Angle|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/38a2600c-c4bc-77da-c06a-40e9db5adede.png)|

Limit Angleに関しては、振り子のように先端の回転を大きくし『残し』の表現をしたかったのでカーブを付けています。
何故余韻を残すようにしたかというと、余韻があるとプラシーボ効果でいい匂いがしそうだからですｗ

ショートの場合も基本的にはロングと同じようにゆるふわを感じる揺れ方、かつ余韻を残すようにしていますが、ロングに比べると意図的に揺れを大幅に抑えてモデルを小顔に見せて可愛く感じるようにLimit Angleを調整しています。

- Physics Settings
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/8afdd886-ea7c-9cb6-2960-186f3741f62f.png)

- カーブアセット

|カーブ名|画像|
|:-|:-:|
|Damping|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/2940a32b-820e-999c-8c95-9bddece0b835.png) |
|Stiffness<br/>Limit Angle|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/2e084d18-1bd7-178e-ed89-aa726004ed3b.png)|


### サイド（もみあげ）

サイドヘアーが肩まで届かなければ、基本的に後ろ髪のショートヘアーと同じPhysicsSettingsとカーブを利用し、顔にスフィアかカプセルリミットをつけてメッシュにめり込まないように設定しました。

また後ろ髪と同じ余韻を残すためにLimit Angleのカーブを使用しています。
アニメーション次第ではXYZのどれかの回転軸を固定してしまっていいと思います。

サイドヘアー特有の問題として、サイドヘアーが肩まで届く長さの場合、リミットとRadiusの設定次第で、肩～腕をサイドヘアーがコリジョンの間をすり抜ける現象が発生します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/2bfaffba-875d-ed9c-0635-b9676e6db8bc.png)
※画像は一例です。

可愛さを下げる要因になるので、リミットを置いて可能な限り隙間を埋めていくか、Radiusとカーブアセットの組み合わせで、腕と肩のメッシュにあたる部分はRadiusが揺れの影響が出ない範囲で大きくなるように値調整をしてください。
油断するとリミットの隙間を突いて貫通していくので、場合によりますがサイドヘアー専用のカーブアセットを作っていいと思います。

ただし、

* 貫通を完全に防ぐのが難しい動きをするアニメーション
* メッシュが意図せず変な方向に曲がってししまう<br/>→ 一瞬とはいえ見た目がよろしくないので可愛さを下げてしまう

があるため、違和感のない貫通まで調整を行って、あとは許容してしまうのも手です。

:::note warn
クロスツール等、他のツールで揺れや見た目のクオリティを下げることなく貫通を防げる場合は、KawaiiPhysicsに拘らずにそのツールを使用することを検討してください。
:::

## スカート

揺れ方に関しては、後ろ髪のPhysics Settingsを複製し、カーブアセット設定後にアニメーションに合わせて調整を行いました。

- Physics Settings
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/b0d970e7-ba1e-b864-29de-0c44f379064a.png)
**スカートの中を仕様的に見せてもOKか否か**でLimitAngeleの値が大幅に変わると思います。

- Planar Constraint
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/faff4be5-1cca-1d23-a7ba-6bf552c1ea96.png)
回転軸も固定しています。設定したモデルはZ軸を固定したらクオリティの低下がない揺れ方をしたため、めり込み防止で固定しました。

- カーブアセット

|カーブ名|画像|
|:-|:-:|
|Damping|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/2940a32b-820e-999c-8c95-9bddece0b835.png)|
|Stiffness|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/2e084d18-1bd7-178e-ed89-aa726004ed3b.png)|

### スカートのめり込み問題

メッシュのめり込み、及び貫通問題で一番苦労する部分がスカート等の**筒状メッシュ**です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/66743cd5-af12-8f9e-7d37-a574aef47b6a.png)

最初はCapsule Limitで行っていたのですが、足を上げた際に画像の様にメッシュを貫通することが度々発生し、非常に頭を悩ませました。

メッシュのめり込み、及び貫通問題対策として、糸凪邑様の[Unity]Dynamic Plane Colliderを使った長衣の貫通防止[Dynamic Bone]の「DynamicBonePlaneColliderを用いた貫通防止の手順」を参考にさせていただきました。

><img src="https://1.bp.blogspot.com/-wYsp6ZNGGaM/X4w0Koa3kzI/AAAAAAAAEX0/tnffAr5FYwYdtmKRznl15cjNpj6gx0nJwCLcBGAsYHQ/w400-h315/afasaas.png" alt="サンプル画像" title="糸凪邑様[Unity]Dynamic Plane Colliderを使った長衣の貫通防止[Dynamic Bone]より画像引用">

※サンプル画像を用意する時間が取れなかったため、糸凪邑様の[Unity]Dynamic Plane Colliderを使った長衣の貫通防止[Dynamic Bone]に掲載された画像を引用させていただきました。

上記の画像の通り、上からの視点でRootBoneの向きに回転して合わせると以下の通りになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/cdbb9bd8-bed0-b363-dc22-71bc3ed5dd8a.png)

これをスカートの揺れボーン全てに行います。これである程度のめり込みを防ぐことができます。
Plane Limitをある程度置いたらLimit Angleを調整、Planar Constraintを適切な値に設定してください。

:::note info
単純に足を上げた時の角度が、スカートに設定した<strong>Limit Angeleを超えてしまい、めり込んでいる場合がある</strong>からです。
:::

:::note warn
ただし、これらの対策をしてもアニメーションにより、どうしてもスカートが足にめり込んでしまう場合があります。
実際、Y字バランス、四股を踏むなど、<strong>極端に足を広げるようなアニメーション</strong>では非常に不自然な動きをしてました。
その場合はKawaiiPhysicsで無理に設定するのではなく、<strong>クロスツール、及びマーケットプレイスで販売されている揺れモノシステムを含め、他の方法を使用及び検討をしたほうがいい</strong>です。
:::

## 胸

これはお好みに。~~ロマンですから。ただロマンを求めると大半が物理法則を無視した揺れ方してますし~~
と言いたいのですが、センシティブな部位であり、昨今色々と配慮しないといけない時代であるので、怒られない程度に設定してください。

胸に以下の画像のように何かしらの揺れモノアクセサリーがある場合、胸の動きとアクセサリーの動きが一致せず、違和感を感じてキャラクターの可愛さが半減してしまいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/12546b0e-d442-ca54-cffe-10383d5c822f.png)

アクセサリーがある場合、胸のボーンはよく見ないと揺れてる程度に設定し、アクセサリーを**あえて大きく揺らす**ことで違和感をなくしました。
![sample_brest.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/0d5eaff6-7e6d-3b59-470e-8d5b2a99ed92.gif)


以下、胸にアクセサリーがあった場合の参考例です。

**1.胸の揺れボーン**

- Physics Settings
<br/>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/0343c9e3-6e9a-9f7c-ed5e-75ee53d67a83.png)
- Planar Constraint
<br/>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/8d5e3365-adbd-4659-592b-5af0e8c301a4.png)
- Stiffnessのカーブ

|カーブ名|画像|
|:-|:-:|
|Stiffness|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/df932b71-afc7-4bd4-cdfa-be51f98f2bbd.png)|

**2.アクセサリーの揺れボーン**

:::note info
アクセサリーに関して、Physics Settings以外の設定は胸の揺れボーンに設定した値と同じです。
:::

- Physics Settings
<br/>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/a0069600-7f4c-cdf2-ca38-ca8a6d21f15e.png)

:::note info
胸の揺れボーンに関しては、以下の『岡田斗司夫ゼミ#264（2019.1）ブラナウシカ続き・OPに隠された風の谷の歴史〜耳すまにも隠された宮崎駿のエロさ』の1：01：41あたりの発言も参考にしています。

<iframe width="560" height="315" src="https://www.youtube.com/embed/X8w7nRFGWiE?start=3704" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

『隠されたエロス』を違和感なく、かつ、さりげなく揺れで表現、なるほど。
どう感じるかは人それぞれなので、一つの参考になるかと思います。
:::

# まとめ

可愛いは正義です。揺れモノの知識が一切無い自分でも、ある程度は魅力が増す揺れモノをKawaiiPhysicsで作ることができました。
KawaiiPhysicsを使って、ぜひキャラクターの魅力を増すような揺れ方を目指してください！

この記事が揺れモノ設定の参考になるようでしたら幸いです。

---
・2021/12/01　追記
12/1中に公開することを目指したので、文章として色々と破綻したり誤字脱字があります。
後でこの記事を清書します。

・2021/12/03　追記
『基本的なKawaiiPhysics設定』の項目まで清書しました。誤字脱字も大量に直しています。

・2021/12/07　追記
『External Force』の項目を大幅に修正しました。また、『実際にKawaiiPhysicsを設定して揺らしてみた』以下の項目を清書しました。

---

# サンプルプロジェクトのリンク

・2021/12/01　追記
時間が取れるうちにサンプルプロジェクトを公開できるレベルまでもっていきます。

# 参考資料一覧

- KawaiiPhysics

https://github.com/pafuhana1213/KawaiiPhysics

- KawaiiPhysics Wiki　「各パラメータについて About each parameters」

https://github.com/pafuhana1213/KawaiiPhysics/wiki/%E5%90%84%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6--About-each-parameters

KawaiiPhysicsの作成者、おかずさんによる記事です。

- 揺れ骨用自作AnimNode「Kawaii Physics」の内部実装解説的なもの その1

https://pafuhana1213.hatenablog.com/entry/2019/07/26/171046

- 揺れ骨用自作AnimNodeプラグイン「Kawaii Physics」をUE4からUE5(早期アクセス版)に移行してみた

https://pafuhana1213.hatenablog.com/entry/KawaiiPhysics-UE5-EA

揺れモノの参考資料

- CGアニメーター向け【すぐ使えるメモ23】：揺れ物の動きについて

http://animationaid.com/archives/825

- CGアニメーター向け すぐに使えるメモ23(揺れものの動きについて)

https://ryowaks.com/quicktips-about-follow-through/

- CGアニメーター向け すぐに使えるメモ33(レイヤードアプローチで揺れものを作る)

https://ryowaks.com/quicktips-layered-follow-through/

振り子の動作について、一番シンプルでわかりやすい説明だと思います。

- 次期アイドルマスター グラフィクス＆アニメーション プログラミング プレビュー

https://game.watch.impress.co.jp/docs/news/1346141.html

- 【アニメーション12の原則】Slow In and Slow Out(両端詰め) とは -命を吹き込む魔法-

https://liclog.net/slow-in-and-slow-out/

- 揺れ物の研究_その１

https://cg-squid.com/2020/02/24/%e6%8f%ba%e3%82%8c%e7%89%a9%e3%81%ae%e7%a0%94%e7%a9%b6_%e3%81%9d%e3%81%ae%ef%bc%91/

- 【VRoidで髪の毛作って揺らしたい！】第2回/トゲトゲ髪の毛を柔らかサラ髪へ！髪揺れ設定をしよう

https://aozoranositade.ape.jp/%E3%80%90vroid%E3%81%A7%E9%AB%AA%E3%81%AE%E6%AF%9B%E4%BD%9C%E3%81%A3%E3%81%A6%E6%8F%BA%E3%82%89%E3%81%97%E3%81%9F%E3%81%84%EF%BC%81%E3%80%91%E7%AC%AC2%E5%9B%9E-%E3%83%88%E3%82%B2%E3%83%88%E3%82%B2/

VRoidですが、髪の毛の揺らし方の考え方に対する一つの参考になるかと思います。

- [Unity]Dynamic Plane Colliderを使った長衣の貫通防止[Dynamic Bone]

https://kairandou.blogspot.com/2020/10/unitydynamic-plane-colliderdynamic-bone.html

スカートの貫通対策の参考資料

揺れモノによる外見の影響について参考になった資料一覧

- 【五反田編10分】てさぐれ！部活もの 番外編「てさぐれ！旅もの」その３ 視聴映像

https://www.youtube.com/watch?v=ppVXjNmcykg&t=50s

- 【前髪の種類一覧】コレでもう迷わない！切り方／セット方法もわかる

https://mine-3m.com/articles/104507![前髪サンプル2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104377/613568b8-d923-1195-6adb-7d0676e9337a.png)

- 岡田斗司夫ゼミ#264（2019.1）ブラナウシカ続き・OPに隠された風の谷の歴史〜耳すまにも隠された宮崎駿のエロさ

https://www.youtube.com/watch?v=X8w7nRFGWiE&t=3704s

- 依田芳乃ちゃんの変態的な髪の動き【Rockin' Emotion】

https://nico.ms/sm28412981

コメント内容を参考にさせていただきました。

---

© UTJ/UCL

・スペシャルサンクス
Alche様

当日の無茶な要望＆許可を頂きありがとうございます！
人材募集中とのことですので、興味がありましたらご覧ください。

https://alche.studio/