563 lines
18 KiB
C#
563 lines
18 KiB
C#
using NUnit.Framework;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using UniGLTF;
|
|
using UniJSON;
|
|
using UnityEngine;
|
|
|
|
namespace VRM
|
|
{
|
|
static class ToJsonExtensions
|
|
{
|
|
public static string ToJson(this glTF self)
|
|
{
|
|
var f = new JsonFormatter();
|
|
GltfSerializer.Serialize(f, self);
|
|
return f.ToString();
|
|
}
|
|
public static string ToJson(this glTFMesh self)
|
|
{
|
|
var f = new JsonFormatter();
|
|
GltfSerializer.Serialize_gltf_meshes_ITEM(f, self);
|
|
return f.ToString();
|
|
}
|
|
public static string ToJson(this glTFPrimitives self)
|
|
{
|
|
var f = new JsonFormatter();
|
|
GltfSerializer.Serialize_gltf_meshes__primitives_ITEM(f, self);
|
|
return f.ToString();
|
|
}
|
|
public static string ToJson(this glTFAttributes self)
|
|
{
|
|
var f = new JsonFormatter();
|
|
GltfSerializer.Serialize_gltf_meshes__primitives__attributes(f, self);
|
|
return f.ToString();
|
|
}
|
|
public static string ToJson(this glTFMaterialBaseColorTextureInfo self)
|
|
{
|
|
var f = new JsonFormatter();
|
|
GltfSerializer.Serialize_gltf_materials__pbrMetallicRoughness_baseColorTexture(f, self);
|
|
return f.ToString();
|
|
}
|
|
public static string ToJson(this glTFMaterial self)
|
|
{
|
|
var f = new JsonFormatter();
|
|
GltfSerializer.Serialize_gltf_materials_ITEM(f, self);
|
|
return f.ToString();
|
|
}
|
|
public static string ToJson(this glTFNode self)
|
|
{
|
|
var f = new JsonFormatter();
|
|
GltfSerializer.Serialize_gltf_nodes_ITEM(f, self);
|
|
return f.ToString();
|
|
}
|
|
public static string ToJson(this glTFSkin self)
|
|
{
|
|
var f = new JsonFormatter();
|
|
GltfSerializer.Serialize_gltf_skins_ITEM(f, self);
|
|
return f.ToString();
|
|
}
|
|
|
|
public static string ToJson(this glTF_VRM_MaterialValueBind self)
|
|
{
|
|
var f = new JsonFormatter();
|
|
VRMSerializer.Serialize_vrm_blendShapeMaster_blendShapeGroups__materialValues_ITEM(f, self);
|
|
return f.ToString();
|
|
}
|
|
public static string ToJson(this glTF_VRM_BlendShapeBind self)
|
|
{
|
|
var f = new JsonFormatter();
|
|
VRMSerializer.Serialize_vrm_blendShapeMaster_blendShapeGroups__binds_ITEM(f, self);
|
|
return f.ToString();
|
|
}
|
|
public static string ToJson(this glTF_VRM_BlendShapeGroup self)
|
|
{
|
|
var f = new JsonFormatter();
|
|
VRMSerializer.Serialize_vrm_blendShapeMaster_blendShapeGroups_ITEM(f, self);
|
|
return f.ToString();
|
|
}
|
|
public static string ToJson(this glTF_VRM_DegreeMap self)
|
|
{
|
|
var f = new JsonFormatter();
|
|
VRMSerializer.Serialize_vrm_firstPerson_lookAtHorizontalInner(f, self);
|
|
return f.ToString();
|
|
}
|
|
public static string ToJson(this glTF_VRM_MeshAnnotation self)
|
|
{
|
|
var f = new JsonFormatter();
|
|
VRMSerializer.Serialize_vrm_firstPerson_meshAnnotations_ITEM(f, self);
|
|
return f.ToString();
|
|
}
|
|
public static string ToJson(this glTF_VRM_Firstperson self)
|
|
{
|
|
var f = new JsonFormatter();
|
|
VRMSerializer.Serialize_vrm_firstPerson(f, self);
|
|
return f.ToString();
|
|
}
|
|
public static string ToJson(this glTF_VRM_HumanoidBone self)
|
|
{
|
|
var f = new JsonFormatter();
|
|
VRMSerializer.Serialize_vrm_humanoid_humanBones_ITEM(f, self);
|
|
return f.ToString();
|
|
}
|
|
public static string ToJson(this glTF_VRM_Humanoid self)
|
|
{
|
|
var f = new JsonFormatter();
|
|
VRMSerializer.Serialize_vrm_humanoid(f, self);
|
|
return f.ToString();
|
|
}
|
|
public static string ToJson(this glTF_VRM_Material self)
|
|
{
|
|
var f = new JsonFormatter();
|
|
VRMSerializer.Serialize_vrm_materialProperties_ITEM(f, self);
|
|
return f.ToString();
|
|
}
|
|
public static string ToJson(this glTF_VRM_Meta self)
|
|
{
|
|
var f = new JsonFormatter();
|
|
VRMSerializer.Serialize_vrm_meta(f, self);
|
|
return f.ToString();
|
|
}
|
|
public static string ToJson(this glTF_VRM_SecondaryAnimationCollider self)
|
|
{
|
|
var f = new JsonFormatter();
|
|
VRMSerializer.Serialize_vrm_secondaryAnimation_colliderGroups__colliders_ITEM(f, self);
|
|
return f.ToString();
|
|
}
|
|
public static string ToJson(this glTF_VRM_SecondaryAnimationColliderGroup self)
|
|
{
|
|
var f = new JsonFormatter();
|
|
VRMSerializer.Serialize_vrm_secondaryAnimation_colliderGroups_ITEM(f, self);
|
|
return f.ToString();
|
|
}
|
|
|
|
public static string ToJson(this glTF_VRM_SecondaryAnimationGroup self)
|
|
{
|
|
var f = new JsonFormatter();
|
|
VRMSerializer.Serialize_vrm_secondaryAnimation_boneGroups_ITEM(f, self);
|
|
return f.ToString();
|
|
}
|
|
|
|
public static string ToJson(this glTF_VRM_SecondaryAnimation self)
|
|
{
|
|
var f = new JsonFormatter();
|
|
VRMSerializer.Serialize_vrm_secondaryAnimation(f, self);
|
|
return f.ToString();
|
|
}
|
|
}
|
|
|
|
public class UniVRMSerializeTests
|
|
{
|
|
[Test]
|
|
public void MaterialValueBindTest()
|
|
{
|
|
var model = new glTF_VRM_MaterialValueBind();
|
|
|
|
var json = model.ToJson();
|
|
Assert.AreEqual(@"{}", json);
|
|
Debug.Log(json);
|
|
}
|
|
|
|
[Test]
|
|
public void BlendShapeBindTest()
|
|
{
|
|
var model = new glTF_VRM_BlendShapeBind()
|
|
{
|
|
mesh = 1,
|
|
weight = 2,
|
|
index = 3,
|
|
};
|
|
|
|
var json = model.ToJson();
|
|
Assert.AreEqual(@"{""mesh"":1,""index"":3,""weight"":2}", json);
|
|
Debug.Log(json);
|
|
}
|
|
|
|
[Test]
|
|
public void BlendShapeBindTestError()
|
|
{
|
|
var model = new glTF_VRM_BlendShapeBind();
|
|
}
|
|
|
|
[Test]
|
|
public void BlendShapeGroupTest()
|
|
{
|
|
var model = new glTF_VRM_BlendShapeGroup()
|
|
{
|
|
presetName = "neutral",
|
|
};
|
|
|
|
var json = model.ToJson();
|
|
Assert.AreEqual(@"{""presetName"":""neutral"",""binds"":[],""materialValues"":[],""isBinary"":false}", json);
|
|
Debug.Log(json);
|
|
}
|
|
|
|
[Test]
|
|
public void BlendShapeGroupTestError()
|
|
{
|
|
var model = new glTF_VRM_BlendShapeGroup()
|
|
{
|
|
presetName = "aaaaaaaaaaaa_not_exists_",
|
|
};
|
|
}
|
|
|
|
[Test]
|
|
public void BlendShapePresetInvariantCultureTest()
|
|
{
|
|
// https://github.com/vrm-c/UniVRM/issues/694
|
|
// Must pass even if this computer's locale was tr-TR.
|
|
var clip2 = ScriptableObject.CreateInstance<BlendShapeClip>();
|
|
clip2.Preset = BlendShapePreset.I;
|
|
var model2 = clip2.Serialize(null);
|
|
var json2 = model2.ToJson();
|
|
Assert.AreEqual(@"{""presetName"":""i"",""binds"":[],""materialValues"":[],""isBinary"":false}", json2);
|
|
Debug.Log(json2);
|
|
}
|
|
|
|
[Test]
|
|
public void DegreeMapTest()
|
|
{
|
|
var model = new glTF_VRM_DegreeMap();
|
|
|
|
var json = model.ToJson();
|
|
Assert.AreEqual(@"{""xRange"":90,""yRange"":10}", json);
|
|
Debug.Log(json);
|
|
}
|
|
|
|
[Test]
|
|
public void MeshAnnotationTest()
|
|
{
|
|
var model = new glTF_VRM_MeshAnnotation();
|
|
|
|
var json = model.ToJson();
|
|
Assert.AreEqual(@"{""mesh"":0}", json);
|
|
Debug.Log(json);
|
|
}
|
|
|
|
[Test]
|
|
public void FirstPersonTest()
|
|
{
|
|
var model = new glTF_VRM_Firstperson();
|
|
|
|
var json = model.ToJson();
|
|
Assert.AreEqual(
|
|
@"{""firstPersonBoneOffset"":{""x"":0,""y"":0,""z"":0},""meshAnnotations"":[],""lookAtTypeName"":""Bone"",""lookAtHorizontalInner"":{""xRange"":90,""yRange"":10},""lookAtHorizontalOuter"":{""xRange"":90,""yRange"":10},""lookAtVerticalDown"":{""xRange"":90,""yRange"":10},""lookAtVerticalUp"":{""xRange"":90,""yRange"":10}}",
|
|
json);
|
|
Debug.Log(json);
|
|
}
|
|
|
|
[Test]
|
|
public void HumanoidBoneTest()
|
|
{
|
|
var model = new glTF_VRM_HumanoidBone()
|
|
{
|
|
bone = "hips", // NOTE: This field must not be null?
|
|
node = 0,
|
|
};
|
|
|
|
var json = model.ToJson();
|
|
Assert.AreEqual(@"{""bone"":""hips"",""node"":0,""useDefaultValues"":true}", json);
|
|
Debug.Log(json);
|
|
}
|
|
|
|
[Test]
|
|
public void HumanoidBoneTestError()
|
|
{
|
|
var model = new glTF_VRM_HumanoidBone()
|
|
{
|
|
bone = "hips", // NOTE: This field must not be null?
|
|
};
|
|
}
|
|
|
|
[Test]
|
|
public void HumanoidTest()
|
|
{
|
|
var model = new glTF_VRM_Humanoid();
|
|
|
|
var json = model.ToJson();
|
|
Assert.AreEqual(@"{""humanBones"":[],""armStretch"":0.05,""legStretch"":0.05,""upperArmTwist"":0.5,""lowerArmTwist"":0.5,""upperLegTwist"":0.5,""lowerLegTwist"":0.5,""feetSpacing"":0,""hasTranslationDoF"":false}", json);
|
|
Debug.Log(json);
|
|
}
|
|
|
|
[Test]
|
|
public void MaterialTest()
|
|
{
|
|
var model = new glTF_VRM_Material
|
|
{
|
|
floatProperties = new Dictionary<string, float>
|
|
{
|
|
{"float", 1.0f}
|
|
},
|
|
vectorProperties = new Dictionary<string, float[]>
|
|
{
|
|
{"vector", new float[]{0, 1, 2, 3 }}
|
|
},
|
|
textureProperties = new Dictionary<string, int>
|
|
{
|
|
{"texture", 0}
|
|
},
|
|
keywordMap = new Dictionary<string, bool>
|
|
{
|
|
{"keyword", true}
|
|
},
|
|
tagMap = new Dictionary<string, string>
|
|
{
|
|
{"tag", "map"}
|
|
},
|
|
};
|
|
|
|
var json = model.ToJson();
|
|
Assert.AreEqual(@"{""renderQueue"":-1,""floatProperties"":{""float"":1},""vectorProperties"":{""vector"":[0,1,2,3]},""textureProperties"":{""texture"":0},""keywordMap"":{""keyword"":true},""tagMap"":{""tag"":""map""}}", json);
|
|
Debug.Log(json);
|
|
}
|
|
|
|
[Test]
|
|
public void MetaTest()
|
|
{
|
|
var model = new glTF_VRM_Meta()
|
|
{
|
|
allowedUserName = "OnlyAuthor",
|
|
violentUssageName = "Disallow",
|
|
sexualUssageName = "Disallow",
|
|
commercialUssageName = "Disallow",
|
|
licenseName = "CC0",
|
|
};
|
|
|
|
var json = model.ToJson();
|
|
Assert.AreEqual(@"{""allowedUserName"":""OnlyAuthor"",""violentUssageName"":""Disallow"",""sexualUssageName"":""Disallow"",""commercialUssageName"":""Disallow"",""licenseName"":""CC0""}", json);
|
|
Debug.Log(json);
|
|
}
|
|
|
|
[Test]
|
|
public void MetaTestError()
|
|
{
|
|
{
|
|
var model = new glTF_VRM_Meta()
|
|
{
|
|
allowedUserName = null,
|
|
violentUssageName = null,
|
|
sexualUssageName = null,
|
|
commercialUssageName = null,
|
|
};
|
|
}
|
|
|
|
{
|
|
var model = new glTF_VRM_Meta()
|
|
{
|
|
allowedUserName = "OnlyAuthor",
|
|
violentUssageName = "Disallow",
|
|
sexualUssageName = "Disallow",
|
|
commercialUssageName = "Disallow",
|
|
//licenseName = "CC0",
|
|
licenseName = null,
|
|
};
|
|
}
|
|
|
|
{
|
|
var model = new glTF_VRM_Meta()
|
|
{
|
|
allowedUserName = "OnlyAuthor",
|
|
violentUssageName = "Disallow",
|
|
sexualUssageName = "Disallow",
|
|
commercialUssageName = "Disallow",
|
|
licenseName = "_INVALID_SOME_THING_",
|
|
};
|
|
}
|
|
|
|
{
|
|
var model = new glTF_VRM_Meta()
|
|
{
|
|
// allowedUserName = "OnlyAuthor",
|
|
allowedUserName = null,
|
|
violentUssageName = "Disallow",
|
|
sexualUssageName = "Disallow",
|
|
commercialUssageName = "Disallow",
|
|
licenseName = "CC0",
|
|
};
|
|
}
|
|
|
|
{
|
|
var model = new glTF_VRM_Meta()
|
|
{
|
|
allowedUserName = "_INVALID_SOME_THING_",
|
|
violentUssageName = "Disallow",
|
|
sexualUssageName = "Disallow",
|
|
commercialUssageName = "Disallow",
|
|
licenseName = "CC0",
|
|
};
|
|
}
|
|
|
|
{
|
|
var model = new glTF_VRM_Meta()
|
|
{
|
|
allowedUserName = "OnlyAuthor",
|
|
//violentUssageName = "Disallow",
|
|
violentUssageName = null,
|
|
sexualUssageName = "Disallow",
|
|
commercialUssageName = "Disallow",
|
|
licenseName = "CC0",
|
|
};
|
|
}
|
|
|
|
{
|
|
var model = new glTF_VRM_Meta()
|
|
{
|
|
allowedUserName = "OnlyAuthor",
|
|
violentUssageName = "_INVALID_SOME_THING_",
|
|
sexualUssageName = "Disallow",
|
|
commercialUssageName = "Disallow",
|
|
licenseName = "CC0",
|
|
};
|
|
}
|
|
|
|
{
|
|
var model = new glTF_VRM_Meta()
|
|
{
|
|
allowedUserName = "OnlyAuthor",
|
|
violentUssageName = "Disallow",
|
|
//sexualUssageName = "Disallow",
|
|
sexualUssageName = null,
|
|
commercialUssageName = "Disallow",
|
|
licenseName = "CC0",
|
|
};
|
|
}
|
|
|
|
{
|
|
var model = new glTF_VRM_Meta()
|
|
{
|
|
allowedUserName = "OnlyAuthor",
|
|
violentUssageName = "Disallow",
|
|
sexualUssageName = "_INVALID_SOME_THING_",
|
|
commercialUssageName = "Disallow",
|
|
licenseName = "CC0",
|
|
};
|
|
}
|
|
|
|
{
|
|
var model = new glTF_VRM_Meta()
|
|
{
|
|
allowedUserName = "OnlyAuthor",
|
|
violentUssageName = "Disallow",
|
|
sexualUssageName = "Disallow",
|
|
//commercialUssageName = "Disallow",
|
|
commercialUssageName = null,
|
|
licenseName = "CC0",
|
|
};
|
|
}
|
|
|
|
{
|
|
var model = new glTF_VRM_Meta()
|
|
{
|
|
allowedUserName = "OnlyAuthor",
|
|
violentUssageName = "Disallow",
|
|
sexualUssageName = "Disallow",
|
|
commercialUssageName = "_INVALID_SOME_THING_",
|
|
licenseName = "CC0",
|
|
};
|
|
}
|
|
}
|
|
|
|
// TODO: Move to another suitable location
|
|
[Test]
|
|
public void MetaDeserializeTest()
|
|
{
|
|
var json = @"{}";
|
|
|
|
var model = deserialize<glTF_VRM_Meta>(json);
|
|
|
|
Assert.AreEqual(-1, model.texture);
|
|
}
|
|
|
|
[Test]
|
|
public void SecondaryAnimationColliderTest()
|
|
{
|
|
var model = new glTF_VRM_SecondaryAnimationCollider()
|
|
{
|
|
offset = new Vector3(1, 2, 3),
|
|
radius = 42,
|
|
};
|
|
|
|
var json = model.ToJson();
|
|
Assert.AreEqual(@"{""offset"":{""x"":1,""y"":2,""z"":3},""radius"":42}", json);
|
|
Debug.Log(json);
|
|
}
|
|
|
|
[Test]
|
|
public void SecondaryAnimationColliderGroupTest()
|
|
{
|
|
var model = new glTF_VRM_SecondaryAnimationColliderGroup();
|
|
|
|
var json = model.ToJson();
|
|
Assert.AreEqual(@"{""node"":0,""colliders"":[]}", json);
|
|
Debug.Log(json);
|
|
}
|
|
|
|
[Test]
|
|
public void SecondaryAnimationColliderGroupTestError()
|
|
{
|
|
var model = new glTF_VRM_SecondaryAnimationColliderGroup()
|
|
{
|
|
node = -1,
|
|
};
|
|
}
|
|
|
|
[Test]
|
|
public void SecondaryAnimationGroupTest()
|
|
{
|
|
var model = new glTF_VRM_SecondaryAnimationGroup();
|
|
|
|
var json = model.ToJson();
|
|
Assert.AreEqual(@"{""stiffiness"":0,""gravityPower"":0,""gravityDir"":{""x"":0,""y"":0,""z"":0},""dragForce"":0,""center"":0,""hitRadius"":0,""bones"":[],""colliderGroups"":[]}", json);
|
|
Debug.Log(json);
|
|
}
|
|
|
|
[Test]
|
|
public void SecondaryAnimationGroupTestErrorBones()
|
|
{
|
|
var model = new glTF_VRM_SecondaryAnimationGroup()
|
|
{
|
|
bones = new int[] { -1 }
|
|
};
|
|
}
|
|
|
|
[Test]
|
|
public void SecondaryAnimationGroupTestErrorColliderGroups()
|
|
{
|
|
var model = new glTF_VRM_SecondaryAnimationGroup()
|
|
{
|
|
colliderGroups = new int[] { -1 }
|
|
};
|
|
}
|
|
|
|
[Test]
|
|
public void SecondaryAnimationTest()
|
|
{
|
|
var model = new glTF_VRM_SecondaryAnimation();
|
|
|
|
var json = model.ToJson();
|
|
Assert.AreEqual(@"{""boneGroups"":[],""colliderGroups"":[]}", json);
|
|
Debug.Log(json);
|
|
}
|
|
|
|
[Test]
|
|
public void ExtensionsTest()
|
|
{
|
|
var model = new glTF_VRM_extensions()
|
|
{
|
|
meta = null,
|
|
humanoid = null,
|
|
firstPerson = null,
|
|
blendShapeMaster = null,
|
|
secondaryAnimation = null,
|
|
materialProperties = null,
|
|
};
|
|
}
|
|
|
|
// TODO: Move to another suitable location
|
|
T deserialize<T>(string json)
|
|
{
|
|
return JsonUtility.FromJson<T>(json);
|
|
}
|
|
}
|
|
}
|