ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 6. 입력조립기 ( Input Assembler )
    Software/DirectX 2024. 5. 24. 09:31
    728x90

    Table of Contents

    1. 정점(Vertex)과 정점버퍼(Vertex Buffer)
      
         * 정점
      
         * 정점 버퍼


    2. 삼각형 목록과 삼각형 띠
      
         * 삼각형 목록
      
         * 삼각형 띠
      
         * 인접 삼각형(Adjucent triangle)
      
         * Control point


    3. 인덱스 (InDex)





    입력조립기 단계

     입력조립기 단에서는 메모리에서 정점정보를 읽어서 Index를 기반으로 정점을 기본 단위(삼각형 점 선분)으로 조립한다.




     

    1. 정점(Vertex)과 정점버퍼(Vertex Buffer)

     

    정점(Vertex)
    • Dx에서 정점은 단순히 위치를 나타내는 점 이상의 정보를 담고있다.
    • D3D에서 정점은 위치 정보 이외에 조명을 구현하기위한 법선 벡터, 텍스쳐 적용을 위한 텍스쳐 좌표(uv)등을 가지고 있다
      .
    • 기본적으로 DX는 프로그래머가 직접 필요한 정점성분을 정의할 수 있도록 유연성을 제공한다.

     

    정점 버퍼 (Vertex Buffer)
    • 기본적으로 정점들은 정점 버퍼라고 하는 특별한 DX자료구조 안에 담겨서 파이프라인에 묶인다.
    • 정점 버퍼는 정점들을 단순히 나열하는 연속적인 메모리 자료구조이다.
    • 정점 버퍼는 정점들을 활용해 그림그리는 방법에 대한 서술이 포함되어있지 않다.
    • 정점 자료를 이용해서 그리는 방법은 정점버퍼 서술자의 primitive topology를 설정해서 DX에 알려줘야한다.
    • 보통은 삼각형그리기를 사용한다. D3D_PRIMITIVE_TOPOLOGY_TRIANGLEIST





     

    2. 삼각형 목록과 삼각형 띠
    2.1 삼각형 목록

     정점 버퍼 서술자 내부 설정값 중 Topology에서는 주로 삼각형 그리기 방식을 사용한다. D3D_PRIMITIVE_TOPOLOGY_TRIANGLEIST Topology는 각 정점정보를 3개씩 묶어 삼각형으로 만든다. 따라서 3n개의 정점으로 n개의 삼각형이 완성된다. 삼각형 목록에서는 따로 떨어진 삼각형을 생성할 수 있다.



    2.2 삼각형 띠

     삼각형 띠에서는 삼각형들을 서로 연결하며 형성한다. 따라서 n개의 정점으로 n-2개의 삼각형 생성이 가능하다. 하지만 모든 삼각형이 연속적이며 따로 떨어져서 그리기가 불가능하다. 삼각형 띠의 주의점은 짝수번째 삼각형과 홀수번째 삼각형이 오른쪽그리기 왼쪽그리기가 다르다는 점이다. 이는 GPU에서 내부적으로 짝수번째 삼각형 정점순서를 바꿔서 해결해주고 있다.



    2.3 인접 삼각형(Adjucent triangle)

    인접한 정점정보를 정점에 포함해서 제출하면 기하 셰이더에서 인접삼각형에 접근 할 수 있도록 처리하는 방식



    2.4 Control point

    정점에 N개의 Control point를 가진 패치 목록으로 제출하는 것. 테셀레이션 단계를 사용할 때 이 정점정보를 사용한다.





     

     

    3. 인덱스 (InDex)

     이론적으로는 삼각형 띠 방법이 삼각형 목록보다 정점의 수가 적어 연산에서 유리하다.
    하지만 모델을 구성하는데 있어서 삼각형 목록의 방법이 훨씬 더 유연하다(삼각형을 떨어트릴 수 있으므로). 삼각형 목록방식의 단점은 중복된 정점이 매우 많이 발생한다는 것이다. 중복된 정점이 많으면 필요없는 연산량이 매우 증가한다. 삼각형 목록에서 중복된 정점을 배제시킬 수 있다면 이상적인 그리기 방법이 될 것이다. 색인(Index)은 삼각형 목록에서 중복된 정점을 배제시킬 수 있는 하나의 방법이다.

     

    인덱스 목록
    • 정점 목록 하나(보통 모델의 한 메쉬)당 인덱스 목록을 하나 만든다.
    • 인덱스 목록은 Index Buffer라는 구조체를 통해 파이프라인에 붙는다.
    • 인덱스 목록에서는 어떤 정점을 이용해서 삼각형을 만들것인지 순서가 담겨있다.
    • 인덱스는 정수이므로 정점 구조체보다 메모리를 덜먹는다. 따라서 인덱스 목록에서의 중복은 연산량에 영향이 상대적으로 덜하다.
    • 정점 목록이 적절한 순서로 저장되면 그래픽카드는 중복 정점을 처리할 필요가 없어진다.





    728x90