[그래픽스 최적화] Rendering Pipeline

Date:     Updated:

카테고리:

태그:

Main Reference:
- 유니티 그래픽스 최적화


🐳 Monobehaviour Life-Cycle

image-10


🐳 Rendering Pipeline

Graphics_pipeline_2_en svg

실제 렌더링 파이프라인은 이보다 더 많은 단계로 나누어져 있지만, 크게 세 단계로도 나눌 수 있다.


Application Stage

렌더링 파이프라인에 진입하기 전에 필요한 CPU 연산들을 수행하는 단계이다. 예를 들어 매 프레임 계산되어야 하는 캐릭터의 움직임, 오브젝트 컬링, 배칭 등이 있다. 엄밀히 말하면 렌더링 파이프라인에 속하는 단계는 아니지만 CPU 연산에서 병목이 발생하면 결과적으로 성능의 문제가 생기기 때문에 이 부분 역시 중요하게 다루어야 한다. GPU Skiining과 같이 일부의 기능은 GPU가 연산해주기도 한다고 한다.


Geometry Stage

로컬 스페이스 기준으로 주어진 메시를 월드 스페이스의 카메라 뷰 관점으로 변환해주는 연산, 카메라 시야에 벗어나는 버텍스들을 제거해주는 클리핑 등을 수행하는 단계이다.


Rasterizer Stage

버텍스들로 이루어진 폴리곤에 속하는 픽셀들을 골라내는 작업을 rasterization이라 한다. Rasterization 작업이 이루어지면 픽셀의 최족 색이 결정된다. 만약 그려야 할 오브젝트가 여러개가 있다면, Z test를 통해 작업을 효율적으로 진행할 수 있다. Fragment Shader가 픽셀의 색을 결정하면 color buffer에 해당 컬러가 저장된다. 이때 color buffer 말고도 z-buffer (depth buffer)에 픽셀의 깊이 값을 저장한다. 오브젝트의 픽셀이 렌더링 될 때마다 해당 픽셀의 깊이를 비교하여 렌더링 여부를 판단한다. 다시 말해 다른 오브젝트 뒤에 숨겨진 픽셀들을 굳이 연산하지 않겠다는 의미이다.

1


🐳 Double Buffering

만약 모니터 화면에 출력되는 버퍼가 하나만 존재한다고 생각해보자. 이럴 경우 렌더링 결과를 클리어하고 그리고, 클리어하고 그리고 하는 과정이 모니터에 출력되게 된다. 화면이 껌벅거리는 불편함도 당연히 있겠지만, 버퍼를 하나만 추가하면 이보다 훨씬 효율적으로 렌더링을 수행할 수 있다. 바로 Back Buffer와 Front Buffer 두 개의 버퍼를 준비하는 방법이다.

2

Front Buffer의 메모리가 모니터에 출력될 때 Back Buffer는 이전 출력을 clear하고 다음 프레임의 화면을 미리 렌더링한다. 반대로 Back Buffer의 메모리가 모니터에 출력되면, Front Buffer는 메모리를 clear하고 다음 프레임의 화면을 렌더링한다. 이런 방식으로 모니터는 매 프레임 포인터만 왔다갔다 해주면 부드럽고 효율적으로 화면을 출력할 수 있게 된다.



맨 위로 이동하기

Unity 카테고리 내 다른 글 보러가기

댓글 남기기