실시간 렌더링

편집 역사 토론
컴퓨터 그래픽스 게임 개발 마지막 수정: 2026-07-12 04:16:38

1. 개요[편집]

실시간 렌더링
Real-Time Rendering
분야컴퓨터 그래픽스 × 게임 개발
목표프레임당 예산(예: 16.6ms) 안에 화면 완성
기본 파이프라인래스터화(rasterization)
핵심 가속기GPU
최적화LOD, 컬링, 배칭, 셰이더 최적화

실시간 렌더링(Real-Time Rendering)은 3차원 장면을 사람이 상호작용하는 속도, 즉 초당 수십 프레임으로 즉석에서 그려내는 그래픽스 분야다. 영화 CG처럼 한 프레임에 몇 시간을 쓰는 오프라인 렌더링과 달리, 여기서는 프레임당 시간 예산이 절대적인 제약이다. 60fps 목표라면 한 프레임에 허용된 시간은 단 1/6016.6ms1/60 \approx 16.6\,\text{ms} — 이 안에 지오메트리 처리, 셰이딩, 포스트프로세싱을 모두 끝내야 한다.

핵심 철학은 “정확함보다 그럴듯함, 그리고 무엇보다 제시간에”이다. 물리적으로 완벽한 빛 계산을 포기하는 대신, 눈속임과 미리 구운(precomputed) 데이터를 총동원해 예산 안에서 최대한 그럴싸한 그림을 뽑는다. 화질이 아무리 좋아도 프레임이 늦으면 실시간 렌더링으로서는 실패다.

2. 프레임 예산[편집]

실시간 렌더링을 지배하는 유일신은 프레임 시간이다. 목표 프레임레이트에 따라 예산이 정해진다.

목표 fps프레임 예산주 용도
3033.3 ms콘솔·모바일 하한선
6016.6 msPC·콘솔 표준
90+11.1 ms 이하VR (멀미 방지 필수)

이 예산은 CPU와 GPU가 나눠 쓴다. 한쪽이 다른 쪽을 기다리며 노는 순간을 병목(bottleneck)이라 하고, “CPU 바운드냐 GPU 바운드냐”를 가려내는 프로파일링이 최적화의 출발점이다. VR에서 프레임이 밀리면 시야가 머리 움직임을 못 따라가 곧장 멀미로 이어지므로, 90fps는 취향이 아니라 안전 요구사항이다.1

3. 래스터화 파이프라인[편집]

실시간 렌더링의 뼈대는 레이 트레이싱이 아니라 래스터화다. 광선을 추적하는 대신, 삼각형을 화면 픽셀 격자에 투영해 “이 픽셀이 어느 삼각형에 덮이는가”를 직접 계산한다. GPU 하드웨어가 통째로 이 파이프라인을 가속하도록 설계되어 있어 압도적으로 빠르다. 대략의 흐름은 이렇다.

  1. 정점 셰이더(Vertex Shader) — 모델 정점을 월드→뷰→클립 공간으로 변환한다.
  2. 래스터라이저(Rasterizer) — 삼각형을 픽셀 조각(fragment)들로 쪼갠다.
  3. 픽셀 셰이더(Pixel/Fragment Shader) — 각 픽셀의 최종 색을 계산한다. 조명·재질 계산이 여기서 벌어진다.
  4. 출력 병합(Output Merge)Z-버퍼로 앞뒤 가림을 처리하고 블렌딩해 프레임버퍼에 쓴다.

가려진 면을 저렴하게 버리기 위해 Z-버퍼(depth buffer)로 깊이를 비교하는 것이 래스터화의 핵심 트릭이다. 조명이 많은 장면에서는 픽셀 셰이딩을 지오메트리와 분리하는 디퍼드 셰이딩(deferred shading)으로 넘어가, 화면에 실제로 보이는 픽셀에 대해서만 조명을 계산한다.

래스터화가 레이 트레이싱보다 빠른 근본 이유는 계산의 국소성에 있다. 삼각형 하나를 픽셀로 쪼개는 일은 이웃 픽셀끼리 완전히 독립적이라 GPU의 수천 코어에 그대로 흩뿌릴 수 있는 반면, 광선 추적은 광선이 장면 어디에 부딪힐지 미리 알 수 없어 무작위 메모리 접근과 분기가 잦다. 다만 래스터화는 “한 픽셀은 한 삼각형만 본다”는 국소성 때문에 반사·굴절·간접광처럼 화면 밖 정보가 필요한 효과에 원천적으로 약하다. 이 약점을 메꾸는 것이 다음 절의 주제다.

