SharedVertexBufferTest, DividedVertexBufferTest

This commit is contained in:
ousttrue
2021-04-12 13:59:29 +09:00
parent 9a479b2337
commit ceb884d82c

View File

@@ -2,6 +2,7 @@ using System;
using System.Collections.Generic;
using System.IO;
using NUnit.Framework;
using UnityEngine;
namespace UniGLTF
{
@@ -11,8 +12,8 @@ namespace UniGLTF
public void AccessorTest()
{
byte[] bytes = default;
using(var ms = new MemoryStream())
using(var w = new BinaryWriter(ms))
using (var ms = new MemoryStream())
using (var w = new BinaryWriter(ms))
{
w.Write(1.0f);
w.Write(2.0f);
@@ -28,7 +29,7 @@ namespace UniGLTF
var gltf = new glTF
{
buffers=new List<glTFBuffer>
buffers = new List<glTFBuffer>
{
new glTFBuffer
{
@@ -39,7 +40,7 @@ namespace UniGLTF
new glTFBufferView{
buffer=0,
byteLength=32,
byteOffset=0,
byteOffset=0,
}
},
accessors = new List<glTFAccessor>
@@ -59,5 +60,153 @@ namespace UniGLTF
Assert.AreEqual((1.0f, 2.0f, 3.0f, 4.0f), getter(0));
Assert.AreEqual((5.0f, 6.0f, 7.0f, 8.0f), getter(1));
}
/// <summary>
/// 0 1 2
/// +-+-+
/// |A|B|
/// +-+-+
/// 5 4 3
///
/// 6 vertices
/// 4 triangles
/// 2 materials
///
/// </summary>
static (GameObject, Mesh) CreateMesh(Material[] materials)
{
var unityMesh = new Mesh();
unityMesh.vertices = new Vector3[]
{
new Vector3(0, 1, 0),
new Vector3(1, 1, 0),
new Vector3(2, 1, 0),
new Vector3(2, 0, 0),
new Vector3(1, 0, 0),
new Vector3(0, 0, 0),
};
unityMesh.uv = new Vector2[]
{
new Vector2(0, 0),
new Vector2(1, 0),
new Vector2(2, 0),
new Vector2(2, 1),
new Vector2(1, 1),
new Vector2(0, 1),
};
unityMesh.subMeshCount = 2;
unityMesh.SetTriangles(new int[]{
0, 1, 5,
5, 1, 4,
}, 0);
unityMesh.SetTriangles(new int[]{
1, 2, 4,
4, 2, 3,
}, 1);
unityMesh.RecalculateNormals();
unityMesh.RecalculateTangents();
var go = new GameObject();
go.AddComponent<MeshRenderer>().sharedMaterials = materials;
go.AddComponent<MeshFilter>().sharedMesh = unityMesh;
return (go, unityMesh);
}
[Test]
public void SharedVertexBufferTest()
{
var glTF = new glTF();
var bytesBuffer = new ArrayByteBuffer(new byte[50 * 1024 * 1024]);
var bufferIndex = glTF.AddBuffer(bytesBuffer);
var Materials = new List<Material>{
new Material(Shader.Find("Standard")), // A
new Material(Shader.Find("Standard")), // B
};
var (go, unityMesh) = CreateMesh(Materials.ToArray());
var meshExportSettings = new MeshExportSettings
{
UseSharingVertexBuffer = true
};
var axisInverter = Axises.X.Create();
var (gltfMesh, blendShapeIndexMap) = MeshExporter.ExportMesh(glTF, bufferIndex, new MeshWithRenderer(go.transform), Materials, meshExportSettings, axisInverter);
{
var indices = glTF.GetIndices(gltfMesh.primitives[0].indices);
Assert.AreEqual(0, indices[0]);
Assert.AreEqual(1, indices[1]);
Assert.AreEqual(5, indices[2]);
Assert.AreEqual(5, indices[3]);
Assert.AreEqual(1, indices[4]);
Assert.AreEqual(4, indices[5]);
}
{
var indices = glTF.GetIndices(gltfMesh.primitives[1].indices);
Assert.AreEqual(1, indices[0]);
Assert.AreEqual(2, indices[1]);
Assert.AreEqual(4, indices[2]);
Assert.AreEqual(4, indices[3]);
Assert.AreEqual(2, indices[4]);
Assert.AreEqual(3, indices[5]);
}
var positions = glTF.GetArrayFromAccessor<Vector3>(gltfMesh.primitives[0].attributes.POSITION);
Assert.AreEqual(6, positions.Length);
}
[Test]
public void DividedVertexBufferTest()
{
var glTF = new glTF();
var bytesBuffer = new ArrayByteBuffer(new byte[50 * 1024 * 1024]);
var bufferIndex = glTF.AddBuffer(bytesBuffer);
var Materials = new List<Material>{
new Material(Shader.Find("Standard")), // A
new Material(Shader.Find("Standard")), // B
};
var (go, unityMesh) = CreateMesh(Materials.ToArray());
var meshExportSettings = new MeshExportSettings
{
UseSharingVertexBuffer = false
};
var axisInverter = Axises.X.Create();
var (gltfMesh, blendShapeIndexMap) = MeshExporter.ExportMesh(glTF, bufferIndex, new MeshWithRenderer(go.transform), Materials, meshExportSettings, axisInverter);
{
var indices = glTF.GetIndices(gltfMesh.primitives[0].indices);
Assert.AreEqual(0, indices[0]);
Assert.AreEqual(1, indices[1]);
Assert.AreEqual(3, indices[2]);
Assert.AreEqual(3, indices[3]);
Assert.AreEqual(1, indices[4]);
Assert.AreEqual(2, indices[5]);
}
{
var positions = glTF.GetArrayFromAccessor<Vector3>(gltfMesh.primitives[0].attributes.POSITION);
Assert.AreEqual(4, positions.Length);
}
{
var indices = glTF.GetIndices(gltfMesh.primitives[1].indices);
Assert.AreEqual(1, indices[0]);
Assert.AreEqual(2, indices[1]);
Assert.AreEqual(4, indices[2]);
Assert.AreEqual(4, indices[3]);
Assert.AreEqual(2, indices[4]);
Assert.AreEqual(3, indices[5]);
}
{
var positions = glTF.GetArrayFromAccessor<Vector3>(gltfMesh.primitives[1].attributes.POSITION);
Assert.AreEqual(4, positions.Length);
}
}
}
}