RotationConstraintを利用したフルトラ適正の引き上げ方。

VRChat上でフルボディトラッキング(フルトラ)をする際に、足トラッカーの位置が足首あたりに来ないアバターでアバターの見た目を変更せずに適切な位置まで持っていこうというお話です。

宣伝
今回修正を行うモデルとして、ひゅうがなつ様の「RAI」くんを使用させていただいております。
顔がいい…。顔がよくないか…?なぁ…顔が…いいんだよ…。

画像1

【VRC向けアバター】RAI - ひゅうがなつみかん -

必要なもの

フルトラ適正を上げたいモデルのFBX
Blender (ある程度はわかりやすく書いていると思います)
Unity  (ざっくり書きます…改変等ができる人だと思うので…)
根気   (Unity上でちまちました作業が多いです)  

フルトラ時の足トラッカーの場所の算出方法と今回する修正の概要
VRChatでのアバターの身長は右手首~左手首までの長さが参照されており、
算出された身長をHeadボーンの根本から下ろしていると思われます。
なので「顎からかかとまでの長さ>右手から左手までの長さ」になった時、
足トラッカーが上の方に移動していきます。

画像2

RAIくんは大体スネの真ん中あたり。

フルトラ適正を高めるには、このバランスを1:1にする必要があるため、
「足を短くする」もしくは「腕を伸ばす」ことになります。
しかし、そうしてしまうと既にあるデザインが崩れてしまうことに。

そこで利用するのが偽物の腕ボーンと、そのボーンに目的のボーンを追従させるConstraintコンポーネントです。

やることとしてはFixed Jointを利用したサブアームと発想は同じです。
アバターの腕自体をサブアームとして動かします。
ただFixed Jointはワールドによって使えなかったりと色々不都合があり、
腕に使うには実用的ではありませんでした。
VeryPoorで何か怒られている気分にもなりますし…。
今回VRChatのUnityのバージョンが2018になってConstraintがVRChatでも利用できるようになったので、
Avatar Performanceを気にせず、ワールドの種別に関わらず使えるようになりました。
実際の腕の位置とズレが生じるのでは?と考えられるかもしれませんが、
使用してみて違和感は今の所感じていません。
(余程長さを変えない限りは実感できないと思われます)

腕が伸び切らない問題は現実に対してアバターの四肢が長いということなのでUser Real Heightを下げて対応してください。

手順

1.Blender作業

画像3

①Blenderを立ち上げます。
(画像は2.8以降ですが、やることは2.79でも変わらないです。)
お豆腐が邪魔なので選択してDeleteキーもしくは右上のシーンコレクションのCubeを右クリックして削除してください。

日本語化されていない方はメニューバーから
「Edit」→「Preference」→「Interface」と移動して
「Translation」内の「Language」を「Japanese」に変更した後、「Translation」の横のチェックボックスにチェックを入れてください。
(2.79では「File」→「User Preference」)

②FBXを読み込む。
メニューバーのファイルから、インポート、FBX(.fbx)と選択し、
修正を加えたいアバターのfbxを読み込んでください。

画像4

Blender以外のモデリングソフトで作成されたFBXでは
ボーンが上向きの針のように読み込まれることがあるため、
インポートするファイルを選択する画面の左下にある、
「FBXをインポート」から、アーマチュアを選択して、
リーフボーンを無視とボーン方向の自動整列にチェックを入れてください。

画像5

テンキーの5で透視投影・平行投影の切り替え
テンキーの1でカメラをアバターの正面へ変更
テンキーがない場合は編集のプリファレンスから
入力→「テンキーを模倣」で数字キーが同じ動きをします。

読み込めました。

④腕ボーンを複製、伸ばす。
右上にあるシーンコレクション内のArmatureの左横にある▶を押してツリーを展開し、中にあるArmatureをクリック。
左上のオブジェクトモードが編集モードになっていることを確認。
なっていなければTabキーで切り替え。
(2.79はデフォルトで画面下部にあります。)

