Skip to content

Commit

Permalink
Merge pull request #452 from vrm-c/fix/springbone_runtime
Browse files Browse the repository at this point in the history
Fix/springbone runtime
  • Loading branch information
ousttrue authored Oct 1, 2024
2 parents f109341 + 03ea6f4 commit dcef62c
Show file tree
Hide file tree
Showing 24 changed files with 1,027 additions and 641 deletions.
47 changes: 0 additions & 47 deletions docs/api/fast_spring_bone.md

This file was deleted.

6 changes: 0 additions & 6 deletions docs/api/spring/index.mdx

This file was deleted.

66 changes: 0 additions & 66 deletions docs/api/spring/spring_and_scaling.md

This file was deleted.

172 changes: 0 additions & 172 deletions docs/api/spring/vrm1_springbone.md

This file was deleted.

Empty file added docs/api/springbone/center.md
Empty file.
17 changes: 17 additions & 0 deletions docs/api/springbone/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# SpringBone

## vrm-1.0

- **Vrm10FastSpringboneRuntime(default)**: Unity job system で実装されています。シーンすべての vrm の spring bone まとめて処理するシングルトンです。`from v0.86`
- **Vrm10FastSpringboneRuntimeStandalone**: Unity job system で実装されています。`from v0.127.0`

これらの実装は importer の引数で切り替え可能です。`from v0.127.0`
これらの実装は IVrm10SpringBoneRuntimeProvider で切り替え可能です。`from v0.127.0`

## vrm-0.x

- **Vrm0XSpringBoneDefaultRuntime(default)**: 通常の MonoBehaviour です。
- **Vrm0XFastSpringboneRuntime**: Unity job system で実装されています。シーンすべての vrm の spring bone まとめて処理するシングルトンです。`from v0.85`

これらの実装は importer の引数で切り替え可能です。`from v0.127.0`

15 changes: 15 additions & 0 deletions docs/api/springbone/jobs.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# FastSpringBone(Unity job)について

`from v0.85`

## 概要

UniVRMでは、DOTSを利用した高速なSpringBone実装である「FastSpringBone」を用意しています。

揺れ物の各房を並列処理・最適化することで1フレームあたりの処理時間を大幅に抑えます。

## Burstの導入について

Burst を別途導入すると、 FastSpringBone が Burst によって高速化されます。

Burst の導入方法は [こちら](https://docs.unity3d.com/ja/2019.4/Manual/upm-ui-install.html) をご参照ください。
31 changes: 31 additions & 0 deletions docs/api/springbone/note.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# 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)
9 changes: 9 additions & 0 deletions docs/api/springbone/scaling.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# 拡大縮小の対応状況

:::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)


5 changes: 5 additions & 0 deletions docs/api/springbone/startup.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# 初期化問題

## 原点前向き以外で初期化

## T-Pose 以外で初期化
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
# `v0.106` SpringBone の手動更新
# 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 を追加
- VRMSpringBone.SpringBoneUpdateType.Manual を追加
- VRMSpringBone.ManualUpdate を追加

以下のように呼び出すことができます。

Expand All @@ -19,4 +21,4 @@ spring.m_updateType = VRMSpringBone.SpringBoneUpdateType.Manual;
spring.ManualUpdate(time.deltaTime);
```

* spring.ManualUpdate を使う前に spring.m_updateType を `Manual` に設定する必要があります。
- spring.ManualUpdate を使う前に spring.m_updateType を `Manual` に設定する必要があります。
Loading

0 comments on commit dcef62c

Please sign in to comment.