2024. 4. 14. 18:55ㆍ공부
그래픽스 작업을 처리하는 시스템에는 크게 6개의 요소가 필요하다.
1. 입력 장치(Input Device)
2. 중앙 처리장치(CPU : Central Processing Unit)
3. 그래픽 처리장치(GPU, Graphic Processing Unit)
4. 메모리(Memory)
5. 프레임 버퍼(Frame Buffer)
6. 출력 장치(Output Device)
순서 또한 이와 동일하다. 우선 입력장치(키보드, 마우스, 태블릿 등)에서 정보를 받은뒤 CPU에서 해당 정보들을 받아 필요한정보들을 GPU에 넘겨준다. GPU에서 처리한 정보들을 프레임버퍼에 넘겨주면 그것을 출력장치(모니터)에 넘겨주어 최종적으로 화면에 표시하게 된다.
그렇다면 프레임버퍼에는 어떠한 정보를 저장하여 출력장치에 표시하는것일까? 지금부터 알아보자.
프레임버퍼는 래스터(Raster)라고하는 픽셀들의정보를 저장하는 배열들을 모아둔 메모리 영역이다. 이 영역에는 각 픽셀들에 어떤 색상(color, depth)이 들어가는지 저장되어있으며, 출력시 래스터들을 한번에 출력해준다. 그렇다면, 버퍼에 픽셀, 래스터를 모아서 출력하는 이유는 무엇일까?
이것을 설명하기위해서는 우선 픽셀에 대해서 설명해야한다. 픽셀은 화면에서 표시하는 요소하나, 가장 기본적인 단위이며 이 픽셀들이 수천개 수만개 가 모여서 화면을 표시하는것이다. 일상 생활속예시로는 모니터, 휴대폰 카메라등이 있는데,
우리가 모니터를 구매할때 고려하는 사항이 해상도(Resolution)가 FHD(1920x1080)인지, QHD(2560x1440)인지 더나아가서 UHD(3840x2160)인지 확인해본 경험이 있을것이다. 여기서 말하는 해상도와 숫자가 바로 픽셀의 개수다. 이 픽셀의 개수가 많이 존재할수록 화면을 더욱 선명하고 큰화면으로 볼수있게 되는것이다.

또한 픽셀이 많을 수록 위의 그림처럼 더욱 세세한 표현이 가능하다. 10픽셀로 원을 그렸을때는 뭉툭해보였던 그림이 2배인 20픽셀로 늘어나니 제법 원처럼 보이게되었다.
이야기가 조금 새긴했지만, 핵심적인 이야기는 픽셀들은 매우 조그마한 입자라는것이다.
만약 이런 조그마한 입자인 픽셀을 프레임 버퍼에서 모아서 출력을 하지않고, 픽셀,래스터 단위로 출력을 하게된다면 어떻게 될까?
화면에서 픽셀들이 하나씩 채워지면서 표시되거나 모니터화면이 위에서부터 한줄씩 채워지게되면 화면이 굉장히 부자연스럽거나, 뚝뚝끊겨보이게될것이다. 이것을 방지해주는것이 바로 프레임 버퍼의 역할이다.
프레임버퍼에서는 이러한 정보들을 한번에 출력해주어 자연스럽게 화면이 바뀔수있도록 작업해준다. 하지만 마냥 좋아보이는 프레임 버퍼에도 문제점이 존재한다. 한번에 한 화면의 정보만 저장하기 때문에, 버퍼 내부정보들을 출력한 다음 다시 다음 화면의 정보를 프레임버퍼에 쓰고(write) 출력해야하기때문에 부자연스러움은 사라졌지만, 화면이 끊기게 되는것이다.
이런 문제를 해결하기위해서 그래픽스에서는 더블 버퍼링(Double Buffering)을 채용하고있다. 더블 버퍼링은 프레임버퍼를 2개 두어 하나의 프레임버퍼가 출력장치에 정보를 전달하고있을때 다른 프레임버퍼가 그 다음 정보를 미리 써놓는것이다. 이렇게하면 2개의 프레임버퍼가 교대로 화면을 출력하게되면서 끊김없이 화면을 출력할수있게된다.

CPU, GPU
위에서 설명한 래스터와 프레임버퍼에 들어가는값들은 대체 누가 처리하는것일까? 이것들은 생각해보면 간단하다. 일반적으로는 CPU에서 일반적인 처리(스케줄링, 프로세싱) 와 그래픽적인 처리(Rasterization, 프레임버퍼내부 색상위치 지정)를 같이 진행한다. 하지만, CPU에서 두개의 처리를 진행하다보면 부하가 생길수밖에 없게된다. 이런 상황을 해결하기위해, GPU가 등장하게된다. GPU는 해석 그대로 그래픽과 관련된 기능만을 처리하는 장치이다. GPU를 사용함으로써 CPU는 그래픽적 처리에관한 부담이 줄어들어 부하가 적어지고 이는곧 성능향상으로 이어지게된다. 또한 GPU는 높은 수준의 병렬처리가 가능하다.
- 공부하며 배운것을 정리하면서 작성하는 글입니다. 틀린부분은 언제든지 지적해주시기 바랍니다!
'공부' 카테고리의 다른 글
| [그래픽스]Viewing (1) | 2024.04.19 |
|---|---|
| [그래픽스]GeoMetry(지오메트리) (0) | 2024.04.17 |
| [그래픽스]02-1. 그래픽 처리과정2 (0) | 2024.04.14 |
| [그래픽스]01. 그래픽스란? (1) | 2024.04.14 |
| [어셈블리]레지스터 (0) | 2023.12.29 |