4. 전역 조명과의 대비·융합[편집]

빛의 간접 반사(한 벽에서 튄 빛이 옆 벽을 밝히는 현상)를 물리적으로 다 추적하는 전역 조명은 실시간 예산으로는 사치다. 그래서 전통적으로는 미리 구워두는(baking) 전략을 썼다. 정적인 장면의 간접광을 오프라인에서 계산해 라이트맵(lightmap)·구면조화 프로브에 저장해 두고, 런타임에는 조회만 한다. 공짜처럼 보이지만 조명이나 물체가 움직이면 다시 구워야 하는 대가가 있다.

2018년 이후 GPU에 하드웨어 레이 트레이싱 유닛이 실리면서 판이 흔들렸다. 이제는 순수 래스터화도, 순수 레이 트레이싱도 아닌 하이브리드가 대세다. 큰 화면은 래스터화로 빠르게 채우고, 반사·그림자·간접광처럼 래스터화가 약한 부분만 광선 몇 개로 보강한다. 이때도 광선 수가 턱없이 부족해 노이즈가 심하므로, 딥러닝 기반 디노이저와 업스케일링이 부족한 표본을 메꿔 준다.

5. 재질 표현[편집]

오늘날 실시간 재질은 대부분 물리 기반 렌더링(PBR) 규약을 따른다. 다만 실시간에서는 PBR의 정확한 적분을 그대로 풀 수 없어, 조도맵(environment map)을 거칠기별로 미리 필터링해 두고 조회하는 근사(split-sum approximation 등)를 쓴다. 즉 “물리적으로 그럴듯한 파라미터(알베도·거칠기·금속성)는 유지하되, 계산은 예산에 맞게 근사한다”가 실시간 PBR의 요체다. 재질 이론 자체는 물리 기반 렌더링 문서 참고.

6. 최적화 기법[편집]

예산을 지키려면 “안 그려도 되는 것을 안 그리는 것”이 핵심이다.

  • 컬링(Culling): 화면 밖(frustum culling)이거나 다른 물체에 완전히 가려진(occlusion culling) 오브젝트는 파이프라인에 넣지 않는다. 안 보이는 것을 그리는 것만큼 낭비가 없다.
  • LOD(Level of Detail): 멀리 있는 물체는 저해상도 메시로 교체한다. 화면에서 몇 픽셀 안 되는 나무에 100만 폴리곤을 쓸 이유가 없다.
  • 배칭/인스턴싱(Batching): 같은 재질의 오브젝트를 한 번의 드로우콜로 묶는다. 드로우콜 하나하나가 CPU→GPU 통신 비용이라, 개수를 줄이는 것이 곧 성능이다.
  • 셰이더·대역폭 최적화: 픽셀 셰이더 명령 수와 텍스처 대역폭을 줄인다. 이 모든 병렬 계산의 무대가 GPU이며, GPU의 SIMT 구조를 거스르는 분기(branch divergence)는 실시간에서 특히 비싸다.

7. 여담[편집]

  • “그래픽이 좋다”는 칭찬의 90%는 사실 조명과 후처리(포스트프로세싱)의 공이다. 지오메트리보다 톤매핑·블룸·앰비언트 오클루전이 인상을 좌우한다.
  • 프레임 예산을 못 지키면 해상도를 동적으로 낮추는 다이내믹 레졸루션이 발동한다. 게이머들이 “왜 이 장면만 흐리지?” 하는 순간이 바로 그때다.
  • 오프라인 렌더링과 실시간 렌더링의 경계는 매년 흐려지고 있다. 영화 제작 현장에서 게임 엔진으로 배경을 실시간 렌더링해 LED 벽에 쏘는 버추얼 프로덕션이 이미 표준이 되었다.2

8. 관련 문서[편집]

9. Footnotes[편집]

  1. 프레임 대기시간(latency)과 프레임레이트는 다른 문제다. 90fps로 부드러워 보여도 입력→화면 반영 지연이 크면 VR 멀미는 여전히 온다. 그래서 VR은 렌더링 직전에 최신 머리 자세로 화면을 살짝 보정하는 타임워프(timewarp)까지 동원한다.

  2. 《만달로리안》 등에서 쓰인 이 기법은 배경을 실시간 렌더링해 촬영장 LED 벽에 띄운다. 배우가 실제 그 공간에 있는 것처럼 반사·조명이 맞아떨어져 후반작업이 극적으로 줄었다.