diff --git a/docs/api/scripted_importer.md b/docs/api/editor-import/scripted_importer.md
similarity index 100%
rename from docs/api/scripted_importer.md
rename to docs/api/editor-import/scripted_importer.md
diff --git a/docs/api/first_person.mdx b/docs/api/first_person.mdx
deleted file mode 100644
index 86208a5c4..000000000
--- a/docs/api/first_person.mdx
+++ /dev/null
@@ -1,23 +0,0 @@
-# VRアプリケーションの FirstPerson 設定による Renderer の可視制御
-
-* `isSelf==true` 自分のアバター
-* `isSelf==false` 自分以外のアバター
-* FP Camera: HMDと連動するカメラ
-* TP Camera: それ以外のすべてのカメラ
-
-| isSelf | FirstPerson設定 | FP Camera | TP Camera | レイヤーによる可視制御例 |
-|--------|-----------------|-----------|-----------|-----------------------------------------------|
-| true | FirstPersonOnly | ✅ | ❌ | FIRSTPERSON |
-| true | ThirdPersonOnly | ❌ | ✅ | THIRDPERSON |
-| true | Both | ✅ | ✅ | default |
-| true | Auto | - | - | Both と ThirdPersonOnly に分割する |
-| false | FirstPersonOnly | ❌ | ❌ | 完全に描画されない。Rendererの描画を止める |
-| false | ThirdPersonOnly | ✅ | ✅ | default |
-| false | Both | ✅ | ✅ | default |
-| false | Auto | ✅ | ✅ | default。メッシュ分割など特別な処理は不要 |
-
-
-import DocCardList from '@theme/DocCardList';
-
-
-
diff --git a/docs/api/check_firstperson.jpg b/docs/api/firstperson/check_firstperson.jpg
similarity index 100%
rename from docs/api/check_firstperson.jpg
rename to docs/api/firstperson/check_firstperson.jpg
diff --git a/docs/api/check_thirdperson.jpg b/docs/api/firstperson/check_thirdperson.jpg
similarity index 100%
rename from docs/api/check_thirdperson.jpg
rename to docs/api/firstperson/check_thirdperson.jpg
diff --git a/docs/api/firstperson/first_person.md b/docs/api/firstperson/first_person.md
new file mode 100644
index 000000000..dae093826
--- /dev/null
+++ b/docs/api/firstperson/first_person.md
@@ -0,0 +1,17 @@
+# VRアプリケーションの FirstPerson 設定による Renderer の可視制御
+
+- `isSelf==true` 自分のアバター
+- `isSelf==false` 自分以外のアバター
+- FP Camera: HMDと連動するカメラ
+- TP Camera: それ以外のすべてのカメラ
+
+| isSelf | FirstPerson設定 | FP Camera | TP Camera | レイヤーによる可視制御例 |
+| ------ | --------------- | --------- | --------- | ------------------------------------------ |
+| true | FirstPersonOnly | ✅ | ❌ | FIRSTPERSON |
+| true | ThirdPersonOnly | ❌ | ✅ | THIRDPERSON |
+| true | Both | ✅ | ✅ | default |
+| true | Auto | - | - | Both と ThirdPersonOnly に分割する |
+| false | FirstPersonOnly | ❌ | ❌ | 完全に描画されない。Rendererの描画を止める |
+| false | ThirdPersonOnly | ✅ | ✅ | default |
+| false | Both | ✅ | ✅ | default |
+| false | Auto | ✅ | ✅ | default。メッシュ分割など特別な処理は不要 |
diff --git a/docs/api/firstperson.md b/docs/api/firstperson/firstperson.md
similarity index 96%
rename from docs/api/firstperson.md
rename to docs/api/firstperson/firstperson.md
index d5b66aa85..99a472733 100644
--- a/docs/api/firstperson.md
+++ b/docs/api/firstperson/firstperson.md
@@ -1,6 +1,6 @@
# `vrm-0.x` VRMFirstPersonの使い方
-[FirstPerson と Renderer の可視制御 ](/api/first_person)
+[FirstPerson と Renderer の可視制御 ](/api/firstperson/first_person)
実行時に**VRMFirstPerson.Setup**を呼び出すことで、FirstPerson設定に応じた Renderer の可視制御を行うことができます。
明示的に外部から呼び出してください。
diff --git a/docs/api/tags_layers.jpg b/docs/api/firstperson/tags_layers.jpg
similarity index 100%
rename from docs/api/tags_layers.jpg
rename to docs/api/firstperson/tags_layers.jpg
diff --git a/docs/api/vrm1_firstperson.md b/docs/api/firstperson/vrm1_firstperson.md
similarity index 97%
rename from docs/api/vrm1_firstperson.md
rename to docs/api/firstperson/vrm1_firstperson.md
index 0300ec2be..572a3ad7f 100644
--- a/docs/api/vrm1_firstperson.md
+++ b/docs/api/firstperson/vrm1_firstperson.md
@@ -1,6 +1,6 @@
# `vrm-1.0` FirstPerson
-[FirstPerson と Renderer の可視制御 ](/api/first_person)
+[FirstPerson と Renderer の可視制御 ](/api/firstperson/first_person)
:::warning VR 用の機能です
diff --git a/docs/api/0_36_update.md b/docs/api/gltf/0_36_update.md
similarity index 100%
rename from docs/api/0_36_update.md
rename to docs/api/gltf/0_36_update.md
diff --git a/docs/api/format.md b/docs/api/gltf/format.md
similarity index 100%
rename from docs/api/format.md
rename to docs/api/gltf/format.md
diff --git a/docs/api/how_to_impl_extension.md b/docs/api/gltf/how_to_impl_extension.md
similarity index 100%
rename from docs/api/how_to_impl_extension.md
rename to docs/api/gltf/how_to_impl_extension.md
diff --git a/docs/api/ControlRig.png b/docs/api/humanoid/ControlRig.png
similarity index 100%
rename from docs/api/ControlRig.png
rename to docs/api/humanoid/ControlRig.png
diff --git a/docs/api/humanoid/humanoid_animation.md b/docs/api/humanoid/humanoid_animation.md
index 7cd366f75..29048cdd2 100644
--- a/docs/api/humanoid/humanoid_animation.md
+++ b/docs/api/humanoid/humanoid_animation.md
@@ -46,9 +46,9 @@ BVH の初期姿勢は特に決まっていません。
### vrm-1.0 ControlRig で変換コピーする
-![img](../ControlRig.png)
+![img](./ControlRig.png)
-[ControlRig](/api/vrm1_controlrig)
+[ControlRig](/api/humanoid/vrm1_controlrig)
:::tip 正規化さていないスケルトン/モーションを変換できます。
diff --git a/docs/api/vrm1_controlrig.md b/docs/api/humanoid/vrm1_controlrig.md
similarity index 100%
rename from docs/api/vrm1_controlrig.md
rename to docs/api/humanoid/vrm1_controlrig.md
diff --git a/docs/api/runtime_resource_management.md b/docs/api/index.md
similarity index 100%
rename from docs/api/runtime_resource_management.md
rename to docs/api/index.md
diff --git a/docs/api/index.mdx b/docs/api/index.mdx
deleted file mode 100644
index 3a69c67c9..000000000
--- a/docs/api/index.mdx
+++ /dev/null
@@ -1,6 +0,0 @@
-import DocCardList from '@theme/DocCardList';
-
-# UniVRM API
-
-
-
diff --git a/docs/api/0_76_texture_deserializer.md b/docs/api/material/0_76_texture_deserializer.md
similarity index 100%
rename from docs/api/0_76_texture_deserializer.md
rename to docs/api/material/0_76_texture_deserializer.md
diff --git a/docs/api/0_96_1_use_gamma_colorspace.md b/docs/api/material/0_96_1_use_gamma_colorspace.md
similarity index 100%
rename from docs/api/0_96_1_use_gamma_colorspace.md
rename to docs/api/material/0_96_1_use_gamma_colorspace.md
diff --git a/docs/api/texture_manipulation.md b/docs/api/material/texture_manipulation.md
similarity index 100%
rename from docs/api/texture_manipulation.md
rename to docs/api/material/texture_manipulation.md
diff --git a/docs/api/transparent_zwrite.md b/docs/api/material/transparent_zwrite.md
similarity index 100%
rename from docs/api/transparent_zwrite.md
rename to docs/api/material/transparent_zwrite.md
diff --git a/docs/api/runtime-import/UniVRM10_Vrm10.md b/docs/api/runtime-import/UniVRM10_Vrm10.md
index 0d043c817..6cc812619 100644
--- a/docs/api/runtime-import/UniVRM10_Vrm10.md
+++ b/docs/api/runtime-import/UniVRM10_Vrm10.md
@@ -49,7 +49,7 @@ vrm-0.x とアタッチされるコンポーネントが異なります。
unity の humanoid を経由せずに直接操作する場合のユーティリティーです。
-[正規化されていないモデルを操作する](/api/vrm1_controlrig)
+[正規化されていないモデルを操作する](/api/humanoid/vrm1_controlrig)
### showMeshes: Load完了時に表示させるか
@@ -108,7 +108,7 @@ public class ImporterContextSettings
### springboneRuntime: SpringBone の Runtime 選択
-[SpringBone Runtime](/api/springbone/vrm1/runtime)
+[SpringBone Runtime](/api/springbone/vrm1/IVrm10SpringBoneRuntime)
## LoadBytesAsync
diff --git a/docs/api/springbone/center.md b/docs/api/springbone/center.md
deleted file mode 100644
index e69de29bb..000000000
diff --git a/docs/api/springbone/index.md b/docs/api/springbone/index.md
deleted file mode 100644
index 4a0d1560d..000000000
--- a/docs/api/springbone/index.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# SpringBone
-
-## vrm-1.0
-
-実行システムを切り替えられるようになりました。
-
-- `v0.86` **Vrm10FastSpringboneRuntime(default)**: Unity job system で実装されています。すべての vrm の spring bone まとめて処理するシングルトンです。
-- `v0.127` **Vrm10FastSpringboneRuntimeStandalone**: Unity job system で実装されています。モデル毎に個別に実行します。
-
-## vrm-0.x
-
-実行システムを切り替えられるようになりました。
-
-- **Vrm0XSpringBoneDefaultRuntime(default)**: 通常の MonoBehaviour です。
-- `v0.85` **Vrm0XFastSpringboneRuntime**: Unity job system で実装されています。すべての vrm の spring bone まとめて処理するシングルトンです。
-
-これらの実装は importer の引数で切り替え可能です。`from v0.127.0`
-
diff --git a/docs/api/springbone/note.md b/docs/api/springbone/note.md
deleted file mode 100644
index c5526900f..000000000
--- a/docs/api/springbone/note.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# note
-
-:::info job版のロジックは vrm-0.x と vrm-1.0 で共通化されました
-
-- https://github.com/vrm-c/UniVRM/issues/2422
-
-:::
-
-:::note job は房並列です
-
-joint 毎ではなく房(根元 から末端まで)単位の並列です。
-根元から順番に長さで拘束して位置を確定させる都合で親の位置・方向が先に決まる必要があるためです。
-
-- 伸縮せずに見た目がきれい
-- 並列化できない
-
-というトレードオフがあります。
-
-:::
-
-## Spring の状態変化
-
-| input | 変化 | 備考 |
-| ----------------------------------------------- | -------- | ------------------------------- |
-| 初期姿勢 | 不変 | bone local. スケール抜き? |
-| 構成(joint アタッチ情報) | 不変 | editor では変わりうる。再初期化 |
-| runtime(center, scale, exernal...etc) | フレーム | center, scale で難 |
-| joint設定(stiffness, dragForce, gravity... etc) | フレーム | |
-| collider(radius) | フレーム | |
-
-- `0.x` [VRM 0 系で FastSpringBone を使用した際に VRM の最親のゲームオブジェクトに FastSpringBone が追従しない · Issue #2047 · vrm-c/UniVRM · GitHub](https://github.com/vrm-c/UniVRM/issues/2047)
diff --git a/docs/api/springbone/scaling.md b/docs/api/springbone/scaling.md
deleted file mode 100644
index 3d172cefb..000000000
--- a/docs/api/springbone/scaling.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# 拡大縮小の対応状況
-
-:::warning スケーリングは uniform(xyz が同じ) のみの対応です
-:::
-
-- `0.x` [SpringBone does not work correctly if you change the model size, for example scale (8,8,8). · Issue #2242 · vrm-c/UniVRM · GitHub](https://github.com/vrm-c/UniVRM/issues/2242)
-- `0.x` [Scale が VRM Spring Bone に正しく適用されません · Issue #922 · vrm-c/UniVRM · GitHub](https://github.com/vrm-c/UniVRM/issues/922)
-- [SpringBone does not work correctly if you change the model size, for example scale (8,8,8). · Issue #2242 · vrm-c/UniVRM · GitHub](https://github.com/vrm-c/UniVRM/issues/2242)
-
diff --git a/docs/api/springbone/startup.md b/docs/api/springbone/startup.md
deleted file mode 100644
index d163674e1..000000000
--- a/docs/api/springbone/startup.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# 初期化問題
-
-## 原点前向き以外で初期化
-
-- [Imported VRM hair and clothes goes to the left no matter the position · Issue #2440 · vrm-c/UniVRM · GitHub](https://github.com/vrm-c/UniVRM/issues/2440)
-
-## T-Pose 以外で初期化
-
-`SpringBone` の初期化は T-Pose が必須です。
-対策として `T-Pose` である間に SpringBone の初期化を完了してください。
-
-- `1.0` `~v0.126` 最初 SpringBone が動作する直前で初期化をしていました。`load` => 姿勢変更 => springbone初期化 という順番になったときにspringbone初期化で問題が発生していました。
-- `1.0` `v0.127` Import 関数の中で SpringBone の初期化をするように変更しました。`runtime` load では初期姿勢に配慮する必要はありません。
-
-- [After using the “FastSpringBoneReplacer.ReplaceAsync” interface, scaling the VRM model results in incorrect behavior. · Issue #2158 · vrm-c/UniVRM · GitHub](https://github.com/vrm-c/UniVRM/issues/2158)
-- [\[0.77\]AsyncでランタイムロードしたモデルのScaleを1以上にするとSpringBoneの動作が怪しくなる · Issue #1115 · vrm-c/UniVRM · GitHub](https://github.com/vrm-c/UniVRM/issues/1115)
diff --git a/docs/api/springbone/update.md b/docs/api/springbone/update.md
deleted file mode 100644
index 6c05fc8a6..000000000
--- a/docs/api/springbone/update.md
+++ /dev/null
@@ -1,24 +0,0 @@
-# update のカスタマイズ
-
-## `v0.106` SpringBone の手動更新
-
-from [v0.106.0](/release/100/v0.106.0)
-
-[\#1866](https://github.com/vrm-c/UniVRM/pull/1886)
-
-- VRMSpringBone.SpringBoneUpdateType.Manual を追加
-- VRMSpringBone.ManualUpdate を追加
-
-以下のように呼び出すことができます。
-
-```csharp
-VRMSpringBone spring;
-
-// setup
-spring.m_updateType = VRMSpringBone.SpringBoneUpdateType.Manual;
-
-// each frame
-spring.ManualUpdate(time.deltaTime);
-```
-
-- spring.ManualUpdate を使う前に spring.m_updateType を `Manual` に設定する必要があります。
diff --git a/docs/api/springbone/vrm0/runtime.md b/docs/api/springbone/vrm0/VRM_IVrm0XSpringBoneRuntime.md
similarity index 92%
rename from docs/api/springbone/vrm0/runtime.md
rename to docs/api/springbone/vrm0/VRM_IVrm0XSpringBoneRuntime.md
index 7a33782f8..afb206483 100644
--- a/docs/api/springbone/vrm0/runtime.md
+++ b/docs/api/springbone/vrm0/VRM_IVrm0XSpringBoneRuntime.md
@@ -1,4 +1,11 @@
-# SpringBone Runtime
+# VRM.IVrm0XSpringBoneRuntime
+
+実行システムを切り替えられるようになりました。
+
+- **Vrm0XSpringBoneDefaultRuntime(default)**: 通常の MonoBehaviour です。
+- `v0.85` **Vrm0XFastSpringboneRuntime**: Unity job system で実装されています。すべての vrm の spring bone まとめて処理するシングルトンです。
+
+これらの実装は importer の引数で切り替え可能です。`from v0.127.0`
[SimpleViewer](https://github.com/vrm-c/UniVRM/blob/master/Assets/VRM_Samples/SimpleViewer/ViewerUI.cs)を参照してください。
diff --git a/docs/api/springbone/vrm0/VRM_VRMSpringBone.md b/docs/api/springbone/vrm0/VRM_VRMSpringBone.md
new file mode 100644
index 000000000..6fbdbbb8e
--- /dev/null
+++ b/docs/api/springbone/vrm0/VRM_VRMSpringBone.md
@@ -0,0 +1,105 @@
+# VRM.VRMSpringBone
+
+## インタフェース抜粋
+
+```cs
+public sealed class VRMSpringBone : MonoBehaviour
+{
+ [SerializeField] public string m_comment;
+ [SerializeField] private Color m_gizmoColor = Color.yellow;
+ [SerializeField] public float m_stiffnessForce = 1.0f;
+ [SerializeField] public float m_gravityPower;
+ [SerializeField] public Vector3 m_gravityDir = new Vector3(0, -1.0f, 0);
+ [SerializeField][Range(0, 1)] public float m_dragForce = 0.4f;
+ [SerializeField] public Transform m_center;
+ [SerializeField] public List RootBones = new List();
+ [SerializeField] public float m_hitRadius = 0.02f;
+ [SerializeField] public VRMSpringBoneColliderGroup[] ColliderGroups;
+
+ ///
+ /// - アプリケーション開発者用のパラメタである
+ /// - Runtime 制御用のパラメタである
+ /// - シリアライズ対象でない
+ /// - true にすることで、モデルをスケーリングしたときも SpringBone の見た目上の動き(角速度)がなるべく保たれるようになる
+ /// - Non-Uniform scaling 下における動作は保証しない
+ ///
+ public bool UseRuntimeScalingSupport { get; set; }
+
+ ///
+ /// VRM-1.0 からのバックポート。
+ /// - Runtime 制御用のパラメタである
+ /// - シリアライズ対象でない
+ /// - World座標系
+ ///
+ public Vector3 ExternalForce { get; set; }
+
+ public enum SpringBoneUpdateType
+ {
+ LateUpdate,
+ FixedUpdate,
+ Manual,
+ }
+ [SerializeField] public SpringBoneUpdateType m_updateType = SpringBoneUpdateType.LateUpdate;
+
+ [ContextMenu("Reset bones")]
+ public void Setup(bool force = false)
+ {
+ if (RootBones != null)
+ {
+ m_system.Setup(Scene, force);
+ }
+ }
+
+ public void ReinitializeRotation()
+ {
+ m_system.ReinitializeRotation(Scene);
+ }
+
+ public void SetModelLevel(UniGLTF.SpringBoneJobs.Blittables.BlittableModelLevel modelSettings)
+ {
+ UseRuntimeScalingSupport = modelSettings.SupportsScalingAtRuntime;
+ ExternalForce = modelSettings.ExternalForce;
+ }
+
+ public void ManualUpdate(float deltaTime)
+ {
+ if (m_updateType != SpringBoneUpdateType.Manual)
+ {
+ throw new System.ArgumentException("require SpringBoneUpdateType.Manual");
+ }
+ m_system.UpdateProcess(deltaTime, Scene, Settings);
+ }
+}
+```
+
+## Update の手動呼び出し
+
+from [v0.106.0](/release/100/v0.106.0)
+
+[\#1866](https://github.com/vrm-c/UniVRM/pull/1886)
+
+- VRMSpringBone.SpringBoneUpdateType.Manual を追加
+- VRMSpringBone.ManualUpdate を追加
+
+- spring.ManualUpdate を使う前に spring.m_updateType を `Manual` に設定します。
+
+以下のように呼び出すことができます。
+
+```csharp
+VRMSpringBone spring;
+
+// setup
+spring.m_updateType = VRMSpringBone.SpringBoneUpdateType.Manual;
+
+// each frame
+spring.ManualUpdate(time.deltaTime);
+```
+
+## 拡大縮小の対応状況
+
+:::warning スケーリングは uniform(xyz が同じ) のみの対応です
+:::
+
+- `0.x` [SpringBone does not work correctly if you change the model size, for example scale (8,8,8). · Issue #2242 · vrm-c/UniVRM · GitHub](https://github.com/vrm-c/UniVRM/issues/2242)
+- `0.x` [Scale が VRM Spring Bone に正しく適用されません · Issue #922 · vrm-c/UniVRM · GitHub](https://github.com/vrm-c/UniVRM/issues/922)
+- [SpringBone does not work correctly if you change the model size, for example scale (8,8,8). · Issue #2242 · vrm-c/UniVRM · GitHub](https://github.com/vrm-c/UniVRM/issues/2242)
diff --git a/docs/api/springbone/vrm0/index.md b/docs/api/springbone/vrm0/index.md
index f438c5247..dcf7d8712 100644
--- a/docs/api/springbone/vrm0/index.md
+++ b/docs/api/springbone/vrm0/index.md
@@ -3,4 +3,3 @@
:::note オリジナル
blog `Rocket Jump` の `Unityで揺れものを揺らす` という記事(2014年)に基いています。
:::
-
diff --git a/docs/api/springbone/jobs.md b/docs/api/springbone/vrm0/jobs.md
similarity index 52%
rename from docs/api/springbone/jobs.md
rename to docs/api/springbone/vrm0/jobs.md
index 47c2c08e0..a427a2a81 100644
--- a/docs/api/springbone/jobs.md
+++ b/docs/api/springbone/vrm0/jobs.md
@@ -1,5 +1,24 @@
# FastSpringBone(Unity job)について
+:::info job版のロジックは vrm-0.x と vrm-1.0 で共通化されました
+
+- https://github.com/vrm-c/UniVRM/issues/2422
+
+:::
+
+:::note job は房並列です
+
+joint 毎ではなく房(根元 から末端まで)単位の並列です。
+根元から順番に長さで拘束して位置を確定させる都合で親の位置・方向が先に決まる必要があるためです。
+
+- 伸縮せずに見た目がきれい
+- 並列化できない
+
+というトレードオフがあります。
+
+:::
+
+
`from v0.85`
## 概要
diff --git a/docs/api/springbone/vrm1/FastSpringBoneService.md b/docs/api/springbone/vrm1/FastSpringBoneService.md
deleted file mode 100644
index e8858019b..000000000
--- a/docs/api/springbone/vrm1/FastSpringBoneService.md
+++ /dev/null
@@ -1,57 +0,0 @@
-# FastSpringBoneService
-
-## FastSpringBoneService.Instance
-
-- シングルトンサービス
-
-:::info
-`FastSpringBoneService.LateUpdate`
-
-```csharp
-[DefaultExecutionOrder(11010)]
-```
-
-:::
-
-:::tip
-
-Vrm10Instance より後ろです。
-
-```csharp
-[DefaultExecutionOrder(11000)]
-public class Vrm10Instance : MonoBehaviour
-```
-
-:::
-
-## Update
-
-### `v0.106.0` 手動更新
-
-- FastSpringBoneService.UpdateTypes.Manual を追加
-- FastSpringBoneService.ManualUpdate を追加
-
-```csharp
-// 管理している VRM-1.0 がすべて入っている
-List instances;
-
-// setup
-foreach(var instance in instances)
-{
- // SpringBone を手動にするために、
- // VRM-1.0 本体も手動に変更している。
- // VRM本体 => SpringBone という処理順を守る。
- instance.UpdateType = UpdateTypes.None;
-}
-FastSpringBoneService.Instance.UpdateType = FastSpringBoneService.UpdateTypes.Manual;
-
-// each frame
-foreach(var instance in instances)
-{
- // SpringBone よりも先に VRM10Instance を更新
- instance.Runtime.Process();
-}
-// 最後に FastSpringBoneService を更新
-// すべての VRM-1.0 の SpringBone がまとめて処理されます。
-FastSpringBoneService.Instance.ManualUpdate(time.deltaTime);
-```
diff --git a/docs/api/springbone/vrm1/runtime.md b/docs/api/springbone/vrm1/IVrm10SpringBoneRuntime.md
similarity index 60%
rename from docs/api/springbone/vrm1/runtime.md
rename to docs/api/springbone/vrm1/IVrm10SpringBoneRuntime.md
index 6c397c5df..bb54ede77 100644
--- a/docs/api/springbone/vrm1/runtime.md
+++ b/docs/api/springbone/vrm1/IVrm10SpringBoneRuntime.md
@@ -1,120 +1,53 @@
-# SpringBone Runtime
+# IVrm10SpringBoneRuntime
-[VRM10Viewer](https://github.com/vrm-c/UniVRM/blob/master/Assets/VRM10_Samples/VRM10Viewer/VRM10ViewerUI.cs)を参照してください。
+`v0.127`
-## `v0.127` import 時の Springbone Runtime 切り替えについて
+runtime に以下のようにアクセスできます。
```cs
-clss Vrm10Importer {
- public Vrm10Importer(
- Vrm10Data vrm,
- IReadOnlyDictionary externalObjectMap = null,
- ITextureDeserializer textureDeserializer = null,
- IMaterialDescriptorGenerator materialGenerator = null,
- bool useControlRig = false,
- ImporterContextSettings settings = null,
- IVrm10SpringBoneRuntime springboneRuntime = null // 👈
- )
-}
+Vrm10Instance vrm;
+IVrm10SpringBoneRuntime springbone = vrm.Runtime.SpringBobe;
```
-この引き数により SpringBone の Runtime をカスタマイズできます。
-
-- `new Vrm10FastSpringboneRuntime` (default)
-- `new Vrm10FastSpringboneRuntimeStandalone`
-
-を渡してください。
-`null` の場合は `Vrm10FastSpringboneRuntime` になります。
-
-## `v0.127` scene 配置時の Springbone Runtime 切り替えについて
-
-- `Vrm10FastSpringboneRuntimeProvider`
-- `Vrm10FastSpringboneRuntimeStandaloneProvider`
-
-をアッタチしてください。
-
-### `v0.128` editor の scene play 時は Standalone 版がデフォルトになります
-
-- `Vrm10FastSpringboneRuntimeStandalone`
-
-になります。
-
-## Vrm10FastSpringboneRuntime
-
-vrm-1.0 default の SpringBone Runtime です。
-
-### 特徴
-
-- Unity job system で実装されている
-- すべての Vrm の SpringBone を Singleton でまとめて処理する
- - 非play時に動作できません。DontDestroyOnLoad
-
-### FastSpringBoneService(シングルトン)について
-
-FastSpringBone が実行されると、`FastSpringBone Service` GameObject が `DontDestroyOnLoad` で生成されます。
+:::info SpringBone 関連の操作をまとめました
```cs
-[DefaultExecutionOrder(11010)]
-public sealed class FastSpringBoneService : MonoBehaviour
-{
- public static FastSpringBoneService Instance
- {
- get {
- DontDestroyOnLoad(gameObject);
- }
- }
-
- private void LateUpdate()
-}
+vrm.Runtime.ReconstructSpringBone();
+// 👇
+vrm.Runtime.SpringBone.ReconstructSpringBone();
```
-これは全 VRM の FastSpringBone を集め、バッファの構築や FastSpringBone の実行タイミングの制御などを行う GameObject です。
-
-:::note
-明示的に破棄を行いたい場合は `FastSpringBoneService.Free` を呼んでください。
:::
-## Vrm10FastSpringboneRuntimeStandalone
-
-Vrm10FastSpringboneRuntime と同じ job を使用します。シングルトンでは無いバージョンです。
-
-- [UniVRM タイムライン…プレイモードとエデットモードで挙動が異なる · Issue #1971 · vrm-c/UniVRM · GitHub](https://github.com/vrm-c/UniVRM/issues/1971)
-- [\[1.0\] FastSpringBone Service does not disposed when I change the code while playing in editor · Issue #1567 · vrm-c/UniVRM · GitHub](https://github.com/vrm-c/UniVRM/issues/1567)
-
-### 特徴
-
-- Unity job system で実装されている
-- vrm-1.0 の update 処理の 6 番目に実行される
+## interface 抜粋
```cs
-public class Vrm10Runtime : IDisposable
+public interface IVrm10SpringBoneRuntime : IDisposable
{
- public void Process()
- {
- // 1. Update From VrmAnimation
- // 2. Control Rig
- // 3. Constraints
- // 4. Gaze control
- // 5. Apply Expression
- // 6. SpringBone
- SpringBone.Process(); // 👈
- }
+ ///
+ /// SpringBone の構成変更を反映して再構築する。
+ ///
+ public bool ReconstructSpringBone();
+
+ ///
+ /// initialTransform 状態に復帰。verlet の速度 も 0 に。
+ ///
+ public void RestoreInitialTransform();
+
+ ///
+ /// Joint レベルの可変情報をセットする
+ /// stiffness,
+ ///
+ public void SetJointLevel(Transform joint, BlittableJointMutable jointSettings);
+
+ ///
+ /// Model レベルの可変情報をセットする
+ /// 風, pause, scaling
+ ///
+ public void SetModelLevel(Transform modelRoot, BlittableModelLevel modelSettings);
}
```
-## Runtime の操作
-
-`v0.128.0`
-
-### Runtime を取得する
-
-Vrm10Instance から取得してください。
-
-```cs
-Vrm10Instance vrm;
-IVrm10SpringBoneRuntime springboneRuntime = vrm.Runtime.Springbone;
-```
-
### 再構築する
SpringBone の構成が変わったり、T-Poseが変わった場合に最初から再構築します。
@@ -216,3 +149,142 @@ vrm.Runtime.Springbone.SetModelLevel(joint.transform, joint.Blittable);
```
- [VRM1.0でエディターの再生中にSpringBobeの調整ができない · Issue #2410 · vrm-c/UniVRM · GitHub](https://github.com/vrm-c/UniVRM/issues/2410)
+
+- `Vrm10FastSpringboneRuntimeStandalone`
+
+になります。
+
+- `Vrm10FastSpringboneRuntimeProvider`
+- `Vrm10FastSpringboneRuntimeStandaloneProvider`
+
+をアッタチしてください。
+
+## Vrm10FastSpringboneRuntime
+
+vrm-1.0 デフォルトの SpringBone ランタイムです。
+
+- Unity C# Job System
+- シングルトンでシーンすべての vrm-1.0 をバッチングする
+
+という特徴があります。
+
+### RuntimeImport
+
+デフォルトで Vrm10FastSpringboneRuntime になります。
+特に作業は必要ありません。
+
+### シーン配置
+
+シーンに配置された `vrm-1.0` のルートに `Vrm10FastSpringboneRuntimeProvider` をアタッチしてください。
+
+### FastSpringBoneService(singleton)
+
+```cs
+[DefaultExecutionOrder(11010)]
+public sealed class FastSpringBoneService : MonoBehaviour
+{
+ public static FastSpringBoneService Instance
+ {
+ get {
+ DontDestroyOnLoad(gameObject);
+ }
+ }
+
+ private void LateUpdate()
+}
+```
+
+:::tip
+
+Vrm10Instance より後ろです。
+
+```csharp
+[DefaultExecutionOrder(11000)]
+public class Vrm10Instance : MonoBehaviour
+```
+
+:::
+
+:::warning 非play時に動作できません
+
+DontDestroyOnLoad
+
+:::
+
+:::note
+明示的に破棄を行いたい場合は `FastSpringBoneService.Free` を呼んでください。
+:::
+
+### FastSpringBoneService(manual update)
+
+`v0.106.0`
+
+- FastSpringBoneService.UpdateTypes.Manual を追加
+- FastSpringBoneService.ManualUpdate を追加
+
+```cs
+// 管理している VRM-1.0 がすべて入っている
+List instances;
+
+// setup
+foreach(var instance in instances)
+{
+ // SpringBone を手動にするために、
+ // VRM-1.0 本体も手動に変更している。
+ // VRM本体 => SpringBone という処理順を守る。
+ instance.UpdateType = UpdateTypes.None;
+}
+FastSpringBoneService.Instance.UpdateType = FastSpringBoneService.UpdateTypes.Manual;
+
+// each frame
+foreach(var instance in instances)
+{
+ // SpringBone よりも先に VRM10Instance を更新
+ instance.Runtime.Process();
+}
+// 最後に FastSpringBoneService を更新
+// すべての VRM-1.0 の SpringBone がまとめて処理されます。
+FastSpringBoneService.Instance.ManualUpdate(time.deltaTime);
+```
+
+## Vrm10FastSpringboneRuntimeStandalone
+
+Vrm10FastSpringboneRuntime のシングルトンをやめて Vrm10Instance.LateUpdate から駆動するように 改造した版です。
+EditorPlay など小規模なシーンを想定しています。
+
+- [UniVRM タイムライン…プレイモードとエデットモードで挙動が異なる · Issue #1971 · vrm-c/UniVRM · GitHub](https://github.com/vrm-c/UniVRM/issues/1971)
+- [\[1.0\] FastSpringBone Service does not disposed when I change the code while playing in editor · Issue #1567 · vrm-c/UniVRM · GitHub](https://github.com/vrm-c/UniVRM/issues/1567)
+
+- Unity job system で実装されている
+- Vrm10Runtime.Process 処理の 6 番目に実行される
+
+```cs
+public class Vrm10Runtime : IDisposable
+{
+ public void Process()
+ {
+ // 1. Update From VrmAnimation
+ // 2. Control Rig
+ // 3. Constraints
+ // 4. Gaze control
+ // 5. Apply Expression
+ // 6. SpringBone
+ SpringBone.Process(); // 👈
+ }
+}
+```
+
+### RuntimeImport
+
+`importer` の引数に `Vrm10FastSpringboneRuntimeStandalone` を明示的に渡してください。
+
+### シーン配置
+
+デフォルトで Vrm10FastSpringboneRuntimeStandalone になります。
+特に作業は必要ありません。
+
+:::info editor の scene play 時は Standalone 版がデフォルトになりました
+
+`v0.128`
+
+:::
diff --git a/docs/api/springbone/vrm1/VRMC_springBone_extended_collider.md b/docs/api/springbone/vrm1/VRMC_springBone_extended_collider.md
index 8e20c085b..b7c2e42a3 100644
--- a/docs/api/springbone/vrm1/VRMC_springBone_extended_collider.md
+++ b/docs/api/springbone/vrm1/VRMC_springBone_extended_collider.md
@@ -1,4 +1,6 @@
-# コライダー拡張
+# VRMC_springBone_extended_collider-1.0
+
+`from v0.123.0`
3つのコライダー形状が追加されます。
diff --git a/docs/api/springbone/vrm1/index.md b/docs/api/springbone/vrm1/index.md
index a53273527..134705f05 100644
--- a/docs/api/springbone/vrm1/index.md
+++ b/docs/api/springbone/vrm1/index.md
@@ -1,6 +1,18 @@
-# vrm-1.0 の SpringBone
-
-## 仕様
+# VRMC_springBone-1.0
- https://github.com/vrm-c/vrm-specification/tree/master/specification/VRMC_springBone-1.0
-- https://github.com/vrm-c/vrm-specification/tree/master/specification/VRMC_springBone_extended_collider-1.0 `from v0.123.0`
+
+## 原点前向き以外で初期化
+
+- [Imported VRM hair and clothes goes to the left no matter the position · Issue #2440 · vrm-c/UniVRM · GitHub](https://github.com/vrm-c/UniVRM/issues/2440)
+
+## T-Pose 以外で初期化
+
+`SpringBone` の初期化は T-Pose が必須です。
+対策として `T-Pose` である間に SpringBone の初期化を完了してください。
+
+- `1.0` `~v0.126` 最初 SpringBone が動作する直前で初期化をしていました。`load` => 姿勢変更 => springbone初期化 という順番になったときにspringbone初期化で問題が発生していました。
+- `1.0` `v0.127` Import 関数の中で SpringBone の初期化をするように変更しました。`runtime` load では初期姿勢に配慮する必要はありません。
+
+- [After using the “FastSpringBoneReplacer.ReplaceAsync” interface, scaling the VRM model results in incorrect behavior. · Issue #2158 · vrm-c/UniVRM · GitHub](https://github.com/vrm-c/UniVRM/issues/2158)
+- [\[0.77\]AsyncでランタイムロードしたモデルのScaleを1以上にするとSpringBoneの動作が怪しくなる · Issue #1115 · vrm-c/UniVRM · GitHub](https://github.com/vrm-c/UniVRM/issues/1115)
diff --git a/docs/release/079/v0.88.0.md b/docs/release/079/v0.88.0.md
index 6ea2ed416..ade59f75c 100644
--- a/docs/release/079/v0.88.0.md
+++ b/docs/release/079/v0.88.0.md
@@ -2,7 +2,7 @@
## 過去に TransparentZWrite シェーダーでエクスポートしたファイルをロード時に変換する修正
-* [TransparentZWrite ](/api/transparent_zwrite)
+* [TransparentZWrite ](/api/material/transparent_zwrite)
* [[\#1331](https://github.com/vrm-c/UniVRM/pull/1331)] Fix UnlitTransparentZWrite fallback code.
## buffer.uri に `data:` を使っている glb/gltf に対応
diff --git a/docs/release/100/v0.106.0.md b/docs/release/100/v0.106.0.md
index 80875b89b..2f1d55e8d 100644
--- a/docs/release/100/v0.106.0.md
+++ b/docs/release/100/v0.106.0.md
@@ -20,7 +20,7 @@ Application をビルドするときの問題の修正
* [[\#1886](https://github.com/vrm-c/UniVRM/pull/1886)] [1.0][0.x] SpringBone の手動更新
* [SpringBone manual update](/api/springbone/vrm1)
- * [0_106_spring_manual_update](/api/springbone/update)
+ * [VRM.VRMSpringBone](/api/springbone/vrm0/VRM_VRMSpringBone)
* [[\#1868](https://github.com/vrm-c/UniVRM/pull/1868)] SpringBoneに対して外力を渡すインターフェースを実装する
* [毎フレーム外力を加える](/api/springbone/vrm1)
* [[\#1878](https://github.com/vrm-c/UniVRM/pull/1878)] modGltf 引き数を追加
diff --git a/docs/release/112/v0.126.0.md b/docs/release/112/v0.126.0.md
index a984549f3..e53459362 100644
--- a/docs/release/112/v0.126.0.md
+++ b/docs/release/112/v0.126.0.md
@@ -30,7 +30,7 @@ https://github.com/vrm-c/UniVRM/milestone/91?closed=1
3つある SpringBone の部品を共通化して、
修正を同時に反映できるようにする予定です。
-[SpringBone の実装状況](/api/springbone/scaling)
+[VRM.VRMSpringBone](/api/springbone/vrm0/VRM_VRMSpringBone)
## API
diff --git a/docs/release/112/v0.127.0.md b/docs/release/112/v0.127.0.md
index 464827939..3c076b45e 100644
--- a/docs/release/112/v0.127.0.md
+++ b/docs/release/112/v0.127.0.md
@@ -25,7 +25,3 @@ https://github.com/vrm-c/UniVRM/milestone/92?closed=1
- runtime load 時にモデルの向きの影響を受けなくなります
- scene 配置時は次で修正予定
- [IVrm10SpringBoneRuntime.InitializeAsync by ousttrue · Pull Request #2443 · vrm-c/UniVRM · GitHub](https://github.com/vrm-c/UniVRM/pull/2443)
-
-### API
-
-- [API SpringBone](/api/springbone/)
diff --git a/docs/release/112/v0.127.1.md b/docs/release/112/v0.127.1.md
index cd1412514..927fb41f8 100644
--- a/docs/release/112/v0.127.1.md
+++ b/docs/release/112/v0.127.1.md
@@ -26,5 +26,5 @@ https://github.com/vrm-c/UniVRM/milestone/93?closed=1
### 詳細
-- [vrm-1.0](/api/springbone/vrm1/runtime/)
-- [vrm-0.x](/api/springbone/vrm0/runtime/)
+- [vrm-1.0](/api/springbone/vrm1/IVrm10SpringBoneRuntime)
+- [vrm-0.x](/api/springbone/vrm0/VRM_IVrm0XSpringBoneRuntime/)
diff --git a/docs/vrma/univrm-vrma/retarget.md b/docs/vrma/univrm-vrma/retarget.md
index e0437708e..bf8137ed2 100644
--- a/docs/vrma/univrm-vrma/retarget.md
+++ b/docs/vrma/univrm-vrma/retarget.md
@@ -14,7 +14,7 @@ UniVRM の vrm-1.0 実装には、初期姿勢の変換をサポートする `Co
含まれています。
ランタイムロードでは自動的にセットアップされます。
-[ControlRig 正規化されていないモデルを操作する](/api/vrm1_controlrig/)
+[ControlRig 正規化されていないモデルを操作する](/api/humanoid/vrm1_controlrig/)
:::tip Unity の mecanim humanoid に肩代りしてもらうこともできます
diff --git a/sidebars.ts b/sidebars.ts
index 13931310c..06398ef09 100644
--- a/sidebars.ts
+++ b/sidebars.ts
@@ -337,7 +337,7 @@ const sidebars: SidebarsConfig = {
items: [
'api/editor-import/vrm0x',
'api/editor-import/vrm10',
- { type: "doc", id: "api/scripted_importer" },
+ "api/editor-import/scripted_importer",
]
},
{
@@ -346,32 +346,32 @@ const sidebars: SidebarsConfig = {
items: [
"api/material/urp",
"api/runtime-import/import_basisu",
- { type: "doc", id: "api/0_96_1_use_gamma_colorspace" },
- { type: "doc", id: "api/0_76_texture_deserializer" },
- { type: "doc", id: "api/texture_manipulation" },
- { type: "doc", id: "api/transparent_zwrite" },
- { type: "doc", id: "gltf/emission_glow" },
+ "api/material/0_96_1_use_gamma_colorspace",
+ "api/material/0_76_texture_deserializer",
+ "api/material/texture_manipulation",
+ "api/material/transparent_zwrite",
+ "gltf/emission_glow",
],
},
{
type: "category",
label: "FirstPerson",
- link: { type: "doc", id: "api/first_person" },
- items: ["api/vrm1_firstperson", "api/firstperson"],
+ items: [
+ "api/firstperson/first_person",
+ "api/firstperson/vrm1_firstperson",
+ "api/firstperson/firstperson",],
},
{
type: "category",
label: "SpringBone",
- link: { type: "doc", id: "api/springbone/index" },
items: [
{
type: "category",
label: "vrm-1.0",
link: { type: "doc", id: "api/springbone/vrm1/index" },
items: [
- "api/springbone/vrm1/runtime",
- "api/springbone/vrm1/VRMC_springBone_extended_collider",
- "api/springbone/vrm1/FastSpringBoneService",
+ "api/springbone/vrm1/IVrm10SpringBoneRuntime",
+ { type: "doc", label: "ExtendedCollider", id: "api/springbone/vrm1/VRMC_springBone_extended_collider" },
]
},
{
@@ -379,15 +379,11 @@ const sidebars: SidebarsConfig = {
label: "vrm-0.x",
link: { type: "doc", id: "api/springbone/vrm0/index" },
items: [
- "api/springbone/vrm0/runtime",
+ "api/springbone/vrm0/VRM_VRMSpringBone",
+ "api/springbone/vrm0/VRM_IVrm0XSpringBoneRuntime",
+ "api/springbone/vrm0/jobs",
]
},
- "api/springbone/update",
- "api/springbone/jobs",
- 'api/springbone/center',
- 'api/springbone/scaling',
- 'api/springbone/startup',
- 'api/springbone/note',
],
},
{
@@ -397,7 +393,7 @@ const sidebars: SidebarsConfig = {
items: [
"api/humanoid/humanoid_animation",
"vrma/univrm-vrma/retarget",
- { type: "doc", id: "api/vrm1_controlrig" },
+ "api/humanoid/vrm1_controlrig",
],
},
{
@@ -411,16 +407,15 @@ const sidebars: SidebarsConfig = {
{
type: "category",
label: "glTF",
- link: { type: "doc", id: "gltf/index" },
items: [
- { type: "doc", id: "gltf/glb_import" },
- { type: "doc", id: "gltf/glb_export" },
- { type: "doc", id: "gltf/animation_exporter" },
+ "gltf/glb_import",
+ "gltf/glb_export",
+ "gltf/animation_exporter",
"gltf/root_node",
- { type: "doc", id: "api/0_36_update" },
- { type: "doc", id: "api/format" },
- { type: "doc", id: "api/how_to_impl_extension" },
- { type: "doc", id: "api/coordinate" },
+ "api/gltf/0_36_update",
+ "api/gltf/format",
+ "api/gltf/how_to_impl_extension",
+ "api/coordinate",
],
},
],
diff --git a/src/css/custom.css b/src/css/custom.css
index 6cad3918c..424ae3602 100644
--- a/src/css/custom.css
+++ b/src/css/custom.css
@@ -6,26 +6,20 @@
/* You can override the default Infima variables here. */
:root {
- --ifm-color-primary: #2e8555;
- --ifm-color-primary-dark: #29784c;
- --ifm-color-primary-darker: #277148;
- --ifm-color-primary-darkest: #205d3b;
- --ifm-color-primary-light: #33925d;
- --ifm-color-primary-lighter: #359962;
- --ifm-color-primary-lightest: #3cad6e;
+ --ifm-color-primary: #ee5e20;
+ --ifm-color-primary-dark: #e25011;
+ --ifm-color-primary-darker: #d54c10;
+ --ifm-color-primary-darkest: #b03e0d;
+ --ifm-color-primary-light: #f07039;
+ --ifm-color-primary-lighter: #f17946;
+ --ifm-color-primary-lightest: #f4946b;
+
--ifm-code-font-size: 95%;
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1);
}
/* For readability concerns, you should choose a lighter palette in dark mode. */
[data-theme="dark"] {
- --ifm-color-primary: #25c2a0;
- --ifm-color-primary-dark: #21af90;
- --ifm-color-primary-darker: #1fa588;
- --ifm-color-primary-darkest: #1a8870;
- --ifm-color-primary-light: #29d5b0;
- --ifm-color-primary-lighter: #32d8b4;
- --ifm-color-primary-lightest: #4fddbf;
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3);
}