268 lines
10 KiB
C#
268 lines
10 KiB
C#
using NUnit.Framework;
|
|
using UnityEngine;
|
|
using UniJSON;
|
|
using System.Linq;
|
|
using VRMShaders;
|
|
|
|
namespace UniGLTF
|
|
{
|
|
public class MaterialTests
|
|
{
|
|
|
|
[Test]
|
|
public void TextureTransformTest()
|
|
{
|
|
var tex0 = new Texture2D(128, 128)
|
|
{
|
|
wrapMode = TextureWrapMode.Repeat,
|
|
filterMode = FilterMode.Bilinear,
|
|
};
|
|
|
|
var textureExporter = new TextureExporter(new EditorTextureSerializer());
|
|
var srcMaterial = new Material(Shader.Find("Standard"));
|
|
|
|
var offset = new Vector2(0.3f, 0.2f);
|
|
var scale = new Vector2(0.5f, 0.6f);
|
|
|
|
srcMaterial.mainTexture = tex0;
|
|
srcMaterial.mainTextureOffset = offset;
|
|
srcMaterial.mainTextureScale = scale;
|
|
|
|
var materialExporter = new MaterialExporter();
|
|
var gltfMaterial = materialExporter.ExportMaterial(srcMaterial, textureExporter, new GltfExportSettings());
|
|
gltfMaterial.pbrMetallicRoughness.baseColorTexture.extensions = gltfMaterial.pbrMetallicRoughness.baseColorTexture.extensions.Deserialize();
|
|
|
|
Assert.IsTrue(glTF_KHR_texture_transform.TryGet(gltfMaterial.pbrMetallicRoughness.baseColorTexture, out glTF_KHR_texture_transform t));
|
|
Assert.AreEqual(t.offset[0], offset.x, 0.3f);
|
|
Assert.AreEqual(t.offset[1], offset.y, 0.2f);
|
|
Assert.AreEqual(t.scale[0], scale.x, 0.5f);
|
|
Assert.AreEqual(t.scale[1], scale.y, 0.6f);
|
|
}
|
|
|
|
[Test]
|
|
public void glTF_KHR_materials_unlit_Test()
|
|
{
|
|
{
|
|
var value = "{}".ParseAsJson();
|
|
Assert.AreEqual(value.Value.ValueType, ValueNodeType.Object);
|
|
Assert.AreEqual(0, value.GetObjectCount());
|
|
var list = value.ObjectItems().ToArray();
|
|
Assert.AreEqual(0, list.Length);
|
|
}
|
|
|
|
{
|
|
var value = "{\"unlit\":{}}".ParseAsJson();
|
|
Assert.AreEqual(value.Value.ValueType, ValueNodeType.Object);
|
|
Assert.AreEqual(1, value.GetObjectCount());
|
|
var list = value.ObjectItems().ToArray();
|
|
Assert.AreEqual(1, list.Length);
|
|
Assert.AreEqual("unlit", list[0].Key.GetString());
|
|
Assert.AreEqual(0, list[0].Value.GetObjectCount());
|
|
}
|
|
|
|
{
|
|
var extension = glTF_KHR_materials_unlit.ForTest();
|
|
var list = extension.ObjectItems().ToArray();
|
|
Assert.AreEqual(1, list.Length);
|
|
Assert.AreEqual(glTF_KHR_materials_unlit.ExtensionNameUtf8, list[0].Key.GetUtf8String());
|
|
Assert.AreEqual(0, list[0].Value.GetObjectCount());
|
|
|
|
var gltfMaterial = new glTFMaterial
|
|
{
|
|
alphaMode = "OPAQUE",
|
|
pbrMetallicRoughness = new glTFPbrMetallicRoughness
|
|
{
|
|
baseColorFactor = new float[] { 1, 0, 0, 1 },
|
|
},
|
|
extensions = extension,
|
|
};
|
|
|
|
Assert.IsTrue(glTF_KHR_materials_unlit.IsEnable(gltfMaterial));
|
|
|
|
Assert.IsTrue(glTF_KHR_materials_unlit.IsEnable(gltfMaterial));
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
public void UnlitShaderImportTest()
|
|
{
|
|
{
|
|
// OPAQUE/Color
|
|
var gltfMaterial = new glTFMaterial
|
|
{
|
|
alphaMode = "OPAQUE",
|
|
pbrMetallicRoughness = new glTFPbrMetallicRoughness
|
|
{
|
|
baseColorFactor = new float[] { 1, 0, 0, 1 },
|
|
},
|
|
extensions = glTF_KHR_materials_unlit.ForTest(),
|
|
};
|
|
Assert.IsTrue(glTF_KHR_materials_unlit.IsEnable(gltfMaterial));
|
|
}
|
|
|
|
{
|
|
// OPAQUE/Texture
|
|
var gltfMaterial = new glTFMaterial
|
|
{
|
|
alphaMode = "OPAQUE",
|
|
pbrMetallicRoughness = new glTFPbrMetallicRoughness
|
|
{
|
|
baseColorTexture = new glTFMaterialBaseColorTextureInfo
|
|
{
|
|
index = 0,
|
|
},
|
|
},
|
|
extensions = glTF_KHR_materials_unlit.ForTest(),
|
|
};
|
|
Assert.IsTrue(glTF_KHR_materials_unlit.IsEnable(gltfMaterial));
|
|
}
|
|
|
|
{
|
|
// OPAQUE/Color/Texture
|
|
var gltfMaterial = new glTFMaterial
|
|
{
|
|
alphaMode = "OPAQUE",
|
|
pbrMetallicRoughness = new glTFPbrMetallicRoughness
|
|
{
|
|
baseColorFactor = new float[] { 1, 0, 0, 1 },
|
|
baseColorTexture = new glTFMaterialBaseColorTextureInfo
|
|
{
|
|
index = 0
|
|
},
|
|
},
|
|
extensions = glTF_KHR_materials_unlit.ForTest(),
|
|
};
|
|
Assert.IsTrue(glTF_KHR_materials_unlit.IsEnable(gltfMaterial));
|
|
}
|
|
|
|
{
|
|
// BLEND/Color
|
|
var gltfMaterial = new glTFMaterial
|
|
{
|
|
alphaMode = "BLEND",
|
|
pbrMetallicRoughness = new glTFPbrMetallicRoughness
|
|
{
|
|
baseColorFactor = new float[] { 1, 0, 0, 1 },
|
|
},
|
|
extensions = glTF_KHR_materials_unlit.ForTest(),
|
|
};
|
|
Assert.IsTrue(glTF_KHR_materials_unlit.IsEnable(gltfMaterial));
|
|
}
|
|
|
|
{
|
|
// BLEND/Texture
|
|
var gltfMaterial = new glTFMaterial
|
|
{
|
|
alphaMode = "BLEND",
|
|
pbrMetallicRoughness = new glTFPbrMetallicRoughness
|
|
{
|
|
baseColorTexture = new glTFMaterialBaseColorTextureInfo
|
|
{
|
|
index = 0,
|
|
},
|
|
},
|
|
extensions = glTF_KHR_materials_unlit.ForTest(),
|
|
};
|
|
Assert.IsTrue(glTF_KHR_materials_unlit.IsEnable(gltfMaterial));
|
|
}
|
|
|
|
{
|
|
// BLEND/Color/Texture
|
|
var gltfMaterial = new glTFMaterial
|
|
{
|
|
alphaMode = "BLEND",
|
|
pbrMetallicRoughness = new glTFPbrMetallicRoughness
|
|
{
|
|
baseColorFactor = new float[] { 1, 0, 0, 1 },
|
|
baseColorTexture = new glTFMaterialBaseColorTextureInfo
|
|
{
|
|
index = 0,
|
|
},
|
|
},
|
|
extensions = glTF_KHR_materials_unlit.ForTest(),
|
|
};
|
|
Assert.IsTrue(glTF_KHR_materials_unlit.IsEnable(gltfMaterial));
|
|
}
|
|
|
|
{
|
|
// MASK/Texture
|
|
var gltfMaterial = new glTFMaterial
|
|
{
|
|
alphaMode = "MASK",
|
|
pbrMetallicRoughness = new glTFPbrMetallicRoughness
|
|
{
|
|
baseColorTexture = new glTFMaterialBaseColorTextureInfo
|
|
{
|
|
index = 0,
|
|
},
|
|
},
|
|
extensions = glTF_KHR_materials_unlit.ForTest(),
|
|
};
|
|
Assert.IsTrue(glTF_KHR_materials_unlit.IsEnable(gltfMaterial));
|
|
}
|
|
|
|
{
|
|
// MASK/Color/Texture
|
|
var gltfMaterial = new glTFMaterial
|
|
{
|
|
alphaMode = "MASK",
|
|
pbrMetallicRoughness = new glTFPbrMetallicRoughness
|
|
{
|
|
baseColorFactor = new float[] { 1, 0, 0, 1 },
|
|
baseColorTexture = new glTFMaterialBaseColorTextureInfo
|
|
{
|
|
index = 0,
|
|
},
|
|
},
|
|
extensions = glTF_KHR_materials_unlit.ForTest(),
|
|
};
|
|
Assert.IsTrue(glTF_KHR_materials_unlit.IsEnable(gltfMaterial));
|
|
}
|
|
|
|
{
|
|
// default
|
|
var gltfMaterial = new glTFMaterial
|
|
{
|
|
extensions = glTF_KHR_materials_unlit.ForTest(),
|
|
};
|
|
Assert.IsTrue(glTF_KHR_materials_unlit.IsEnable(gltfMaterial));
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
public void MaterialEmissiveStrengthTest()
|
|
{
|
|
// serialize
|
|
var material = new glTFMaterial();
|
|
glTF_KHR_materials_emissive_strength.Serialize(ref material.extensions, 5.0f);
|
|
var json = material.ToJson();
|
|
var parsed = json.ParseAsJson();
|
|
Assert.AreEqual(parsed["extensions"]["KHR_materials_emissive_strength"]["emissiveStrength"].GetSingle(), 5.0f);
|
|
|
|
// deserialize
|
|
var imported = GltfDeserializer.Deserialize_gltf_materials_ITEM(parsed);
|
|
Assert.True(glTF_KHR_materials_emissive_strength.TryGet(imported.extensions, out glTF_KHR_materials_emissive_strength extension));
|
|
Assert.AreEqual(extension.emissiveStrength, 5.0f);
|
|
}
|
|
|
|
[Test]
|
|
public void MaterialImportTest()
|
|
{
|
|
Assert.IsFalse(glTF_KHR_materials_unlit.IsEnable(new glTFMaterial { }));
|
|
}
|
|
|
|
[Test]
|
|
public void MaterialExportTest()
|
|
{
|
|
var material = new Material(Shader.Find("Standard"));
|
|
material.SetColor("_EmissionColor", new Color(0, 1, 2, 1));
|
|
material.EnableKeyword("_EMISSION");
|
|
var materialExporter = new MaterialExporter();
|
|
var textureExporter = new TextureExporter(new EditorTextureSerializer());
|
|
var gltfMaterial = materialExporter.ExportMaterial(material, textureExporter, new GltfExportSettings());
|
|
|
|
Assert.AreEqual(gltfMaterial.emissiveFactor, new float[] { 0, 0.5f, 1 });
|
|
}
|
|
}
|
|
}
|