見出し画像

SpringBone第2回 Spring Boneで布表現をする方法と、謎の距離制限について

こんにちは、クライアントエンジニアの春田です。

コロプラでは、揺れものに「Spring Bone」というシステムを採用しています。前回に引き続き、先日リリースされた新作ゲーム『白猫GOLF』に登場するキャラクター「チャコ」を使って説明していきます。

前回はSpring Boneの説明と、意図しない揺れを抑えるカスタマイズを紹介しました。

今回は、Spring Boneの「距離制限」にフォーカスした問題点とカスタマイズをご紹介します。

Spring Boneの距離制限

Spring Boneでは各骨に対して、「距離制限」というパラメータが存在し、他のオブジェクトのTransformを設定することができます。

▲ Spring Boneコンポーネント(一部省略)

名前から察するに、Spring Boneコンポーネントと、ターゲットとの距離に対して、何らかの制約をかけるものだと推測できます。

しかし、その効果は…!?

スカートのボーンにSpring Boneが設定されていたとします。

▲ 距離制限を設定していない状態

何もしない(距離制限を掛けない)場合、膝の左右に当たる2本のボーンチェーンが「のれん」のように開き、膝が貫通してしまいます。

そこで、A-D、C-B間に、縫い合わせるように距離制限をかけてみます。「距離制限」が距離を一定に保つ効果であるならば、左右に開いてしまうことはなく、スカートが膝の上側に捲れるような挙動になるはずです。

▲ 黄色の線のように距離制限を掛ける

実際に設定をして、膝を動かした場合の動きがこちらになります。

▲ 膝がスカートを貫通してしまっている

意図した挙動になりません。A-D、C-B間の距離は一定には保たれず、布も捲れ上がるのではなく、横に広がり貫通してしまっています。

それでは「距離制限」とは何だったのか?

結論から言ってしまうと、「係数が小さすぎて効果が感じられない」状態になっています。

Spring Boneでは「ベレの方法」という計算によってバネ(Spring)を近似しています。ベレの方法による計算式は以下のようになります。

$$
x_{n+1} = x_n + D \cdot v_n \cdot Δt + k \cdot\frac{1}{2} \cdot \frac{ΔL}{M} \cdot Δt^2
$$

注目すべきは第3項の k で、これがバネ係数に相当します。Spring Boneではこの k=0.5 固定となっており、距離が引き離されたときに元に戻ろうとする力がほとんど掛からない状態になっていました。

Customize. バネ係数を調整可能に

0.5で固定となってしまっていたバネ係数 k を、Spring Boneのエディタから調整可能になるよう修正しました。

▲ 0~1500 まで変更可能
▲ スカートを貫通するのではなく、正しく捲れている

メッシュの細かさや、ボーンの他の設定にもよりますが、係数は500〜800程度が丁度よい値のようです。

修正した「距離制限」を使うとこんな表現が出来ます!

スカートが「のれん」になって貫通してしまう問題を克服し、SpringBoneで簡易的な「布表現」が可能になりました!

まとめ

今回はSpring Boneの「距離制限」にフォーカスしてご紹介しました。
Spring Boneに関しては2回目となりましたが、ノウハウやカスタマイズはまだまだ沢山あるので、次回以降もご紹介していきたいと思います。

コロプラでは、UnityやSpring Boneなどを採用し、業界共通の知識や経験を活かすことができます。一方で、物理シミュレーションに限らず各分野における深い知識を持ったスタッフがおり、細かい部分まで気軽にサポートを受けられる環境が整っています。
今後も、COLOPL Creators ブログでは、Spring Boneに限らずアーティスト向けの情報を発信してまいりますので、ぜひチェックしてみてください!

コロプラでは"新しい体験"を一緒に創りだしていただけるクリエイターのご応募をお待ちしております!

Twitterでは、note記事更新のお知らせやイベント情報など、様々な情報を発信しております。
是非フォローのほどよろしくお願いします!

参考

Spring Boneの距離制限