MarkN流アバターセットアップ【Resonite玄人向け】
目次
こんにちは、「まーくん。(MarkN)」です
この記事は Resonite Advent Calendar 2025 の4日目の記事です

Resonite玄人向けにMarkN流の軽量なアバターセットアップ方法や豆知識を紹介します
目次から気になった項目のみ確認するのもおすすめです
はじめに
私の理解に誤りがある可能性もあるため、この記事を盲信しないでください。
Resoniteのアップデートで記事の情報が古くなる可能性があります。
この記事のセットアップは主に 意図しない動作をさせない・他人のFPSを低下させない ことを重視しています。
この記事の内容に従う必要はありません。私と重視する内容が似ているなら参考にしてください。
具体的な実装方法までは解説しきれていない部分も多いため、以下の私がセットアップしたアバターを分解しながら読むことをおすすめします。(改変可能にするために一部最適とは言えない部分も残っています)

また、Resoniteで作業する際はこまめにインベントリにバックアップを保存するようにしましょう。
以下のサイトも参考になるので、ぜひ目を通してみてください。



初心者さんへ
初心者の方はこの記事は無視して、まずは簡単なところから楽しく気楽にセットアップを楽しみましょう。
Resoniteは中で一緒に作業ができるプラットフォームなので、JPチュートリアルでHelpボタンを押すなどしてメンターなどに手伝ってもらうか、
日本のResoniteDiscordサーバーで「アバター設定依頼」をしてみてください。
どうしても一人でやりたい方は、Resoniteの操作をある程度覚えてから、以下のサイトなどを参考にしてみてください。(最近はモジュラーアバター使っている人が多いかも)


Hips位置の誤認
アバターのボーンがResoniteの推奨する構造・命名になっていないとアバター化できなかったり、Hipsの位置を誤認したりします。
hipsの位置を誤認している例
足元にhipsがあるため、椅子に座ると浮いてしまいます。
![]()
hipsとspineの距離を元にhipsコライダーを生成するため、足元から胸あたりまである巨大コライダーが生成され、デスクトップモードで手が浮いてしまいます。
![]()
修正方法
ボーンがResoniteの推奨する構造・命名になっていない場合は、Blender等で修正しましょう。
UpperChest や HipsConstraint 等があると hips の位置を誤認してしまいます。
不必要なボーンがある場合は、ボーンの名前に <NoIK> とつけることで無視させることができます。
- 例:
UpperChest<NoIK>UpperChest<NOIK><noik>UpperChest
![]()
表記がResoniteの推奨に合っていない場合も書き直しましょう。
- 例:
ヒップやhip⇒hips
表記と位置が合っていない場合は、いい感じに辻褄を合わせてください。
Resoniteが推奨する構造

