본문 바로가기

Library/Computer Graphics

D3D10 Pipeline : Pixel Shader Stage

픽셀 쉐이더 스테이지는 개별 픽셀 조명, 포스트 프로세싱(post-processing)과 같은 풍부한 쉐이딩 기법을 가능하게 해준다. 픽셀 쉐이더는 상수 변수, 텍스처 데이터, 보정된 버텍스 값, 그리고 픽셀 당 생성되는 다른 데이터들을 조합하는 프로그램이다. 래스터라이저는 프리미티브에 의해 덮여지는 각 픽셀에 대해 픽셀 쉐이더를 호출하지만, 픽셀 쉐이더가 수행되지 않도록 널로 설정할 수도 있다.

텍스처를 멀티샘플링할 때, 각각의 텍스처에 대해 깊이 / 스텐실 테스트를 하는 것에 비해 픽셀 쉐이더는 픽셀에 대해 한번만 호출된다. 깊이 / 스텐실 테스트를 거친 샘플들은 픽셀 쉐이더 출력 컬러값으로 갱신된다.


Inputs
파이프라인이 지오메트리 쉐이더(geometry shader)와 무관하도록 설정되었다면, 픽셀 쉐이더는 16 / 32 비트, 4 요소 입력으로 제한된다. 그렇지 않다면 최대 32 / 32 비트, 4 요소 입력을 가질 수 있다.

픽셀 쉐이더 입력은 버텍스 쉐이더 속성을 포함하거나 각 프리미티브 상수들도 취급될 수 있다. 픽셀 쉐이더 입력값은 래스터라이즈화 된 프리미티브의 버텍스 속성, 또는 보정 모드(interpolation mode) 선언에 기반하여 보정될 수 있다. 프리미티브가 래스터라이즈화 전에 클리핑된다면, 클리핑 처리가 이루어지는 동안 보정 모드가 수행된다.


Outputs
픽셀 쉐이더는 최대 8 / 32 비트, 4 요소 컬러값을 출력하거나, 픽셀을 무시함으로써 아무런 컬러값을 출력하지 않을 수도 있다. 픽셀 쉐이더 출력 레지스터들은 픽셀 쉐이더를 사용하기 전에 선언되어야 한다. 각 레지스터들은 개별적인 출력 - 쓰기 마스크를 사용할 수 있다.

어떤 깊이 값이 깊이 버퍼에 쓰여질지 결정하기 위해 깊이-쓰기-허용(depth-write-enable) 상태를 사용할 수 있다. 또, 픽셀 쉐이더는 선택적인 32비트, 1 요소, 부동소수점 형식의, 깊이 테스트를 위한 깊이값을 출력할 수 있다. 깊이값은 oDepth 레지스터에 저장될 수 있고, 깊이 테스트를 위한 보정된 깊이값을 대체할 수 있다.  동적으로 고정 함수 깊이 기능과 쉐이더의 oDepth의 사용을 바꿀 수 없다.

픽셀 쉐이더는 스텐실 값을 출력할 수 없다.


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