diff --git a/docs/api/component/index.mdx b/docs/api/component/index.mdx new file mode 100644 index 000000000..10c2a9cca --- /dev/null +++ b/docs/api/component/index.mdx @@ -0,0 +1,13 @@ +import DocCardList from "@theme/DocCardList"; + +# Component + +runtime component 関連について。 + +| | runtime only | component | +| --------- | ------------------- | ---------------------------------------------------------- | +| gltf(glb) | RuntimeGltfInstance | (通常の Unity SkinnedMeshRenderer) | +| vrm-0.x | RuntimeGltfInstance | VRMMeta, VRMFirstPerson, VRMLookAtHead, VRMBlendShapeProxy | +| vrm-1.0 | RuntimeGltfInstance | Vrm10Instance | + + diff --git a/docs/api/runtime_resource_management.md b/docs/api/runtime_resource_management.md index f2a7f09dc..61f3cd841 100644 --- a/docs/api/runtime_resource_management.md +++ b/docs/api/runtime_resource_management.md @@ -1,11 +1,10 @@ -# Runtime のリソース管理について +# GameObject.Destory で vrm 関連リソースを破棄します -Runtime Import で `Texture`, `Material`, `Mesh` などのリソースを Root の `GameObject.OnDestroy` -と同時に `UnityEngine.Object.Destroy` したい。 +:::tip RuntimeGltfInstance は runtime 専用 +Editor import(Prefab や ScriptedImporter)では Attach されません。 +::: -## RuntimeGltfInstance - -`RuntimeGltfInstance.OnDestroy` で破棄を実行するようにした。 +`RuntimeGltfInstance.OnDestroy` で関連リソースを破棄します。 ``` ImporterContext @@ -24,30 +23,3 @@ RuntimeGltfInstance [Own]List [Own]List ``` - -> VRM-0.X では `RuntimeGltfInstance` にリソースを委譲している。 - -## Vrm10Instance - -``` -Vrm10Importer - [Own]HumanoidAvatar - [Own]Vrm10Object - [Own]List - -👇 Vrm10Importer.LoadAsync - -RuntimeGltfInstance - [Own]HumanoidAvatar - [Own]VrmObject - [Own]List -``` - -### FirstPerson - -``` -👇 Vrm10Instance.FirstPerson.SetupAsync - -RuntimeGltfInstance - [Own]List.Add(headless) -``` diff --git a/docs/release/112/v0.121.0.md b/docs/release/112/v0.121.0.md index 8b0666c08..e6a0d01f3 100644 --- a/docs/release/112/v0.121.0.md +++ b/docs/release/112/v0.121.0.md @@ -6,17 +6,21 @@ https://github.com/vrm-c/UniVRM/milestone/84 https://github.com/vrm-c/UniVRM/issues/2248 ::: -:::note TODO Ability to freeze pose with GLTF export +:::info Ability to freeze pose with GLTF export - https://github.com/vrm-c/UniVRM/issues/2041 - ::: -:::note TODO ボーン変形を持たない SkinnedMeshRenderer を VRM1.0 でエクスポートするとローカル座標が反映されない +::: + +:::info ボーン変形を持たない SkinnedMeshRenderer を VRM1.0 でエクスポートするとローカル座標が反映されない - https://github.com/vrm-c/UniVRM/issues/2119 - ::: +- [SkinnedMeshRenderer.rootBone](/univrm/error/skinnedmeshrenderer_rootbone/) + +::: :::note TODO - https://github.com/vrm-c/UniVRM/issues/2169 - ::: + +::: diff --git a/docs/univrm/error/skinnedmeshrenderer_rootbone.md b/docs/univrm/error/skinnedmeshrenderer_rootbone.md new file mode 100644 index 000000000..ac76d7c52 --- /dev/null +++ b/docs/univrm/error/skinnedmeshrenderer_rootbone.md @@ -0,0 +1,53 @@ +# SkinnedMeshRenderer.rootBone + +2 つの機能があるようで、可視判定 BoundingBox の中心制御と boneWeight が無いときの transform に影響します。 +たぶん、3 種類の挙動があります。 + +| bone weight | rootBone | | +| ----------- | -------- | ---------------------------------------- | +| | | SkinnedMeshRenderer.transform の上に乗る | +| ✅ | | bone weight に従う | +| | ✅ | rootBone の上に乗る | +| ✅ | ✅ | bone weight に従う | + +## UniVRM の SkinnedMeshRenderer.root は正しく読み書きできません + +:::danger UniGLTF では、SkinnedMeshRenderer.rootBone をサポートしません +glTF に対応する項目が無くて、正しく読み書きできないためです。 +::: + +:::warning glTF の skin.skeleton は似て非なる別の機能です +https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#_skin_skeleton +::: + +## 問題が起きやすい例 + +- 頭に BoneWeight を付与していない +- 頭に BlendShape がある +- SkinnedMeshRenderer が 頭に attach されている => 無問題 +- SkinnedMeshRenderer が root 付近に atttach されていて、rootBone に頭が指定されてい => 該当 + +## 対策 + +### DCC での対策 + +- 頭に BoneWeight を付与してください + +### UniVRM での対策 + +**bake** してください。 + +- vrm-0.x は正規化時に解決されます。 +- glTF は、exportOption `freezeMesh` を有効にしてください( `from 0.121` ) +- vrm-1.0 は、exportOption `freezeMesh` を有効にしてください( `from 0.121` ) + +:::info export と別に MeshUtility の Mesh 統合で同じ機能を使うことができます +::: + +## 参考 + +- [skin.skeleton と SkinnedMeshRenderer.RootBone 違う機能なのでは? · Issue #730 · vrm-c/UniVRM · GitHub](https://github.com/vrm-c/UniVRM/issues/730) + +- [SkinnedMeshRenderer.rootBone の boneWeight==0 の頂点を動かす機能を打ち消す · Issue #1675 · vrm-c/UniVRM · GitHub](https://github.com/vrm-c/UniVRM/issues/1675) + +- [ボーン変形を持たないSkinnedMeshRendererをVRM1.0でエクスポートするとローカル座標が反映されない · Issue #2119 · vrm-c/UniVRM · GitHub](https://github.com/vrm-c/UniVRM/issues/2119) diff --git a/sidebars.ts b/sidebars.ts index a48b5d996..027018f34 100644 --- a/sidebars.ts +++ b/sidebars.ts @@ -70,6 +70,7 @@ const sidebars: SidebarsConfig = { "univrm/error/multiple_scripted_importers", "univrm/error/could_not_include", "univrm/error/null_reference_exeption", + "univrm/error/skinnedmeshrenderer_rootbone", // "univrm/error/report_error", ], @@ -292,6 +293,7 @@ const sidebars: SidebarsConfig = { link: { type: "doc", id: "api/runtime-import/index" }, items: [ "api/runtime-import/gltfdata", + "api/0_95_dispose", "api/runtime-import/RuntimeGltfInstance", "api/runtime-import/import_glb", "api/runtime-import/import_vrm0", @@ -364,14 +366,20 @@ const sidebars: SidebarsConfig = { { type: "doc", id: "api/vrm1_controlrig" }, ], }, + { + type: "category", + label: "Component", + link: { type: "doc", id: "api/component/index" }, + items: [ + { type: "doc", id: "api/runtime_resource_management" }, + ], + }, { type: "category", label: "Other", items: [ { type: "doc", id: "api/api_update" }, { type: "doc", id: "api/0_36_update" }, - { type: "doc", id: "api/runtime_resource_management" }, - { type: "doc", id: "api/0_95_dispose" }, { type: "doc", id: "api/0_95_highlevel" }, { type: "doc", id: "api/how_to_impl_extension" }, { type: "doc", id: "api/coordinate" },