Skip to content

Commit

Permalink
Merge pull request #358 from ousttrue/add/univrm-vrma
Browse files Browse the repository at this point in the history
vrm animation の記事追加など
  • Loading branch information
ousttrue authored Feb 14, 2024
2 parents 682b41b + e55da90 commit 5e61659
Show file tree
Hide file tree
Showing 19 changed files with 441 additions and 154 deletions.
46 changes: 46 additions & 0 deletions docs/api/sample/VRM10Viewer/animation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# import animation

VRM-1.0 を import します。

```cs title="load vrm-1.0"
var vrm10Instance = await Vrm10.LoadPathAsync(path,
canLoadVrm0X: true,
showMeshes: false,
awaitCaller: m_useAsync.enabled
? (IAwaitCaller)new RuntimeOnlyAwaitCaller()
: (IAwaitCaller)new ImmediateCaller(),
materialGenerator: GetVrmMaterialDescriptorGenerator(m_useUrpMaterial.isOn),
vrmMetaInformationCallback: m_texts.UpdateMeta,
ct: cancellationToken);
if (cancellationToken.IsCancellationRequested)
{
UnityObjectDestroyer.DestroyRuntimeOrEditor(vrm10Instance.gameObject);
cancellationToken.ThrowIfCancellationRequested();
}

var instance = vrm10Instance.GetComponent<RuntimeGltfInstance>();
instance.ShowMeshes();
instance.EnableUpdateWhenOffscreen();
```

VRM-Animation を import します。

```cs title="load vrm-animation"
// gltf, glb etc...
using GltfData data = new AutoGltfFileParser(path).Parse();
using var loader = new VrmAnimationImporter(data);
var instance = await loader.LoadAsync(new ImmediateCaller());
var vrmAnimation = instance.GetComponent<Vrm10AnimationInstance>();
instance.GetComponent<Animation>().Play();
```

VRM-1.0 と VRM-Animation を連結します。

```cs title="connect model with vrm-animation"
vrm10Instance.Runtime.VrmAnimation = vrmAnimation;
```

:::info
以降 Vrm10Instance の Update もしくは LateUpdate で、
VRM-Animation のポーズが Vrm-1.0 に転送されます。
:::
13 changes: 13 additions & 0 deletions docs/api/sample/VRM10Viewer/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# VRM10Viewer

![image](./vrm10viewer.jpg)

vrm-1.0 の Runtime ローダーのサンプルです。

以下のフォーマットをロードできます。

- (model) vrm-1.0
- (model) vrm-0.x(vrm-1.0 に動的に変換する)
- (motion) bvh
- (motion) vrm-animation

Binary file added docs/api/sample/VRM10Viewer/vrm10viewer.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
147 changes: 0 additions & 147 deletions docs/vrm1/changed.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
---
weight: 1
date: 2021-08-05
---

Expand All @@ -19,149 +18,3 @@ date: 2021-08-05
- VRM0: mtoon => `VRMC_materials_mtoon`
- `新規` => `VRMC_node_constraint`

## glTF: z+ forward

モデルは Z+ 方向が前方になるように格納します。

| | VRM0 | VRM1 |
|---------|------|------|
| forward | z- | z+ |
| right | x+ | x- |

:::warning 実装

Y軸 180 度の回転になります。

```csharp
Vector3 vrm0;
var vrm1 = new Vector3(-vrm0.x, vrm0.y, -vrm0.z);
```
:::

## glTF: divided vertex buffer

bufferView の primitive 間での共有をやめます。

| | VRM0 | VRM1 |
|------------|-----------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------|
| bufferView | shared | divided |
| 利点 | GameEngine メモリレイアウトに近いので変換が少ない | 一般的な glTF ローダーでロードできる |
| 欠点 | UniVRM 以外の glTF ローダーでメモリ使用量が爆発する可能性(ロードできるが頂点バッファに未使用領域ができてしまう) | export 時に頂点の増加・並び順の変化がありえる。import 時に連結する手間。morphTarget の扱いが煩雑 |

:::warning 実装

`Vrm` 専用の共有頂点ローダーをやめて、
一般的な `glTF` ローダーで問題ありません。

:::

## VRMC_vrm: meta

`TODO`

## VRMC_vrm: humanoid

必須ボーンの見直し。

| | VRM0 | VRM1 |
|---------------------|------|------|
| neck | 必須 | |
| head | 必須 | 必須 |
| hips | 必須 | 必須 |
| spine | 必須 | 必須 |
| chest | 必須 | |
| left/right UpperArm | 必須 | 必須 |
| left/right LowerArm | 必須 | 必須 |
| left/right Hand | 必須 | 必須 |
| left/right UpperLeg | 必須 | 必須 |
| left/right LowerLeg | 必須 | 必須 |
| left/right Foot | 必須 | 必須 |

