diff --git a/Assets/VRM10/Runtime/IO/ModelExtensions.cs b/Assets/VRM10/Runtime/IO/ModelExtensions.cs deleted file mode 100644 index b88227440..000000000 --- a/Assets/VRM10/Runtime/IO/ModelExtensions.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using UnityEngine; - - -namespace UniVRM10 -{ - public static class ModelExtensions - { - public static byte[] ToGlb(this VrmLib.Model model, Func getTextureBytes) - { - // export vrm-1.0 - var exporter10 = new Vrm10Exporter(_ => false); - var option = new VrmLib.ExportArgs - { - // vrm = false - }; - exporter10.Export(null, model, null, 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 89f22b7f2..87b572858 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) { @@ -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 927aed4b1..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(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 ed8dba284..fa72a5dd5 100644 --- a/Assets/VRM10/Tests/ApiSampleTests.cs +++ b/Assets/VRM10/Tests/ApiSampleTests.cs @@ -35,21 +35,6 @@ 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) - { - // 右手系に変換 - VrmLib.ModelExtensionsForCoordinates.ConvertCoordinate(model, VrmLib.Coordinates.Vrm1); - var bytes = UniVRM10.ModelExtensions.ToGlb(model, AssetTextureUtil.GetTextureBytesWithMime); - return bytes; - } - [Test] public void Sample() { @@ -61,14 +46,12 @@ 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); - Debug.Log(dstModel); + var vrmBytes = Vrm10Exporter.Export(go, AssetTextureUtil.GetTextureBytesWithMime); - var vrmBytes = ToVrm10(dstModel); Debug.Log($"export {vrmBytes.Length} bytes"); } }