SpringBone第3回 右手?左手?角度制限とMaya FBX
こんにちは、クライアントエンジニアの春田です。
Spring Boneに関する記事も3回目となりました。ありがたいことにTwitterなどでご感想などいただいたり、他メディア様にも取り上げていただいているようで、嬉しい限りです!今回も引き続き、好評配信中のタイトル『白猫GOLF』に登場するキャラクター「チャコ」を使って、Spring Boneとコロプラ流のカスタマイズをご紹介していきます。
前回は、Spring Boneの「距離制限」機能の問題点と、それを修正をするカスタマイズを紹介しました。
今回は、距離制限と対をなす機能、「角度制限」についての解説と、コロプラ独自のカスタマイズをご紹介します。今回の内容は、表現の幅が広がるというよりは、より使いやすくするための内容です。また、Spring Boneの角度制限パラメータの意味を理解するのにも役立つと思います。
Spring Boneの角度制限
Spring Boneコンポーネントには、距離制限と同様に「角度制限」というパラメータが存在します。
これに適当な値を入力してみると、SceneViewではこのように扇形のGizmoが表示されます。視覚的な表示がされるので「なんとなく」使うこともできるのですが、それでは再現性がありません。一つ一つのパラメータがどんな意味を持っているのか深掘りしていきましょう!
角度制限の解説
まずは角度制限の概要について理解しておきましょう。
角度制限は、「あるローカル空間」内の正面(X-)を基準として、ピッチ(Z)とヨー(Y)回転を一定の範囲に制限する機能です。モーションやポーズを付けたことのある方でしたら、関節可動域の円錐イメージに近いでしょう。ただし、Spring Boneというだけあって、可動域限界に達したら急に動かなくなるのではなく、限界域に向かってバネのように段々と固くなる挙動をします。
Unityでは、(ピッチ,ヨー,ロール) は、(X,Y,Z) に対応していますが、Spring Boneでは(Z,Y,X)となっていることに注意してください。これはSpring BoneがMayaで作成したモデルを前提にしているからだと思われます。逆に、他の任意の3DモデリングソフトからSpring Bone向けのモデルを出力する際にはX-がボーンの正面に向くように調整する必要があります。
さて、この可動域のような円錐の基準(向き)はどのように決定されるのでしょうか。
「基点」のTransformのX-の方向
「基点」のボーンの向き
制限を受けるボーンの初期方向(いわゆるTポーズの時の向き)
ズバリ、A「『基点』に設定されたTransformのX-の方向」です。…と言われてもイメージがつき辛いかと思います。恐らく直感的に自然なのはBやCではないでしょうか。特にAとBの違いは分かり辛いのですが、ボーンの向きはローカル座標ではなく「子ボーンの位置を向く方向」によって定義されます。Mayaでボーンを手打ちした場合、ボーン向きとローカル座標軸を合わせて出力してくれるため、気が付きにくいのですが、それ以外の方法で作成した場合や、Unityに持ち込んだ後で編集するなどした場合この前提は崩れます。
「基点」はデフォルトで親ボーンが設定されますが、任意のオブジェクトを設定することができます。これはSpring Boneのボーン以外でも問題ありません。この機能を利用して、親ボーンに基点にする専用の子を追加することでBやCのような向きにすることも可能です。
上記のように角度制限の「基点」は少々癖のある概念となっています。そもそも正確には「点」でなく向きの基準ですし、名前も混乱のもとです。
Y/Zのそれぞれの角度制限は、回転の範囲を調節できるパラメータです。ただし、指定した角度でキッチリと止まるわけではなく、あくまでバネモデルであることから、バネの指向性の硬さを調節するイメージになります。
スカートと太腿への応用
基点に、親だけではなく任意のTransformを設定できることにはメリットもあります。下記の図では、太腿がスカートを貫通するのを防ぐ用途に利用しています。これは、「UnityChanSpringBone2.0」リリース時の発表でも紹介されています。
このように設定すると、スカートのボーンが太腿のボーンの角度より必ず上向きになります。一般的に太腿の貫通を抑制するためには、クロスシミュレーションを行い、当たり判定によってスカートを肉の上に押し戻します。しかし、クロスシミュレーションは重く複雑な処理であり、それ自体も調整の難しい技術です。簡易的ではありますが、短いスカートであれば、この「ちょうつがい」風の手法で十分に対応できる可能性があります。
Customize1 角度制限を分かりやすく
上記のように、角度制限の基準となる「基点」はやや難しい概念でありました。実際に弊社の中でも基点の意味はよくわからないまま利用されており、アーティストのセンスと試行錯誤によって成り立っていました。属人化を回避するためには、直感的にすることが重要です。
そこで、「基点」を使わないという選択肢を追加し、これがデフォルトになるようにしました。難しいものは必要になるまで使わないという戦略です。
基点を設定しない場合どうなるのかというと、制限を受けるボーンの初期方向(いわゆるTポーズの時の向き)が基準となります。つまり、先の図のCの挙動となります。ONにすれば従来通りの計算となるので、スカート応用などの高度なテクニックも変わらず利用できます。
また、他のパラメータによって無効にされているパラメータはグレーアウトしています。これは小さな修正ですが、不要なパラメータに惑わされることなく、よりアーティスティックな部分に集中してもらうために重要なことだと考えています。
MayaのFBXを入れておかしくなる場合
モデルの作り方やImport/Export設定にもよりますが、Mayaで作成したFBXにSpring Boneの角度制限を適用すると、めちゃくちゃな向きになってしまうことがあります。こういった現象が起こる原因の一つに、ミラー機能で左右半身のボーンを作った場合、ローカル座標の軸が矛盾してしまうことがあります。
3DCGの世界では、右手系、左手系といった言葉がよく使われますが、これはまさに右手を左手にしようとする行為。いくらミラー機能を使ったとしても、この二つを共存させることはできないので、適当な向きにせざるを得ないのです。
Customize2 軸変換機能で緩和
先ほどのミラー問題に関して、コロプラでは二段階のアプローチで対応しています。
まずはMaya側、FBXをExportする前の行程でのカスタマイズです。Mayaのスクリプトによって、ミラーされたボーンの「ボーンの向き」と正面(X+)が一致するように回転させます。(UnityにImportする際に右手左手変換によってX+がX-になります)
コロプラではこの状態を正規化されたFBXとし、モデリングやリギング行程からUnity工程へ納品されるきまりになっています。X軸は左右で揃ったものの、YZ軸はミラーになっていません。しかし、角度制限のY上限/Y下限/Z上限/Z下限全てが同じ値の場合、YZ軸を区別する意味は無いので問題ありません。
YZ軸に異なる値を設定する場合用のオプションも追加しました。このオプションを有効にすると、軸の解釈を変えた空間で計算をするようになります。
本家のSpring Boneの角度制限では、(X-,Y-,Z+) をそれぞれ (foward,down,back) として解釈した空間で計算されていますが、(X+,Y+,Z+) をそれぞれ (foward, down, back) として解釈します。
これにより完全にミラーな状態で計算されることとなり、例えば右髪に付けたSpring Boneの設定をそのまま左髪にコピーするようなことが可能になります。コピーをする際には、Spring BoneのCSV Import/Export機能を使うと簡単にできます。
まとめ
今回はSpring Boneの「角度制限」にフォーカスしご紹介しました。幾何学的な難しい話になってしまいましたが、仕組みをちゃんと理解して使うことが、狙ったビジュアルを再現するための近道かと思います。
コロプラでは、ツールの疑問やアシスト機能の作成・改良にも力を入れており、アーティストがビジュアルや面白さに集中できる環境になっています。
今後も、COLOPL Creators ブログでは、Spring Boneに限らずアーティスト向けの情報を発信してまいりますので、ぜひチェックしてみてください!
コロプラでは"新しい体験"を一緒に創りだしていただけるクリエイターのご応募をお待ちしております!
Twitterでは、note記事更新のお知らせやイベント情報など、様々な情報を発信しております。
是非フォローのほどよろしくお願いします!
参考
Spring Boneの角度制限