Skip to content

Commit

Permalink
Merge pull request #377 from ousttrue/add/rootbone
Browse files Browse the repository at this point in the history
rootBone
  • Loading branch information
ousttrue authored Mar 8, 2024
2 parents f06457f + baa07a3 commit b6b2cb7
Show file tree
Hide file tree
Showing 5 changed files with 90 additions and 40 deletions.
13 changes: 13 additions & 0 deletions docs/api/component/index.mdx
Original file line number Diff line number Diff line change
@@ -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 |

<DocCardList />
38 changes: 5 additions & 33 deletions docs/api/runtime_resource_management.md
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -24,30 +23,3 @@ RuntimeGltfInstance
[Own]List<Texture>
[Own]List<Material>
```

> VRM-0.X では `RuntimeGltfInstance` にリソースを委譲している。
## Vrm10Instance

```
Vrm10Importer
[Own]HumanoidAvatar
[Own]Vrm10Object
[Own]List<Vrm10Expression>
👇 Vrm10Importer.LoadAsync
RuntimeGltfInstance
[Own]HumanoidAvatar
[Own]VrmObject
[Own]List<VrmExpression>
```

### FirstPerson

```
👇 Vrm10Instance.FirstPerson.SetupAsync
RuntimeGltfInstance
[Own]List<Mesh>.Add(headless)
```
14 changes: 9 additions & 5 deletions docs/release/112/v0.121.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
:::

:::
53 changes: 53 additions & 0 deletions docs/univrm/error/skinnedmeshrenderer_rootbone.md
Original file line number Diff line number Diff line change
@@ -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)
12 changes: 10 additions & 2 deletions sidebars.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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",
],
Expand Down Expand Up @@ -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",
Expand Down Expand Up @@ -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" },
Expand Down

0 comments on commit b6b2cb7

Please sign in to comment.