最終更新 : 2024-01-05
Loika [1] のモデルには指が無く、ハンドサインを表現できないため、どうにかして指を付けたい。 というわけで、 Felis [2] の手を Loika に移植する作業をする。
あらかじめ Loika のテクスチャを 512x512 に拡大しているので、 256x256 の領域を 1 つ使って Felis のテクスチャを貼り付けることができた。 Felis のデータより(↑ にリンクを示した BOOTH のページから無料でダウンロードできます)、必要な範囲が全体の 1/2 x 1/2 (絶対サイズで 2048x2048 )に収まっていることがわかるので、それを 256x256 に縮小して貼り付けた。
5 本指の手が付いたときに都合がよいように、 Loika の袖の形を変え、その部分の Weight Paint をやり直しておいた。特に、手が袖を貫通しないことを優先して編集した。
互いのモデルのボーンの対応するものどうしを、ボーンウェイトを含めて合併する必要があったため、 Blender で作業した。 下に示すファイル名一覧は最終的な Blender の操作手順を表すが、うまくいく操作手順を構築するまでが大変だった。
Felis の手以外を削除したオブジェクトを作る。 (001,002,003)
裏面を含めて(=メッシュを透過して)選択できるようにする :
選択範囲の反転( Edit Mode で、今選択されていない部分を選択する) : ([Ctrl]+[I])
ボーンの削除 : Armature の Edit Mode でボーンを選択して削除。 LowerArm 以下のみ残してすべて削除した。
Vertex Group の削除 : Mesh の Edit Mode で vertex group の一覧から選び、 "-" と書かれたボタンを押す。
両手ぶんのボーンと片手ぶんのメッシュだけ残して編集し、最後にメッシュを Symmetrize する。
メッシュをマージする。 (005)
メッシュ A を B へ合併 : B,A の順に選択して ([Ctrl]+[J])
追記:このとき Object Data Property 内の UV Maps の要素の名前が一致しているようにする。 ref. [7]
マテリアル A が設定されている頂点を選択 : マテリアル A の Select を押す。
選択頂点にマテリアル B を設定する : マテリアル B の Assign を押す。
マテリアルの削除 : Object Mode でマテリアル一覧から選択して "-" と書かれたボタンを押す。
Felis の手の UV 座標を右方向に 0.5 移動 : リンク選択([L]) -> 非選択範囲を隠す([Shift]+[H]) -> UV 編集ですべて選択([A]) -> ([G]) -> ([X]) -> 0.5
と入力
Armature をマージし、対応ボーンをマージする。 (006,007)
Armature A を B へ合併 : B,A の順に選択して ([Ctrl]+[J])
ボーンの接続関係の設定 : Parent で親子関係、 Connected で位置の同期の関係を変更。 Connected を切り替えるときは、 Connected されているものの解除を先にすればよい。
Vertex Weight Mix Modifier : Modifier に設定すると、その操作による結果がすでに描画される。操作の設定が終わったら、 Apply する。
Vertex Group 間で Vertex Weight を加算する手順は StackExchange の投稿 [3] を参考にした。
Add と All を設定すればよかった。 Add の設定が、 Vertex Group A に Vertex Group B を加算する ( A += B
) という意味である。 [4]
Armature → Mesh の順にマージすることも操作はできたが、手の Mesh の座標が勝手に平行移動する、ということを回避できなかったので諦めた。
右手の編集結果を左手にコピーする。 (011)
対称の位置にメッシュをコピー : Mesh -> Symmetrize
ボーンウェイトの R,L を切り替え : Mesh -> Weights -> Mirror -> All Groups にチェック
有料配布データ ( Loika ) の具体的な内容にはあまり触れないようにしつつ説明したい。
FBX のメタデータを設定する。
FBX をフォルダに入れる。 Unity のプロジェクトウィンドウで、追加された FBX を選択する。
インスペクタで Rig を選択。 see also [5]
その他、 Loika の配布時の設定を見ながら設定する。
Builder のエラーをすべて Auto Fix する。
このままでは指が正しく動かない。 CGBox の記事 [6] で推奨されるように設定を変更すると、デフォルトの Gesture が動作するようになった。
都合よく手に入った無料モデルで実験ができた。
[1] : BOOTH 「ロイカ【オリジナル3Dモデル】」 ホソイアシ より
[2] : BOOTH 「【無料配布】オリジナル3Dモデル「フェリス」」 リュクらぼ より
[3] : StackExchange "How to merge vertex groups?"
[4] : Blender 3.3 Manual "Vertex Weight Mix(頂点ウェイト合成)モディファイアー"
[5] : note 「<Unity>作成した3DモデルにHumanoidを適用させる」ななっしゅ より
[6] : CGBox「【VRChat】ハンドサインの編集方法:手・表情が動かないときは?」有島リツ より
[7] : StackExchange "UV mapping lost when joining mesh"