以下の項目が廃止になります(`VRMHumanoidDescription` に記録されていた)。

* armStretch
* legStretch
* upperArmTwist
* lowerArmTwist
* upperLegTwist
* lowerLegTwist
* feetSpacing
* hasTranslationDoF

## VRMC_vrm: expression

BlendShapeは、Expression に名称を変更します。

:::warning BlendShape

BlendShapeは Unity の MorphTarget 機能のことで、区別が付きにくかったためです。

:::

preset の見直し

| | VRM0 | VRM1 |
|------|-----------------------------------------------------------------------|------------|
|| joy(joyとfunが曖昧) | happy |
|| angry | angry |
|| sorrow(文語) | sad |
|| fun(joyとfunが曖昧) | relaxed |
|| (新規追加) | surprised |
|| a(非日本語で自然なように変更) | aa |
|| i(非日本語で自然なように変更) | ih |
|| u(非日本語で自然なように変更) | ou |
|| e(非日本語で自然なように変更) | ee |
|| o(非日本語で自然なように変更) | oh |

- overrideMouse, overrideLipSync, overrideBlink 設定の追加
- VRM0 の materialBind から MaterialColorBind と TextureTransformBind に整理

## VRMC_vrm: lookat

* `degreemap.curve` が廃止になります

## VRMC_vrm: firstperson

* `firstPersonBone` は廃止になり、`Head` 固定になります
* `firstPersonBoneOffset` は、`lookAt.offsetFromHeadBone` になります

## VRMC_springBone

| | VRM0 | VRM1 |
|----------|-------------------------|---------------------|
| 設定単位 |||
|| children[0] | children のいずれか |
| 末端 | 7cm の遠さに 自動で追加 | 追加しない |

- 拡張を分離 => 独立した `VRMC_springBone` 拡張
- Collider 形状に Capsule を追加
- Unity座標系の混在を修正

## VRMC_materials_hdr_emissiveMultiplier

エミッションによる発光表現です。

glTF では emissiveFactor(float3) の値域が [0.0, 1.0] です。
これに係数を追加することで、1.0 を越える値を表せるようにします。

| | VRM0 | VRM1 |
|-------------------------|-------------------------------------|---------------------------------------------------------|
| mtoon の emissiveFactor | 独自に格納していた(0, 1 制限が無い) | gltf material の emissiveFactor に格納(0, 1 制限がある) |

gltf-2.0 の標準マテリアル(PBR), VRMC_materials_mtoon から利用します。

## VRMC_materials_mtoon

- 拡張を分離 => 独立した `VRMC_materials_mtoon` 拡張

`TODO`

## VRMC_node_constraint

`開発中`

### translation

### rotation

### aim
3 changes: 3 additions & 0 deletions docs/vrm1/constraint.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# VRMC_node_constraint

https://github.com/vrm-c/vrm-specification/tree/master/specification/VRMC_node_constraint-1.0
17 changes: 17 additions & 0 deletions docs/vrm1/emission.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# emission

KHR_materials_emissive_strength をサポートします。

[Emission と グロー(発光)](/gltf/emission_glow/)

:::info
vrm-1.0 は KHR_materials_unlit のように KHR_materials_emissive_strength と併用できます。
:::

:::info
UniVRM は、gltf と vrm-1 に対する KHR_materials_emissive_strength 読み書きをサポートします。
:::

:::info mtoon-0.x
vrm-0.x は、KHR_materials_emissive_strength ではなく mtoon-0.x が 範囲外の emission を記録します。
:::
27 changes: 27 additions & 0 deletions docs/vrm1/expression.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# VRMC_vrm: expression

BlendShape は、Expression に名称を変更します。

:::warning BlendShape

BlendShape は Unity の MorphTarget 機能のことで、区別が付きにくかったためです。

:::

preset の見直し

| | VRM0 | VRM1 |
| --- | ----------------------------- | --------- |
|| joy(joy と fun が曖昧) | happy |
|| angry | angry |
|| sorrow(文語) | sad |
|| fun(joy と fun が曖昧) | relaxed |
|| (新規追加) | surprised |
|| a(非日本語で自然なように変更) | aa |
|| i(非日本語で自然なように変更) | ih |
|| u(非日本語で自然なように変更) | ou |
|| e(非日本語で自然なように変更) | ee |
|| o(非日本語で自然なように変更) | oh |

