Add support for tangent stream pairing with the first UV from the model.

This commit is contained in:
jiaweig
2021-05-19 00:36:24 -07:00
parent 3182dc37c3
commit 775b7d048b
17 changed files with 288 additions and 81 deletions
@@ -17,6 +17,7 @@
#include <Atom/RPI.Reflect/Model/ModelKdTree.h>
#include <Atom/RPI.Reflect/Model/ModelLodAsset.h>
#include <Atom/RPI.Reflect/ResourcePoolAssetCreator.h>
#include <Atom/RPI.Public/Model/ModelLod.h>
#include <AzCore/std/limits.h>
#include <AzCore/Component/Entity.h>
@@ -917,6 +918,33 @@ namespace UnitTest
}
}
TEST_F(ModelTests, UvStream)
{
AZ::RPI::UvStreamTangentIndex uvStreamTangentIndex;
EXPECT_EQ(uvStreamTangentIndex.GetFullFlag(), 0u);
uvStreamTangentIndex.ApplyTangentIndex(1u);
EXPECT_EQ(uvStreamTangentIndex.GetTangentIndexAtUv(0u), 1u);
EXPECT_EQ(uvStreamTangentIndex.GetNextAvailableUvIndex(), 1u);
uvStreamTangentIndex.ApplyTangentIndex(5u);
EXPECT_EQ(uvStreamTangentIndex.GetTangentIndexAtUv(1u), 5u);
EXPECT_EQ(uvStreamTangentIndex.GetNextAvailableUvIndex(), 2u);
uvStreamTangentIndex.ApplyTangentIndex(100u);
EXPECT_EQ(uvStreamTangentIndex.GetTangentIndexAtUv(2u), AZ::RPI::UvStreamTangentIndex::UnassignedTangentIndex);
EXPECT_EQ(uvStreamTangentIndex.GetNextAvailableUvIndex(), 3u);
for (uint32_t i = 3; i < AZ::RPI::UvStreamTangentIndex::MaxTangents; ++i)
{
uvStreamTangentIndex.ApplyTangentIndex(0u);
}
AZ_TEST_START_TRACE_SUPPRESSION;
uvStreamTangentIndex.ApplyTangentIndex(0u);
AZ_TEST_STOP_TRACE_SUPPRESSION(1);
}
// This class creates a Model with one LOD, whose mesh contains 2 planes. Plane 1 is in the XY plane at Z=-0.5, and
// plane 2 is in the XY plane at Z=0.5. The two planes each have 9 quads which have been triangulated. It only has
// a position and index buffer.