Merge pull request #1195 from ousttrue/docfx/update_runtime_import

`v0.82.1` の RuntimeLoad について
This commit is contained in:
PoChang007 2021-09-07 23:13:57 +09:00 committed by GitHub
commit 9c216579d2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 337 additions and 52 deletions

View File

@ -1,9 +1,133 @@
This is `0.82.1` API.
If use `0.82.0`, please upgrade.
## GLB
GLB load is below steps.
Set `materialGenerator` argument, Material is replaced by URP version.
1. Parse `GLB` / `GLTF`, get a `GltfData`
2. Load `Unity Hierarchy` from the `GltfData`, get a `RuntimeGltfInstance`, dispose loader.
3. Use the `RuntimeGltfInstance`, destroy the `RuntimeGltfInstance`.
# 1. Parse
## Parse glb from file path
* same as `vrm`
```cs
var data = new GlbFileParser(path).Parse();
var loader = new UniGLTF.ImporterContext(data, materialGenerator: new GltfUrpMaterialDescriptorGenerator());
GltfData Load(string path)
{
return new GlbFileParser(path).Parse();
}
```
## Parse glb byte array
* same as `vrm`
```cs
GltfData Load(byte[] bytes)
{
return new GlbBinaryParser(bytes, "LOAD_NAME").parse();
}
```
## Parse gltf from file path
```cs
GltfData Load(string path)
{
return new GltfFileWithResourceFilesParser(path).Parse();
}
```
## Parse gltf in zip archive from file path
Zip archive that contain gltf and related files can parsed (experimental).
```cs
GltfData Load(string path)
{
return new ZipArchivedGltfFileParser(path).Parse();
}
```
## Parse by file extension
See `SimpleViewer` sample.
```cs
GltfData Load(string path)
{
var ext = Path.GetExtension(path).ToLower();
switch(ext)
{
case ".glb": return new GlbFileParser(path).Parse();
case ".gltf": return new GltfFileWithResourceFilesParser(path).Parse();
case ".zip": return new ZipArchivedGltfFileParser(path).Parse();
default: throw new Exception($"unknown: {ext}");
}
}
```
# 2. Load
## sync
```cs
RuntimeGltfInstance Load(GltfData data)
{
// Call ImporterContext.Dispose after load.
// Automatically load dispose by using.
using(var loader = new UniGLTF.ImporterContext(data)
{
var instance = loader.Load();
return instance;
}
}
```
## async
```cs
async RuntimeGltfInstance Load(GltfData data)
{
// Call ImporterContext.Dispose after load.
// Automatically load dispose by using.
using(var loader = new UniGLTF.ImporterContext(data)
{
var instance = await loader.LoadAsync();
return instance;
}
}
```
## Load URP material by materialGenerator argument
You can load URP materials by setting the `materialGenerator` Argument (optional).
```cs
async RuntimeGltfInstance Load(GltfData data)
{
var materialGenerator = new GltfUrpMaterialDescriptorGenerator();
using(var loader = new UniGLTF.ImporterContext(data, materialGenerator: materialGenerator)
{
var instance = await loader.LoadAsync();
return instance;
}
}
```
# 3. Use instance
```cs
// Setup for SkinnedMeshRenderer
instance.EnableUpdateWhenOffscreen();
// Show meshes when ready(invisible by default)
instance.ShowMeshes();
```
Destroy after use and discard related assets (textures, materials, meshes, etc.)
```cs
GameObject.Destroy(instance);
```

View File