詳細を知りたい場合は公式Wikiを参照してください。
極端なスケール
アバタールートやMeshRenderer、ボーンのスケールが 1に近い値 になるようにしましょう。あえて1以外にするメリットはほとんどありません。
スケールがバラバラだとアウトラインの幅などが不均一になったり、ボーンの中にスロットを入れる系のアイテムの一部で問題が起きたりします。
![]()
アバタールートのスケールが 0.01 などになっている場合は、一度Blenderで開きましょう。
- まずはBlender上で大きさが 0.3~2.0mくらい (使用予定の身長に近い値)になっているのを確認します。
- なっていなければスケールを変えて、スケールの適用 を行います。
![]()
エクスポート形式は fbx または glb(gltf) のうまくいく方を使いましょう。
glb(gltf) の方がおすすめです。
glb(gltf)でエクスポート
私がglbでエクスポートする時の設定
- 内容: カメラやボックスが含まれないように設定してください。(画像では隠れてる)
- トランスフォーム:
+yが上 です。(画像では隠れてる) - メッシュ: UVとノーマルにチェック。モディファイアーとタンジェントは必要があればチェック。
- シェイプキー: シェイプキーの法線は必ずチェック
- マテリアル: 画像をWebPにして画質を65~80くらいにしておくとインベントリ容量を節約できるかも?
- アーマチュア: 「リーフボーン」は基本的につけなくていいです。アバター作者さんが適切に作ってくれているはずです。
![]()
重要
glbでインポートした際にはシェイプキーを動かした際に高確率で法線がおかしくなるので
メッシュのアセットを開いて、ブレンドシェイプの法線を取り除くとブレンドシェイプの接線を取り除くを行いましょう。
(接線の方は必要無いかも?)
![]()
fbxでエクスポート
私がfbxでエクスポートする時の設定
- パスモード: コピー
- 内容: カメラやボックスが含まれないように設定してください。
- スケールを適用: 「FBX単位スケール」にしてください。
- 向き:
-zが前、+yが上 です。 - ジオメトリ: 「三角面化」はこの段階ではしない方がいいです。シェイプキーで動かした際の法線が崩れます。
- アーマチュア: 「リーフボーン」は基本的につけなくていいです。アバター作者さんが適切に作ってくれているはずです。
![]()
モデルインポート
自分のスケールを 1 にしてインポートしましょう。
Blenderでちゃんとスケールを合わせているなら メートル でインポートしましょう。
fbxやスケールを合わせていない場合は ユーザースケール にしましょう。
アバターのアセットはオブジェクト内にいれましょう。
アバタークリエイター
アバタークリエイターの頭や手の位置は、ギズモやインスペクターでの数値入力で動かせます。 ドライブされているので動かせないと思いがちですが、普通に調整可能です。グラブして動かすよりも正確に移動・回転できるのでおすすめです。
動かしてもよい(Sliderがついている)スロットは以下の通りです
HeadsetLeftHandRightHandTooltipShelfGrabber
![]()
ヘッドの位置は2つの丸い玉を基準に考えてください。 この2つの丸い玉の間がViewPointとなります。
- 高さ: アバターの目に合わせる
- 前後: 鼻先と同じくらいにする
これらが個人的なおすすめですが、好みが大きいので自分に合う位置を探してください。
もしヘッドの位置を変更後に、回転や中心が少しズレている気がしたら、もう一度アバタークリエイターの揃える系ボタンを押し直すと微妙なズレがきれいになります。
![]()
アバタークリエイターを小さくするとグラブエリアが小さくなり、物が掴みづらくなってしまいます。
基本的にアバタークリエイターのスケールは1にして、もし変えるとしても少し小さいくらいが良いでしょう(手の大きさを合わせる必要はありません)。
ツールの位置はデフォルトから変更しないことをおすすめします。
ツールの位置を変更してしまうとコントローラーに対するレーザーの位置や向きが変わってしまいます。アバターを着替えるたびにレーザーの位置や向きが変化すると直感的な操作が難しくなるため、基本的にそのままで、動かすとしても回転はいじらない方が良いです。
![]()
椅子で腰がひっくり返る
hipsボーンとspineボーンが十分離れていないと、椅子に座った際に少し頭を下げるだけで腰がひっくり返ります。
![]()
Blender等でhipsをspineから離しましょう。
元の位置:ほぼ重なっている状態
![]()
修正後:Blenderの編集モードでhipsボーンを少し下げます
![]()
これで、きれいに座れるようになります。
![]()
首が伸びる
何も設定していないとよく首が伸びてしまいます(伸びて見えるのは自分からだけかもしれません)。
![]()
アバタールートにある VRIKAvatar コンポーネントの HeadMaxFixDistance を 0.001 のように小さな値にします。
(画像では 1E-07 つまり 0.00000001 になっています。0 にしても良いと思います。)
こうすることで伸びなくなります。
![]()
足の接地
![]()
デフォルトのままだと足が地面にめり込んでいたり浮いていたりするので、ちゃんと接地するようにしましょう。
アバタールートに元々ついている LocomotionAnimationFeetMetrics というコンポーネントの FootHeight にチェックをつけ、適切な値を設定します。
![]()
足がグニャる
落下時やアバターを持ったときに足が頭の上まで上がってグニャることがあります
以下の値を設定します。
FeetHoverHeight:0MaxFeetVelocityOffset:0.05~0.00くらい (画像では0.03)
![]()
移動アニメーション
LocomotionAnimationConfiguration コンポーネントを適当なスロットに「コンポーネントをアタッチ」から新しくつけましょう。
![]()
Gaits(list) の中に0, 1, 2, 3の計4つのパラメーターがあり、移動速度別に分かれています。
もっとも移動速度が速いときのパラメーターが 3 なのですが、この3のアニメーションは足が大股で動きすぎるため、削除することをおすすめします。
![]()
デスクトップモードでの指の自動モーションが気になるのであればそれもFloatingFingerCurlSwayMagnitude内の設定で修正できます
FloatingFingerCurlSwayMagnitudeの値を小さくしてください。
指先のタッチ判定位置
デフォルトでは指先のタッチ位置が関節にあることが多く、指を貫通させないとボタンが押せないことがあります。 (リーフボーンをつけるなどして指先に指の名前がついたスロットが存在すれば、自動で指先にタッチ位置が来ます)
このように指を貫通させないとボタンが押せません。
![]()
修正手順:
- 人差し指の
TipTouchSourceコンポーネントがついているスロットを探します。 - そのスロットの子供に新しくスロットを作り、指先に移動させます。
TipTouchSourceがついているスロットにあるコンポーネントを、すべて新しく作ったスロットに移動させます(コピーではなく移動)。
![]()
これで指先でボタンが押せるようになります。
![]()
レーザーのヒゲの奥行きを合わせる
アバターのスケールによって、レーザーのヒゲが出る位置が前後にズレてしまうことがあります。
アバターを着てスケールリセットした状態で位置を調整しましょう。
hand の中にある Tool Anchor のスケールを調整することでヒゲの位置が変化します。
![]()
調整すると、ちゃんと真横に出るようになります。
![]()
コライダー
アバターのコライダーは、掴む際はもちろん、以下のような様々な場面で使用されます。
- 銃のあたり判定
- トマト投げのあたり判定
- アバターをよじ登る判定
- 体に落書きするときの判定
- 自動ドアの安全機能
そのため、しっかり設定しましょう。コライダーを可視化すると調整が楽になります。
また、アバターのコライダーは距離に応じて切り替わります。 アバターを着ている側のスケール基準で 2m以内 だと全身のコライダーがアクティブになり、2m以上 離れると全身を覆う1つのコライダーのみになり処理負荷の軽減が図られています。
後からコライダーを追加すると、離れた際にオフにならない場合があります。
もし追加した場合は、コライダーを rigCollidersEnabledStates に追加して、離れたらオフになるように設定しましょう。
こちらのサイトで詳しく解説されています。

