DirectX 11 3d

230526 Tesselation - Patch Constant Function

슬뷔 2023. 5. 26. 23:02

Patch 하나 당 한번의 Patch Constant Function이 호출된다.

// =======================
// Patch Constant Function
// 패치의 분할 횟수를 지정하는 함수
// ========================

struct PatchOutput
{
    float Edges[3] :SV_TessFactor;
    float Inside : SV_InsideTessFactor;
    
}

PatchOutput PatchConstFunc(InputPatch<VS_INOUT, 3> _input
                          , uint PatchID : SV_PrimitiveID)
{
    PatchOutput output = (PatchOutput) 0.f;
    
    // 예시
    output.Edges[0] = 2.f;
    output.Edges[1] = 2.f;
    output.Edges[2] = 2.f;
    
    output.Inside = 2.f;
    
    return output;
}

 

float EdgeLevel[3] : SV_TessFactor; => 삼각형이기 때문에 Edge(모서리) 를 3개로 지정하였다.

float InsideLevel : SV_InsideTessFactor; => 원래는 2개였는데, 삼각형이라서 1개로 줄였다. 안쪽 분할을 몇 분할 할건지..

파란색 색칠된 부분.. 삼각형 내부를 몇 분할 할건지

 // 예시
output.Edges[0] = 2.f;
output.Edges[1] = 2.f;
output.Edges[2] = 2.f;
    
output.Inside = 2.f; => 내부도 2 분할

아래의 그림같이 나온다.

빨간색 => 모서리 2분할해서 나온 정점. 하얀색 => 원래 정점