Tips/3DMOD関連/キャラスキン


■概要
2009.7.26
 キャラスキン編集に関する関する小ネタ集です。


.
■キャラスキンdffの構造
2009.7.26
 キャラスキンdffの構造イメージを図に示します。あくまで私のイメージです。



 GTASAのキャラクタモデルには大きく2種類あって、ひとつがSmokeやギャングなどNPCに使用されるpedモデル、もうひとつCJ用として使用されるplayerモデルです。ゲーム内カットシーン専用のモデルもありますが、とりあえずpedとPlayerの違いについて覚えておいてください。

 pedモデルはひとつのメッシュで形成されます。使用できるメッシュは1個まで。ポリゴンに色をつける方法はテクスチャを張るしかないようです。テクスチャはマテリアルとUVマップで設定され、ゲーム内でモーションをつけるためのボーンはスキンモデファイアによってメッシュに設定されます。

 playerモデルは頭部/上半身/下半身/靴/etc...等にdff/txdファイルが分かれていて、ゲーム内で服や髪型を交換できるようになっています。構造は基本的にpedと同じですが、ゲーム内でのプレイヤーの体型変化に対応するため、それぞれのdffファイルが"normal/ripped/fat"の3つのdffを統合したものになっています(マルチクランプ)。


 このマルチクランプのために、pedモデルとplayerモデルはインポートやエクスポートの方法が大きく変わってきますのでご注意ください。




.
■イン/エクスポート
2009.7.26
Latest : 2009.11.24
[2009.11.24追記]
15日に更新した説明に誤りがあり修正しました[朱書部](エクスポート操作説明の一部が非キャラスキン操作の説明になっていました)。記事を見て頂いた方々には大変失礼致しました。ほんとうに申し訳ありません。


 イン/エクスポートに関して、pedモデルはGSSさんのサイト(参考URL(1))が、マルチクランプのplayerモデルはVibrioさんのサイト(参考URL(2))で詳しく紹介されています。是非ご参照下さい。

 また、pedモデル作成に関する一連の流れは、みるちおさんが動画でとてもわかりやすく紹介されています(参考URL(3))。次Tipsのウェイト設定についても詳しく紹介されていますので、是非ご参照ください。

 サイト主様に感謝いたします。


 以下、pedモデルのイン/エクスポート操作について簡単に説明しておきます。あらかじめKAMS(GSSさんfix版推奨)を導入し、KAMS同梱の"GTAmax.exe"を起動してください。
■キャラスキン(pedモデル)のインポート
(1)
画面右コマンドパネルの"Utilities"タブ(A1)から"Kam's GTA Scripts"の"DFF IO"(A2)を起動。
※画面はGSSさんfix版KAMSを使用したときのものです。


(2)
"DFF IO Gmax"パネルの"Import DFF"ラベル(A3)を展開して[A]と書かれたボタン(A4)を選択し、"Import DFF"ボタン(A5)を押す。

(3)
インポートしたいdffファイルを選択してインポート。
マシン環境やモデルの頂点数によっては処理に数分〜数十分かかることがあります。ここの処理を高速化した改造DFF IOスクリプトをTips「KAMS/キャラスキンインポータ高速化」で紹介していますので、処理時間を短縮したい方はお試しください。





■キャラスキン(pedモデル)のエクスポート
(1)
画面右コマンドパネルの"Utilities"タブ(A1)から"Kam's GTA Scripts"の"DFF IO"(A2)を起動。記号は前出の図。

(2)
キャラスキンのみを選択し、"Modify"タブ(B1)内の"Skin"(B2)を選択(緑色状態)する。

(3)
"DFF IO Gmax"パネルの"Export DFF"ラベル(B3)内の"Bone/Skin Export"ボタン(B4)を押し、ファイル名を指定してエクスポート。
[2009.11.24訂正]

(4)
エクスポート処理中は画面右下の小窓(B5)に文字が流れます。ここに「</snoopend>」と表示されたらエクスポート完了です。
マシン環境やモデルの頂点数によっては処理に数分〜数十分かかることがあります。前出の改造版スクリプトでもエクスポート処理は高速化できません。



