mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-08-28 05:44:48 -05:00
Merge pull request #866 from ousttrue/fix/model_toglb
vrm1 の Export インタフェースを整理
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ba46a2b02671e7c4598e7fd12f9de81a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user