Difference between revisions of "Humanoid Rig Requirements for IK/ja"
(Created page with "==== 目 ==== Neosはアバターの目の動きを自動でセットアップし、互換性のあるヘッドセットでアイトラッキングできます。これは...") |
|||
(30 intermediate revisions by 4 users not shown) | |||
Line 2: | Line 2: | ||
人型にボーンが入ったモデルをインポートする場合においては、何が必要で、何が必要でないのかはしばしば混乱することがあります。このページでは、必要事項において知ることができます。 | 人型にボーンが入ったモデルをインポートする場合においては、何が必要で、何が必要でないのかはしばしば混乱することがあります。このページでは、必要事項において知ることができます。 | ||
− | + | = 対応したファイル形式 = | |
VRChatなどの他のVRプラットフォームと互換性のある、リギングされたモデルがあれば、すぐに使えるはずです。アバターをインポートしてみてください。 | VRChatなどの他のVRプラットフォームと互換性のある、リギングされたモデルがあれば、すぐに使えるはずです。アバターをインポートしてみてください。 | ||
− | 念のため。<code>.unitypackage | + | 念のため。<code>.unitypackage</code> / <code>.asset</code> / <code>.mesh</code> / <code>.prefab</code> は現在のところ '''サポートしていません'''。 |
サポートされている '''人型(Humanoid) アバター''' のフォーマット: | サポートされている '''人型(Humanoid) アバター''' のフォーマット: | ||
* FBX | * FBX | ||
* GLTF | * GLTF | ||
+ | * VRM(後ろに.glbと追記することでインポートできます)。UniVRMが一定以下のバージョンかつ、VRM0で出力している場合はGLTFの基準に沿っていないため正常にインポートできません | ||
− | + | = 全体的なリグ/モデルの要件 = | |
− | + | == 日本向けの説明 == | |
− | |||
* キセテネなどの衣装着せ替えツールを使用して服を着せかえている場合、同名のボーンが一つのアバターに複数入っていることがあります。 | * キセテネなどの衣装着せ替えツールを使用して服を着せかえている場合、同名のボーンが一つのアバターに複数入っていることがあります。 | ||
Neosにおいてはボーン名称を基準としてアバターを作成します。また、ボーン名称に "<code><NoIK></code>" と入力しておくとIKの設定がスキップされます、服などを着せ変えている方は'''必ず'''エクスポートする前に基準となるボーン以外の名称を変更するか、"<NOIK>"の文字を追加してください。 | Neosにおいてはボーン名称を基準としてアバターを作成します。また、ボーン名称に "<code><NoIK></code>" と入力しておくとIKの設定がスキップされます、服などを着せ変えている方は'''必ず'''エクスポートする前に基準となるボーン以外の名称を変更するか、"<NOIK>"の文字を追加してください。 | ||
Line 21: | Line 21: | ||
== 全体的なリグ/モデルの要件 == | == 全体的なリグ/モデルの要件 == | ||
* モデルはAポーズまたはTポーズであること。 | * モデルはAポーズまたはTポーズであること。 | ||
− | * Orientation (forward facing) | + | * Orientation (forward facing) は正のZ軸に沿っている必要があります。 |
+ | ** 反転したZも検出可能ですが、バグを含む可能性があります。 | ||
** これについて簡単なチェック方法: インポート設定で "Force T-pose "をチェックしてください。手が交差している場合は、Z(上下)軸に沿って180度回転させます。片方の手が前で、もう片方の手が後ろの場合、Z(上下)軸に沿って90度回転します。 | ** これについて簡単なチェック方法: インポート設定で "Force T-pose "をチェックしてください。手が交差している場合は、Z(上下)軸に沿って180度回転させます。片方の手が前で、もう片方の手が後ろの場合、Z(上下)軸に沿って90度回転します。 | ||
− | + | == ボーンを無視する == | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
NeosのIK判定で、ボーンを無視したい場合がありますが、可能です。'''ボーン名のどこか'''に、<code><NoIK></code>('''大文字小文字を区別しない''')を追加するだけです。名前に<code><NoIK></code>を含むボーンは、IKには使用されません。これは、IKボーンとして判定されてしまうツイストボーンや衣服/髪のボーンに利用できます。 | NeosのIK判定で、ボーンを無視したい場合がありますが、可能です。'''ボーン名のどこか'''に、<code><NoIK></code>('''大文字小文字を区別しない''')を追加するだけです。名前に<code><NoIK></code>を含むボーンは、IKには使用されません。これは、IKボーンとして判定されてしまうツイストボーンや衣服/髪のボーンに利用できます。 | ||
Line 71: | Line 66: | ||
|} | |} | ||
− | + | = ボーン(Bone) の必要条件について = | |
モデルをインポートすると、Neosはパターンマッチングとヒューリスティックを使って、モデルのボーンのレイアウトを把握します。つまり、ボーンの名前はほとんど大文字小文字を区別せず、名前の周りに追加のデータを持つことができます。例えば、"hips"、"Hips"、"HIPS"、"cheese_hips "はすべてモデルのヒップボーンとして検出されます。ヒューリスティックはスペースにも寛容なので、"upper arm "や "upperarm "も "Upper Arm "ボーンとして正しくフラグが立てられます。 | モデルをインポートすると、Neosはパターンマッチングとヒューリスティックを使って、モデルのボーンのレイアウトを把握します。つまり、ボーンの名前はほとんど大文字小文字を区別せず、名前の周りに追加のデータを持つことができます。例えば、"hips"、"Hips"、"HIPS"、"cheese_hips "はすべてモデルのヒップボーンとして検出されます。ヒューリスティックはスペースにも寛容なので、"upper arm "や "upperarm "も "Upper Arm "ボーンとして正しくフラグが立てられます。 | ||
Line 80: | Line 75: | ||
これだけでは不十分な場合は、この二つを参考にしてください: [[#Overall Summary|概要]] / [[#Example Rig|サンプルボーン/リグ設定のダウンロード]] | これだけでは不十分な場合は、この二つを参考にしてください: [[#Overall Summary|概要]] / [[#Example Rig|サンプルボーン/リグ設定のダウンロード]] | ||
− | + | == 中央の 背骨・腰(Spine/Hips) == | |
− | + | モデルのアーマチュアのルートは、上を向いている単一のボーンでなければなりません。以下のような名前である必要があります。 | |
[[File:HumanoidRigHips.png|thumb|200px|Example hip/central spine layout]] | [[File:HumanoidRigHips.png|thumb|200px|Example hip/central spine layout]] | ||
腰から上に、こういった具合に鎖のようにつながっている必要があります: Hips -> Spine -> Chest -> Neck -> Head | 腰から上に、こういった具合に鎖のようにつながっている必要があります: Hips -> Spine -> Chest -> Neck -> Head | ||
− | |||
− | |||
要約すると: | 要約すると: | ||
Line 94: | Line 87: | ||
!順番 | !順番 | ||
!パーツ名 | !パーツ名 | ||
− | ! | + | !認識する名前の一例 |
+ | !認識しない名前 ('''これにしてはいけません''')❌ | ||
|- | |- | ||
|1st | |1st | ||
|Hips | |Hips | ||
|hips, pelvis, root | |hips, pelvis, root | ||
+ | |style="background-color:#FAC9C9;"| hip | ||
|- | |- | ||
|2nd | |2nd | ||
|Spine | |Spine | ||
|spine, chest | |spine, chest | ||
+ | |style="background-color:#FAC9C9;"| | ||
|- | |- | ||
|3rd | |3rd | ||
|Chest | |Chest | ||
− | |chest, upper chest, ribcage | + | |chest, upper chest, ribcage, spine1, spine2 |
+ | |style="background-color:#FAC9C9;"| | ||
|- | |- | ||
|4th | |4th | ||
|Neck | |Neck | ||
|neck | |neck | ||
+ | |style="background-color:#FAC9C9;"| | ||
|- | |- | ||
|5th | |5th | ||
|Head | |Head | ||
|head | |head | ||
+ | |style="background-color:#FAC9C9;"| | ||
|} | |} | ||
− | === 肩 / 腕 (Shoulder / Arm) | + | === Upper Chest === |
+ | 多くのアバターには、背骨の中央に余分なBoneがあり、"Upper Chest"や"Spine2"と呼ばれます。 | ||
+ | # Hips | ||
+ | # '''Spine''' | ||
+ | # '''Chest''' (Spine1とも表記されます) | ||
+ | # '''Upper Chest''' (Spine2とも表記されます) | ||
+ | # Neck | ||
+ | # Head | ||
+ | |||
+ | これらは'''必須ではありませんが、まだサポートされています'''。この、"背骨の中央"ボーンは、IKで無視されます。 | ||
+ | |||
+ | == 肩 / 腕 (Shoulder / Arm) == | ||
2本の腕を「胸(Chest)」ボーンに上から取り付け、モデルの両側に1本ずつ配置してください。腕がモデルのどちら側にあるかを示すために、"L" / "R"という文字を使います。これらは大文字小文字を区別しないので、「l」/「r」でも大丈夫です。 | 2本の腕を「胸(Chest)」ボーンに上から取り付け、モデルの両側に1本ずつ配置してください。腕がモデルのどちら側にあるかを示すために、"L" / "R"という文字を使います。これらは大文字小文字を区別しないので、「l」/「r」でも大丈夫です。 | ||
Line 146: | Line 156: | ||
|} | |} | ||
− | + | == 手 == | |
[[File:HumanoidRigFingers.png|thumb|200px|Example fingers rig layout]] | [[File:HumanoidRigFingers.png|thumb|200px|Example fingers rig layout]] | ||
Line 209: | Line 219: | ||
|} | |} | ||
− | + | === 指の識別 === | |
Neosは、以下のコードを使って、あなたの指が何であるかを探そうとします。: | Neosは、以下のコードを使って、あなたの指が何であるかを探そうとします。: | ||
<pre> | <pre> | ||
Line 230: | Line 240: | ||
ご覧の通り、非常に柔軟で、自由度の高いものです。 | ご覧の通り、非常に柔軟で、自由度の高いものです。 | ||
− | + | == 脚 == | |
脚は他のものに比べてシンプルです。それぞれの脚はHip boneに接続する必要があります。腕がモデルのどちら側にあるかを示すのに使用したのと同様に、「L」と「R」の文字を使います。これらは大文字と小文字を区別しませんので、「l」と「r」を使用しても大丈夫です。 | 脚は他のものに比べてシンプルです。それぞれの脚はHip boneに接続する必要があります。腕がモデルのどちら側にあるかを示すのに使用したのと同様に、「L」と「R」の文字を使います。これらは大文字と小文字を区別しませんので、「l」と「r」を使用しても大丈夫です。 | ||
Line 257: | Line 267: | ||
|} | |} | ||
− | + | === 趾行 === | |
− | == | + | Neos は趾行の脚をネイティブにはサポートしていません。多くのコミュニティメンバーが趾行脚をサポートするシステムを作っています。その一例が [https://youtu.be/DXx_YsMEyFI|モズの動画] にあります。 |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | ==== 目 | + | == Heads == |
+ | 頭はシンプルですが、いくつか参考情報がありますので、お役立てください。 | ||
+ | |||
+ | === 目 === | ||
Neosはアバターの目の動きを自動でセットアップし、互換性のあるヘッドセットで[[アイトラッキング]]できます。これは、目に次のような名前を付けると機能します。 | Neosはアバターの目の動きを自動でセットアップし、互換性のあるヘッドセットで[[アイトラッキング]]できます。これは、目に次のような名前を付けると機能します。 | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 279: | Line 286: | ||
|} | |} | ||
− | === | + | === 顎 === |
− | + | 顎ベースのアニメーションは、[[Visemes|Blendshape/Viseme support]]のためNeosではあまり一般的ではありません。それでも顎の骨を使いたい場合は、ボーンに"Jaw"という名前を付けることを推奨します。 | |
− | + | ==== [[Visemes]](口形素) ==== | |
− | + | [[Visemes]]は、モデルのリグとは関係ないので、別の場所で扱っています。 | |
追記: Visemeについては、vrcでセットアップされるものと同様のものが入っていれば自動的にセットアップされます。名称基準でセットアップされます。 | 追記: Visemeについては、vrcでセットアップされるものと同様のものが入っていれば自動的にセットアップされます。名称基準でセットアップされます。 | ||
この関係で、VRoidなどのアバターの場合、RRを誤認識することがあります。VRoidのアバターの場合はセットアップ後一度Visemeについて確認してみることをお勧めします。 | この関係で、VRoidなどのアバターの場合、RRを誤認識することがあります。VRoidのアバターの場合はセットアップ後一度Visemeについて確認してみることをお勧めします。 | ||
− | |||
[[File:HumanoidRigHead.png|thumb|200px|Example head rig layout]] | [[File:HumanoidRigHead.png|thumb|200px|Example head rig layout]] | ||
− | + | = 総まとめ = | |
ここでは、例のリグの概要を写真でご紹介します。より詳細なメモは上記を参照してください: | ここでは、例のリグの概要を写真でご紹介します。より詳細なメモは上記を参照してください: | ||
Line 297: | Line 303: | ||
[[File:HumanoidRigOverallHierarchy.png|250px|Example overall rig hierarchy shown in blender]] | [[File:HumanoidRigOverallHierarchy.png|250px|Example overall rig hierarchy shown in blender]] | ||
− | + | = リグのサンプル = | |
− | Blenderのリグのサンプルはこちらです: [https:// | + | Blenderのリグのサンプルはこちらです: [https://www.dropbox.com/s/0wwgpplnv2fofbf/Neos_bone_structure_Example_v3.blend?dl=0 Google Driveからダウンロード]. |
== 対応しているツール == | == 対応しているツール == | ||
* Mixamoのリグはちゃんと機能します | * Mixamoのリグはちゃんと機能します | ||
+ | |||
+ | * [https://www.mixamo.com/| Mixamo]で生成されたリグは、何も変更せずにうまく機能します。 | ||
+ | * [https://readyplayer.me/| Ready Player Me]で生成されたリグは、何も変更せずにうまく機能します。 | ||
+ | ** ただし、[https://github.com/Neos-Metaverse/NeosPublic/issues/3849| Ready Player Me outfits]にはいくつかの問題点があります。 |
Latest revision as of 04:12, 26 April 2023
人型にボーンが入ったモデルをインポートする場合においては、何が必要で、何が必要でないのかはしばしば混乱することがあります。このページでは、必要事項において知ることができます。
対応したファイル形式
VRChatなどの他のVRプラットフォームと互換性のある、リギングされたモデルがあれば、すぐに使えるはずです。アバターをインポートしてみてください。
念のため。.unitypackage
/ .asset
/ .mesh
/ .prefab
は現在のところ サポートしていません。
サポートされている 人型(Humanoid) アバター のフォーマット:
- FBX
- GLTF
- VRM(後ろに.glbと追記することでインポートできます)。UniVRMが一定以下のバージョンかつ、VRM0で出力している場合はGLTFの基準に沿っていないため正常にインポートできません
全体的なリグ/モデルの要件
日本向けの説明
- キセテネなどの衣装着せ替えツールを使用して服を着せかえている場合、同名のボーンが一つのアバターに複数入っていることがあります。
Neosにおいてはボーン名称を基準としてアバターを作成します。また、ボーン名称に "<NoIK>
" と入力しておくとIKの設定がスキップされます、服などを着せ変えている方は必ずエクスポートする前に基準となるボーン以外の名称を変更するか、"<NOIK>"の文字を追加してください。
- ボーン名の最初か最後に<NoIK>を追加すると、対応するボーンはImport処理から免除されます。
- これは、補助ボーンなど、間違って認識される可能性のあるボーンに便利です。これは、ボーンの子が検出されるのを防ぐものではありません。
全体的なリグ/モデルの要件
- モデルはAポーズまたはTポーズであること。
- Orientation (forward facing) は正のZ軸に沿っている必要があります。
- 反転したZも検出可能ですが、バグを含む可能性があります。
- これについて簡単なチェック方法: インポート設定で "Force T-pose "をチェックしてください。手が交差している場合は、Z(上下)軸に沿って180度回転させます。片方の手が前で、もう片方の手が後ろの場合、Z(上下)軸に沿って90度回転します。
ボーンを無視する
NeosのIK判定で、ボーンを無視したい場合がありますが、可能です。ボーン名のどこかに、<NoIK>
(大文字小文字を区別しない)を追加するだけです。名前に<NoIK>
を含むボーンは、IKには使用されません。これは、IKボーンとして判定されてしまうツイストボーンや衣服/髪のボーンに利用できます。
ボーン名 | IKで利用できるか? | 説明 |
---|---|---|
Right Hand | ✅ | Right Handと判定 |
<No_IK> Right Hand | ✅ | Right Handと判定 |
<NoIK> Right Hand | ❌ | IKから除外 |
Right Hand <NoIK> | ❌ | IKから除外 |
Right Hand <noik> | ❌ | IKから除外 |
Right Hand <NOIK> | ❌ | IKから除外 |
bo<nOiK>ne | ❌ | IKから除外 |
ある日、公園に行くと、公園には<noik>があった。 | ❌ | IKから除外 |
ボーン(Bone) の必要条件について
モデルをインポートすると、Neosはパターンマッチングとヒューリスティックを使って、モデルのボーンのレイアウトを把握します。つまり、ボーンの名前はほとんど大文字小文字を区別せず、名前の周りに追加のデータを持つことができます。例えば、"hips"、"Hips"、"HIPS"、"cheese_hips "はすべてモデルのヒップボーンとして検出されます。ヒューリスティックはスペースにも寛容なので、"upper arm "や "upperarm "も "Upper Arm "ボーンとして正しくフラグが立てられます。
これは様々なリグをピックアップするのに非常に適していますが、参考までにこのフォーマットに従ってみてください。
体の各部位ごとに重要な情報をまとめた幅広いガイドを以下に紹介します。
これだけでは不十分な場合は、この二つを参考にしてください: 概要 / サンプルボーン/リグ設定のダウンロード
中央の 背骨・腰(Spine/Hips)
モデルのアーマチュアのルートは、上を向いている単一のボーンでなければなりません。以下のような名前である必要があります。
腰から上に、こういった具合に鎖のようにつながっている必要があります: Hips -> Spine -> Chest -> Neck -> Head
要約すると:
順番 | パーツ名 | 認識する名前の一例 | 認識しない名前 (これにしてはいけません)❌ |
---|---|---|---|
1st | Hips | hips, pelvis, root | hip |
2nd | Spine | spine, chest | |
3rd | Chest | chest, upper chest, ribcage, spine1, spine2 | |
4th | Neck | neck | |
5th | Head | head |
Upper Chest
多くのアバターには、背骨の中央に余分なBoneがあり、"Upper Chest"や"Spine2"と呼ばれます。
- Hips
- Spine
- Chest (Spine1とも表記されます)
- Upper Chest (Spine2とも表記されます)
- Neck
- Head
これらは必須ではありませんが、まだサポートされています。この、"背骨の中央"ボーンは、IKで無視されます。
肩 / 腕 (Shoulder / Arm)
2本の腕を「胸(Chest)」ボーンに上から取り付け、モデルの両側に1本ずつ配置してください。腕がモデルのどちら側にあるかを示すために、"L" / "R"という文字を使います。これらは大文字小文字を区別しないので、「l」/「r」でも大丈夫です。
腕については次の順で並べてください: 肩(Shoulder) -> 上腕(Upper Arm) -> 下腕(Lower Arm) -> 手(Hand)
順番 | パーツ名 | 認識するほかの名前の一例 |
---|---|---|
1st | Shoulder | shoulder, clavicle, collar, collarbone |
2nd | Upper Arm | upperarm, upper arm, arm, bicep |
3rd | Lower Arm | fore arm, forearm, lower arm, lowerarm, elbow |
4th | Hand | hand, wrist, palm |
手
手は一見複雑に見えますが、その必要はありません。骨の名前について説明する前に、以下のことを覚えておいてください:
- 指について
- 各指には最低でも2つのセグメント(区切り)が必要です。
- 以下のように、1本の指に4セグメントまでサポートされています:
- Metacarpal
- Proximal
- Intermediate
- Distal
- 手として識別するには「最低3本の指」が必要です。
- 親指について
- 親指を識別できるものが必要です。
さらに、モデルに5本の指がある場合、ジオメトリ検出を使用して、ボーンの名前を把握します。このプロセスでは、リグを見て、どの指がどの指なのかを把握します。
これらのことを考慮しても、手動で指を設定したい場合もあるでしょう。そこで、他のセグメントと同様に、ここでは骨の名前についてのコメントを紹介します。
指の順番について: <fingername>1 -> <fingername>2 -> <fingername>3 -> <fingername>4
それぞれの指の名前については次の通りです:
- 親指 - Thumb
- 人差し指 - Index
- 中指 - Middle
- 薬指 - Ring
- 小指 - Pinky
表にまとめると次の通りです:
指の番号 | 指の名前 | 認識するほかの名前 | ボーン構造の一例 |
---|---|---|---|
1 | Thumb | thumb1.L -> thumb2.L -> thumb3.L -> thumb4.L
| |
2 | Index | point, pointer | index1.L -> index2.L -> index3.L -> index4.L
|
3 | Middle | middle1.L -> middle2.L -> middle3.L -> middle4.L
| |
4 | Ring | ring1.L -> ring2.L -> ring3.L -> ring4.L
| |
5 | Pinky | little | pinky1.L -> pinky2.L -> pinky3.L -> pinky4.L
|
指の識別
Neosは、以下のコードを使って、あなたの指が何であるかを探そうとします。:
public static FingerType? NameToFingerType(List<string> names) { if (names.Contains("thumb") || names.Contains("th") || names.Contains("thm") || names.Contains("thmb")) return FingerType.Thumb; else if (names.Contains("index") || names.Contains("point") || names.Contains("in") || names.Contains("ind")) return FingerType.Index; else if (names.Contains("middle") || names.Contains("mid") || names.Contains("mi")) return FingerType.Middle; else if (names.Contains("ring") || names.Contains("ri") || names.Contains("rin")) return FingerType.Ring; else if (names.Contains("pinky") || names.Contains("little") || names.Contains("pi") || names.Contains("pin") || names.Contains("pnk")) return FingerType.Pinky; return null; }
ご覧の通り、非常に柔軟で、自由度の高いものです。
脚
脚は他のものに比べてシンプルです。それぞれの脚はHip boneに接続する必要があります。腕がモデルのどちら側にあるかを示すのに使用したのと同様に、「L」と「R」の文字を使います。これらは大文字と小文字を区別しませんので、「l」と「r」を使用しても大丈夫です。
順番 | パーツ名 | 認識するほかの名前の一例 |
---|---|---|
1st | Upper Leg | upper leg, upleg, thigh, upperleg, hipL, hipR |
2nd | Lower Leg | leg, calf, knee, shin |
3rd | Foot | foot, ankle |
4th | Toes | toe, toes, ball, toebase, toes |
趾行
Neos は趾行の脚をネイティブにはサポートしていません。多くのコミュニティメンバーが趾行脚をサポートするシステムを作っています。その一例が [1] にあります。
Heads
頭はシンプルですが、いくつか参考情報がありますので、お役立てください。
目
Neosはアバターの目の動きを自動でセットアップし、互換性のあるヘッドセットでアイトラッキングできます。これは、目に次のような名前を付けると機能します。
パーツ | 対応する名称(大文字小文字を区別しない) |
---|---|
左目 | LeftEye, Left Eye, Eye.L, Eye_L |
右目 | RightEye, Right Eye, Eye.R, Eye_R |
顎
顎ベースのアニメーションは、Blendshape/Viseme supportのためNeosではあまり一般的ではありません。それでも顎の骨を使いたい場合は、ボーンに"Jaw"という名前を付けることを推奨します。
Visemes(口形素)
Visemesは、モデルのリグとは関係ないので、別の場所で扱っています。
追記: Visemeについては、vrcでセットアップされるものと同様のものが入っていれば自動的にセットアップされます。名称基準でセットアップされます。 この関係で、VRoidなどのアバターの場合、RRを誤認識することがあります。VRoidのアバターの場合はセットアップ後一度Visemeについて確認してみることをお勧めします。
総まとめ
ここでは、例のリグの概要を写真でご紹介します。より詳細なメモは上記を参照してください:
リグのサンプル
Blenderのリグのサンプルはこちらです: Google Driveからダウンロード.
対応しているツール
- Mixamoのリグはちゃんと機能します
- Mixamoで生成されたリグは、何も変更せずにうまく機能します。
- Ready Player Meで生成されたリグは、何も変更せずにうまく機能します。
- ただし、Ready Player Me outfitsにはいくつかの問題点があります。