본문 바로가기
카테고리 없음

컴퓨터 그래픽 삼중 버퍼링

by 그것이 알고싶다(그것을 알려드림) 2020. 8. 14.
반응형

Triple Buffering

컴퓨터 그래픽스에서 3개의 버퍼를 이용해 화면을 출력하는 기술.

연산 장치(CPU나 GPU 등)가 만들어낸 그래픽 데이터는 일단 메모리 상의 버퍼에 저장됐다가 화면에 출력되는 과정을 거친다. 이때 단일 버퍼만을 가지는 구조에서는 버퍼를 비우거나 갱신하는 도중에 화면이 출력되어 깜빡임이나 테어링(화면 엇물림)이 발생하기 쉬우므로 이를 완화하기 위해서는 다중의 버퍼가 필요하며 일반적으로는 이중 버퍼링이 사용되고 있다. 다중 버퍼링에서는 연산 장치가 데이터를 기록하는 버퍼를 백버퍼, 디스플레이에 직접 출력될 데이터가 기록되는 버퍼를 프론트버퍼라 한다.

모니터의 화면 갱신 주기마다 두 버퍼를 바꿔치기(스왑)하면 백버퍼 데이터였던 쪽은 프론트버퍼 데이터가 되어 화면에 출력되고, 프론트버퍼였던 쪽은 백버퍼가 되어 연산 장치가 다음 프레임의 데이터를 저장하게 됨으로써 부드러운 화면 전환이 가능해진다.

물론 이중 버퍼링에서도 GPU의 백버퍼 갱신 주기가 모니터 갱신 주기보다 너무 높거나 낮으면 갱신 중이던 백버퍼의 내용이 그대로 화면에 출력되는 문제가 생기므로 이를 해결하기 위해 수직동기화나 지싱크, 프리싱크 등의 기술이 이용되고 있다.

삼중 버퍼링도 이러한 문제를 해결하기 위한 방법으로 이중 버퍼링에 비해 백버퍼 하나를 더 쓰는 방식인데, 그 구동 원리가 다른 두 가지 방식이 각각 삼중 버퍼링이란 이름으로 불리고 있기 때문에 혼동을 피하고자 둘을 나눠서 설명한다.
2. 렌더링과 화면 출력이 분리된 삼중 버퍼링[편집]
이 방식에서 GPU는 매 프레임을 두 백버퍼에 쉬지 않고 번갈아가며 렌더링하기 때문에 어떤 순간에도 둘 중 한 버퍼에는 완전한 프레임이 저장돼 있는 상태가 유지된다. 모니터의 갱신 주기가 돌아와 프론트버퍼와 백버퍼를 바꿔치기해야 할 때가 오면, 가장 최근에 완성된 프레임이 저장된 쪽의 백버퍼만을 택함으로써 실제 화면에는 항상 테어링 없는 완전한 프레임만이 출력된다.

또한 GPU는 모니터의 갱신 주기를 기다릴 필요 없이 퍼포먼스의 한도 내에서 계속 2개의 백버퍼에 새 프레임을 찍어내기만 하면 되므로 입력 지연 시간이 현저하게 적다. 즉 이 방식은 테어링을 방지하면서, 수직동기화와 달리 입력 지연과 끊김을 어느 정도 방지하는 장점까지 가진다.

하지만 수직동기화와 달리 GPU 사용량을 제한하는 효과가 없기 때문에 과부하나 전력 사용 문제가 걱정된다면 주의가 필요하다. 또한 이 방식은 그 원리상 GPU가 모니터의 갱신 주기보다 충분히 높은 FPS를 뽑아낼 수 있을 때 의미가 있기 때문에 그렇지 못한 상황에서는 오히려 끊김이 일어나게 된다.

영문 위키백과나 아난드텍 등에 따르면 이쪽이 '원래 의미의', 혹은 '진짜' 삼중 버퍼링이라고 돼있는데, 특히 아난드텍에서는 이것 외의 다른 방식을 삼중 버퍼링이라 부르지 말 것을 권장하고 있지만 이에 관해서는 여러 주장이 엇갈리고 있다.

엔비디아의 파스칼 칩셋부터 도입된 패스트싱크(Fast Sync)라는 이름의 기술은 사실 이 삼중 버퍼링과 원리상 차이가 없다. 다만 엔비디아에서는 다음 항에서 설명하는 기술을 삼중 버퍼링이라고 해왔기 때문에 새롭게 이름을 붙인 것으로 보인다. 엔비디아는 시연회 당시엔 패스트싱크와 기존 수직동기화(VSync)를 비교하면서 다른 것으로 설명했지만, 현재 엔비디아 제어판에서 패스트싱크를 설정하려면 '수직동기' 옵션에서 '빠르게' 모드를 선택하도록 되어 있다. 물론 기존 수직동기화와는 구동 원리가 전혀 다름에도 불구하고 테어링을 없애는 방식을 통틀어 수직동기화라고 한다면 이것도 그의 일종으로 볼 수도 있겠지만, 아직 명확한 정의는 없어 보인다.

반응형

댓글