From 443001957ba4ea671a0e4b60b3291e68e8e1bba6 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Mon, 12 Apr 2021 20:01:11 +0900 Subject: [PATCH 1/2] =?UTF-8?q?Model=20=E3=81=8B=E3=82=89=20VRM=E3=80=80?= =?UTF-8?q?=E6=83=85=E5=A0=B1=E3=81=8C=E9=99=A4=E5=8E=BB=E3=81=95=E3=82=8C?= =?UTF-8?q?=E3=81=9F=E3=81=AE=E3=81=A7=E3=80=81ToGlb=20=E3=81=AB=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0=E3=81=AE=E5=BC=95=E6=95=B0=E3=81=8C=E5=BF=85=E7=94=A8?= =?UTF-8?q?=E3=81=AB=E3=81=AA=E3=81=A3=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/VRM10/Runtime/IO/ModelExtensions.cs | 5 +++-- Assets/VRM10/Runtime/IO/Vrm10Exporter.cs | 2 +- Assets/VRM10/Runtime/Scenes/Sample.cs | 2 +- Assets/VRM10/Tests/ApiSampleTests.cs | 23 ++++++++++------------ 4 files changed, 15 insertions(+), 17 deletions(-) diff --git a/Assets/VRM10/Runtime/IO/ModelExtensions.cs b/Assets/VRM10/Runtime/IO/ModelExtensions.cs index b88227440..7037dfe71 100644 --- a/Assets/VRM10/Runtime/IO/ModelExtensions.cs +++ b/Assets/VRM10/Runtime/IO/ModelExtensions.cs @@ -6,7 +6,7 @@ namespace UniVRM10 { public static class ModelExtensions { - public static byte[] ToGlb(this VrmLib.Model model, Func getTextureBytes) + public static byte[] ToGlb(this VrmLib.Model model, GameObject root, RuntimeVrmConverter converter, Func getTextureBytes) { // export vrm-1.0 var exporter10 = new Vrm10Exporter(_ => false); @@ -14,7 +14,8 @@ namespace UniVRM10 { // vrm = false }; - exporter10.Export(null, model, null, option, getTextureBytes); + + exporter10.Export(root, model, converter, option, getTextureBytes); var glb10 = UniGLTF.Glb.Parse(exporter10.Storage.ToBytes()); return glb10.ToBytes(); } diff --git a/Assets/VRM10/Runtime/IO/Vrm10Exporter.cs b/Assets/VRM10/Runtime/IO/Vrm10Exporter.cs index 89f22b7f2..dbefca5ab 100644 --- a/Assets/VRM10/Runtime/IO/Vrm10Exporter.cs +++ b/Assets/VRM10/Runtime/IO/Vrm10Exporter.cs @@ -200,7 +200,7 @@ namespace UniVRM10 (UniGLTF.Extensions.VRMC_vrm.VRMC_vrm vrm, UniGLTF.Extensions.VRMC_springBone.VRMC_springBone springBone, int? thumbnailIndex) ExportVrm(GameObject root, Model model, RuntimeVrmConverter converter, VRM10MetaObject meta) { - var vrmController = root.GetComponent(); + var vrmController = root?.GetComponent(); if (meta == null) { diff --git a/Assets/VRM10/Runtime/Scenes/Sample.cs b/Assets/VRM10/Runtime/Scenes/Sample.cs index 927aed4b1..959b936f3 100644 --- a/Assets/VRM10/Runtime/Scenes/Sample.cs +++ b/Assets/VRM10/Runtime/Scenes/Sample.cs @@ -35,7 +35,7 @@ public class Sample : MonoBehaviour var model = exporter.ToModelFrom10(vrm0x); // 右手系に変換 model.ConvertCoordinate(VrmLib.Coordinates.Vrm1); - var exportedBytes = model.ToGlb(TextureExporter.GetTextureBytesWithMime); + var exportedBytes = model.ToGlb(vrm0x, exporter, TextureExporter.GetTextureBytesWithMime); // Import 1.0 var vrm10 = Import(exportedBytes, src); diff --git a/Assets/VRM10/Tests/ApiSampleTests.cs b/Assets/VRM10/Tests/ApiSampleTests.cs index ed8dba284..1305956ba 100644 --- a/Assets/VRM10/Tests/ApiSampleTests.cs +++ b/Assets/VRM10/Tests/ApiSampleTests.cs @@ -35,18 +35,11 @@ namespace UniVRM10.Test } } - VrmLib.Model ToModel(UnityEngine.GameObject target) - { - var exporter = new UniVRM10.RuntimeVrmConverter(); - var model = exporter.ToModelFrom10(target); - return model; - } - - byte[] ToVrm10(VrmLib.Model model) + byte[] ToVrm10(GameObject root, RuntimeVrmConverter converter, VrmLib.Model model) { // 右手系に変換 VrmLib.ModelExtensionsForCoordinates.ConvertCoordinate(model, VrmLib.Coordinates.Vrm1); - var bytes = UniVRM10.ModelExtensions.ToGlb(model, AssetTextureUtil.GetTextureBytesWithMime); + var bytes = UniVRM10.ModelExtensions.ToGlb(model, root, converter, AssetTextureUtil.GetTextureBytesWithMime); return bytes; } @@ -61,14 +54,18 @@ namespace UniVRM10.Test var parser = new GltfParser(); parser.Parse(path, migrated); - var asset = BuildGameObject(parser, true); - Debug.Log(asset); + var go = BuildGameObject(parser, true); + Debug.Log(go); // export - var dstModel = ToModel(asset); + // var dstModel = ToModel(go); + var exporter = new UniVRM10.RuntimeVrmConverter(); + var dstModel = exporter.ToModelFrom10(go); + // return model; + Debug.Log(dstModel); - var vrmBytes = ToVrm10(dstModel); + var vrmBytes = ToVrm10(go, exporter, dstModel); Debug.Log($"export {vrmBytes.Length} bytes"); } } From f79736f0be5bd2453159187b39e1b11300cade59 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Mon, 12 Apr 2021 20:28:37 +0900 Subject: [PATCH 2/2] =?UTF-8?q?Model.ToGlb=20=E3=82=92=E5=BB=83=E6=AD=A2?= =?UTF-8?q?=E3=80=82Vrm10Exporter.Export=20=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/VRM10/Runtime/IO/ModelExtensions.cs | 23 -------------- .../VRM10/Runtime/IO/ModelExtensions.cs.meta | 11 ------- Assets/VRM10/Runtime/IO/Vrm10Exporter.cs | 30 +++++++++++++++++++ Assets/VRM10/Runtime/Scenes/Sample.cs | 9 ++---- Assets/VRM10/Tests/ApiSampleTests.cs | 16 +--------- 5 files changed, 33 insertions(+), 56 deletions(-) delete mode 100644 Assets/VRM10/Runtime/IO/ModelExtensions.cs delete mode 100644 Assets/VRM10/Runtime/IO/ModelExtensions.cs.meta diff --git a/Assets/VRM10/Runtime/IO/ModelExtensions.cs b/Assets/VRM10/Runtime/IO/ModelExtensions.cs deleted file mode 100644 index 7037dfe71..000000000 --- a/Assets/VRM10/Runtime/IO/ModelExtensions.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using UnityEngine; - - -namespace UniVRM10 -{ - public static class ModelExtensions - { - public static byte[] ToGlb(this VrmLib.Model model, GameObject root, RuntimeVrmConverter converter, Func getTextureBytes) - { - // export vrm-1.0 - var exporter10 = new Vrm10Exporter(_ => false); - var option = new VrmLib.ExportArgs - { - // vrm = false - }; - - exporter10.Export(root, model, converter, option, getTextureBytes); - var glb10 = UniGLTF.Glb.Parse(exporter10.Storage.ToBytes()); - return glb10.ToBytes(); - } - } -} diff --git a/Assets/VRM10/Runtime/IO/ModelExtensions.cs.meta b/Assets/VRM10/Runtime/IO/ModelExtensions.cs.meta deleted file mode 100644 index 44b50fa5b..000000000 --- a/Assets/VRM10/Runtime/IO/ModelExtensions.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ba46a2b02671e7c4598e7fd12f9de81a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/VRM10/Runtime/IO/Vrm10Exporter.cs b/Assets/VRM10/Runtime/IO/Vrm10Exporter.cs index dbefca5ab..87b572858 100644 --- a/Assets/VRM10/Runtime/IO/Vrm10Exporter.cs +++ b/Assets/VRM10/Runtime/IO/Vrm10Exporter.cs @@ -658,5 +658,35 @@ namespace UniVRM10 } } } + + /// + /// 便利関数 + /// + /// + /// + /// + public static byte[] Export(GameObject go, Func getTextureBytes = null) + { + if (getTextureBytes == null) + { + // default for runtime export + getTextureBytes = TextureExporter.GetTextureBytesWithMime; + } + + // ヒエラルキーからジオメトリーを収集 + var converter = new UniVRM10.RuntimeVrmConverter(); + var model = converter.ToModelFrom10(go); + + // 右手系に変換 + VrmLib.ModelExtensionsForCoordinates.ConvertCoordinate(model, VrmLib.Coordinates.Vrm1); + + // Model と go から VRM-1.0 にExport + var exporter10 = new Vrm10Exporter(_ => false); + var option = new VrmLib.ExportArgs + { + }; + exporter10.Export(go, model, converter, option, getTextureBytes); + return exporter10.Storage.ToBytes(); + } } } diff --git a/Assets/VRM10/Runtime/Scenes/Sample.cs b/Assets/VRM10/Runtime/Scenes/Sample.cs index 959b936f3..b4dc2efec 100644 --- a/Assets/VRM10/Runtime/Scenes/Sample.cs +++ b/Assets/VRM10/Runtime/Scenes/Sample.cs @@ -28,14 +28,9 @@ public class Sample : MonoBehaviour void OnEnable() { var src = new FileInfo(m_vrmPath); - var vrm0x = Import(File.ReadAllBytes(m_vrmPath), src); + var go = Import(File.ReadAllBytes(m_vrmPath), src); - // Export 1.0 - var exporter = new UniVRM10.RuntimeVrmConverter(); - var model = exporter.ToModelFrom10(vrm0x); - // 右手系に変換 - model.ConvertCoordinate(VrmLib.Coordinates.Vrm1); - var exportedBytes = model.ToGlb(vrm0x, exporter, TextureExporter.GetTextureBytesWithMime); + var exportedBytes = Vrm10Exporter.Export(go); // Import 1.0 var vrm10 = Import(exportedBytes, src); diff --git a/Assets/VRM10/Tests/ApiSampleTests.cs b/Assets/VRM10/Tests/ApiSampleTests.cs index 1305956ba..fa72a5dd5 100644 --- a/Assets/VRM10/Tests/ApiSampleTests.cs +++ b/Assets/VRM10/Tests/ApiSampleTests.cs @@ -35,14 +35,6 @@ namespace UniVRM10.Test } } - byte[] ToVrm10(GameObject root, RuntimeVrmConverter converter, VrmLib.Model model) - { - // 右手系に変換 - VrmLib.ModelExtensionsForCoordinates.ConvertCoordinate(model, VrmLib.Coordinates.Vrm1); - var bytes = UniVRM10.ModelExtensions.ToGlb(model, root, converter, AssetTextureUtil.GetTextureBytesWithMime); - return bytes; - } - [Test] public void Sample() { @@ -58,14 +50,8 @@ namespace UniVRM10.Test Debug.Log(go); // export - // var dstModel = ToModel(go); - var exporter = new UniVRM10.RuntimeVrmConverter(); - var dstModel = exporter.ToModelFrom10(go); - // return model; + var vrmBytes = Vrm10Exporter.Export(go, AssetTextureUtil.GetTextureBytesWithMime); - Debug.Log(dstModel); - - var vrmBytes = ToVrm10(go, exporter, dstModel); Debug.Log($"export {vrmBytes.Length} bytes"); } }