三角形变形时照明的CDLOD问题

时间:2019-07-10 10:59:53

标签: c++ unreal-engine4 normals simplex-noise

我将二十面体细分为LOD。现在,我正在尝试添加动态材料。 问题是我需要法线。

我使用虚幻引擎4,当我使用内置函数计算法线时,在不同LOD级别之间的区域中得到了奇怪的伪像。 enter image description here

所以我用此代码进行了自己的计算:

    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;
    }

似乎计算正确。当我跳过着色器中的变形计算时,这些伪像就消失了... 也许三角形在变形时会彼此靠近,这会导致这种伪像吗?

这是变形的外观。 (Sourceenter image description here

1 个答案:

答案 0 :(得分:0)

我通过跳过第一个变形值来解决它。 现在,从第二张图片开始变形,如您在屏幕截图中所见。

<Link to='/product/add?status="finished"'>Finished Product</Link>
<Link to='/product/add?status="unfinished"'>Unfinished Product</Link>

着色器中的微小变化。 clamp(a / morphRange,0.1f,1.0f); 0.1f早于0.0f