| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 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 | 
													Tags
													
											
												
												- binary search
- 그래프
- union find
- String
- 이진탐색
- Trie
- Two Points
- Dijkstra
- Brute Force
- Hash
- Stored Procedure
- 다익스트라
- SQL
- DP
- 스토어드 프로시저
- two pointer
- MYSQL
													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
			
		
	
               
           
					
					
					
					
					
					
				 
								