調整前:腰コライダーが小さかったり、手のコライダーが傾いていたりします。外側のコライダーも少し大きすぎます。
![]()
調整後:いい感じです。
![]()
スカート貫通
Resoniteで貫通対策を完璧に行うのは大変なので、比較的簡単にできる方法を紹介します。
しゃがんだ時に、スカートが足に当たって持ち上がってしまう現象です。
![]()
これは、大きなボーンコライダーを足につけることで対策しています。
![]()
また、横のスカートが足より内側に来ないように、このようなコライダーもつけています。
![]()
ボーンを掴んだり伸ばしたりできるように
アホ毛を引っ張ったり、スカートをめくったりしたいですよね。
![]()
- 掴めるようにする:
DynamicBoneChainコンポーネントのIsGrabbableにチェックを入れます。 - 伸びるようにする:
MaxStretchRatioを1以上に設定すると、その分だけ伸びるようになります。
掴めない場合は、VisualizeColliders にチェックをつけてコライダーの球体が小さすぎないか確認してください。コライダーの半径を設定する項目もあります。
![]()
アイトラッキング
目が既にキョロキョロ動いているのなら、視線に関しては特に難しい設定はなく動くはずです。
EyeRotationDriver の MaxSwing で目の可動範囲を自然な値に設定しましょう。
瞬きは、両目同時に閉じるシェイプキーを使うと片目閉じができません。左右に分かれているものを使いましょう。
設定例:
EyeLinearDriverのEyes(list)をAddで増やし、LeftとRightの2つを用意します。OpenCloseTargetに左右の目閉じシェイプキーをそれぞれ設定します。
![]()
両目閉じしかなくても、Resonite内でシェイプキーを左右に分割することが可能です。
SkinnedMeshRenderer の目的のブレンドシェイプの左側の三本線をクリックし、メニューから ブレンドシェイプをX軸で分割 を選択してください(左右がX軸のアバターの場合)。
![]()
フェイシャルトラッキング
アバタークリエイターで「フェイストラッキングをセットアップ」にチェックを付けていれば、あいうえお(Viseme)に関しては自動で設定されます。
チェックし忘れていた場合は、AvatarMouthDataSourceAssigner コンポーネントを付け、TargetReference に元々ついている DirectVisemeDriver の MouthTrackingSource の項目名を掴んで入れてください。
![]()
![]()
舌や頬の動きなど、あいうえお(Viseme)以外を動かしたい場合はIMouthTrackingSourceComponentコンポーネントを付け、一つ一つシェイプキーを割り当てましょう
以下が解説ワールドです
(Resonite起動中にリンク先のOpen Worldクリックでワールドが開く)
LOD
画面に対して表示しているメッシュのバウンディングボックスの大きさの割合が一定以下になったら、表示を消す機能です。
アバターが画面の数ピクセルにしか映っていないのに、時計や指輪などを律儀に描画するのは計算資源の無駄ですし、チラチラ点滅してしまいます。ある程度小さくなったら見えなくなるようにしましょう。
設定方法:
LODGroupコンポーネントをつけます。LODs(list)でAddを押し、Renderers(list)に制御したいレンダラーを入れます。ScreenRelativeTransitionHeightの値を、レンダラーを消したい値に設定します(例:画面の高さの1%以下になった時に消したければ0.01)。
詳細はこちらの記事を参考にしてください。

