2024年8月21日(水)から3日間、パシフィコ横浜ノースで開催されたゲーム開発のカンファレンス「CEDEC2024」。数多くのセッションで開発者が最新の知見を共有しあうなか、今年はバンダイナムコエンターテインメントの3D対戦格闘ゲーム『鉄拳8』に関連するセッションが8つも公開され、話題を呼んだ。本稿ではそのうち、リブゼント・イノベーションズBACKBONE事業部の福本健太郎氏が取り組んだキャラクターの筋肉表現「『鉄拳8』リアルな筋肉表現をどう実現したか ~大量生産を考慮したリグと補助骨のしくみ~」セッションの内容をレポートする。
関連記事:多重リグシステムで実現した『鉄拳8』の「膨大なプレイアブルキャラクター✕豊富なカスタマイズ」~CEDEC2024(1)
Information
tk8.tekken-official.jp
©Bandai Namco Entertainment Inc.
『鉄拳8』男性素体の筋肉リグ概要

福本健太郎氏
リブゼント・イノベーションズ BACKBONE事業部
BACKBONE事業部 事業部長/リグコンサルタント
セッションではまず、『鉄拳8』で使用したMayaの男性素体の筋肉のリグが紹介された。
プライマリの骨は赤、それ以外の色の骨は補助骨。上半身・下半身の複雑な動きをする箇所(肩周りや僧帽筋、股関節、大腿骨の根元をはじめとした大部分)はRBF(Radial Baisis Function)で制御し、手首・指・頭・足首といった、末端にいくにつれてシンプルな動きをする箇所はドリブンキーで制御している。
「『鉄拳8』ではキャラクターの可動域がかなり広いため、どんなポーズでも破綻しないよう設定しました」(福本氏)。RBFや筋肉を制御している計算系ノードは全てプラグインで動作する。


『鉄拳8』の開発にあたっては、バンダイナムコスタジオから主に「衣装の着せ替え」、「柔らかい筋肉」、「補助骨のランタイム処理」という3つの要望が寄せられたが、本セッションで扱ったのは2つめの「柔らかい筋肉」の破綻しないリアルな筋肉表現の部分となる。

なお、「衣装の着せ替え」については下記2セッションで詳説されている。
『鉄拳8』 カスタマイズキャラクターのための多重リグシステム ~ 複雑な筋肉表現と大量生産の両立
cedil.cesa.or.jp/cedil_sessions/view/3030
cgworld.jp/article/202409-cedec01-tekken.html
圧倒的キャラクター数×カスタマイズ数をゲームエンジンで実現~『鉄拳8』キャラクターグラフィックス事例~
cedil.cesa.or.jp/cedil_sessions/view/3025
また、「柔らかい筋肉」の締まりや筋、揺らしと「補助骨のランタイム処理」については、下記セッションで紹介されている。
『鉄拳8』で進化した補助骨とその応用例の紹介
cedil.cesa.or.jp/cedil_sessions/view/3029
多重リグの標準体型を流用できるしくみをどうつくるか
「柔らかい筋肉」でリアルな筋肉表現を行うに際して、福本氏はまずMayaの標準機能と標準ノードで筋肉を再現することを軸に開発を進めた。課題を確認し、モデルと骨を調整してMayaで筋肉を再現していくというながれで、約6ヶ月で男性素体を完成させた。
ある程度の筋肉ができた時点からプラグインの開発を進め、ノードをプラグインに差し替えていくという工程に約7ヶ月、多重リグ(モデルにバインドした筋肉の骨をパラメータで制御し、体格を変更できるリグ構造)の開発やキャラクター制作、処理負荷対応をしながらの実装には1年以上の時間を費やした。「作品が完成するまで、常にイテレーションをくり返して調整を進めていきました」と福本氏。

福本氏はまずこう考えた。Maya上で多重リグを用いてキャラクターをつくり、標準体型向けにつくった衣装と併せてプロポーションを調整、つまり素体と衣装を使いまわせるようにする。そしてプロポーション調整の情報とセットアップ(補助骨を含む各種パラメータ)情報は、JSONファイルなどでUnreal Engine(以下、UE)に渡す。
それにより、ユーザーがキャラクターをセレクトした瞬間に内部で各種情報を集めてアセットをその場で構築し、ゲームがスタートできる状態になる、という設計だ。実際これに近い実装ができたという。「一部、出力する情報などは開発のながれの中で変更になった部分もありますが、ほぼほぼこのながれで開発ができました」。

