Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

codingfarm

6. Direct3D의 그리기 연산 - 예제 픽셀 셰이더 본문

computer graphics/DX12 book

6. Direct3D의 그리기 연산 - 예제 픽셀 셰이더

scarecrow1992 2021. 6. 6. 22:16

픽셀 셰이더

  • vertex shader(또는 기하 셰이더)가 출력한 정점 특성들은 래스터화 단계에서 삼각형의 픽셀들을 따라 보간되며, 보간된 결과는 pixel shader에 입력된다.
  • 아래 코드는 기하 셰이더가 없는 경우에서 vertex 자료가 pixel shader에 도달하는 경로를 나타낸다.

  • 정점 셰이더와 마찬가지로 픽셸 셰이더도 본질적으로 하나의 함수이나, 정점 셰이더와 달리 하나의 픽셀 단편(pixel fragment)마다 실행된다.
  • 역할 : 주어진 입력으로부터 pixel fragment의 색상을 계산한다
  • 후면버퍼의 한 픽셀에는 최종적으로 그 픽셀이 될 수 있는 '후보'로서의 pixel fragment들이 여러개 존재할 수 있다.
    • 대부분의 pixel들은 pipeline의 pixel shader이후 단계에 적용되는 판정에 의해 폐기될 수 있음
      • 예) 
      • pixel fragment들이 도중에 기각되어 후면버퍼까지 도달하지 못하는 경우
      • 이값이 더 작은 다른 pixel fragment에 의해 가려지는 경우
      • 스텐실 파정에 의해 기각되는 경우

예제 정점 셰이더에 대응되는 pixel shader의 예

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//***************************************************************************************
// color.hlsl by Frank Luna (C) 2015 All Rights Reserved.
//
// Transforms and colors geometry.
//***************************************************************************************
 
cbuffer cbPerObject : register(b0) {
    float4x4 gWorldViewProj; 
};
 
struct VertexIn {
    float3 PosL  : POSITION;
    float4 Color : COLOR;
};
 
struct VertexOut {
    float4 PosH  : SV_POSITION;
    float4 Color : COLOR;
};
 
VertexOut VS(VertexIn vin) {
    VertexOut vout;
    
    // Transform to homogeneous clip space.
    vout.PosH = mul(float4(vin.PosL, 1.0f), gWorldViewProj);
    
    // Just pass vertex color into the pixel shader.
    vout.Color = vin.Color;
    
    return vout;
}
 
float4 PS(VertexOut pin) : SV_Target {
    return pin.Color;
}
cs

이 예에서 픽셀 셰이더 함수는 그냥 보간된 색상 값을 돌려준다.

픽셀 셰이더의 입력이 정점 셰이더의 출력과 정학히 일치함에 주목하라.(VertexOut pin) 이는 필수조건이다.

한편 pixel shader의 출력(반환값)은 4차원 색상값이다. 이 색상값이 pixel fragment가 되는것이다.

 

 

 

 

 

 

Comments