본문 바로가기

Library/Computer Graphics

D3D10 Pipeline : Vertex Shader Stage

D3D10은 3개의 프로그래밍 가능한 쉐이더 스테이지를 가진다. 버텍스 쉐이더(vertex shader) 스테이지, 지오메트리 쉐이더(geometry shader) 스테이지, 픽셀 쉐이더(pixel shader) 스테이지가 그것이다. 각각의 쉐이더 스테이지는 고유한 기능을 수행하며, 쉐이더 모델 4.0을 기반으로 한다.


버텍스 쉐이더 스테이지는 IA(Input-Assembler)로부터 넘어온 버텍스를 처리한다. 즉, 각 버텍스에 대해서 변환, 스키닝(skinning), 모핑(morphing), 조명(lighting)과 같은 연산을 수행한다. 버텍스 쉐이더는 언제나 하나의 버텍스에 대해 연산을 하며, 하나의 버텍스를 출력값으로 가진다. 버텍스 쉐이더는 반드시 파이프라인이 실행되기 위해 활성화되어 있어야 하며, 설사 프로그램에서 버텍스 변환을 필요로 하지 않더라도 더미 버텍스 쉐이더의 형태로 활성화되어 있어야 한다.

각 버텍스 쉐이더의 입력 버텍스는 16 비트, 혹은 32 비트 벡터(최대 4개까지의 엔트리를 가질 수 있는)를 포함할 수 있고, 출력 버텍스도 이와 마찬가지 구성을 가질 수 있다. 모든 버텍스 쉐이더들은 최소한 하나의 하나의 입력값과 출력값을 가져야 한다(이 경우 하나의 칼라로 표현된다고 할 수 있다).

버텍스 쉐이더 스테이지는, IA 스테이지에서 생성한 시멘틱(semantic : system-generated value) 중 2개를 사용한다. 버텍스 ID(VertexID)와 인스턴스 ID(InstanceID)가 그것인데, 버텍스 ID와 인스턴스 ID는 버텍스 쉐이더 스테이지에서만 의미 있는 값이다. IA 스테이지의 하드웨어가 생성한 ID들은 이 ID를 이해할 수 있는 단계에서만 사용되는데, 버텍스 ID와 인스턴스 ID는 버텍스 쉐이더 스테이지에서만 사용된다.

버텍스 쉐이더는, 인접 정보를 가진 입력 프리미티브 위상에서 인접 버텍스를 포함한, 모든 버텍스들에 대해 동작한다. 또, 버텍스 쉐이더는 스크린 공간과 관련된 정보가 필요하지 않는 작업, 텍스처 샘플링과 같은 연산도 수행할 수 있다.


Translated from
http://msdn.microsoft.com/en-us/library/ee415747(VS.85).aspx#Vertex_Shader_Stage