diff --git a/articles/en/gltf/0_82_glb_import.html b/articles/en/gltf/0_82_glb_import.html index d425d54cd..3698a3743 100644 --- a/articles/en/gltf/0_82_glb_import.html +++ b/articles/en/gltf/0_82_glb_import.html @@ -5,9 +5,9 @@ - GLB + 1. Parse - + @@ -67,11 +67,106 @@
-

GLB

-

Set materialGenerator argument, Material is replaced by URP version.

-
var data = new GlbFileParser(path).Parse();
-var loader = new UniGLTF.ImporterContext(data, materialGenerator: new GltfUrpMaterialDescriptorGenerator());
+

This is 0.82.1 API. +If use 0.82.0, please upgrade.

+

GLB load is below steps.

+
    +
  1. Parse GLB / GLTF, get a GltfData
  2. +
  3. Load Unity Hierarchy from the GltfData, get a RuntimeGltfInstance, dispose loader.
  4. +
  5. Use the RuntimeGltfInstance, destroy the RuntimeGltfInstance.
  6. +
+

1. Parse

+

Parse glb from file path

+
    +
  • same as vrm
  • +
+
GltfData Load(string path)
+{
+    return new GlbFileParser(path).Parse();
+}
+
+

Parse glb byte array

+
    +
  • same as vrm
  • +
+
GltfData Load(byte[] bytes)
+{
+    return new GlbBinaryParser(bytes, "LOAD_NAME").parse();
+}
+
+

Parse gltf from file path

+
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).

+
GltfData Load(string path)
+{
+    return new ZipArchivedGltfFileParser(path).Parse();
+}
+
+

Parse by file extension

+

See SimpleViewer sample.

+
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

+
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

+
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).

+
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

+
// 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.)

+
GameObject.Destroy(instance);
 
diff --git a/articles/en/vrm0/0_82_runtime_import.html b/articles/en/vrm0/0_82_runtime_import.html index 33cde3f89..0b4f5f864 100644 --- a/articles/en/vrm0/0_82_runtime_import.html +++ b/articles/en/vrm0/0_82_runtime_import.html @@ -5,9 +5,9 @@ - 1. Parse + 1. Get GltfData - + @@ -75,35 +75,55 @@

Material replacement for URP when Import is implemented .

Below step is needed.

    -
  1. Parse VRM, and Get VrmData.
  2. -
  3. Create VrmImporter, and load Unity hierarchy.
  4. -
  5. Use loaded instance(ShowMeshes)
  6. +
  7. Parse VRM, and Get GltfData.
  8. +
  9. Get VRMData from GltfData.
  10. +
  11. Load a RuntimeGltfInstance from VRMData.
  12. +
  13. Use the RuntimeGltfInstance
-

1. Parse

-

v0.82.1 VrmData is introduced.

-
var data = new UniGLTF.GlbFileParser(path).Parse();
-VrmData vrm = new VRM.VRMData(data);
+

1. Get GltfData

+
GltfData Load(string path)
+{
+    return new GlbFileParser(path).Parse();
+}
 
-

2. Load

-

v0.82.1 VrmData is introduced.

-
var loader = new VRM.VRMImporterContext(vrm);
-RuntimeGltfInstance instance = context.Load();
+

See GLB import.

+

2. Get VRMData

+
VRMData vrm = new VRMData(data);
 
-

Set materialGenerator argument for URP

+

3. Load

+
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.

-
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

-

v0.77 ShowMeshes method is move to RuntimeGltfInstance from Importer.

-
instance.ShowMeshes();
+

4. Instance

+
// 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.

GameObject.Destroy(instance);
 
diff --git a/articles/ja/gltf/0_82_glb_import.html b/articles/ja/gltf/0_82_glb_import.html index 76776d92e..2ce2053e3 100644 --- a/articles/ja/gltf/0_82_glb_import.html +++ b/articles/ja/gltf/0_82_glb_import.html @@ -5,9 +5,9 @@ - GLB + 1. パースする - + @@ -67,11 +67,106 @@
-

GLB

+

0.82.1 の API です。 +0.82.0 の場合は更新をお願いします。

+

以下のステップでロードします。

+
    +
  1. GLB / GLTF をパースして GltfData を得る。
  2. +
  3. GltfData から Unity Hierarchy を ロード する。RuntimeGltfInstance を得る。 ローダーを破棄する。
  4. +
  5. ロードした RuntimeGltfInstance 使う。RuntimeGltfInstance を破棄する。
  6. +
+

1. パースする

+

glb ファイルパスからパースする

+
    +
  • vrm もこの関数を使います。
  • +
+
GltfData Load(string path)
+{
+    return new GlbFileParser(path).Parse();
+}
+
+

glb バイト列をパースする

+
    +
  • vrm もこの関数を使います。
  • +
+
GltfData Load(byte[] bytes)
+{
+    return new GlbBinaryParser(bytes, "LOAD_NAME").parse();
+}
+
+

gltf ファイルパスからパースする

+
GltfData Load(string path)
+{
+    return new GltfFileWithResourceFilesParser(path).Parse();
+}
+
+

zip アーカイブからパースする

+

gltf と関連するファイルを zip アーカイブしたファイルをパースできます(実験)。