注意:エラーについて
(i)
キャラスキンの全ての頂点にウェイトが設定された状態でないと、下記エラーが出てエクスポートできません。ウェイト設定漏れがないかご確認ください。
Skin Error
You didn't Skin/Verices properly!
Each Vertex must be influence by at least 1 Bone.

(ii)
スキンモデファイア(B2)がリストの一番上にない場合、下記エラーが出てエクスポートできません。キャラスキンとして正常にインポートできていないか、スキンモデファイアが編集の際に失われてしまった可能性があります。
Skin Error
This object is not skinned correctly!
Skin modifier must be on the topmost of the stack!!




<参考URL>
(1)
GSSさんサイトトップページ (Grasp the Atmosphere):(リンク切れ) http://gss1090.hp.infoseek.co.jp/gta/
スキンMOD作成解説はTop->TUTORIAL に掲載されています。
[2009.11.15追記]:GSSさんのサイト移転に伴い、現在TUTORIALのコーナーは掲載されていません。
[2011.1.23追記]:現在サイトへのリンクは切れています


(2)
Vibrioさんサイトトップページ (No.12):http://www.sqrt144.info/
スキンMOD作成解説はTop->BLOG->カテゴリ「MOD製作メモ」に掲載されています。


(3)
みるちおさんサイト:http://milcho.blog55.fc2.com/
スキンMOD作成講座動画は「2009-04-14 やっとこさ」「2009-07-01 作成講座2」に掲載されています。
[動画直リンク(ニコニコ動画)]
・作成講座1:http://www.nicovideo.jp/watch/sm6744866
・作成講座2:http://www.nicovideo.jp/watch/sm7506969







.
■ボーン・ウェイト設定
2009.7.26
Latest : 2011.1.23
 非常に面倒なボーンとウェイトの設定ですが、GSSさん(参考URL(1))、Vibrioさん(参考URL(2))、みるちおさん(参考URL(3))が丁寧に解説してくださっています。

 特にVibrioさんはボーン設定の難しい部分のひとつであるPivotに関する解説をしてくださっています。また、みるちおさんは動画で解説して下さっていて非常にわかりやすいです。穴があくほど見て勉強させてもらいましょう。

 サイト主様に感謝いたします。

(2009.09.13追記)
 Tips「Skintools」でウェイト設定に便利な"Skintools"とその修正版を紹介していますので、併せてご参照ください。

<参考URL>
(1)
GSSさんサイトトップページ (Grasp the Atmosphere):(リンク切れ) http://gss1090.hp.infoseek.co.jp/gta/
スキンMOD作成解説はTop->TUTORIAL に掲載されています。
[2009.11.15追記]:GSSさんのサイト移転に伴い、現在TUTORIALのコーナーは掲載されていません。
[2011.1.23追記]:現在サイトへのリンクは切れています


(2)
Vibrioさんサイトトップページ (No.12):http://www.sqrt144.info/
スキンMOD作成解説はTop->BLOG->カテゴリ「MOD製作メモ」に掲載されています。


(3)
みるちおさんサイト:http://milcho.blog55.fc2.com/
スキンMOD作成講座動画は「2009-04-14 やっとこさ」「2009-07-01 作成講座2」に掲載されています。
[動画直リンク(ニコニコ動画)]
・作成講座1:http://www.nicovideo.jp/watch/sm6744866
・作成講座2:http://www.nicovideo.jp/watch/sm7506969







.
■ボーン設定のコピー
2010.5.23
 既存モデルのボーンを使用してキャラスキンを編集する時に、スキンモデファイアもコピーしておくと、登録ボーン情報を流用でき多少便利になるかと思います。コピーされるのはボーン情報のみで、ウェイト情報はコピーできません(ウェイトはモデファイアでなく頂点に与える設定であるため)のでご注意を。

■モデファイアのコピーペースト方法
 こちらのTips「モデファイアのコピー」をご参照ください。

■ボーンとスキンモデファイアの流用
 ボーン無しモデルに、既存モデルのボーンとスキンモデファイアを適用する手順です。実際にはこの操作のあと、ボーン位置やPivot向きを調整することになります。



(1)
ボーン無しモデル

