mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-05-15 07:00:10 -05:00
fix GltfData.Dispose for tests
This commit is contained in:
parent
d6dac4db9c
commit
684db5091f
|
|
@ -143,16 +143,17 @@ namespace UniGLTF
|
|||
UnityEngine.Object.DestroyImmediate(mat);
|
||||
UnityEngine.Object.DestroyImmediate(root);
|
||||
|
||||
var parsed = GltfData.CreateFromGltfDataForTest(gltf, data.BinBytes);
|
||||
using (var parsed = GltfData.CreateFromGltfDataForTest(gltf, data.BinBytes))
|
||||
{
|
||||
// Extract Image to Texture2D
|
||||
var exportedBytes = parsed.GetBytesFromBufferView(exportedImage.bufferView).ToArray();
|
||||
var exportedTexture = new Texture2D(2, 2, TextureFormat.ARGB32, mipChain: false, linear: false);
|
||||
Assert.IsTrue(exportedTexture.LoadImage(exportedBytes)); // Always true ?
|
||||
Assert.AreEqual(srcTex.width, exportedTexture.width);
|
||||
Assert.AreEqual(srcTex.height, exportedTexture.height);
|
||||
|
||||
// Extract Image to Texture2D
|
||||
var exportedBytes = parsed.GetBytesFromBufferView(exportedImage.bufferView).ToArray();
|
||||
var exportedTexture = new Texture2D(2, 2, TextureFormat.ARGB32, mipChain: false, linear: false);
|
||||
Assert.IsTrue(exportedTexture.LoadImage(exportedBytes)); // Always true ?
|
||||
Assert.AreEqual(srcTex.width, exportedTexture.width);
|
||||
Assert.AreEqual(srcTex.height, exportedTexture.height);
|
||||
|
||||
return exportedTexture;
|
||||
return exportedTexture;
|
||||
}
|
||||
}
|
||||
|
||||
private static Color32 GetFirstPixelInTexture2D(Texture2D tex)
|
||||
|
|
|
|||
|
|
@ -33,11 +33,13 @@ namespace UniGLTF
|
|||
});
|
||||
|
||||
var parser = new GlbLowLevelParser("Test", data.ToGlbBytes());
|
||||
var parsed = parser.Parse();
|
||||
using (var parsed = parser.Parse())
|
||||
{
|
||||
|
||||
Assert.AreEqual("FooBar", parsed.GLTF.textures[0].name);
|
||||
// NOTE: 大文字小文字が違うだけの名前は、同一としてみなされ、Suffix が付く。
|
||||
Assert.AreEqual("foobar__UNIGLTF__DUPLICATED__2", parsed.GLTF.textures[1].name);
|
||||
Assert.AreEqual("FooBar", parsed.GLTF.textures[0].name);
|
||||
// NOTE: 大文字小文字が違うだけの名前は、同一としてみなされ、Suffix が付く。
|
||||
Assert.AreEqual("foobar__UNIGLTF__DUPLICATED__2", parsed.GLTF.textures[1].name);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -61,16 +63,18 @@ namespace UniGLTF
|
|||
Assert.True(File.Exists(path));
|
||||
|
||||
var bytes = File.ReadAllBytes(path);
|
||||
var data = new GlbBinaryParser(bytes, Path.GetFileNameWithoutExtension(path)).Parse();
|
||||
|
||||
// glb header + 1st chunk only
|
||||
var mod = bytes.Take(12 + 8 + data.Chunks[0].Bytes.Count).ToArray();
|
||||
|
||||
Assert.Throws<GlbParseException>(() =>
|
||||
using (var data = new GlbBinaryParser(bytes, Path.GetFileNameWithoutExtension(path)).Parse())
|
||||
{
|
||||
|
||||
// glb header + 1st chunk only
|
||||
var mod = bytes.Take(12 + 8 + data.Chunks[0].Bytes.Count).ToArray();
|
||||
|
||||
Assert.Throws<GlbParseException>(() =>
|
||||
{
|
||||
// 再パース
|
||||
var data2 = new GlbBinaryParser(mod, Path.GetFileNameWithoutExtension(path)).Parse();
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -89,6 +89,7 @@ namespace UniGLTF
|
|||
Debug.LogException(ex);
|
||||
}
|
||||
|
||||
using (data)
|
||||
using (var loader = new ImporterContext(data))
|
||||
{
|
||||
try
|
||||
|
|
@ -136,12 +137,15 @@ namespace UniGLTF
|
|||
}
|
||||
|
||||
// should unique
|
||||
var gltfTextures = new GltfTextureDescriptorGenerator(data).Get().GetEnumerable()
|
||||
.Select(x => x.SubAssetKey)
|
||||
.ToArray();
|
||||
var distinct = gltfTextures.Distinct().ToArray();
|
||||
Assert.True(gltfTextures.Length == distinct.Length);
|
||||
Assert.True(gltfTextures.SequenceEqual(distinct));
|
||||
using (data)
|
||||
{
|
||||
var gltfTextures = new GltfTextureDescriptorGenerator(data).Get().GetEnumerable()
|
||||
.Select(x => x.SubAssetKey)
|
||||
.ToArray();
|
||||
var distinct = gltfTextures.Distinct().ToArray();
|
||||
Assert.True(gltfTextures.Length == distinct.Length);
|
||||
Assert.True(gltfTextures.SequenceEqual(distinct));
|
||||
}
|
||||
}
|
||||
|
||||
static bool Exclude(FileInfo f)
|
||||
|
|
@ -220,13 +224,14 @@ namespace UniGLTF
|
|||
|
||||
{
|
||||
var path = Path.Combine(root.FullName, "DamagedHelmet/glTF-Binary/DamagedHelmet.glb");
|
||||
var data = new AutoGltfFileParser(path).Parse();
|
||||
|
||||
var matDesc = new GltfMaterialDescriptorGenerator().Get(data, 0);
|
||||
Assert.AreEqual("Standard", matDesc.ShaderName);
|
||||
Assert.AreEqual(5, matDesc.TextureSlots.Count);
|
||||
var (key, value) = matDesc.EnumerateSubAssetKeyValue().First();
|
||||
Assert.AreEqual(new SubAssetKey(typeof(Texture2D), "texture_0"), key);
|
||||
using (var data = new AutoGltfFileParser(path).Parse())
|
||||
{
|
||||
var matDesc = new GltfMaterialDescriptorGenerator().Get(data, 0);
|
||||
Assert.AreEqual("Standard", matDesc.ShaderName);
|
||||
Assert.AreEqual(5, matDesc.TextureSlots.Count);
|
||||
var (key, value) = matDesc.EnumerateSubAssetKeyValue().First();
|
||||
Assert.AreEqual(new SubAssetKey(typeof(Texture2D), "texture_0"), key);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -72,6 +72,7 @@ namespace VRM
|
|||
|
||||
try
|
||||
{
|
||||
using (data)
|
||||
using (var importer = new VRMImporterContext(new VRMData(data)))
|
||||
{
|
||||
return importer.Load().gameObject;
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ namespace VRM
|
|||
{
|
||||
var data = new GlbFileParser(AliciaPath).Parse();
|
||||
byte[] bytes = default;
|
||||
using (data)
|
||||
using (var loader = new VRMImporterContext(new VRMData(data)))
|
||||
using (var loaded = loader.Load())
|
||||
{
|
||||
|
|
@ -37,7 +38,7 @@ namespace VRM
|
|||
});
|
||||
}
|
||||
|
||||
var data2 = new GlbLowLevelParser(AliciaPath, bytes).Parse();
|
||||
using (var data2 = new GlbLowLevelParser(AliciaPath, bytes).Parse())
|
||||
using (var loader2 = new VRMImporterContext(new VRMData(data2)))
|
||||
{
|
||||
Assert.AreEqual(LookAtType.BlendShape, loader2.VRM.firstPerson.lookAtType);
|
||||
|
|
@ -50,6 +51,7 @@ namespace VRM
|
|||
var data = new GlbFileParser(AliciaPath).Parse();
|
||||
byte[] bytes = default;
|
||||
CurveMapper horizontalInner = default;
|
||||
using (data)
|
||||
using (var loader = new VRMImporterContext(new VRMData(data)))
|
||||
using (var loaded = loader.Load())
|
||||
{
|
||||
|
|
@ -65,7 +67,7 @@ namespace VRM
|
|||
});
|
||||
}
|
||||
|
||||
var data2 = new GlbLowLevelParser(AliciaPath, bytes).Parse();
|
||||
using (var data2 = new GlbLowLevelParser(AliciaPath, bytes).Parse())
|
||||
using (var loader = new VRMImporterContext(new VRMData(data2)))
|
||||
using (var loaded = loader.Load())
|
||||
{
|
||||
|
|
@ -83,6 +85,7 @@ namespace VRM
|
|||
var data = new GlbFileParser(AliciaPath).Parse();
|
||||
byte[] bytes = default;
|
||||
CurveMapper horizontalInner = default;
|
||||
using (data)
|
||||
using (var loader = new VRMImporterContext(new VRMData(data)))
|
||||
using (var loaded = loader.Load())
|
||||
{
|
||||
|
|
@ -98,7 +101,7 @@ namespace VRM
|
|||
});
|
||||
}
|
||||
|
||||
var data2 = new GlbLowLevelParser(AliciaPath, bytes).Parse();
|
||||
using (var data2 = new GlbLowLevelParser(AliciaPath, bytes).Parse())
|
||||
using (var loader = new VRMImporterContext(new VRMData(data2)))
|
||||
using (var loaded = loader.Load())
|
||||
{
|
||||
|
|
|
|||
|
|
@ -22,22 +22,24 @@ namespace UniVRM10
|
|||
public void MaterialImporterTest()
|
||||
{
|
||||
var migratedBytes = MigrationVrm.Migrate(File.ReadAllBytes(AliciaPath));
|
||||
var data = new GlbLowLevelParser(AliciaPath, migratedBytes).Parse();
|
||||
using (var data = new GlbLowLevelParser(AliciaPath, migratedBytes).Parse())
|
||||
{
|
||||
|
||||
var matDesc = new Vrm10MaterialDescriptorGenerator().Get(data, 0);
|
||||
Assert.AreEqual("Alicia_body", matDesc.Name);
|
||||
Assert.AreEqual("VRM10/MToon10", matDesc.ShaderName);
|
||||
Assert.AreEqual("Alicia_body", matDesc.TextureSlots["_MainTex"].UnityObjectName);
|
||||
Assert.AreEqual("Alicia_body", matDesc.TextureSlots["_ShadeTex"].UnityObjectName);
|
||||
var matDesc = new Vrm10MaterialDescriptorGenerator().Get(data, 0);
|
||||
Assert.AreEqual("Alicia_body", matDesc.Name);
|
||||
Assert.AreEqual("VRM10/MToon10", matDesc.ShaderName);
|
||||
Assert.AreEqual("Alicia_body", matDesc.TextureSlots["_MainTex"].UnityObjectName);
|
||||
Assert.AreEqual("Alicia_body", matDesc.TextureSlots["_ShadeTex"].UnityObjectName);
|
||||
|
||||
AreColorEqualApproximately(new Color(1, 1, 1, 1), matDesc.Colors["_Color"]);
|
||||
ColorUtility.TryParseHtmlString("#FFDDD6", out var shadeColor);
|
||||
AreColorEqualApproximately(shadeColor, matDesc.Colors["_ShadeColor"]);
|
||||
AreColorEqualApproximately(new Color(1, 1, 1, 1), matDesc.Colors["_Color"]);
|
||||
ColorUtility.TryParseHtmlString("#FFDDD6", out var shadeColor);
|
||||
AreColorEqualApproximately(shadeColor, matDesc.Colors["_ShadeColor"]);
|
||||
|
||||
Assert.AreEqual(1.0f - 0.1f, matDesc.FloatValues["_GiEqualization"]);
|
||||
Assert.AreEqual(1.0f - 0.1f, matDesc.FloatValues["_GiEqualization"]);
|
||||
|
||||
var (key, value) = matDesc.EnumerateSubAssetKeyValue().First();
|
||||
Assert.AreEqual(new SubAssetKey(typeof(Texture2D), "Alicia_body"), key);
|
||||
var (key, value) = matDesc.EnumerateSubAssetKeyValue().First();
|
||||
Assert.AreEqual(new SubAssetKey(typeof(Texture2D), "Alicia_body"), key);
|
||||
}
|
||||
}
|
||||
|
||||
private void AreColorEqualApproximately(Color expected, Color actual)
|
||||
|
|
|
|||
|
|
@ -22,9 +22,11 @@ namespace UniVRM10
|
|||
|
||||
static JsonNode GetVRM0(byte[] bytes)
|
||||
{
|
||||
var glb = new GlbBinaryParser(bytes, "vrm0").Parse();
|
||||
var json = glb.Json.ParseAsJson();
|
||||
return json["extensions"]["VRM"];
|
||||
using (var glb = new GlbBinaryParser(bytes, "vrm0").Parse())
|
||||
{
|
||||
var json = glb.Json.ParseAsJson();
|
||||
return json["extensions"]["VRM"];
|
||||
}
|
||||
}
|
||||
|
||||
T GetExtension<T>(UniGLTF.glTFExtension extensions, UniJSON.Utf8String key, Func<JsonNode, T> deserializer)
|
||||
|
|
@ -50,14 +52,16 @@ namespace UniVRM10
|
|||
var vrm0Json = GetVRM0(vrm0Bytes);
|
||||
|
||||
var vrm1 = MigrationVrm.Migrate(vrm0Bytes);
|
||||
var glb = new GlbBinaryParser(vrm1, "vrm1").Parse();
|
||||
var json = glb.Json.ParseAsJson();
|
||||
var gltf = UniGLTF.GltfDeserializer.Deserialize(json);
|
||||
using (var glb = new GlbBinaryParser(vrm1, "vrm1").Parse())
|
||||
{
|
||||
var json = glb.Json.ParseAsJson();
|
||||
var gltf = UniGLTF.GltfDeserializer.Deserialize(json);
|
||||
|
||||
MigrationVrm.Check(vrm0Json, GetExtension(gltf.extensions, UniGLTF.Extensions.VRMC_vrm.GltfDeserializer.ExtensionNameUtf8,
|
||||
UniGLTF.Extensions.VRMC_vrm.GltfDeserializer.Deserialize), MigrationVrm.CreateMeshToNode(gltf));
|
||||
MigrationVrm.Check(vrm0Json, GetExtension(gltf.extensions, UniGLTF.Extensions.VRMC_springBone.GltfDeserializer.ExtensionNameUtf8,
|
||||
UniGLTF.Extensions.VRMC_springBone.GltfDeserializer.Deserialize), gltf.nodes);
|
||||
MigrationVrm.Check(vrm0Json, GetExtension(gltf.extensions, UniGLTF.Extensions.VRMC_vrm.GltfDeserializer.ExtensionNameUtf8,
|
||||
UniGLTF.Extensions.VRMC_vrm.GltfDeserializer.Deserialize), MigrationVrm.CreateMeshToNode(gltf));
|
||||
MigrationVrm.Check(vrm0Json, GetExtension(gltf.extensions, UniGLTF.Extensions.VRMC_springBone.GltfDeserializer.ExtensionNameUtf8,
|
||||
UniGLTF.Extensions.VRMC_springBone.GltfDeserializer.Deserialize), gltf.nodes);
|
||||
}
|
||||
}
|
||||
|
||||
const float EPS = 1e-4f;
|
||||
|
|
@ -195,6 +199,7 @@ namespace UniVRM10
|
|||
try
|
||||
{
|
||||
Vrm10Data.TryParseOrMigrate(gltf.FullName, true, out Vrm10Data vrm);
|
||||
using (vrm)
|
||||
using (var loader = new Vrm10Importer(vrm))
|
||||
{
|
||||
loader.LoadAsync().Wait();
|
||||
|
|
@ -218,35 +223,40 @@ namespace UniVRM10
|
|||
//
|
||||
var VALUE = new Vector3(-0.0359970331f, -0.0188314915f, 0.00566166639f);
|
||||
var bytes0 = File.ReadAllBytes(AliciaPath);
|
||||
var data0 = new GlbLowLevelParser(AliciaPath, bytes0).Parse();
|
||||
var json0 = data0.Json.ParseAsJson();
|
||||
var groupIndex = json0["extensions"]["VRM"]["secondaryAnimation"]["boneGroups"][0]["colliderGroups"][0].GetInt32();
|
||||
var x = json0["extensions"]["VRM"]["secondaryAnimation"]["colliderGroups"][groupIndex]["colliders"][0]["offset"]["x"].GetSingle();
|
||||
var y = json0["extensions"]["VRM"]["secondaryAnimation"]["colliderGroups"][groupIndex]["colliders"][0]["offset"]["y"].GetSingle();
|
||||
var z = json0["extensions"]["VRM"]["secondaryAnimation"]["colliderGroups"][groupIndex]["colliders"][0]["offset"]["z"].GetSingle();
|
||||
Assert.AreEqual(VALUE.x, x);
|
||||
Assert.AreEqual(VALUE.y, y);
|
||||
Assert.AreEqual(VALUE.z, z);
|
||||
int groupIndex = default;
|
||||
using (var data0 = new GlbLowLevelParser(AliciaPath, bytes0).Parse())
|
||||
{
|
||||
var json0 = data0.Json.ParseAsJson();
|
||||
groupIndex = json0["extensions"]["VRM"]["secondaryAnimation"]["boneGroups"][0]["colliderGroups"][0].GetInt32();
|
||||
var x = json0["extensions"]["VRM"]["secondaryAnimation"]["colliderGroups"][groupIndex]["colliders"][0]["offset"]["x"].GetSingle();
|
||||
var y = json0["extensions"]["VRM"]["secondaryAnimation"]["colliderGroups"][groupIndex]["colliders"][0]["offset"]["y"].GetSingle();
|
||||
var z = json0["extensions"]["VRM"]["secondaryAnimation"]["colliderGroups"][groupIndex]["colliders"][0]["offset"]["z"].GetSingle();
|
||||
Assert.AreEqual(VALUE.x, x);
|
||||
Assert.AreEqual(VALUE.y, y);
|
||||
Assert.AreEqual(VALUE.z, z);
|
||||
}
|
||||
|
||||
//
|
||||
// vrm1 に migrate
|
||||
//
|
||||
var bytes1 = MigrationVrm.Migrate(bytes0);
|
||||
var data1 = new GlbLowLevelParser(AliciaPath, bytes1).Parse();
|
||||
Assert.True(UniGLTF.Extensions.VRMC_springBone.GltfDeserializer.TryGet(data1.GLTF.extensions, out UniGLTF.Extensions.VRMC_springBone.VRMC_springBone springBone));
|
||||
var spring = springBone.Springs[0];
|
||||
// var colliderNodeIndex = spring.ColliderGroups[0];
|
||||
// x軸だけが反転する
|
||||
|
||||
var colliderIndex = 0;
|
||||
for (int i = 0; i < groupIndex; ++i)
|
||||
using (var data1 = new GlbLowLevelParser(AliciaPath, bytes1).Parse())
|
||||
{
|
||||
colliderIndex += springBone.ColliderGroups[i].Colliders.Length;
|
||||
}
|
||||
Assert.True(UniGLTF.Extensions.VRMC_springBone.GltfDeserializer.TryGet(data1.GLTF.extensions, out UniGLTF.Extensions.VRMC_springBone.VRMC_springBone springBone));
|
||||
var spring = springBone.Springs[0];
|
||||
// var colliderNodeIndex = spring.ColliderGroups[0];
|
||||
// x軸だけが反転する
|
||||
|
||||
Assert.AreEqual(-VALUE.x, springBone.Colliders[colliderIndex].Shape.Sphere.Offset[0]);
|
||||
Assert.AreEqual(VALUE.y, springBone.Colliders[colliderIndex].Shape.Sphere.Offset[1]);
|
||||
Assert.AreEqual(VALUE.z, springBone.Colliders[colliderIndex].Shape.Sphere.Offset[2]);
|
||||
var colliderIndex = 0;
|
||||
for (int i = 0; i < groupIndex; ++i)
|
||||
{
|
||||
colliderIndex += springBone.ColliderGroups[i].Colliders.Length;
|
||||
}
|
||||
|
||||
Assert.AreEqual(-VALUE.x, springBone.Colliders[colliderIndex].Shape.Sphere.Offset[0]);
|
||||
Assert.AreEqual(VALUE.y, springBone.Colliders[colliderIndex].Shape.Sphere.Offset[1]);
|
||||
Assert.AreEqual(VALUE.z, springBone.Colliders[colliderIndex].Shape.Sphere.Offset[2]);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ namespace UniVRM10
|
|||
public static Vrm10Instance LoadAlicia()
|
||||
{
|
||||
Vrm10Data.TryParseOrMigrate(AliciaPath, true, out Vrm10Data vrm);
|
||||
using (vrm)
|
||||
using (var loader = new Vrm10Importer(vrm))
|
||||
{
|
||||
var task = loader.LoadAsync(new VRMShaders.ImmediateCaller());
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user