この設計を基にリグを組むにあたっては、全キャラクターで一切の修正を加えずに、同じ品質を再現する、つまり同じ補助骨とウェイトを流用する必要があった。
前作のポーズを流用するにはベースの骨構造を修正できない
3DスキャンモデルをベースとしたAポーズの男性素体モデルは、骨の制限に苦慮した。というのも前作で使用した骨は、脊椎のラインが解剖学的に不正確な直線状で、しかも背骨が2本で固定されており、肩の骨の位置も偏っていたためだ。
骨の構造を修正したいところだが、前作に登場した多数のモーションをそのまま流用するためには、骨に大きな変更を加えることはできない。そのため、なるべくリアリティを損なわないよう、前作の骨にモデル側を合わせていくというアプローチになった。

Mayaの標準ノードでシンプルに補助骨と筋肉を表現
モデルと骨が完成したところで、Mayaの標準機能を使って筋肉を再現していく。最終的には全てをプラグイン化するため、機能や構造はシンプルに設計することを念頭に置き、コンストレインやドリブンキー、マルチプライ、デバイド、ペアブレンドといったシンプルな計算系ノードのみで構築した。Matrixやデフォーマなどは一切使用していない。また、骨の階層構造面でも、サイクル処理が発生しないようなシンプルな構築を心がけた。
さらに重要だったのはリグの流用。流用時は、同じトポロジーでウェイトも流用するケースが多いが、骨と形状のバーテックスの相対関係が少しでもずれてしまうと形状が破綻し、デフォーム時に形が崩れてしまうため、それを回避するための工夫を凝らした。








-
▲関節が動くと水色の骨がドリブンキーで動き、形状がスケールして膨らみ、自然な見た目となる -
▲ドリブンキー骨。赤がプライマリの骨、黄色が半回転骨、水色がドリブンキーによる筋肉調節用の骨。形状のバーテックスから少しでも相対値がずれると形状が破綻することから、黄色・水色の骨はプライマリの骨の上で調整しやすい中間地点に配置した

ドリブンキーによる挙動の違和感をRBFで解決
こうしてドリブンキーで動かす補助骨ができたところで、多重リグを用いて男性素体から風間. 仁の体型にプロポーションを調整し、UEで挙動を確認してみた。すると、筋肉が硬く見えて違和感のある結果になってしまった。

ドリブンキーで制御されたリグは、部分的には上手く動いていたが、各部位の筋肉が連動しておらず、全体的な筋肉のながれとして見ると非常に硬く見えてしまっていたのだ。この結果を受けて福本氏は、そもそも“筋肉の柔らかさ”とは何だろうと考える。
「筋肉の“揺れ”と“連動”のふたつが思い当たりました。ただ、“揺れ”は形状自体が破綻していては説得力がないので、まずは“連動”について考えました。そこで、複雑なポーズでも筋肉を連動させて自然な形状を再現するために、多次元ドリブンキー、つまりRBF(Radial Basis Function)の利用を考えました」。

そこで福本氏は、ドリブンキーで設定していた箇所のうち、複雑な動きの部分を全てRBFに変更することにする。

『鉄拳8』の開発では内製のAnimaRbfSolverプラグインを用いてRBFを利用し、形状を補正した。今回のセッションでは三角筋を例に利用方法が解説された。

プラグインではドライバと補助骨を登録して、ポーズ(のアトリビュート値)を設定していく。また、設定したポーズを限界値として登録し、その設定値以上は動かないようにできる「Limit」チェックボックスをバンダイナムコスタジオのTDチームが用意した。
今回設計したRBFでの制御では、モデリングをするように筋肉を整えていくことになるため、ウェイトが非常に重要となる。三角筋は複雑な動きをすることから、プライマリの骨上ではなく、
上腕にはツイストの骨が3本入り、上腕二頭筋や腕頭骨筋の筋肉調整用にはそれぞれ上下2箇所に骨が入るほか、肘を曲げた際のパンプアップを表現する骨、肘の形状を整える骨、シルエットを柔らかく見せるための骨など、多数の骨がRBFで制御され、形の整ったポージングが生み出せるしくみになっている。

