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); }