[2021. 09. 01, Wed]
■ 래스터라이저
: 버텍스 셰이더로부터 전달 받은 정점들에 삼각형을 구상하고 채워줘서 '프래그먼트 셰이더'로 전달하는 단계이다.
* 프래그먼트 : 픽셀 후보
(두 개의 물체가 앞 뒤로 배치 되어있어 하나의 물체가 다른 물체를 가리게 된다면 최종 픽셀로서 사용되지 않을 수 있음)
▼ 영상 2:31초 참고
https://www.youtube.com/watch?v=RcRjIMTekgc
하는 일
1. 뷰포트 변환 : 클립공간(NDC) -> 스크린 공간
- 정규화된 공간에서 스크린(윈도우 화면)에 맞춘 공간으로 변형해준다.
( x,y축은 스크린 비율((예)1920X1080)에 맞게 크게 변환되지만 z값(깊이)은 0~1사이를 유지한다.)
( z값은 누가 앞에 그려지고 누가 뒤에 그려지는지 판단할 때 사용된다)
2. 스캔 변환 : 프리머티브(삼각형)를 이루는 프래그먼트를 생성한다. (정점들을 이어서 삼각형을 만든다는 뜻 같음)
- 3개의 정점으로 이루어진 삼각형의 점들을 찾는다.
- 수 많은 점(픽셀)을 찍어서 소묘법을 그림을 그리는 소묘법을 행하기위한 '준비 과정'이라고 할 수 있다.
- 밑그림 칠하는 과정이라고 생각하면 될듯싶다.
3. 정점들의 값들을 보간하여 생성된 프래그먼트의 속성 값을 정해준다.
★ 래스터라이저의 가장 중요한 일
- 정점들 사이에 위치한 프래그먼트들의 속성 값을 결정 한다는 뜻이다.
(컬러 이외에도 UV 좌표, 노말 등 다른 정점 속성들도 보간한다.)
위의 영상링크 3:40초 참고
■ 프래그먼트 셰이더
: 전달받은 프래그먼트에 어떤 색을 채울지 결정하는 단계
- 프레임 버퍼의 컬러 버퍼에 컬러 값을 씌어준다.
- 래스터라이저가 앞서 전달한 프래그먼트 수만큼 실행한다.
(예를 들어 300개의 프래그먼트를 전달 받으면 300번 프래그먼트 셰이더가 실행된다.)
※ 버텍스 셰이더와 래스터라이저를 거쳐서 정점으로부터 생성된 프래그먼트의 구성을 사용자가 직접 구조체로 선언하고 구상할 수 있다.
(예) fixed4 FragmentShader(FragmentInput input)
{
fixed4 outputColor = fixed4(1,0,0,1);
return outputColor;
}
일 경우 빨간색을 그린다.
만약 그라데이션을 넣고 싶다면 fixed4 outputColor = fixed4(input.screenPosition.x/400,0,0,1);을 하면 된다.
(출처 : https://www.youtube.com/watch?v=RcRjIMTekgc 3분 18초)
==================
렌더링 파이프라인의 마지막 단계인
■ 출력 병합
- 알파(A)와 깊이 값(Z)을 통해 각 프래그먼트를 픽셀로서 사용할지 아니면
직전에 컬러 버퍼에 쓰여있던 값과 혼합을 사용해서 사용할지 아니면
탈락 시킬지를 정한다.
(출처 : https://www.youtube.com/watch?v=RcRjIMTekgc 7분 46초)
'개발 (Game) > Unity' 카테고리의 다른 글
[Unity] UGUI 성능 최적화 (0) | 2024.09.17 |
---|---|
[Android] R8, Proguard 난독화 (0) | 2023.03.25 |
[Shader] 쉐이더를 처음으로 직접 작성해보다. (0) | 2021.09.01 |
[Shader] Rendering PipeLine - 버텍스 셰이더 (0) | 2021.09.01 |
[Shader] Rendering Pipeline 공부 시작 (3) | 2021.09.01 |