일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- SQL
- 그래프
- Stored Procedure
- Two Points
- MYSQL
- Hash
- two pointer
- Dijkstra
- String
- 이진탐색
- union find
- 다익스트라
- Brute Force
- Trie
- 스토어드 프로시저
- binary search
- DP
Archives
- Today
- Total
codingfarm
6. Direct3D의 그리기 연산 - 예제 픽셀 셰이더 본문
픽셀 셰이더
- vertex shader(또는 기하 셰이더)가 출력한 정점 특성들은 래스터화 단계에서 삼각형의 픽셀들을 따라 보간되며, 보간된 결과는 pixel shader에 입력된다.
- 아래 코드는 기하 셰이더가 없는 경우에서 vertex 자료가 pixel shader에 도달하는 경로를 나타낸다.
- 정점 셰이더와 마찬가지로 픽셸 셰이더도 본질적으로 하나의 함수이나, 정점 셰이더와 달리 하나의 픽셀 단편(pixel fragment)마다 실행된다.
- 역할 : 주어진 입력으로부터 pixel fragment의 색상을 계산한다
- 후면버퍼의 한 픽셀에는 최종적으로 그 픽셀이 될 수 있는 '후보'로서의 pixel fragment들이 여러개 존재할 수 있다.
- 대부분의 pixel들은 pipeline의 pixel shader이후 단계에 적용되는 판정에 의해 폐기될 수 있음
- 예)
- pixel fragment들이 도중에 기각되어 후면버퍼까지 도달하지 못하는 경우
- 이값이 더 작은 다른 pixel fragment에 의해 가려지는 경우
- 스텐실 파정에 의해 기각되는 경우
- 대부분의 pixel들은 pipeline의 pixel shader이후 단계에 적용되는 판정에 의해 폐기될 수 있음
예제 정점 셰이더에 대응되는 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가 되는것이다.
'computer graphics > DX12 book' 카테고리의 다른 글
6. Direct3D의 그리기 연산 - 셰이더의 컴파일 (0) | 2021.06.16 |
---|---|
6. Direct3D의 그리기 연산 - 상수 버퍼(constant buffer) (0) | 2021.06.07 |
6. Direct3D의 그리기 연산 - 예제 정점 셰이더 (0) | 2021.06.06 |
6. Direct3D의 그리기 연산 - 색인과 색인 버퍼 (0) | 2021.06.06 |
6. Direct3D의 그리기 연산 - 정점 버퍼(vectex buffer) (0) | 2021.06.02 |
Comments