본문 바로가기

프로그래밍/Shader

기하 셰이더 (Geometry Shader)

기하 셰이더 (Geometry Shader)

 : 기하구조를 동적으로 파이프라인에 추가하거나 제거하는 능력, 기하 정보를 스트림 출력 단계를 통해서 정점 버퍼로 넘겨주는 능력 그리고 입력된 기본도형과는 다른 종류의 기본도형을 출력하는 능력 등의 기능을 가지고 있다.

 

처리된 기하구조 자료를 파일로 저장하거나, 파이프라인 연산을 디버깅하는등의 용도로도 활용할 수 있다.

 

입력 기본도형들을 형성하는 일련의 정점들을 받는다. 이 정점들을 자신의 목적에 맞게 기본도형들로 재해석해서 출력 스트림 객체를 통해 파이프라인의 다른 단계로 전달한다.

 

triangleadj

 : 이 배열이 인접 정보(adjacency)를 가진 삼각형을 나타낸다는 뜻이다.

 

Hull Shader와 Domain Shader를 NULL로 설정해서 테셀레이션 기능을 비활성화 한 경우 정점 셰이더에서 직접 정점들을 입력받고, 기본도형 연결성에 대한 정보는 입력 조립기로부터 받는다.

기본도형 위상구조는 표준적인 점, 선, 삼각형뿐 아니라 제어 패치 기본도형 종류들도 가능하다.

 

테셀레이션 단계들이 활성화된 경우에는 기하 셰이더가 영역 셰이더로부터 정점들을 입력받으며, 기본도형 위상구조는 테셀레이터 단계의 구성에 의해 결정된다. 

테셀레이터 단계는 선이나 삼각형만 만들어낼 수 있으므로 기하 셰이더가 처리할 수 있는 기본도형 종류는 선 아니면 삼각형이다.

 

inout

 : 객체가 입력과 출력에 모두 쓰인다고 지정한다.

 

SV_PrimitiveID

 : 기하 셰이더에 전달된 개별 기본도형을 고유하게 식별하는 값이다.

 

SV_GSInstanceID

 : 기하 셰이더에서 개별 기본도형 인스턴스마다 다른 처리를 수행하는데 쓰인다. 반드시 기하 셰이더의 개별적인 입력으로 선언해 두어야 한다.

 

maxvertexcount

 : 기하 셰이더의 한 실행에서 출력 스트림으로 방출할 수 있는 정점들의 최대 개수이다. 이 함수 특성으로 지정된 최대 정점 개수를 곱한 결과는 1024를 넘으면 안된다.

 

instance

 : 기본도형의 복사본(인스턴스)이 이 함수 특성에 지정된 개수만큼 생성되고 각 인스턴스마다 기하 셰이더 프로그램이 실행된다. 최대 인스턴스 개수는 32개이다.

 

Append()

 : 기본도형 자료를 출력 스트림으로 보내는 수단이다.

 

RestartStrip()

 : 서로 연결되지 않은 기하구조를 만들기 위해 삼각형 띠나 선 띠를 다시 시작해야하는 경우 사용한다.

 

'프로그래밍 > Shader' 카테고리의 다른 글

Rim Light 이론과 구현  (0) 2019.04.04
Adaptation 구현 과정  (0) 2019.04.03
Tessellation  (0) 2019.03.20
Adaptation  (0) 2019.03.14
Bloom 이론  (0) 2019.03.13