다음을 통해 공유


기하 도형 셰이더 단계

GS(geometry-shader) 단계는 꼭짓점을 입력으로 사용하고 출력에서 꼭짓점을 생성하는 기능을 사용하여 애플리케이션에서 지정한 셰이더 코드를 실행합니다.

기하 도형 셰이더

단일 꼭짓점에서 작동하는 꼭짓점 셰이더와 달리 기하 도형 셰이더의 입력은 전체 기본 형식의 꼭짓점입니다(선의 경우 꼭짓점 2개, 삼각형의 경우 3개 꼭짓점 또는 점의 경우 단일 꼭짓점). 기하 도형 셰이더는 가장자리 인접 기본 형식에 대한 꼭짓점 데이터를 입력으로 가져올 수도 있습니다(선에 대한 꼭짓점 2개, 삼각형의 경우 3개 추가). 다음 그림에서는 삼각형과 인접한 꼭짓점이 있는 선을 보여 줍니다.

인접한 꼭짓점이 있는 삼각형 및 선의 그림

TV 삼각형 꼭짓점
AV 인접한 꼭짓점
LV 선 꼭짓점

 

기하 도형 셰이더 단계는 IA에서 자동으로 생성되는 SV_PrimitiveID 시스템 생성 값 사용할 수 있습니다. 이렇게 하면 원하는 경우 기본 데이터당 데이터를 가져오거나 계산할 수 있습니다.

기하 도형 셰이더 단계는 선택한 단일 토폴로지를 형성하는 여러 꼭짓점을 출력할 수 있습니다(사용할 수 있는 GS 스테이지 출력 토폴로지는 tristrip, linetrip 및 pointlist). 내보내는 기본 형식의 수는 기하 도형 셰이더의 호출 내에서 자유롭게 달라질 수 있지만 내보낼 수 있는 최대 꼭짓점 수는 정적으로 선언해야 합니다. 기하 도형 셰이더 호출에서 내보낸 스트립 길이는 임의일 수 있으며 RestartStrip HLSL 함수를 통해 새 스트립을 만들 수 있습니다.

기하 도형 셰이더 출력은 스트림 출력 단계를 통해 래스터라이저 단계 및/또는 메모리의 꼭짓점 버퍼에 공급될 수 있습니다. 메모리에 공급되는 출력은 개별 점/선/삼각형 목록(래스터라이저에 전달되는 것과 정확히 일치)으로 확장됩니다.

기하 도형 셰이더가 활성화되면 파이프라인의 앞부분에서 전달되거나 생성된 모든 기본 형식에 대해 한 번 호출됩니다. 기하 도형 셰이더의 각 호출은 단일 점, 한 줄 또는 단일 삼각형이든 관계없이 호출 기본 형식에 대한 데이터를 입력으로 봅니다. 파이프라인의 앞부분에 있는 삼각형 스트립은 스트립의 각 개별 삼각형에 대해 기하 도형 셰이더를 호출합니다(마치 스트립이 삼각형 목록으로 확장된 것처럼). 개별 기본 형식의 각 꼭짓점의 모든 입력 데이터(예: 삼각형의 경우 3개 꼭짓점)와 인접한 꼭짓점 데이터(해당하는 경우/사용 가능한 경우)를 사용할 수 있습니다.

기하 도형 셰이더는 출력 스트림 개체에 꼭짓점을 추가하여 데이터를 한 번에 하나의 꼭짓점으로 출력합니다. 스트림의 토폴로지는 고정된 선언에 의해 결정되며, GS 단계의 출력으로 PointStream, LineStream 또는 TriangleStream 중 하나를 선택합니다. 사용할 수 있는 스트림 개체에는 모두 템플릿이 있는 개체인 PointStream, LineStream 및 TriangleStream의 세 가지 유형이 있습니다. 출력의 토폴로지는 해당 개체 형식에 따라 결정되지만 스트림에 추가된 꼭짓점의 형식은 템플릿 형식에 따라 결정됩니다. 스트림에 추가된 데이터가 직렬이라는 점을 제외하고 기하 도형 셰이더 인스턴스의 실행은 다른 호출에서 원자성입니다. 기하 도형 셰이더의 지정된 호출 출력은 다른 호출과 독립적입니다(순서 지정은 적용됨). 삼각형 스트립을 생성하는 기하 도형 셰이더는 모든 호출에서 새 스트립을 시작합니다.

기하 도형 셰이더 출력이 시스템 해석 값(예: SV_RenderTargetArrayIndex 또는 SV_Position)으로 식별되면 하드웨어는 이 데이터를 살펴보고 입력을 위해 데이터 자체를 다음 셰이더 단계로 전달할 수 있을 뿐만 아니라 값에 따라 일부 동작을 수행합니다. 기하 도형 셰이더의 이러한 데이터 출력이 꼭짓점 단위(예: SV_ClipDistance[n] 또는 SV_Position)가 아닌 기본값(예: SV_RenderTargetArrayIndex 또는 SV_ViewportArrayIndex)으로 하드웨어에 의미가 있는 경우 기본형에 대해 내보낸 선행 꼭짓점에서 기본 데이터당 데이터를 가져옵니다.

기하 도형 셰이더가 종료되고 기본 형식이 불완전한 경우 기하 도형 셰이더에서 부분적으로 완성된 기본 형식을 생성할 수 있습니다. 불완전한 기본 형식은 자동으로 삭제됩니다. 이는 IA가 부분적으로 완성된 기본 형식을 처리하는 방식과 유사합니다.

기하 도형 셰이더는 화면 공간 파생 항목이 필요하지 않은 부하 및 텍스처 샘플링 작업을 수행할 수 있습니다(samplelevel, samplecmplevelzero, samplegrad).

기하 도형 셰이더에서 구현할 수 있는 알고리즘은 다음과 같습니다.

  • 포인트 스프라이트 확장
  • 동적 파티클 시스템
  • 모피/핀 생성
  • 섀도 볼륨 생성
  • Single Pass Render-to-Cubemap
  • Per-Primitive 재질 교환
  • Per-Primitive 재질 설정 - 픽셀 셰이더가 사용자 지정 특성 보간을 수행할 수 있도록 기본 데이터로 바리센트릭 좌표 생성을 포함합니다(예: 상위 표준 보간 예제는 CubeMapGS 샘플참조).

그래픽 파이프라인

파이프라인 단계(Direct3D 10)