[ 레스터라이저]
[직전의 상황]
버텍스쉐이더에서 정점3개를 클립공간의 정점3개로 변환하여 레스터이저에게 전달함
레스터라이저는 전달받은 정점으로부터 삼각형을 구성하고,
삼각형을 채우는 프래그먼트를 생성하여 프래그먼트 쉐이더에게 전달할 것이다 .
[ 레스터 라이저 ]
이때 , 프리미티브란 원시적인 도형을 말한다 . 스캔변환은 정점들도부터 프리미티브 생성 ,
프리미티브를 채우는 점들을 찾아낸다 .
레스터라이저는 생성된 프래그먼트의 값들을 정점들 사이 어떤 위치에 있냐에 따라 보간하여 값 결정한다 .
뷰포트 변환
2*2*1짜리 직육면체 공간에 있던 정점들을 스크린에 대응되는 공간인 스크린 공간으로 옮겨준다 .
스크린 공간은 실제 윈도우 화면(창의 해상)에 맞춰서 구성된다 .
뷰포트 변환을 적용하게 되면 공간의 범위가 스크린에 맞추어져 옮겨간다 .
다만 , 깊이를비교할때 사용하는 z값은 0-1로 그대로 유지된다 .
결론적으로 스크린 공간으로 옮겨간 3개의 정점은 다음과 같이 구성된다
이제 레스터라이저는 3개의 정점으로 이루어진 삼각형을 채우는 점들을 찾아낸다
이를 스캔변환이라고 한다
화면은 수많은 픽셀의 집합 , 이 정점 3개로 이루어진 삼각형에 포함되는 픽셀 위치를 찾아 픽셀을 칠해줄것이다 .
즉 , 소묘법 실행의 준비과정과 같다 . 이 스캔변화의 결과물을 프래그먼트라고 한다 .
프래그먼트 파편 는 픽셀의 후보를 의미한다 .
프레그먼트는 픽셀의 예비군이다 . 현재 생성된 프래그먼트가 다른 프래그먼트와의 경쟁으로 최종 픽셀로 사용 못되고 탈락 할 수 있음 (겹침)
여튼 위와 같이 프래그먼트는 생성, 이 프래그먼트를 생성하는 알고리즘은 GPU에 내장 , 건들지 못한다 .
또한 정점의 개수보다 프래그먼트의 개수가 더 많다
레스터 라이저는 보간 역시 중요한 역할이다
예시와 같이 , 색상값의 보간을 통해 프래그먼트의 컬러를 정해준다 .
결국 이런 식의 분포를 가짐. 이외에도 UV좌표 , 노말등 다른 속성들도 보간한다 .
레스터라이저가 정점들을 구성하는 프리미티브로부터 프래그먼트 생성, 프래그먼트 쉐이더로 전달된다 .
[ 프래그먼트 쉐이더 ]
[ 프래그먼트 쉐이더 ]
전달받은 프래그먼트에 어떤 색을 채울지 결정한다
래스터라이저가 전달한 프래그먼트 수만큼 각각 실행될것이다 300개의 프래그먼트 -> 300번의 프래그먼트 쉐이더 실행
프래그먼트 쉐이더의 출력값은 프레임 버퍼에 쓰여질 컬러 깊이값
기본적으로 프래그먼트 쉐이더의 출력은 각 프래그먼트에 대응되는 픽셀에 대한 컬러값이다 .
컬러값들은 프레임버퍼에 컬러버퍼에 쓰게되고 컬러버퍼를 GPU가 읽어 화면에 1프레임마다 그릴 것이다 .
프레그먼트의 셰이더의 입력으로 들어올 즉 ,버텍스 쉐이더와 레스터라이저를 거쳐 정점으로부터 생성된 프래그먼트의 구성을 (그 구조체)를 직접 선언 , 구성 가능하다 .
각 프레그먼트의 정점 컬러를 그대로 사용하는 프래그먼트 쉐이더
x값에 따라 최종색을 결정하는 프래그먼트 셰이더와 결과
프래그먼트 셰이더는 이미 위치가 결정된 프래그먼트를 받아서 각 프래그먼트의 색의. 결정, 컬러버퍼에 전달하는 방식으로 화면에 그려지도록 한다
이렇게 최종 화면에 그려지기전 한 단계가 남아있다 .
[ 출력병합 ]
[ 출력병합]
렌더링 파이프라인의 마지막 단계인 출력병합은 불투명도의 알파A / 깊이값 Z를 통해 각 프래그먼트를 픽셀로서 사용할지직전까지 컬러버퍼에 쓰인 값과 혼합하여 쓸지 탈락시킬지 결정한다
위의 예시는 Z값에 따라 파란색의 프래그먼트가 동일한 위치의 픽셀의 컬러와 경쟁하여 컬러버퍼에 들어가지 못하고 탈락함을 보여준다 .
(일부분임)
'유니티 쉐이더 스타트업' 카테고리의 다른 글
[ 유니티 쉐이더 스타트업 ] 05 - 1 . 기초적인 Surface Shader (0) | 2023.08.02 |
---|---|
[ 유니티 쉐이더 스타트업 ] 04 . 쉐이더랩에 관하여 (0) | 2023.07.31 |
[ 유니티 쉐이더 스타트업 ] 03 - 1 . 렌더링 파이프 라인 - 정점 조립과 버텍스 셰이더 (0) | 2023.07.23 |
[ 유니티 쉐이더 스타트업 ] 02 . 색과 빛의 기본원리 (0) | 2023.07.22 |
[ 유니티 쉐이더 스타트업 ] 01 . 쉐이더와 그래픽스 API 초기화 (0) | 2023.07.18 |