@ -5,51 +5,72 @@ Material replacement for URP when Import is implemented .
Below step is needed.
1. Parse VRM, and Get VrmData.
1. Create VrmImporter, and load Unity hierarchy.
1. Use loaded instance(ShowMeshes)
1. Parse VRM, and Get `GltfData`.
1. Get `VRMData` from `GltfData`.
1. Load a `RuntimeGltfInstance` from `VRMData`.
1. Use the `RuntimeGltfInstance`
# 1. Parse
`v0.82.1` VrmData is introduced.
# 1. Get `GltfData`
```cs
var data = new UniGLTF.GlbFileParser(path).Parse();
VrmData vrm = new VRM.VRMData(data);
GltfData Load(string path)
{
return new GlbFileParser(path).Parse();
}
```
# 2. Load
See [GLB import](../gltf/0_82_glb_import.md).
`v0.82.1` VrmData is introduced.
# 2. Get `VRMData`
```cs
var loader = new VRM.VRMImporterContext(vrm);
RuntimeGltfInstance instance = context.Load();
VRMData vrm = new VRMData(data);
```
## Set `materialGenerator` argument for URP
# 3. Load
```cs
async RuntimeGltfInstance Load(VRMData vrm)
{
// Dispose VRMImporterContext, after load
using(var loader = new VRMImporterContext(vrm))
{
var instance = await loader.LoadAsync();
return instance;
}
}
```
## Set `materialGenerator` argument for URP(Experimental)
Set `materialGenerator` Argument, material generation is could customized.
If omitted, default `materialGenerator` for `built-in` pipeline is used.
```cs
var loader = new VRM.VRMImporterContext(vrm, materialGenerator: new VRMUrpMaterialDescriptorGenerator(vrm.VrmExtension));
async RuntimeGltfInstance Load(VRMData vrm)
{
var materialGenerator = new VRMUrpMaterialDescriptorGenerator(vrm.VrmExtension);
using(var loader = new VRM.VRMImporterContext(vrm, materialGenerator: materialGenerator))
{
var instance = await loader.LoadAsync();
return instance;
}
}
```
* `MToonShader for URP` has not been implemented yet, fallback to `UniUnlit`.
# 3. Instance
## ShowMeshes
# 4. Instance
`v0.77` ShowMeshes method is move to RuntimeGltfInstance from Importer.
```cs
// Setup for SkinnedMeshRenderer
instance.EnableUpdateWhenOffscreen();
// Show meshes when ready(invisible by default)
instance.ShowMeshes();
```
## Destroy
`v0.77` When destroy, related assets(meshes, materials and textures etc...) is destroyed.
When destroy, related assets(meshes, materials and textures etc...) is destroyed.
```cs
GameObject.Destroy(instance);

View File

@ -1,9 +1,132 @@
`0.82.1` の API です。
`0.82.0` の場合は更新をお願いします。
## GLB
以下のステップでロードします。
1. `GLB` / `GLTF` をパースして `GltfData` を得る。
2. `GltfData` から `Unity Hierarchy` を ロード する。`RuntimeGltfInstance` を得る。 ローダーを破棄する。
3. ロードした `RuntimeGltfInstance` 使う。`RuntimeGltfInstance` を破棄する。
# 1. パースする
## glb ファイルパスからパースする
* `vrm` もこの関数を使います。
```cs
GltfData Load(string path)
{
return new GlbFileParser(path).Parse();
}
```
## glb バイト列をパースする
* `vrm` もこの関数を使います。
```cs
GltfData Load(byte[] bytes)
{
return new GlbBinaryParser(bytes, "LOAD_NAME").parse();
}
```
## gltf ファイルパスからパースする
```cs
GltfData Load(string path)
{
return new GltfFileWithResourceFilesParser(path).Parse();
}
```
## zip アーカイブからパースする
gltf と関連するファイルを zip アーカイブしたファイルをパースできます(実験)。
```cs
GltfData Load(string path)
{
return new ZipArchivedGltfFileParser(path).Parse();
}
```
## ファイルパスの拡張子でパースする
サンプルの `SimpleViewer` を参考にしてください。
```cs
GltfData Load(string path)
{
var ext = Path.GetExtension(path).ToLower();
switch(ext)
{
case ".glb": return new GlbFileParser(path).Parse();
case ".gltf": return new GltfFileWithResourceFilesParser(path).Parse();
case ".zip": return new ZipArchivedGltfFileParser(path).Parse();
default: throw new Exception($"unknown: {ext}");
}
}
```
# 2. ロードする
## sync
```cs
RuntimeGltfInstance Load(GltfData data)
{
// ImporterContext は使用後に Dispose を呼び出してください。
// using で自動的に呼び出すことができます。
using(var loader = new UniGLTF.ImporterContext(data)
{
var instance = loader.Load();
return instance;
}
}
```
## async
```cs
async RuntimeGltfInstance Load(GltfData data)
{
// ImporterContext は使用後に Dispose を呼び出してください。
// using で自動的に呼び出すことができます。
using(var loader = new UniGLTF.ImporterContext(data)
{
var instance = await loader.LoadAsync();
return instance;
}
}
```
## materialGenerator で URP 用のマテリアルをロードする
`materialGenerator` 引き数(省略可能)を指定することで URP マテリアルを生成するようにカスタムできます。
```cs
var data = new GlbFileParser(path).Parse();
var loader = new UniGLTF.ImporterContext(data, materialGenerator: new GltfUrpMaterialDescriptorGenerator());
async RuntimeGltfInstance Load(GltfData data)
{
var materialGenerator = new GltfUrpMaterialDescriptorGenerator();
using(var loader = new UniGLTF.ImporterContext(data, materialGenerator: materialGenerator)
{
var instance = await loader.LoadAsync();
return instance;
}
}
```
# 3. インスタンスを使用する
```cs
// SkinnedMeshRenderer に対する指示
instance.EnableUpdateWhenOffscreen();
// 準備ができたら表示する(デフォルトでは非表示)
instance.ShowMeshes();
```
使用後に以下のように破棄してください。関連する Asset(Texture, Material, Meshなど)も破棄されます。
```cs
GameObject.Destroy(instance);
```

View File

@ -1,56 +1,73 @@
* `Version 0.82.0` `0.82.1` 以降を使ってください。
* `Version 0.82.1~`
Import時の Material 差し替え機能(URP対応)が実装されました。
以下の手順で import します。
1. VRMをパースして、VrmDataを得る
1. VrmImporter 作成して、 Unity のヒエラルキーをロードする
1. ロードされたインスタンスを使う(ShowMeshes)
1. VRMをパースして、`GltfData` を得る。
1. `GltfData` から `VRMData` を得る。
1. `VrmData` から `RuntimeGltfInstance` をロードする。
1. `RuntimeGltfInstance` を使う。
# 1. Parse
`v0.82.1` VrmData が導入されます。
# 1. `GltfData` を得る
```cs
var data = new UniGLTF.GlbFileParser(path).Parse();
VrmData vrm = new VRM.VRMData(data);
GltfData Load(string path)
{
return new GlbFileParser(path).Parse();
}
```
# 2. Load
[GLB import](../gltf/0_82_glb_import.md) も参照してください。
`v0.82.1` VrmData が導入されます。
# 2. `VRMData` を得る
```cs
var loader = new VRM.VRMImporterContext(vrm);
RuntimeGltfInstance instance = context.Load();
VRMData vrm = new VRMData(data);
```
## URP 向けに `materialGenerator` を指定する
# 3. Load する
```cs
async RuntimeGltfInstance Load(VRMData vrm)
{
// 使用後に Dispose で VRMImporterContext を破棄してください。
using(var loader = new VRMImporterContext(vrm))
{
var instance = await loader.LoadAsync();
return instance;
}
}
```
## URP 向けに `materialGenerator` を指定する(実験)
`materialGenerator` 引き数(省略可能)を指定することで URP マテリアルを生成するようにカスタムできます。
指定しない場合は `built-in` 向けのデフォルトが使用されます。
```cs
var loader = new VRM.VRMImporterContext(vrm, materialGenerator: new VRMUrpMaterialDescriptorGenerator(vrm.VrmExtension));
async RuntimeGltfInstance Load(VRMData vrm)
{
var materialGenerator = new VRMUrpMaterialDescriptorGenerator(vrm.VrmExtension);
using(var loader = new VRM.VRMImporterContext(vrm, materialGenerator: materialGenerator))
{
var instance = await loader.LoadAsync();
return instance;
}
}
```
* まだ URP 向け MToonShader が作成されていないので、URP 向け `UniUnlit` にフォールバックします。
* まだ URP 向け MToonShader が作成されていないので、`UniUnlit` にフォールバックします。
# 3. Instance
## ShowMeshes
`v0.77` ShowMeshes が loader から instance に移動しました。
# 4. Instance
```cs
// SkinnedMeshRenderer に対する指示
instance.EnableUpdateWhenOffscreen();
// 準備ができたら表示する(デフォルトでは非表示)
instance.ShowMeshes();
```
## Destroy
`v0.77` 破棄時に関連する Asset を破棄するようになりました。
使用後に以下のように破棄してください。関連する Asset(Texture, Material, Meshなど)も破棄されます。
```cs
GameObject.Destroy(instance);
```