実際に設定したポーズは上半身が約30種、下半身が約8種。初期ポーズを登録後、腕なら「上に上げる」、「下に下ろす」、「前に回す」、「後ろに回す」といった基本的な運動をポーズとして登録。さらにその各種ポーズから「腕を前に捻る(
「基本的なポーズの登録が全て終わると、ほぼほぼ綺麗に動きます。どうしても破綻したポーズがあれば、そのポーズだけ特殊ポーズとして登録して調整するといったながれです。実際、上半身で特殊ポーズとして登録したのはバンザイをしているポーズだけでした。このポーズだけは三角筋が前方に残ってしまい、後方にずらす必要がありました」(福本氏)。
「リアルかつどんなポーズでも破綻しない筋肉を」という要望に応え、これ以上はアニメーターも絶対に動かさないだろうというギリギリの可動域まで対応可能にした。特に腕を120°ツイストしたポーズは解剖学的な限界を超えているため、当然リファレンスもない。そこで福本氏は解剖学的な筋肉の動きを詳しく調査した上で、120°ひねった場合を頭でイメージしながらつくったという。
福本氏はRBFの設定について、ウェイトを綺麗に設定すること、可動域を広く設定すること、そして最終ポーズから設定することの3点を工夫点として挙げた。「中間ポーズから作成すると、分離したような違和感のある挙動になってしまうので、必ず最終ポーズからつくること、これが重要です」(福本氏)。

今回、RBF関連の実装では、先述のLimit切り替え機能のほか、補助骨のアトリビュートがロックされない機能、ビュー上での調整後にボタンクリックで情報を更新する機能、登録済みポーズへの切り替え機能、アンドゥ機能、反転機能、使用していないドライバやアトリビュートなどの情報を取り除く機能などの開発を依頼。
これらを含むプラグイン開発はバンダイナムコスタジオのTDチームが手がけている。詳細は下記セッションで語られている。
『鉄拳8』で進化した補助骨とその応用例の紹介
cedil.cesa.or.jp/cedil_sessions/view/3029
Mayaのノードでの構築のプラグインへの差し替え自体は福本氏が手動で行い、バグや計算式の変更などを随時TDチームにフィードバックしながら進めた。

なお、ドリブンキーだけはプラグイン化しておらず、ドリブンキー設定時にできるアニメーションカーブをそのまま出力してUEで再現している。「ここをプラグイン化していない理由は、ツール習得のコストもそうですし、リガーはドリブンキーを使い慣れているので、慣れた機能の方が良いだろうという判断です」(福本氏)。
苦労の甲斐あってスムーズな素体の流用が可能になった
完成した多重リグにより、ロボット系パーツを使用した特殊キャラクターを除き、ほとんどのキャラクターに素体がスムーズに流用できるようになった。補助骨やウェイトの変更も一切なく、ベース素体とほぼ同等の品質が保たれている。

「今回、非常に重要だったのは“流用”です。多重リグを用いてキャラクターの体型を変更した後は一切の手を加えることができません。同じ品質を担保するために、モデルのバーテックスと骨の相対値がずれないようにすること。これが非常に重要でした。今後の課題としては、個人的にRBFのGUIの使いやすさが重要だと思っています。ポーズが増えるとかなり扱いにくくなってしまいます。また、RBFを使うとポーズやウェイトの調整が大変になるので、自動制御を活用してRBFを使う箇所を減らしたりすることも大事ですね」。
福本氏はこう語り、セッションを締めくくった。
Information
当日のスライドはこちら
『鉄拳8』リアルな筋肉表現をどう実現したか ~大量生産を考慮したリグと補助骨の仕組み~
cedil.cesa.or.jp/cedil_sessions/view/3026
TEXT__kagaya(ハリんち)
EDIT_海老原朱里 / Akari Ebihara(CGWORLD)、山田桃子 / Momoko Yamada