- overrideMouse, overrideLipSync, overrideBlink 設定の追加
- VRM0 の materialBind から MaterialColorBind と TextureTransformBind に整理
58 changes: 58 additions & 0 deletions docs/vrm1/gltf_details.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# gltf 格納詳細

:::warning
import, export の実装で注意が必要です。
:::

## glTF: z+ forward

モデルは Z+ 方向が前方になるように格納します。

| | VRM0 | VRM1 |
| ------- | ---- | ---- |
| forward | z- | z+ |
| right | x+ | x- |

:::warning 実装

vrm-0.x を vrm-1.0 に変換する際は、Y 軸 180 度の回転をしてください。

```csharp
Vector3 vrm0;
var vrm1 = new Vector3(-vrm0.x, vrm0.y, -vrm0.z);
```

:::

## glTF: divided vertex buffer

bufferView の primitive 間での共有をやめます。

| | VRM0 | VRM1 |
| ---------- | --------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
| bufferView | shared | divided |
| 利点 | GameEngine メモリレイアウトに近いので変換が少ない | 一般的な glTF ローダーでロードできる |
| 欠点 | UniVRM 以外の glTF ローダーでメモリ使用量が爆発する可能性(ロードできるが頂点バッファに未使用領域ができてしまう) | export 時に頂点の増加・並び順の変化がありえる。import 時に連結する手間。morphTarget の扱いが煩雑 |

:::warning 例

| | prim0 | prim1 |
| -------- | ------ | ------ |
| position | 100 | 100 |
| index | 0..100 | 0..100 |

👇

| | prim0 | prim1 | |
| -------- | ------ | -------- | -------------------------- |
| position | 100 | 100 | バッファーが連結されている |
| index | 0..100 | 100..200 | |

:::

:::warning 実装

`Vrm` 専用の gltfPrimitive 間での共有バッファーローダーをやめて、
一般的な `glTF` ローダーで問題ありません。

:::
28 changes: 28 additions & 0 deletions docs/vrm1/humanoid.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# VRMC_vrm: humanoid

必須ボーンの見直し。

| | VRM0 | VRM1 |
| ------------------- | ---- | ---- |
| neck | 必須 | |
| head | 必須 | 必須 |
| hips | 必須 | 必須 |
| spine | 必須 | 必須 |
| chest | 必須 | |
| left/right UpperArm | 必須 | 必須 |
| left/right LowerArm | 必須 | 必須 |
| left/right Hand | 必須 | 必須 |
| left/right UpperLeg | 必須 | 必須 |
| left/right LowerLeg | 必須 | 必須 |
| left/right Foot | 必須 | 必須 |

以下の項目が廃止になります(`VRMHumanoidDescription` に記録されていたが未使用)。

- armStretch
- legStretch
- upperArmTwist
- lowerArmTwist
- upperLegTwist
- lowerLegTwist
- feetSpacing
- hasTranslationDoF
15 changes: 11 additions & 4 deletions docs/vrm1/index.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
---
weight: 11
date: 2021-08-05
menu:
main:
weight: 2
---

# VRM-1.0
Expand All @@ -17,6 +13,17 @@ menu:

VRM 1.0 は、2022 年 9 月にリリースされました。

VRM 0.x の構成が整理されてまとまり毎に分割されました。
コアとなり humanoid, meta などを含む [VRMC_vrm-1.0](https://github.com/vrm-c/vrm-specification/tree/master/specification/VRMC_vrm-1.0) 、トゥーン表現マテリアルの [VRMC_materials_mtoon-1.0](https://github.com/vrm-c/vrm-specification/tree/master/specification/VRMC_materials_mtoon-1.0),
ゆれものの [VRMC_springBone-1.0](https://github.com/vrm-c/vrm-specification/tree/master/specification/VRMC_springBone-1.0) です。

また、新規に [VRMC_node_constraint-1.0](https://github.com/vrm-c/vrm-specification/tree/master/specification/VRMC_node_constraint-1.0) を追加しました。

:::info
[VRMC_materials_hdr_emissiveMultiplier-1.0](https://github.com/vrm-c/vrm-specification/tree/master/specification/VRMC_materials_hdr_emissiveMultiplier-1.0) は内容が [KHR_materials_emissive_strength](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_materials_emissive_strength/README.md) とほぼ同じであったため、
こちらを使うことにして利用されていません。
:::

## 公開文書

### VRM 1.0 仕様
Expand Down
Loading

0 comments on commit 5e61659

Please sign in to comment.