バウンディングボックス
バウンディングボックスはLODの計算や、そのメッシュが視界に入っているかどうかの計算に使用されています。 ボーン一つ一つの動きをリアルタイムに計算すると負荷が高くなるので、できるだけ数を少なく、計算回数も減らしましょう。ただし、スキンドメッシュが変形する範囲よりも小さくしてしまうと、目に映っているのに描画されないなどの問題が起きるので注意が必要です。
注意: 現在(2025年12月4日時点)、スキンドメッシュレンダラーのバウンディングボックスの計算にバグがあるらしく、設定が正しく動作していません。デフォルト設定では正しく動作していそうなのですが、いくつかの設定がおかしくなっています。 (まだIssueを書いていないので、誰か書ける人はお願いします。)

そのため、現在は BoundsComputeMethod の手動設定は行わずに デフォルトの static のまま にしましょう。
本来は Proxy や Explicit などに設定して最適化することが望ましいのですが、バグが直るまでは static 推奨です。
![]()
表情切り替え
StandardController ノード系を使用した表情設定(表情設定ツールなど)は便利ですが、今のResoniteで軽さを求めるなら AvatarRawToolData コンポーネントを使いましょう。
StandardController Fluxノードと AvatarRawToolData コンポーネントを esnyaさんのMOD ResoniteMetricsCounter で比較すると、Fluxの方が30倍ほど計算時間が長いです。
5000個複製した際のFPSやRenderTimeの比較
コンポーネント 283 FPS
![]()
Flux 14 FPS
![]()
圧倒的な差があります。比較に使用した実装は以下の通りです。
コンポーネント (AvatarRawToolDataからValueFealdにValueCopy)
![]()
Flux (FluxでValueFealdにドライブ)
![]()
実装方法
AvatarRawToolData の使い方は簡単で、コンポーネントをつければアバターを着た際にコントローラーの値がそこで取得されます。
ただし使用できるのは以下の5つのみです
Primary <bool>Secondary <bool>Grab <bool>PrimaryStrength <float>SecondaryAxis <float2>
![]()
これらの値をFluxでシェイプキーにドライブするか、以下のように制御しましょう。
MultiBoolConditionDriverとBooleanValueDriver<float>を使用- ロジック例:「
Primaryfalse &Secondaryfalse &Grabtrue の場合、このシェイプキーを1にする」 SmoothValueなどを組み合わせると滑らかになります。
![]()
Fluxとコンポーネントでこれだけ差があるのはバグの可能性が高いそうなので、誰かIssueを書いてください。

未使用ボーン・シェイプキー削除
ボーン削除
Bone(list) に入っているボーンが多いと読み込みに時間がかかります。未使用のボーンはボタン一つで削除できるので整理しましょう。
SkinnedMeshRenderer の下部にある 空のボーンの除去 ボタンを押してください。
![]()
シェイプキー削除
シェイプキーも数が多いと読み込みに時間がかかります。
SkinnedMeshRenderer の下部にある 使用していないブレンドシェイプを除去 ボタンを押して削除しましょう。
![]()
メッシュベイク
アバターに SkinnedMeshRenderer が複数あると、それだけドローコールが増え、処理に時間がかかります。普段使いするアバターはメッシュをベイクしてまとめましょう。
注意: 現状のResoniteでは、顔のようなシェイプキーが多いメッシュを体とまとめてしまうと逆に重くなる場合があるらしい(未検証)ので、「顔」と「顔以外」のように分けるのがおすすめ です。
手順:
- グルーツールを
スキンドメッシュをベイクのモードにします。
- ベイクしたいメッシュを一つのスロットの子供にまとめ、親スロットを掴みながらセカンダリを押します。