+
GltfData Load(string path)
+{
+    return new ZipArchivedGltfFileParser(path).Parse();
+}
+
+

ファイルパスの拡張子でパースする

+

サンプルの SimpleViewer を参考にしてください。

+
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

+
RuntimeGltfInstance Load(GltfData data)
+{
+    // ImporterContext は使用後に Dispose を呼び出してください。
+    // using で自動的に呼び出すことができます。
+    using(var loader = new UniGLTF.ImporterContext(data)
+    {
+        var instance = loader.Load();
+        return instance;
+    }
+}
+
+

async

+
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 マテリアルを生成するようにカスタムできます。

-
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. インスタンスを使用する

+
// SkinnedMeshRenderer に対する指示
+instance.EnableUpdateWhenOffscreen();
+// 準備ができたら表示する(デフォルトでは非表示)
+instance.ShowMeshes();
+
+

使用後に以下のように破棄してください。関連する Asset(Texture, Material, Meshなど)も破棄されます。

+
GameObject.Destroy(instance);
 
diff --git a/articles/ja/vrm0/0_82_runtime_import.html b/articles/ja/vrm0/0_82_runtime_import.html index 941c3f26c..eb15e26bf 100644 --- a/articles/ja/vrm0/0_82_runtime_import.html +++ b/articles/ja/vrm0/0_82_runtime_import.html @@ -5,9 +5,9 @@ - 1. Parse + 1. GltfData を得る - + @@ -72,38 +72,57 @@
  • Version 0.82.0 0.82.1 以降を使ってください。
  • Version 0.82.1~
  • -

    Import時の Material 差し替え機能(URP対応)が実装されました。

    以下の手順で import します。

      -
    1. VRMをパースして、VrmDataを得る
    2. -
    3. VrmImporter 作成して、 Unity のヒエラルキーをロードする
    4. -
    5. ロードされたインスタンスを使う(ShowMeshes)
    6. +
    7. VRMをパースして、GltfData を得る。
    8. +
    9. GltfData から VRMData を得る。
    10. +
    11. VrmData から RuntimeGltfInstance をロードする。
    12. +
    13. RuntimeGltfInstance を使う。
    -

    1. Parse

    -

    v0.82.1 VrmData が導入されます。

    -
    var data = new UniGLTF.GlbFileParser(path).Parse();
    -VrmData vrm = new VRM.VRMData(data);
    +

    1. GltfData を得る

    +
    GltfData Load(string path)
    +{
    +    return new GlbFileParser(path).Parse();
    +}
     
    -

    2. Load

    -

    v0.82.1 VrmData が導入されます。

    -
    var loader = new VRM.VRMImporterContext(vrm);
    -RuntimeGltfInstance instance = context.Load();
    +

    GLB import も参照してください。

    +

    2. VRMData を得る

    +
    VRMData vrm = new VRMData(data);
     
    -

    URP 向けに materialGenerator を指定する

    +

    3. Load する

    +
    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 向けのデフォルトが使用されます。

    -
    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 に移動しました。

    -
    instance.ShowMeshes();
    +

    4. Instance

    +
    // SkinnedMeshRenderer に対する指示
    +instance.EnableUpdateWhenOffscreen();
    +// 準備ができたら表示する(デフォルトでは非表示)
    +instance.ShowMeshes();
     
    -

    Destroy

    -

    v0.77 破棄時に関連する Asset を破棄するようになりました。

    +

    使用後に以下のように破棄してください。関連する Asset(Texture, Material, Meshなど)も破棄されます。

    GameObject.Destroy(instance);
     
    diff --git a/manifest.json b/manifest.json index 8d8c35441..d04914bdf 100644 --- a/manifest.json +++ b/manifest.json @@ -4476,7 +4476,7 @@ "output": { ".html": { "relative_path": "articles/en/gltf/0_82_glb_import.html", - "hash": "t7KcKRj3qkID55thLner/pluAryGDmvLyh5zErETWKU=" + "hash": "sePaFU7bPMVRBXhGAxP6mRHoHA2pAlahd/YdY2RnFgM=" } }, "is_incremental": false, @@ -4608,7 +4608,7 @@ "output": { ".html": { "relative_path": "articles/en/vrm0/0_82_runtime_import.html", - "hash": "CfgSrAd7WZzf2BKNTfghrbwCD/m5IE4c8e8vxQosxiM=" + "hash": "ee7MtwC62KPXwOTOnI9Su04fMxwiqZzCflTrcCZpBuM=" } }, "is_incremental": false, @@ -4707,7 +4707,7 @@ "output": { ".html": { "relative_path": "articles/ja/gltf/0_82_glb_import.html", - "hash": "goUF+LCJ1Y13+RWUJBOlz0iKYzkKL5PSbYFFQabyf5E=" + "hash": "n5U2x3FheIJItVm+4eMQVnPsT8KzVhFeT/fJkmmjYps=" } }, "is_incremental": false, @@ -4839,7 +4839,7 @@ "output": { ".html": { "relative_path": "articles/ja/vrm0/0_82_runtime_import.html", - "hash": "pHthsSeq2n0sV6kDGpKLcnoj5eNElulJV0xsaf0CIKU=" + "hash": "mkQnVZnFrSBTi1dCMHAOfKtVXIm7EBvkXaGtjvr8TtM=" } }, "is_incremental": false,