mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-07-12 22:22:15 -05:00
Merge pull request #110 from saturday06/fix-invalid-gltf-value-output
Remove invalid json like `meshes[].primitives[].targets[].TANGENT = -1`
This commit is contained in:
commit
7fee636df8
|
|
@ -191,5 +191,81 @@ namespace UniGLTF
|
|||
Debug.Log(json);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GlTFToJsonTest()
|
||||
{
|
||||
var gltf = new glTF();
|
||||
using (var exporter = new gltfExporter(gltf))
|
||||
{
|
||||
exporter.Prepare(CreateSimpleScene());
|
||||
exporter.Export();
|
||||
}
|
||||
|
||||
var expected = gltf.ToJson().ParseAsJson();
|
||||
expected.AddKey(Utf8String.From("meshes"));
|
||||
expected.AddValue(default(ArraySegment<byte>), ValueNodeType.Array);
|
||||
expected["meshes"].AddValue(default(ArraySegment<byte>), ValueNodeType.Object);
|
||||
|
||||
var mesh = expected["meshes"][0];
|
||||
mesh.AddKey(Utf8String.From("name"));
|
||||
mesh.AddValue(Utf8String.From(JsonString.Quote("test")).Bytes, ValueNodeType.String);
|
||||
mesh.AddKey(Utf8String.From("primitives"));
|
||||
mesh.AddValue(default(ArraySegment<byte>), ValueNodeType.Array);
|
||||
mesh["primitives"].AddValue(default(ArraySegment<byte>), ValueNodeType.Object);
|
||||
|
||||
var primitive = mesh["primitives"][0];
|
||||
primitive.AddKey(Utf8String.From("mode"));
|
||||
primitive.AddValue(Utf8String.From("0").Bytes, ValueNodeType.Integer);
|
||||
primitive.AddKey(Utf8String.From("indices"));
|
||||
primitive.AddValue(Utf8String.From("0").Bytes, ValueNodeType.Integer);
|
||||
primitive.AddKey(Utf8String.From("material"));
|
||||
primitive.AddValue(Utf8String.From("0").Bytes, ValueNodeType.Integer);
|
||||
primitive.AddKey(Utf8String.From("attributes"));
|
||||
primitive.AddValue(default(ArraySegment<byte>), ValueNodeType.Object);
|
||||
primitive["attributes"].AddKey(Utf8String.From("POSITION"));
|
||||
primitive["attributes"].AddValue(Utf8String.From("0").Bytes, ValueNodeType.Integer);
|
||||
primitive.AddKey(Utf8String.From("targets"));
|
||||
primitive.AddValue(default(ArraySegment<byte>), ValueNodeType.Array);
|
||||
primitive["targets"].AddValue(default(ArraySegment<byte>), ValueNodeType.Object);
|
||||
primitive["targets"][0].AddKey(Utf8String.From("POSITION"));
|
||||
primitive["targets"][0].AddValue(Utf8String.From("1").Bytes, ValueNodeType.Integer);
|
||||
primitive["targets"].AddValue(default(ArraySegment<byte>), ValueNodeType.Object);
|
||||
primitive["targets"][1].AddKey(Utf8String.From("POSITION"));
|
||||
primitive["targets"][1].AddValue(Utf8String.From("2").Bytes, ValueNodeType.Integer);
|
||||
primitive["targets"][1].AddKey(Utf8String.From("TANGENT"));
|
||||
primitive["targets"][1].AddValue(Utf8String.From("0").Bytes, ValueNodeType.Integer);
|
||||
|
||||
gltf.meshes.Add(new glTFMesh("test")
|
||||
{
|
||||
primitives = new List<glTFPrimitives>
|
||||
{
|
||||
new glTFPrimitives
|
||||
{
|
||||
indices = 0,
|
||||
attributes = new glTFAttributes
|
||||
{
|
||||
POSITION = 0,
|
||||
TANGENT = -1 // should be removed
|
||||
},
|
||||
targets = new List<gltfMorphTarget>
|
||||
{
|
||||
new gltfMorphTarget
|
||||
{
|
||||
POSITION = 1,
|
||||
TANGENT = -1 // should be removed
|
||||
},
|
||||
new gltfMorphTarget
|
||||
{
|
||||
POSITION = 2,
|
||||
TANGENT = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
var actual = gltf.ToJson().ParseAsJson();
|
||||
|
||||
Assert.AreEqual(expected, actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ namespace UniGLTF
|
|||
{
|
||||
if (KHR_materials_unlit != null)
|
||||
{
|
||||
f.KeyValue(() => KHR_materials_unlit);
|
||||
f.Key("KHR_materials_unlit"); f.GLTFValue(KHR_materials_unlit);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -345,23 +345,23 @@ namespace UniGLTF
|
|||
{
|
||||
if (extensionsUsed.Count > 0)
|
||||
{
|
||||
f.KeyValue(() => extensionsUsed);
|
||||
f.Key("extensionsUsed"); f.GLTFValue(extensionsUsed);
|
||||
}
|
||||
if (extensions.__count > 0)
|
||||
{
|
||||
f.KeyValue(() => extensions);
|
||||
f.Key("extensions"); f.GLTFValue(extensions);
|
||||
}
|
||||
if (extras.__count > 0)
|
||||
{
|
||||
f.KeyValue(() => extras);
|
||||
f.Key("extras"); f.GLTFValue(extras);
|
||||
}
|
||||
|
||||
f.KeyValue(() => asset);
|
||||
f.Key("asset"); f.GLTFValue(asset);
|
||||
|
||||
// buffer
|
||||
if (buffers.Any())
|
||||
{
|
||||
f.KeyValue(() => buffers);
|
||||
f.Key("buffers"); f.GLTFValue(buffers);
|
||||
}
|
||||
if (bufferViews.Any())
|
||||
{
|
||||
|
|
@ -399,21 +399,21 @@ namespace UniGLTF
|
|||
// meshes
|
||||
if (meshes.Any())
|
||||
{
|
||||
f.KeyValue(() => meshes);
|
||||
f.Key("meshes"); f.GLTFValue(meshes);
|
||||
}
|
||||
if (skins.Any())
|
||||
{
|
||||
f.KeyValue(() => skins);
|
||||
f.Key("skins"); f.GLTFValue(skins);
|
||||
}
|
||||
|
||||
// scene
|
||||
if (nodes.Any())
|
||||
{
|
||||
f.KeyValue(() => nodes);
|
||||
f.Key("nodes"); f.GLTFValue(nodes);
|
||||
}
|
||||
if (scenes.Any())
|
||||
{
|
||||
f.KeyValue(() => scenes);
|
||||
f.Key("scenes"); f.GLTFValue(scenes);
|
||||
if (scene >= 0)
|
||||
{
|
||||
f.KeyValue(() => scene);
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@ namespace UniGLTF
|
|||
protected override void SerializeMembers(GLTFJsonFormatter f)
|
||||
{
|
||||
f.KeyValue(() => sampler);
|
||||
f.KeyValue(() => target);
|
||||
f.Key("target"); f.GLTFValue(target);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -175,8 +175,8 @@ namespace UniGLTF
|
|||
f.KeyValue(() => name);
|
||||
}
|
||||
|
||||
f.KeyValue(() => channels);
|
||||
f.KeyValue(() => samplers);
|
||||
f.Key("channels"); f.GLTFValue(channels);
|
||||
f.Key("samplers"); f.GLTFValue(samplers);
|
||||
}
|
||||
|
||||
public int AddChannelAndGetSampler(int nodeIndex, glTFAnimationTarget.AnimationPropertys property)
|
||||
|
|
|
|||
|
|
@ -169,8 +169,8 @@ namespace UniGLTF
|
|||
protected override void SerializeMembers(GLTFJsonFormatter f)
|
||||
{
|
||||
f.KeyValue(() => count);
|
||||
f.KeyValue(() => indices);
|
||||
f.KeyValue(() => values);
|
||||
f.Key("indices"); f.GLTFValue(indices);
|
||||
f.Key("values"); f.GLTFValue(values);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -251,7 +251,7 @@ namespace UniGLTF
|
|||
|
||||
if (sparse != null && sparse.count > 0)
|
||||
{
|
||||
f.KeyValue(() => sparse);
|
||||
f.Key("sparse"); f.GLTFValue(sparse);
|
||||
}
|
||||
|
||||
f.KeyValue(() => normalized);
|
||||
|
|
|
|||
|
|
@ -128,7 +128,7 @@ namespace UniGLTF
|
|||
{
|
||||
if (baseColorTexture != null)
|
||||
{
|
||||
f.KeyValue(() => baseColorTexture);
|
||||
f.Key("baseColorTexture"); f.GLTFValue(baseColorTexture);
|
||||
}
|
||||
if (baseColorFactor != null)
|
||||
{
|
||||
|
|
@ -136,7 +136,7 @@ namespace UniGLTF
|
|||
}
|
||||
if (metallicRoughnessTexture != null)
|
||||
{
|
||||
f.KeyValue(() => metallicRoughnessTexture);
|
||||
f.Key("metallicRoughnessTexture"); f.GLTFValue(metallicRoughnessTexture);
|
||||
}
|
||||
f.KeyValue(() => metallicFactor);
|
||||
f.KeyValue(() => roughnessFactor);
|
||||
|
|
@ -206,7 +206,7 @@ namespace UniGLTF
|
|||
|
||||
if (extensions != null)
|
||||
{
|
||||
f.KeyValue(() => extensions);
|
||||
f.Key("extensions"); f.GLTFValue(extensions);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -125,11 +125,11 @@ namespace UniGLTF
|
|||
}
|
||||
if (extensions.KHR_draco_mesh_compression != null)
|
||||
{
|
||||
f.KeyValue(() => extensions);
|
||||
f.Key("extensions"); f.GLTFValue(extensions);
|
||||
}
|
||||
if (extras.targetNames.Count > 0)
|
||||
{
|
||||
f.KeyValue(() => extras);
|
||||
f.Key("extras"); f.GLTFValue(extras);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ namespace UniGLTF
|
|||
|
||||
if (extras.__count > 0)
|
||||
{
|
||||
f.KeyValue(() => extras);
|
||||
f.Key("extras"); f.GLTFValue(extras);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ namespace UniGLTF
|
|||
[JsonSerializeMembers]
|
||||
void VRMSerializeMembers(GLTFJsonFormatter f)
|
||||
{
|
||||
f.KeyValue(() => VRM);
|
||||
f.Key("VRM"); f.GLTFValue(VRM);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -47,12 +47,12 @@ VRM extension is for 3d humanoid avatars (and models) in VR applications.
|
|||
protected override void SerializeMembers(GLTFJsonFormatter f)
|
||||
{
|
||||
f.KeyValue(() => exporterVersion);
|
||||
f.KeyValue(() => meta);
|
||||
f.KeyValue(() => humanoid);
|
||||
f.KeyValue(() => firstPerson);
|
||||
f.KeyValue(() => blendShapeMaster);
|
||||
f.KeyValue(() => secondaryAnimation);
|
||||
f.KeyValue(() => materialProperties);
|
||||
f.Key("meta"); f.GLTFValue(meta);
|
||||
f.Key("humanoid"); f.GLTFValue(humanoid);
|
||||
f.Key("firstPerson"); f.GLTFValue(firstPerson);
|
||||
f.Key("blendShapeMaster"); f.GLTFValue(blendShapeMaster);
|
||||
f.Key("secondaryAnimation"); f.GLTFValue(secondaryAnimation);
|
||||
f.Key("materialProperties"); f.GLTFValue(materialProperties);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -132,8 +132,8 @@ namespace VRM
|
|||
f.KeyValue(() => name);
|
||||
f.KeyValue(() => presetName);
|
||||
f.KeyValue(() => isBinary);
|
||||
f.KeyValue(() => binds);
|
||||
f.KeyValue(() => materialValues);
|
||||
f.Key("binds"); f.GLTFValue(binds);
|
||||
f.Key("materialValues"); f.GLTFValue(materialValues);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -175,7 +175,7 @@ namespace VRM
|
|||
|
||||
protected override void SerializeMembers(GLTFJsonFormatter f)
|
||||
{
|
||||
f.KeyValue(() => blendShapeGroups);
|
||||
f.Key("blendShapeGroups"); f.GLTFValue(blendShapeGroups);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -112,13 +112,13 @@ namespace VRM
|
|||
{
|
||||
f.KeyValue(() => firstPersonBone);
|
||||
f.KeyValue(() => firstPersonBoneOffset);
|
||||
f.KeyValue(() => meshAnnotations);
|
||||
f.Key("meshAnnotations"); f.GLTFValue(meshAnnotations);
|
||||
|
||||
f.KeyValue(() => lookAtTypeName);
|
||||
f.KeyValue(() => lookAtHorizontalInner);
|
||||
f.KeyValue(() => lookAtHorizontalOuter);
|
||||
f.KeyValue(() => lookAtVerticalDown);
|
||||
f.KeyValue(() => lookAtVerticalUp);
|
||||
f.Key("lookAtHorizontalInner"); f.GLTFValue(lookAtHorizontalInner);
|
||||
f.Key("lookAtHorizontalOuter"); f.GLTFValue(lookAtHorizontalOuter);
|
||||
f.Key("lookAtVerticalDown"); f.GLTFValue(lookAtVerticalDown);
|
||||
f.Key("lookAtVerticalUp"); f.GLTFValue(lookAtVerticalUp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -246,7 +246,7 @@ namespace VRM
|
|||
|
||||
protected override void SerializeMembers(GLTFJsonFormatter f)
|
||||
{
|
||||
f.KeyValue(() => humanBones);
|
||||
f.Key("humanBones"); f.GLTFValue(humanBones);
|
||||
f.KeyValue(() => armStretch);
|
||||
f.KeyValue(() => legStretch);
|
||||
f.KeyValue(() => upperArmTwist);
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ namespace VRM
|
|||
protected override void SerializeMembers(GLTFJsonFormatter f)
|
||||
{
|
||||
f.KeyValue(() => node);
|
||||
f.KeyValue(() => colliders);
|
||||
f.Key("colliders"); f.GLTFValue(colliders);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -95,8 +95,8 @@ namespace VRM
|
|||
|
||||
protected override void SerializeMembers(GLTFJsonFormatter f)
|
||||
{
|
||||
f.KeyValue(() => boneGroups);
|
||||
f.KeyValue(() => colliderGroups);
|
||||
f.Key("boneGroups"); f.GLTFValue(boneGroups);
|
||||
f.Key("colliderGroups"); f.GLTFValue(colliderGroups);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user