У меня есть Икосаэдр, подразделенный и с LOD.Сейчас я пытаюсь добавить динамический материал.Проблема в том, что для этого мне нужны нормали.
Я использую Unreal Engine 4, когда я использую встроенную функцию для вычисления нормалей, я получаю странные артефакты в области между различными уровнями LOD.
Итак, я сделал свой собственный расчет с этим кодом:
TArray<FVector> normals;
normals.Init(FVector(-1.f, -1.f, -1.f), geoData.GeoData.Num());
int32 triangleCount = geoData.Triangles.Num() / 3;
for (int32 i = 0; i < triangleCount; i++)
{
int32 normalTriangleIndex = i * 3;
int32 triangleIndexA = geoData.Triangles[normalTriangleIndex];
int32 triangleIndexB = geoData.Triangles[normalTriangleIndex + 1];
int32 triangleIndexC = geoData.Triangles[normalTriangleIndex + 2];
FVector pointA = geoData.GeoData[triangleIndexA];
FVector pointB = geoData.GeoData[triangleIndexB];
FVector pointC = geoData.GeoData[triangleIndexC];
FVector sideAB = pointB - pointA;
FVector sideBC = pointC - pointB;
FVector nNormal;
nNormal = FVector::CrossProduct(sideAB, sideBC);
nNormal = nNormal / nNormal.Size();
nNormal = nNormal.GetSafeNormal();
normals[triangleIndexA] = -nNormal;
normals[triangleIndexB] = -nNormal;
normals[triangleIndexC] = -nNormal;
}
Кажется, что вычисления верны.когда я пропускаю вычисление морфинга в моем шейдере, эти артефакты исчезают ... Может быть, треугольники должны быть близки друг к другу при их морфинге, и это вызывает эти артефакты?
Так выглядит морфинг.( Источник )