6.4 픽셀 셰이더(Pixel Shader)
정점 셰이더처럼 픽셀 셰이더도 본질적으로는 하나의 함수지만, 정점 셰이더와는 달리 픽셀 단편마다 실행된다.
https://gamedev.stackexchange.com/questions/8977/what-is-a-fragment-in-3d-graphics-programming
What is a fragment in 3D graphics programming?
What is a fragment in a fragment shader? Wikipedia says that: In general, a fragment can be thought of as the data needed to shade the pixel, plus the data needed to test whether the fragment su...
gamedev.stackexchange.com
픽셀 셰이더는 주어진 입력으로부터 픽셀 단편의 색상을 계산하는 것이다. 그런데 픽셀 단편이 도중에 기각되어 후면 버퍼까지 도달하지 못할 수 있다. 예를 들어 클리핑 되거나 깊이 값에 따라 가려질 수도, 스텐실 판정이나 이후 단계에서 폐기될 수도 있다. 따라서 후면 버퍼의 한 픽셀에는 최종적으로 그 픽셀이 될 수 있는 '후보'로서의 픽셀 단편들이 여러 개 존재할 수 있다.
cbuffer cbPerObject : register(b0)
{
float4x4 gWorldViewProj;
};
float4 PS(float4 posH : SV_Position, float4 Color : Color) : SV_Target
{
return pin.Color;
};
이 예제에서 픽셀 셰이더 함수는 그냥 보간된 색상 값을 돌려준다. 픽셀 셰이더의 입력이 정점 셰이더의 출력과 정확히 일치함을 주목하길 바란다. 이는 필수조건이다. 함수 매개변수 목록 다음에 있는 SV_Target 시맨틱은 이 함수의 반환값 형식이 렌더 대상(render target)의 형식과 일치해야 함을 뜻한다.