- ベイクをするとメッシュのアセットが別物になるので、DevToolの「新規作成」→「アセット最適化ウィザード」を出します。

- リファレンスにアバタールート(またはAssetスロット)を入れて
使われていないアセットを削除を実行します。
- このままだとベイク後のアセットがルートのAssetsスロットに出てしまうので、ベイクした
SkinnedMeshRendererのMeshの中身を掴んで、アバターのAssetsスロットの適当な場所に移動しておきましょう。
マテリアル
できるだけまとめましょう。 アバターによっては同じテクスチャなのにパーツ毎にマテリアルが分かれていたりするので、特別な理由がない限りは統合します。
- マテリアルの種類: 可能ならPBS系の不透明
Opaqueを優先して使いましょう。常時発光部にはUnlitを使います(光のあたり具合を計算する必要が無いから)。アニメ調にしたい箇所のみXiexeToonにしましょう。
XiexeToonの解説記事

- BlendMode: 透過テクスチャを使っているマテリアルもできるだけ
Cutoutにし、どうしても半透明にしたい箇所のみAlphaにしましょう。
テクスチャ
テクスチャの最適化はグラフィックボード(GPU)のVRAM(メモリ)使用量に直結するので積極的に対処しましょう
インポート前に画像を圧縮しても自分のストレージを節約できるだけで、GPUへの負荷はほとんど変化しないことに注意してください
解像度
自分が許容できるギリギリまで解像度を低くしましょう。
再調整 の左にリサイズしたい解像度の長辺を入力して 再調整 を押します。
![]()
アルファ除去
アルファを使用していないテクスチャはアルファの除去を行いましょう。 同じように見えるテクスチャでも、アルファ情報を消すだけでVRAMの使用量をかなり削減できます。
テクスチャアセットの下部にある アルファを取り除く ボタンを押してください。
![]()
効果:
アルファ除去前: 21.33MB(圧縮形式がBC3)

アルファ除去後: 10.67MB(圧縮形式がBC1)

FPSと距離に応じて軽量化
DynamicBone は計算負荷があり、FPSが低くなると荒ぶることがあります(大人数の集合写真などでスカートや髪が痙攣したように震える現象)。
そのため、ValueGradientDriver<bool> と ValueMultiDriver<bool> を組み合わせて、一定以下のFPSになったら DynamicBoneChain コンポーネントのEnableが切れる ように設定しましょう。
余裕があれば、Enableが頻繁に切り替わって負荷が増えないように ヒステリシス制御(例:20fpsまで下がったらOFF、25fpsまで上がったらONというように、行き帰りで切り替え地点を変える制御)を導入しましょう。
BooleanValueDriver<float> で ValueGradientDriver<bool> のPositionをドライブして、BooleanValueDriver<float> のstateを ValueMultiDriver<bool> でドライブすることで実装できます。
動作例: 見ているユーザーのFPSによってDynamicBoneのON/OFFが変化します。
![]()
距離でのON/OFFも実装したい場合はさらに複雑になるので、参考アバター(つみれちゃん)を分解して確認するかMarkNに聞いてください。
![]()
最適化前とFPS比較
普通にインポートして、MaterialとDynamicBoneと表情設定を行ったアバターと
今回紹介した最適化を行ったアバターを101体出して比較
FPS比較
| 条件 | 最適化前 | → | 最適化後 |
|---|---|---|---|
| 近距離視界内 | 31 fps | → | 79 fps |
| 60m視界内 | 32 fps | → | 103 fps |
| 近距離視界外 | 46 fps | → | 91 fps |
| 60m視界外 | 45 fps | → | 212 fps |
![]()
最適化前スクショ
![]()
最適化後スクショ
![]()
更新履歴
- 2025年12月4日 公開
- 2025年12月5日 タイトル変更・項目順序変更・微修正多数
- 2025年12月5日20:00 Blenderからglbでエクスポートした際の解説追加・おすすめ記事追加
- 2025年12月6日 fps比較追加・画像まわりの処理を修正(内部の話)・その他微修正
- 2026年1月13日 目次の場所変更
- 2026年1月28日 順番並べ替え・アバターセットアップ術のリンク追加