(2)
既存のボーン付きモデルを読み込み、スキンモデファイアをコピーします。モデルの読み込み方法は下記です。
既存モデルをdffファイルから読み込む場合はKAMSでキャラスキンとしてインポートする(*1)

Gmaxで編集しているモデルから読み込む場合は"file">"Merge"(*2)で「.gmax」ファイルからスキンメッシュとボーンをマージする。


(3)
コピーしたモデファイアを、ボーン無しモデルの"Editable Mesh"にペーストします。コピー元のメッシュは不要なので削除します。

(4)
コピー完了。モデファイアとボーンリストがコピーされていることを確認してください。


(*1)

(*2)
詳細はこちらのTips「オブジェクトのマージ」をご参照ください。マージの際にはスキンメッシュのみ選択すれば、ボーンも一緒にマージされるようです。








.
■接地と位置ずれ直し
2009.7.26
 キャラクタのサイズが標準モデルと異なる場合、ゲーム内で足が浮いたりすることがあります。これはゲーム内でrootボーンを基準点としてキャラが描画されるためです。このような場合に、rootの位置を変えて足を地面に合わせようとしても思った方向に位置修正できない場合があります。

 職人様サイトや掲示板で教えて頂いた情報と私の経験から推測すると、
「root以外にもスキンメッシュの"Pivot位置"が描画基準に関係する」
「rootとスキンメッシュの"Pivot向き"によってゲーム内でのずれ方向が変わる」

ことが原因のようです。以下に私のとっている対策を紹介します。ご参考まで。

(1)
スキンメッシュのPivot位置をrootボーンと一致させる("Affect Pivot Only"でPivotのみを動かす)。

(2)
rootボーンとスキンメッシュのPivot向きを下の図のように変更する。回転は同じく"Affect Pivot Only"で行い、数値入力で90°単位で変化させる。

(注)見やすくするためrootボーンとスキンメッシュ以外を非表示にしています。



(3)
この状態にしておくと、rootから見たモデル位置とゲーム内での描画位置の関係が一致すると思います。root位置を調整する場合は、スキンメッシュPivotの位置も一緒に移動させてください。


 ベースにしたボーンのインポート元モデルによってずれる方向が違うという話も聞きますので、もし図の設定で思った方向に調整できない場合は、いろいろ向きを変えて試してみてください。ちなみに上の例は"player.dff"のボーンをベースにしています。向きを変える場合でも、rootとSkinmeshの向きはそろえるべきだと思います。

 なお、root位置を変更して「立ちモーションで接地」させてしまうと、乗り物に乗ったときなどの「座る」動作で位置がおかしくなります(座った状態のモーションはrootが腰にある場合を基準に調整されているため)。

 これを修正するifpをgosukeさんが作成してくださっています(参考URL(1))ので、感謝して使用させていただきましょう。gosukeさんの修正ifpに関しては、別項で解説するかもしれません。未定です。


<参考URL>
(1)大小キャラの乗車位置などの修正ifp(GOSUKE FACTORY):http://arikai.com/gtasa/anim1.html




.
■ウェイト0/1化対策
2009.7.26
 頂点のウェイトを複数ボーンに対して0〜1の間の値で与えても、ゲーム内で0か1でしか反映されない場合があります。

 例えば、二つのボーンA,Bにウェイトを0.3と0.7の割合で割り振っても、ゲーム内でAに0.0、Bに1.0としての動作しかしない、といった症状です。

 このような症状でお悩みの方は、モデルのrootボーンに設定されている"SPunknown"というパラメータを確認してみてください。このパラメータはモデル作成時にベースにしたボーンにより違っていて(例えば"player.dff"では'1'に、"wuzimu.dff"や"fam3.dff"などでは'4'に設定されています)、 この値が'1'や'2'だった場合、上記のように複数ボーンへのウェイト割り振りがうまくいかないことがあるようです。

 ウェイトが0/1でも、キャラの動きを考慮した面割りをされているローポリモデルの場合は特に気になりません。やはり3D職人さんの技術は素晴らしいです。このウェイト0/1化が深刻になるのは、いわゆるハイポリ系のモデルを編集する場合で、せっかく微細ポリゴンで滑らかにしている表面が、モーション時にパックリ割れてしまいます。非常にもったいないです。

 また、Gmaxとゲーム内でウェイトの影響が異なると、Gmax上でifpをロードしてモーションチェックした結果と、ゲーム内の挙動が違ってしまいます。ポリゴン貫通チェックをGmax上でされる方はご注意を。


 "SPunknown"が何のパラメータなのか、ほかに影響があるパラメータなのかはわかりませが、オリジナルのpedモデルでも'4'という値が使用されているので、深刻な影響はないと考えています。 以下、"SPunknown"の確認・設定方法と、SA内での動作の違いについて説明します。

