Hi!! Sorry for my bad english ) (its not my native lang).
I was edit the code and include smoothings groups support for triangles.
USTRUCT(BlueprintType)
struct ProceduralMeshTriangle
{
GENERATED_USTRUCT_BODY()
UPROPERTY(EditAnywhere, Category = Triangle)
ProceduralMeshVertex Vertex0;
UPROPERTY(EditAnywhere, Category = Triangle)
ProceduralMeshVertex Vertex1;
UPROPERTY(EditAnywhere, Category = Triangle)
ProceduralMeshVertex Vertex2;
** *UPROPERTY(EditAnywhere, Category = Triangle)
int32 SmoothingsGroups;***
};
and in to sceneproxy class
**TArray<FVector> PositionEq;
TArray<int32> SmoothingGroupEq;**
// Add each triangle to the vertex/index buffer
for (int TriIdx = 0; TriIdx < Component->ProceduralMeshTris.Num(); TriIdx++)
{
FProceduralMeshTriangle& Tri = Component->ProceduralMeshTris[TriIdx];
const FVector Edge01 = (Tri.Vertex1.Position - Tri.Vertex0.Position);
const FVector Edge02 = (Tri.Vertex2.Position - Tri.Vertex0.Position);
const FVector TangentX = Edge01.SafeNormal();
const FVector TangentZ = (Edge02 ^ Edge01).SafeNormal();
const FVector TangentY = (TangentX ^ TangentZ).SafeNormal();
int32 VIndex;
***int32 SG; //SmoothigGrup Buffer
SG = Tri.SmoothingsGroups;***
FDynamicMeshVertex Vert0;
Vert0.Position = Tri.Vertex0.Position;
Vert0.Color = Tri.Vertex0.Color;
Vert0.SetTangents(TangentX, TangentY, TangentZ);
Vert0.TextureCoordinate.Set(Tri.Vertex0.U, Tri.Vertex0.V);
***if (!PositionEq.Contains(Vert0.Position))
{
SmoothingGroupEq.Add(Tri.SmoothingsGroups);
PositionEq.Add(Vert0.Position);
VIndex = VertexBuffer.Vertices.Add(Vert0);
IndexBuffer.Indices.Add(VIndex);
} else
{
if ((SmoothingGroupEq[PositionEq.Find(Vert0.Position)] == SG))
{
IndexBuffer.Indices.Add(PositionEq.Find(Vert0.Position));
} else
{
SmoothingGroupEq.Add(Tri.SmoothingsGroups);
PositionEq.Add(Vert0.Position);
VIndex = VertexBuffer.Vertices.Add(Vert0);
IndexBuffer.Indices.Add(VIndex);
}
}***
FDynamicMeshVertex Vert1;
Vert1.Position = Tri.Vertex1.Position;
Vert1.Color = Tri.Vertex1.Color;
Vert1.SetTangents(TangentX, TangentY, TangentZ);
Vert1.TextureCoordinate.Set(Tri.Vertex1.U, Tri.Vertex1.V);
***if (!PositionEq.Contains(Vert1.Position))
{
SmoothingGroupEq.Add(Tri.SmoothingsGroups);
PositionEq.Add(Vert1.Position);
VIndex = VertexBuffer.Vertices.Add(Vert1);
IndexBuffer.Indices.Add(VIndex);
} else
{
if ((SmoothingGroupEq[PositionEq.Find(Vert1.Position)] == SG))
{
IndexBuffer.Indices.Add(PositionEq.Find(Vert1.Position));
} else
{
SmoothingGroupEq.Add(Tri.SmoothingsGroups);
PositionEq.Add(Vert1.Position);
VIndex = VertexBuffer.Vertices.Add(Vert1);
IndexBuffer.Indices.Add(VIndex);
}
}***
FDynamicMeshVertex Vert2;
Vert2.Position = Tri.Vertex2.Position;
Vert2.Color = Tri.Vertex2.Color;
Vert2.SetTangents(TangentX, TangentY, TangentZ);
Vert2.TextureCoordinate.Set(Tri.Vertex2.U, Tri.Vertex2.V);
***if (!PositionEq.Contains(Vert2.Position))
{
SmoothingGroupEq.Add(Tri.SmoothingsGroups);
PositionEq.Add(Vert2.Position);
VIndex = VertexBuffer.Vertices.Add(Vert2);
IndexBuffer.Indices.Add(VIndex);
} else
{
if ((SmoothingGroupEq[PositionEq.Find(Vert2.Position)] == SG))
{
IndexBuffer.Indices.Add(PositionEq.Find(Vert2.Position));
} else
{
SmoothingGroupEq.Add(Tri.SmoothingsGroups);
PositionEq.Add(Vert2.Position);
VIndex = VertexBuffer.Vertices.Add(Vert2);
IndexBuffer.Indices.Add(VIndex);
}
}***
}