SpringBone第1回 物理シミュレーションに付きまとう「暴れ現象」を抑制する方法
こんにちは、クライアントエンジニアの春田です。
コロプラでは、揺れものに「Spring Bone」というシステムを採用しています。今回は絶賛開発中の新作ゲーム『白猫GOLF』に登場するキャラクター「チャコ」を使って説明していきます。
これから数回に分けて、Spring Boneを使ったキャラクター開発のノウハウと、コロプラ独自のカスタマイズをご紹介します。
Spring Boneとは?
ユニティ・テクノロジーズ・ジャパンがオープンソースで提供している、揺れものシステムです。
特徴は、Springという名前だけあって、「バネ」を模したような計算で「自然な揺れ」を実現できます。
Spring Boneは無償で提供されているだけではなく、ソースコードが全て公開されていて、独自のカスタマイズができる点が最大の魅力です。
揺れものはとても繊細
ゲームをしている最中に、キャラクターの髪の毛が突然暴れだしたりする光景を一度は見たことがあるのではないでしょうか?
普通のゲームは、一秒間に30回や60回計算を行います。この限られた計算回数で、現実の物理法則をシミュレーションしようとすると、どうしても誤差が大きく蓄積してしまうのです。
この暴れを鎮めるために、パラメータを僅かに調整したり、モーションをゆっくりにするなどして調整します。
しかし、モーションのほんのわずかな違いや、処理落ちの影響で誤差は蓄積し、再び暴れだしてしまうことも。
パラメータ調整は、まさに賽の河原に石を積み上げるような作業です。
前述の通り、Spring Boneはソースコードが公開されていて、内製のシステムのように自由なカスタマイズができるので、コロプラでは「暴れ現象をシステム側で抑制する仕組み」を独自に追加しました。
Customize1. 大きな動きでも、小さな動きでも、丁度よく揺らしたい
ゲームで使うモーションは、現実の動きに比べても、かなり大げさになっています。
例えば、敵の攻撃を受けて「吹っ飛ぶ」モーションや、プレイヤーにドラッグで移動させられているときなどです。
こういった時、モデルにはあり得ないほど大きな加速度が掛かっていることになります。
そのせいで、現実的にはあり得ないような揺れ方をしてしまうのです。
そこで、パラメータを調節して、揺れにくくしてみます。
一方で、大きな動きに合わせてパラメータを調整してしまうと、アイドルモーションなどでは全然揺れず、つまらない画になってしまいます。
このタイプの暴れを抑制するために、揺れによる動きを一定量に制限する機能を追加しました。
前のフレームと次のフレームを比較して、一定以上の角速度を検出した場合、強制的に角速度を抑えます。
処理は比較的単純ですが、これが意外と効果が出るのです。
次の動画は、コロプラカスタムのSpring Boneで調整した場合のものです。
これにより、どんな場面でも丁度よい揺れ加減を保つようになりました。
Customize2. シーン開始時にフワッとしてしまう
ゲームのモデルを作るときは、TポーズやAポーズで作成しますが、シーンが始まったときには普通アイドルモーションを再生しています。
そのため、1フレーム目ではものすごく素早い動きをしたことになってしまい、結果として揺れものの暴れを発生させてしまいます。
これを解決するために、1フレーム目に入る前に、ある程度計算を繰り返すような機能を追加しました。
実質的に「暴れが鎮まるのを待つ」のと同じことですが、画面には表示しないので一瞬で鎮まった状態にすることができます。
実際のシーンに適用してみるとこのようになります。
次の動画は、普通に1フレーム目を始めた場合と、上記カスタム機能を実行した場合の比較です。
シーンが始まった時のフワッとした暴れが無くなっていることが確認できます。
まとめ
今回はSpring Boneと「暴れ」にフォーカスしてご紹介しました。
コロプラのキャラクター表現は、アーティストだけではなく、各職種総力を上げて取り組んでおります。
Unityというゲームエンジンを使いながらも、表現力向上のためなら躊躇なくシステムに手を入れたり、新しい機能を試していくのがコロプラ流です。
Spring Boneのノウハウやカスタマイズは、他にも沢山あるので、次回以降もご紹介していきたいと思います。
また、COLOPL Creators ブログでは、Spring Boneに限らずアーティスト向けの情報を発信してまいりますので、ぜひチェックしてみてください!
コロプラでは"新しい体験"を一緒に創りだしていただけるクリエイターのご応募をお待ちしております!
https://be-ars.colopl.co.jp/recruit/