■"SPunknown"の設定方法
(1)
"Root"ボーンを選択する(A)。"Normal"等の名前になっている場合もあります。

(2)
ビューポートを右クリックして、"Properties"(B)を選択する。
Gmaxメニューの"Edit">"Object Properties"から選択しても可。

(3)
"Object Properties"窓の"User Defined"タブ(C)を選択。

(4)
(D)が"SP Unknown"のパラメータ。ここの数字を変更します。





■"SPunknown"による動作の違い
 ゲーム内での動作の違いをわかりやすくするために、下のような足モデルを作りました。 このモデルの関節部(赤丸部)のウェイトを"Thigh"(腿)と"Calf"(脛)に割り振った時の、 ゲーム内での動作を見ていきます。


 比較したポーズは下のしゃがみポーズです。


 下図が比較結果です。 "SPunknown = 1"の場合はウェイト値が'0.5'を境に'0.0'または'1.0'として扱われているのがわかるかと思います。 それに対して"SPunknown = 4"の場合は、割り振ったウェイトに応じて膝の頂点位置が変化しています。





.
■SPUnknown補記
2010.7.5
 上のTipsで、頂点ウェイトの挙動に関するパラメータとして"SP Unknown"について触れましたが、少し検証が進みましたので記しておきます。
 
  上のTipsではあいまいな情報を掲載しており、読んで頂いていた方には真に申し訳ありませんでした。本記事も一個人の考察の範囲を超えるものではありません。ご理解いただけますようお願いいたします。  


 結論から書くと、どうやらSP Unknownは、「ひとつの頂点にウェイトを割りあてることができるボーン数の最大値」を設定する値になっているようです。


 SP Unknown値を超えた数のボーンにウェイトが割り振られた場合の挙動については詳しく検証していませんが、少なからず意図した動作から外れてしまうようですので、設定した"SP Unknown値"に注意してウェイト設定されることをお勧めします。

 ただしdffの仕様上、ひとつの頂点に与えられるウェイト配列が「ボーン4つぶん」と定められているため、「"SP Unknown = 5"に設定して5つのボーンにウェイトを振る」ということはできません(ウェイトは4つのボーンにまるめられてしまう)。

 まとめると、なるべく"SP Unknown"は4に設定し、ひとつの頂点に5つ以上のウェイトを割り当てないようにすると、トラブルが少ないかと思います。



 実際に、拙作キャラスキンでの作業中に上記の問題起因のトラブルが発生しています。そのときのモデルを用いて上記動作を検証しました。ご興味があればご一読ください。

 下の図は例として用いたキャラスキンのGmax上の画像です。「4つ以上のボーンにウェイトがアサインされている頂点」を赤く表示させてます。わかりにくいかもしれませんが、へそ周りと腰の一部の頂点で、4つのボーンへのウェイトが割り当てられています

 このモデルのSP Unknown値を3に設定したものと4に設定したものをエクスポートし、SA上での挙動を比較しました。



 下図はこのモデルにしゃがみポーズをさせたときの挙動です。左がGmax上の表示、中央と右がSAでの表示になります。SP Unknownの値は図に示したとおりです。

 "SPUnknown = 3"の場合、Gmax上では特に問題のない挙動(意図した動作)となりますが、SA上では上図で赤く示した部分の頂点(=ウェイト数4の頂点)が異常な挙動をしています。一方"SP Unknown = 4"の場合には正常な動作となっています。



 図では見えていませんが、腰の一部にあったウェイト数4以上の頂点も、同様に"SP Unknown = 3"で異常動作となりました。

 このように、SP Unknownの値を超える数のボーンにウェイトが割り振られている頂点は、意図した挙動をしなくなってしまうようですのでご注意ください。

 またGmax上では異常が確認できない点にもご注意ください。


 以下余談です。

 SP Unknown値は、dff上では「Clump > Geometry List > Geometry > Extension > Skin PLG」セクションの3バイトめ、RWA表示では「Byte 3」と表示されているデータに相当するようです。

 また上のTipsの例「SP Unknown = 1」の場合に0/1化現象として見えたのは、「SP Unknown = 1」の場合、頂点にひとつのボーンしかウェイトを割り振ることができないため、ひざの頂点に割りあてた「Thigh」「Calf」のうち値の大きいもののみが反映され、その結果としてウェイトの「0/1化」が起こっていたということになります。つまり上の例では「SP Unknown = 2」とすれば、両ボーンのウェイトが反映され0/1化は起きなかった、と言うことになります。