3Dビュー上でZキーを押して、ワイヤーフレーム表示に変更し、Cキーで円選択モードに切り替えて肩~指先までを選択。選択後右クリでモード解除。
Shift+Dで複製した後、Sキー、Xキーの順に押して、「右手から左手までの長さ≒顎からかかとまでの長さ」になるまで横方向に引き伸ばします。

⑤FBXをエクスポート
メニューバーのファイルから、エクスポート、FBX(.fbx)と選択し、
任意の場所、名前で保存します。

画像6

この時、エクスポートする際、画面の左下にある、「FBXをエクスポート」から、出力項目(エンプ…等)で選択されている箇所を、
アーマチュアとメッシュにしてください。(Shift押しながら複数選択)

スケールを「すべてFBX」にし、「トランスフォーム適用」にチェックを入れて出力したほうが、
Unity上でスケールが100倍などにならなくて良いです。
(Unity上で改変済みのアバターの変更がしたい場合は元のアバターと同じサイズで出力したほうが良いため、Unity上のArmatureやBodyのサイズが1以外になっていないか確認してください。)

⑥Blenderを閉じる。
閉じます。

2.Unity作業

①Unityを開く。
開きます。

②FBXを突っ込む。
ドラッグアンドドロップで突っ込みます。

③Materialの設定。
マテリアルが未割り当てなので割り当ててください。

④ボーンマッピング。
そのままではHumanoidとして動かないので、Humanoidアバターとしての設定と、今回複製したボーンの方を腕として認識させるよう設定を行います。

画像7

InspectorのRigから、Animation TypeをHumanoidに変更し、Apply。
Apply後、Configureを押下し、Configure画面に入ります。
(シーンの変更を保存しますか?と聞かれるので保存してください。)

画像8

ボーンの割当画面から
Body
├Left Arm
└Right Arm
Left Hand
Right Hand
内の項目を複製したボーンにすべて置き換えます。(.001とついている方) 
アバターによっては、Chest等が未割り当てであったり、Head内のJawに髪の毛のボーンが入っているので、適切に割り当ててください。
置き換え終わったら、DoneでConfigure画面から出ます。
(このとき、赤いワーニングがでている場合はPoseからResetを実行し、
その後またPoseからEnforce T-Poseを実行してください。)

⑤Hierarchy上に配置。
編集したFBXをHierarchy上にドラッグアンドドロップします。  

⑤Dynamic BoneやVRC Avatar Descripterの設定。
VRChatのアバターとして必要なコンポーネントをすでに使用中のアバターもしくはPrefabからコピーします。
現段階ではDynamic Boneの設定や、VRC Avatar Descripterの設定がされていないので、
Taremin様制作の「CopyComponentsByRegex」を利用して、元アバターについているComponentをすべてコピーします。

画像9

元アバターをHierarchy上で選択した状態で、正規表現に何も入力せずCopyを押します。
コピー中のオブジェクトに、アバターの名前が表示されたら
新しく追加した方のアバターを選択して、Pasteを押してください。

これですべてのComponentがコピーされるのですが、
Pipeline Managerに前のアバターのBlueprintIDが入っているので上書きしないよう解除しておきましょう。

⑥Constraintの設定。
アバターの腕本体にRotation Constraintを追加します。

画像10

肩~指先までのボーンを選択して、Add ComponentからRotation Constraintを追加します。
追加後、Is Activeにチェックを入れて、+を押してスロットを追加します。

あとはShoulder.LにはShoulder.L.001を…と一つずつ割り当てていってください。
両腕やり終えると作業は終了です。アバターのアップロードをしてトラッカーの位置、腕の動きを確認してください。

画像11

わからないことがあったらTwitterまでお願いします。僕のメンタルがやられているときにお返事します。

この記事が気に入ったらサポートをしてみませんか?