Shader Pipeline 2 Rasterizer
이전 포스트 “Vertex Shader” 에서 Vertex Shader 에 대해 간단히 알아보았다. 이번 글에서는 Rasterizer 에 대해서 간단히 써보려 한다.
Rasterizer 는 쉐이더 파이프라인에 존재하는 고정 기능 단계이다. 간단하게 정의하면, Rasterizer 이전 단계를 거쳐 나온 Geometry 데이터들(vertex, mesh, …)을 정해진 해상도에 맞춰 픽셀별로 조각내어 주는 단계다. 아래 그림을 보자.
이는 일반적인 삼각형 폴리곤을 Rasterizer 단계에서 어떻게 픽셀로 변환하는지 한눈에 알게 해놓은 사진이다. 겹치는 정도에 따라 검은색에 가깝게 해놓은 것을 볼 수있다. MSDN : Rasterization Rules 에서 다른 프리미티브의 Rasterize 과정도 살펴볼 수 있다.
쉐이더 파이프라인에서 Rasterizer 가 가지는 의미도 조금 특별하다. 이는 3차원 메시 데이터를 2차원 이미지 데이터로 바꿔주는 과정이기 때문에 Geometry Stage 에서 Rasterizer Stage 로 넘어가는 관문이다.
또 하나 중요한 것은, Rasterizer 이전의 Geometry Stage 에서 각각 스테이지별로 넘어오던 데이터들을 Interpolator 라고 하는데, Interpolator 의 갯수들은 render target 의 Pixel 이 많으면 많을수록 큰 영향을 미친다. 왜냐하면 Rasterizer 는 단순히 Geometry 를 Pixel 로 변환하는 것만 있는게 아니라 Vertex 별로 가지고 있던 Interpolator 들을 Pixel 별로 보간하여 넣어주어야 하기 때문이다. 또한 VRAM 의 공간도 차지한다. 즉 갯수가 많으면 많을수록 데이터를 처리하는데 많은 비용이 든다는 것을 알 수 있다. 퍼포먼스를 생각한다면 최대한 갯수를 줄이는게 좋은 것 이다.