.
■スケール調整
2009.7.26
 ゲーム内でのキャラクタのサイズを変更したい場合にはエクスポータで出力スケールを調整すれば良いのですが、 出力時にいちいち指定するのは面倒ですし、設定の戻し忘れで他のdffまで間違ったスケールで出力してしまうこともあります。また他モデルとの比較もしにくくなりますので、できればGmax内でスケールを修正しておきたいところです。

 しかしGmaxでのスケール調整は意外とやっかいで、モデラ上でメッシュとボーンをまとめてスケーリングするだけではゲーム内で反映されない場合があります。

 メッシュのスケーリングに関しては、みるちおさんの動画や他のサイト様で解説されていますが、スケール値をリセットすることでモデラとゲーム内のスケールずれが無くなるようです。また、ryosukeさんもブログコメントで触れられていましたが、頂点やelementなどのサブオブジェクト編集モードでスケーリングすることで、スケールずれを起こさないようにできるようです。メッシュオブジェクトのスケールずれに関しては、Tips「モデル操作(2)」の「スケーリングの注意点」でも触れていますので、併せてご参照ください。

 ボーンに関しては、ルートボーンを"Affect Hierarchy Only"でスケールすることで、全ボーンの位置関係のみをスケーリングできます。貫通チェックなどのウェイト調整を済ませたモデルをスケーリングする場合、手動でボーン位置を動かすとけっこう危険なので、この方法を使用することをお勧めします。


 以下、Gmax内でボーンとメッシュのスケールを調整する方法を紹介します。ご参考まで。
(注)rootボーンとスキンメッシュのPivot位置が異なると互いのスケーリング中心がずれますので、予め位置をそろえておいてください。


(1)
スキンモデファイアの"Always Deform"(A1)のチェックを外す

(2)
rootボーンを選択し、"Affect Hierarchy Only"(A2)を選択してスケーリング(数値入力推奨)。

(3)
スキンメッシュを選択し、"Affect Hierarchy Only"の選択を解除してスケーリング(数値入力推奨)した後、"Reset"欄の"Scale"(A3)を押してスケール値をリセット。変更したスケーリング数値入力欄が100%に戻っていることを確認。






.
■「手モデル」変色対策
2009.10.17
 pedモデルのモーションには、専用の「手モデル」を呼び出して指アニメーションを行う(*1)ものがあります。たとえば、ギャング同士が挨拶する時に指でOKサインを出すようなモーションがこれに当たります。

 ところがユーザ作成スキンMODを使用していると、これらのモーション時に手のテクスチャが変色してしまう現象(下図の左画像)が起こる場合があります。



 本Tipsでは、MODユーザの側でこの変色を避ける方法を紹介します(対策結果は上図右画像)。割と簡単にできますので、変色が気になる方はお試しください。GmaxのTipsではありませんが、キャラスキン関係の小ネタということで紹介しておきます。ご参考まで。

(1)
用意するのは"txdworkshop"と、肌色(手と同じ色)の画像ファイルです。肌色画像ファイルのサイズは任意なので、なるべく小さなサイズ(64x64等)で作成しておきます。

