public void UnityMaterialTest(string materialName, Type vrmLibMaterialType, bool sameShader = true) { // asset (cerate copy for avoid modify asset) var src = new Material(Resources.Load <Material>(materialName)); // asset => vrmlib var converter = new UniVRM10.RuntimeVrmConverter(); var vrmLibMaterial = converter.Export10(src, (a, b, c, d) => null); Assert.AreEqual(vrmLibMaterialType, vrmLibMaterial.GetType()); // vrmlib => gltf var textures = new List <VrmLib.Texture>(); var(gltfMaterial, hasKhrUnlit) = ToProtobufMaterial(vrmLibMaterial, textures); if (gltfMaterial.extensions != null) { gltfMaterial.extensions = gltfMaterial.extensions.Deserialize(); } Assert.AreEqual(hasKhrUnlit, glTF_KHR_materials_unlit.IsEnable(gltfMaterial)); // gltf => json var jsonMaterial = Serialize(gltfMaterial, UniGLTF.GltfSerializer.Serialize_gltf_materials_ITEM); // gltf <= json var deserialized = UniGLTF.GltfDeserializer.Deserialize_gltf_materials_LIST(jsonMaterial.ParseAsJson()); // vrmlib <= gltf var loaded = deserialized.FromGltf(textures); var context = ModelDiffContext.Create(); ModelDiffExtensions.MaterialEquals(context, vrmLibMaterial, loaded); var diff = context.List .Where(x => !s_ignoreKeys.Contains(x.Context)) .ToArray(); if (diff.Length > 0) { Debug.LogWarning(string.Join("\n", diff.Select(x => $"{x.Context}: {x.Message}"))); } Assert.AreEqual(0, diff.Length); // <= vrmlib var map = new Dictionary <VrmLib.Texture, Texture2D>(); var dst = UniVRM10.RuntimeUnityMaterialBuilder.CreateMaterialAsset(loaded, hasVertexColor: false, map); dst.name = src.name; if (sameShader) { CompareUnityMaterial(src, dst); } }
public void UnityMaterialTest(string materialName, Type vrmLibMaterialType, bool sameShader = true) { // cerate copy avoid modify asset var src = new Material(Resources.Load <Material>(materialName)); // => vrmlib var converter = new UniVRM10.RuntimeVrmConverter(); var vrmLibMaterial = converter.Export10(src, (a, b, c, d) => null); Assert.AreEqual(vrmLibMaterialType, vrmLibMaterial.GetType()); // => protobuf var textures = new List <VrmLib.Texture>(); var(protobufMaterial, hasKhrUnlit) = ToProtobufMaterial(vrmLibMaterial, textures); Assert.AreEqual(hasKhrUnlit, protobufMaterial.Extensions?.KHRMaterialsUnlit != null); // => json var settings = Google.Protobuf.JsonFormatter.Settings.Default.WithPreserveProtoFieldNames(true); var jsonMaterial = new Google.Protobuf.JsonFormatter(settings).Format(protobufMaterial); // <= json var parserSettings = Google.Protobuf.JsonParser.Settings.Default; var deserialized = new Google.Protobuf.JsonParser(parserSettings).Parse <VrmProtobuf.Material>(jsonMaterial); // <= protobuf var loaded = deserialized.FromGltf(textures); var context = ModelDiffContext.Create(); ModelDiffExtensions.MaterialEquals(context, vrmLibMaterial, loaded); var diff = context.List .Where(x => !s_ignoreKeys.Contains(x.Context)) .ToArray(); if (diff.Length > 0) { Debug.LogWarning(string.Join("\n", diff.Select(x => $"{x.Context}: {x.Message}"))); } Assert.AreEqual(0, diff.Length); // <= vrmlib var map = new Dictionary <VrmLib.Texture, Texture2D>(); var dst = UniVRM10.RuntimeUnityMaterialBuilder.CreateMaterialAsset(loaded, hasVertexColor: false, map); dst.name = src.name; if (sameShader) { CompareUnityMaterial(src, dst); } }