[컴퓨터 그래픽스] 화면 해상도, fps, 더블 버퍼링
픽셀 하나(one pixel) = 3개의 sub-pixel들 → RGB 컬러 모델
화면 해상도 (screen resolution) : 이미지의 정밀도를 나타내는 지표
(이미지를 몇 개의 픽셀 or 도트로 나타냈는지를 의미)
- 스마트폰 해상도 VGA (640 x 480 픽셀, 4:3 비율)
- PC 해상도 XGA (1024 x 768 픽셀, 4:3 비율)
- TV 해상도 FHD (1920 x 1080 픽셀, 1080p/1080i)
cf) PC는 resolution이, TV는 format이 중요
- p : progressive scan
- 480p, 720p, 1080p
- 위에서 아래 방향으로 모든 줄을 차례로 모두 그림
- i : interlaced scan
- 1080i
- 홀수선만 → 짝수선만 그리며 반복
애니메이션 (animation) : 이미지 여러 장을 빠르게 움직여서 움직이는 듯한 착각을 만든 것
fps = frames per second
- 12 fps : 표준 웹 애니메이션
- 15, 16 fps : 표준 TV 애니메이션
- 24 fps : 고품질 TV 또는 저품질 영화 애니메이션
- 30 fps : 고품질 영화 애니메이션
- 60 fps : 일반적인 LCD 디스플레이, 고품질 컴퓨터 게임 애니메이션
애니메이션 루프 (animation loop)
: 무한 루프 ( user input → update positions → visual effect → user input → ... )
프레임버퍼의 부분 업데이트 problem
: 프레임버퍼는 화면과 1:1로 대응하는데, 화면이 굉장히 빠른 속도로 업데이트될 때 문제가 발생할 수 있음
즉, 프레임버퍼는 일부만 업데이트되어있는 상황에서, 디스플레이 프로세서가 그냥 출력하는 상황에서 문제 발생
더블 버퍼링 (Double Buffering)
: 2 개의 프레임버퍼 사용
(in OpenGL)
- OpenGL은 back buffer에 draw
- 화면은 front buffer에 display
→ 그래픽카드가 순간적으로 두 버퍼를 바꿈 : OpenGL이 새로운 백버퍼에 그림 그리고, 바뀐 그림은 화면에 출력됨
→ 화면에는 프론트 버퍼만 나오니까 미완성된 이미지가 출력되지 않음
더블 버퍼링 하드웨어 구현
: 핑퐁 버퍼링 (ping-pong buffering)
- 장점 : 끊어짐 없는 애니메이션
- 단점 : HW 비용 증가
프레임버퍼를 배경색으로 지우는 작업이 시간이 많이 걸린다... 해결책은??
트리플 버퍼링 (Triple Buffering)
: back buffer가 두 개! → 하나는 clear용으로, 하나는 render용으로 쓰임 → 더 빠름
cf) 최신 HW에는 얼마나 많은 버퍼&메모리가 필요할까?
- stereoscopic, triple buffering을 기본으로 적용
- 프레임버퍼 + 깊이버퍼(depth buffer) + 스텐실버퍼(stencil buffer) + ...
- 텍스처버퍼(texture buffer)는 별도