(2)
"txdworkshop"で変色対策を適用したいtxdファイルを開き、"Image" > "New"(A1)で新規テクスチャを作成。"New image"ダイアログでは"32BPP"を選択(A2)します。


(3)
新規作成したテクスチャに、(1)で用意した肌色画像をインポート(B1)する。名前は任意。続いて三角のアイコン(B2)で、肌色画像がリストの一番下にくるように移動させます。DXT圧縮をかけても問題ないようです。


(4)
セーブして完了。


(*1)
 これらのモーションで使用される「手モデル」はgta3.imgの"shandl(r).dff"や"fhandl(r).dff"が使用されいる模様で、また指のアニメーション自体はghands.ifpの後半に格納されているようです。興味のある方は調べてみてください。

 以下余談です。上記モーションで使用される「手モデル」にはUVマップが設定されていて、呼び出されたpedモデルの該当部分のテクスチャが貼り付けられる仕組みになっているようです。ギャング(fam1〜fam3)など、これらのモーションが適用されるオリジナルpedモデルは、どれもテクスチャの同じ位置に手モデルのUVが配置されています。

 一方ユーザ作成スキンなどでは、「手モデル」UVの該当位置に肌色が配置されているとは限らないため、指アニメーション時に手がおかしな色になってしまう、というのがこの変色の原因と思われます。

 この「手モデル」が参照するのは、txd内で一番下にリストされたテクスチャのようです。本Tipsで紹介した対策は、リスト最下に元モデルとは無関係のテクスチャを置くことで意図せぬテクスチャ参照を防いでいます。




.
■キャラスキンとMMC
2010.2.11
 キャラスキンでは、Gmaxでマテリアルの色を設定してもSA内で反映されません(*1)。ただしこれはSAの仕様ではなく、エクスポータ(KAMS)の仕様のようですので、強引にSA内でマテリアル色を反映させることができます。キャラスキンの着色はテクテクスチャで問題なく設定できるため、無理にマテリアル色を使う必要もないかとは思いますが、一応ご参考までに記事にしました。興味があればご一読ください。

■通常キャラスキンのMMC
 キャラスキンでは、KAMS DFF IOの「MMC」ボタンのon/offに関わらず、出力dffのMMCはoffになります。MMC=offの場合、マテリアル色は「白」扱いで表示されます。(MMCは"Modulate Material Color"のことで、マテリアルに色を持たせるための設定です)


■MMCがonになる条件
 ポリゴンの透過設定は、普通はテクスチャのアルファマップを使用すると思いますが、マテリアルの透過パラメータでもポリゴンを透過させることが出来ます。どうやら、キャラスキンでこの「マテリアル透過」を設定すると、KAMSのMMCボタンのon/offに関わらず、MMC=onとして出力されるようです。

 既存のキャラスキンにマテリアル透過設定を適用する場合、MMC設定の違いによってモデル全体の色が元モデルと違ってくる場合がありますのでご注意ください。この場合、マテリアル色を白に設定すると、MMC=offの時と同じ色になります。また、使い方によっては、強制的にMMCをonにする手段として使用することもできるかもしれません。


■dffのMMCを直接編集する
 「身もふたもないやり方」ですが、RWA(RW Analyze)とバイナリエディタを使用してMMCのon/offを変更することができます。

(1)
 RWAでdffを開き、"Geometry List" > "Geometry" > "Struct" のoffset値をメモする。
 キャラスキンは単オブジェクト構成なので、"Geometry List"中に"Geometry"はひとつしかないはずです。




(2)
 バイナリエディタでdffを開き、メモしたoffsetアドレスのデータを書き換えます。MMCをoffからonにする場合は0x40を加え、逆にonからoffにする場合にはox40を引きます

 ちなみに、RWAにバイナリエディタを登録して使用することもできます。適宜設定変更をしてみてください。





 dffのファイル構造は、GTAModding様や、「Official GTA 3 & Vice City Mapper Website」様(参考URL(1))に詳細が記載されていますので、ご興味のある方は覗いてみてください


<参考URL>
(1)
Official GTA 3 & Vice City Mapper Website - [DFF File Format]:http://www.chronetal.co.uk/gta/index.php?page=dff






inserted by FC2 system