Merge pull request #866 from ousttrue/fix/model_toglb

vrm1 の Export インタフェースを整理
This commit is contained in:
ousttrue
2021-04-12 21:49:03 +09:00
committed by GitHub
5 changed files with 36 additions and 61 deletions

View File

@@ -1,22 +0,0 @@
using System;
using UnityEngine;
namespace UniVRM10
{
public static class ModelExtensions
{
public static byte[] ToGlb(this VrmLib.Model model, Func<Texture2D, (byte[], string)> 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();
}
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: ba46a2b02671e7c4598e7fd12f9de81a
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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<VRM10Controller>();
var vrmController = root?.GetComponent<VRM10Controller>();
if (meta == null)
{
@@ -658,5 +658,35 @@ namespace UniVRM10
}
}
}
/// <summary>
/// 便利関数
/// </summary>
/// <param name="go"></param>
/// <param name="getTextureBytes"></param>
/// <returns></returns>
public static byte[] Export(GameObject go, Func<Texture2D, (byte[], string)> 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();
}
}
}

View File

@@ -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);

View File

@@ -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");
}
}