그래픽스

GPU외주와 렌더링 파이프라인

춤추는수달 2021. 10. 6. 00:17

CPU와 GPU의 차이

흔히들 CPU는 그냥 계산, GPU는 그래픽 계산 정도로 알고있다.

그러나 GPU가 그래픽만 계산할 수 있는 것은 아니다. 그래픽과 같은 대량의 간단 계산을 잘하는 친구일 뿐. 그래서 비트코인을 채굴하거나 암호 계산을 할 때 GPU를 쓰는 것이다. 

또한 CPU라고 그래픽 계산을 할 수 없는 것은 아니다. 다만 그래픽 말고도 해야할 일이 많고 GPU에게 맡기는게 더 효율적일 뿐.

 

CPU와 GPU 구조

위 그림은 CPU와 GPU의 구조를 나타낸다. 딱 봐도 매우 다르게 생겼다. 이중 눈여겨 봐야할 것은 GPU에는 ALU가 준내 많다는 것이다. ALU는 실질적인 수학 계산을 담당하는 부분이다. 즉 GPU는 수학 계산을 잘하는 녀석이라는 뜻이다.

그러나 CPU처럼 똑똑하진 않다. CPU는 계산한 결과를 저장했다가 다음 계산에 쓰고 다음으로 해야 할 계산이 무엇인지 아는 등 GPU보다 똑똑하다. 그래서 CPU는 단순하지만 수가 많은 계산들을 GPU에게 외주로 준다.

마늘 100개 빻기 외주

비유하자면 만두를 만드는 엄마는 CPU이고, 엄마에게 마늘 100개 빻기 외주를 받는 아들은 GPU인 것이다. 엄마는 만두를 만드는 과정과 방법에 대해 잘 알고 있지만, 운동능력이 아들보다 떨어지기 때문에 마늘 100개 빻기는 효율적이지 못하다. 반면 아들은 만두를 만드는 과정이나 방법은 모르지만 마늘 100개 빻기는 잘 할 수 있는 것이다.

 

GPU외주 라이브러리

GPU에게 외주를 준다고 했다. 그런데 GPU도 제조사마다, 사양마다 다 다르다. 그러면 다 다른 GPU마다 맞춤 외주를 주어야 하는 CPU는 얼마나 힘들까? 

라는 고민을 해결하기 위해 MicroSoft사의 GPU 라이브러리가 존재한다. 그것이 바로 DirectX이다. GPU제조사들은 DirectX의 스펙에 맞추어 GPU를 제작하고, CPU는 DirectX의 스펙에 맞추어 명령하면 그 사이에서 DirectX가 잘 전달해준다. MicroSoct 만쉐이.


렌더링 파이프라인

렌더링 파이프라인이란 메모리 상에 존재하는 물체들과 카메라의 정보들을 가지고 우리가 실제로 보는 3D 그래픽 화면으로 출력하기 까지의 과정을 말한다. 면접 질문에 자주 등장한다고 하니 유념하자. 그 과정은 아래 그림과 같다.

렌더링 파이프라인

매우 복잡해보이지만 지금 모든 내용을 알아야 할 필요는 없다. 여기선 각 과정에서 어떤 작업을 하는지 정말 간략히 짚고 넘어가보자.

Input-Assembler Stage

여기선 정점의 정보를 전달해준다. 

VertexShader Satge

정점 정보를 연산한다. 좌표 변환 등과 같은 연산이다. 정점 변환이라고 할 수 있겠다.

Tesselation 삼총사

DirectX11이후로 등장했다고 한다. 가까이 있는 물체를 더 선명하게 표현하기 위해 정점을 추가한다. 

GeometryShader Stage 

여기선 바로 위의 Tesselation 삼총사와 비슷한 일을 한다. 차이점은 Tesselation 삼총사는 좀더 거시적인 관점에서 작업한다고 하면, GeometryShader Stage는 미시적인 관점의 작업을 한다.

★Resterizer Stage

중요해서 별을 하나 붙여보았다. 여기선 각 정점의 사이 공간을 보간한다. 무슨 말이냐면 각 정점마다 칠해줘야 하는 색이 정해져있다. 그런데 정점 사이의 공간엔 없다. 그래서 사이의 공간은 인접 정점의 색의 그라데이션처럼 칠해준다. 또한 정점이 대각선으로 있으면 그 선을 마치 계단처럼 , 색도 조절해서 더 부드럽게 보이게 해준다. 아래 사진을 보면 이해가 될 것이다.

대각선 보간
색 보간

PixelShader Stage

여기선 픽셀들에 색을 변경하거나 색을 입혀준다.

Output-Merger Stage

최종적으로 모든 정보를 종합하여 색상을 입혀준다.