기하 도형 셰이더 단계
GS(geometry-shader) 단계는 꼭짓점을 입력으로 사용하고 출력에서 꼭짓점을 생성하는 기능을 사용하여 애플리케이션에서 지정한 셰이더 코드를 실행합니다.
기하 도형 셰이더
단일 꼭짓점에서 작동하는 꼭짓점 셰이더와 달리 기하 도형 셰이더의 입력은 전체 기본 형식의 꼭짓점입니다(선의 경우 꼭짓점 2개, 삼각형의 경우 꼭짓점 3개 또는 점의 경우 단일 꼭짓점). 기하 도형 셰이더는 에지 인접 기본 형식에 대한 꼭짓점 데이터를 입력으로 가져올 수도 있습니다(선에 대한 꼭짓점 2개, 삼각형의 경우 3개 추가). 다음 그림에서는 삼각형과 인접한 꼭짓점이 있는 선을 보여 줍니다.
형식 | |
---|---|
TV | 삼각형 꼭짓점 |
AV | 인접 꼭짓점 |
LV | 선 꼭짓점 |
기하 도형 셰이더 단계에서는 IA에서 자동으로 생성되는 SV_PrimitiveID 시스템 생성 값을 사용할 수 있습니다. 이를 통해 원할 경우 기본 요소별 데이터를 가져오거나 계산할 수 있습니다.
geometry-shader 단계는 선택한 단일 토폴로지를 형성하는 여러 꼭짓점을 출력할 수 있습니다(사용할 수 있는 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)을 수행할 수 있습니다.
기하 도형 셰이더에서 구현할 수 있는 알고리즘은 다음과 같습니다.
- 점 스프라이트 확장
- 동적 입자 시스템
- 털/핀 생성
- 섀도 볼륨 생성
- 단일 패스 큐브 맵으로 렌더링
- 기본 요소별 재질 바꾸기
- Per-Primitive 재질 설정 - 픽셀 셰이더가 사용자 지정 특성 보간을 수행할 수 있도록 기본 데이터로 바리센트릭 좌표 생성을 포함합니다(더 높은 순서의 일반 보간 예는 CubeMapGS 샘플 참조).
관련 항목