Artoke

실시간 3D 렌더링과 뷰포트: 컴퓨터가 그림을 1초에 60장 그리는 법

실시간 3D 렌더링과 뷰포트: 컴퓨터가 그림을 1초에 60장 그리는 법

게임을 켜면 캐릭터가 뛰고, 나무가 흔들리고, 카메라가 빙글 돌아갑니다. 아주 자연스러워 보이죠. 그런데 사실 컴퓨터는 그 장면을 "미리 만들어 둔 것"이 아닙니다. 지금 이 순간, 여러분이 조이스틱을 움직이는 바로 그 순간에 그림을 새로 그려내고 있어요.

이것을 실시간 렌더링(real-time rendering)이라고 부릅니다. 오늘은 이 신기한 기술을 아주 천천히, 기초부터 풀어보겠습니다.

1. 렌더링이 뭐예요?

먼저 어려운 말부터 쉽게 바꿔봅시다.

렌더링은 "그려내기"라는 뜻입니다. 컴퓨터 속에는 숫자만 들어 있어요. "이 상자의 위치는 (3, 5, 2)", "이 공의 색은 빨강" 같은 숫자들이죠. 이 숫자 덩어리를 사람 눈에 보이는 그림 한 장으로 바꾸는 일, 그게 렌더링입니다.

비유하자면 이렇습니다. 요리 레시피가 있어요. "당근 2개, 감자 3개, 물 500ml." 이건 그냥 글자죠. 이 레시피를 보고 실제로 카레를 만들어 접시에 담는 것이 렌더링입니다.

  • 레시피(숫자 데이터) → 3D 모델, 위치, 색깔, 빛
  • 요리하기(렌더링) → 계산해서 픽셀 색을 정하기
  • 완성된 접시(결과 이미지) → 화면에 보이는 그림 한 장

2. "실시간"이 붙으면 무엇이 달라질까요?

여기서 아주 중요한 갈림길이 나옵니다.

애니메이션 영화를 생각해 봅시다. 픽사나 디즈니 영화는 그림 한 장을 그리는 데 몇 시간이 걸리기도 합니다. 컴퓨터 수백 대가 몇 달 동안 계산해서 영화를 완성하죠. 이건 미리 그려두는 렌더링입니다. 급할 게 없어요. 시간을 오래 쓰는 대신 아주 예쁘게 그립니다.

그런데 게임은 다릅니다. 여러분이 버튼을 누르면 지금 당장 캐릭터가 움직여야 해요. 0.5초 뒤에 움직이면 게임이 못 쓰게 됩니다. 그래서 컴퓨터는 그림 한 장을 0.016초 안에 그려야 합니다.

0.016초가 얼마나 짧을까요? 눈을 한 번 깜빡이는 시간이 약 0.3초입니다. 그러니까 눈 한 번 깜빡이는 동안 컴퓨터는 그림을 약 20장 그리는 셈이죠.

1초에 60장을 그리면 60 FPS라고 부릅니다. FPS는 "Frames Per Second", 즉 "1초에 몇 장(프레임)"이라는 뜻이에요.

플립북 비유

공책 귀퉁이에 그림을 조금씩 다르게 그려서 촤르륵 넘기면 움직이는 것처럼 보이죠? 그걸 플립북이라고 합니다. 게임 화면도 똑같습니다. 정지된 그림을 아주 빠르게 갈아 끼우는 것뿐이에요. 우리 눈이 속아서 "움직인다"고 느끼는 거죠.

다만 게임의 플립북은 미리 그려둔 게 아니라, 넘기는 순간 즉석에서 그려집니다. 이게 실시간 렌더링의 핵심입니다.

3. 뷰포트: 컴퓨터가 세상을 내다보는 창문

이제 뷰포트(viewport)를 알아봅시다. 이름이 어렵지만 뜻은 아주 단순합니다.

뷰(view)는 "보다", 포트(port)는 "창문"이라는 뜻이에요. 합치면 "보는 창문"입니다.

게임 속 세상은 아주 넓습니다. 산도 있고, 마을도 있고, 바다도 있어요. 하지만 여러분 모니터에는 그중 일부만 보이죠. 왜냐하면 카메라가 한쪽만 바라보고 있으니까요.

기차를 탔다고 상상해 봅시다. 창밖에는 넓은 들판이 펼쳐져 있어요. 하지만 여러분이 볼 수 있는 건 창문 크기만큼입니다. 그 창문이 바로 뷰포트예요.

중요한 사실: 컴퓨터는 창문 밖에 있는 것, 즉 안 보이는 것은 아예 그리지 않습니다. 이걸 "컬링(culling)"이라고 해요. 시간을 아끼기 위한 아주 똑똑한 요령이죠. 안 보이는 산을 열심히 그려봐야 아무도 못 보니까요.

실시간 3D 렌더링과 뷰포트: 컴퓨터가 그림을 1초에 60장 그리는 법 도식

4. 컴퓨터는 어떤 순서로 그릴까요?

실시간 렌더링은 정해진 순서를 따릅니다. 공장의 컨베이어 벨트처럼요. 이 순서를 렌더링 파이프라인이라고 부릅니다. 어렵게 생각하지 말고, 그냥 "그림 그리는 작업 순서"라고 생각하세요.

1단계: 삼각형 모으기

놀라운 사실 하나. 게임 속 모든 물체는 삼각형으로 만들어져 있습니다. 캐릭터 얼굴도, 자동차도, 나무도 전부 아주 작은 삼각형 수만 개를 이어 붙인 것이에요.

왜 삼각형일까요? 삼각형은 점 3개만 있으면 평면이 딱 정해지기 때문입니다. 가장 단순하고, 그래서 가장 계산하기 쉬워요. 종이접기로 공을 만들 때 작은 조각을 여러 개 붙이는 것과 비슷합니다.

2단계: 위치 계산하기

삼각형들이 3D 공간 어디에 있는지, 카메라에서 보면 화면 어디쯤에 찍히는지 계산합니다. 멀리 있으면 작게, 가까이 있으면 크게 보이도록 하죠.

3단계: 픽셀 색칠하기

화면은 아주 작은 점(픽셀)들로 이루어져 있어요. 이제 점 하나하나에 무슨 색을 칠할지 정합니다. 빛이 어디서 오는지, 그림자는 어디 지는지, 표면이 반질반질한지 거친지를 계산해서요.

Full HD 화면은 픽셀이 약 200만 개입니다. 이걸 1초에 60번 계산합니다. 즉 1초에 1억 번 넘게 색을 정하는 셈이에요.

5. 그래서 GPU가 필요합니다

여기서 주인공이 등장합니다. GPU, 우리말로 그래픽 처리 장치입니다.

컴퓨터에는 원래 CPU라는 두뇌가 있습니다. CPU는 아주 똑똑해요. 복잡하고 어려운 문제를 척척 풉니다. 하지만 일꾼 수가 적습니다. 몇 명 안 되는 천재 수학자 같아요.

GPU는 다릅니다. GPU 안에는 수천 개의 작은 계산기가 들어 있어요. 각각은 CPU만큼 똑똑하지 않지만, 동시에 수천 개 일을 처리합니다.

비유: 시험지 채점

학생 1000명의 시험지를 채점해야 합니다.

  • CPU 방식: 아주 똑똑한 선생님 한 분이 1000장을 차례차례 채점. 오래 걸립니다.
  • GPU 방식: 선생님 1000명이 각자 한 장씩 동시에 채점. 눈 깜짝할 사이에 끝납니다.

픽셀 색칠하기는 딱 이런 일입니다. 픽셀 200만 개는 서로 상관없이 각자 색을 정하면 되거든요. 옆 픽셀을 기다릴 필요가 없어요. 그래서 GPU가 압도적으로 유리합니다.

이렇게 여러 일을 동시에 하는 것을 병렬 처리라고 합니다. GPU가 실시간 3D 그래픽의 심장인 이유가 바로 이것이죠.

6. 예쁨과 빠름 사이의 줄다리기

실시간 렌더링에는 영원한 고민이 있습니다.

예쁘게 그리면 느려지고, 빠르게 그리면 덜 예쁘다.

0.016초는 정말 짧습니다. 그 안에 모든 계산을 끝내야 해요. 빛이 벽에 튕기고, 또 튕기고, 또 튕기는 것까지 다 계산하면 훨씬 사실적이지만 시간이 모자랍니다.

그래서 개발자들은 똑똑한 속임수를 씁니다.

  • 멀리 있는 물체는 대충 그리기 — 어차피 작아서 안 보여요. 삼각형 개수를 확 줄입니다.
  • 안 보이는 건 안 그리기 — 앞에서 말한 컬링입니다.
  • 그림자를 미리 그려두기 — 움직이지 않는 건물 그림자는 매번 계산할 필요가 없죠.
  • 납작한 그림으로 대신하기 — 멀리 있는 나무 숲은 사진 한 장을 세워둡니다.

이런 요령 덕분에 게임은 예쁘면서도 부드럽게 돌아갑니다. 마치 무대 뒤편은 대충 만들어 두고, 관객이 보는 앞면만 정성껏 꾸미는 연극 무대와 같아요.

7. 실시간 렌더링은 게임에만 쓰일까요?

아닙니다. 생각보다 훨씬 넓게 쓰입니다.

  • 건축 — 아직 짓지 않은 아파트 안을 미리 걸어 다녀 봅니다.
  • 자동차 설계 — 실제로 만들기 전에 색과 모양을 이리저리 바꿔 봅니다.
  • 영화 촬영 — 요즘은 거대한 LED 화면에 실시간 배경을 띄우고 그 앞에서 촬영합니다.
  • 의료 — CT로 찍은 몸속을 3D로 돌려 보며 수술을 준비합니다.
  • VR과 AR — 고개를 돌리는 즉시 장면이 따라와야 하니 실시간이 필수입니다.
  • 지도 앱 — 3D 건물이 있는 지도도 실시간으로 그려집니다.

심지어 여러분이 지금 보고 있는 화면의 창과 버튼도 넓게 보면 렌더링의 결과입니다.

8. 정리해 봅시다

  • 렌더링은 숫자를 그림으로 바꾸는 일입니다.
  • 실시간 렌더링은 그 일을 0.016초 안에, 1초에 60번 해내는 것입니다.
  • 뷰포트는 넓은 3D 세계를 내다보는 창문이자, 실제로 그림이 그려지는 영역입니다.
  • 모든 물체는 삼각형으로 되어 있고, 화면은 픽셀로 되어 있습니다.
  • GPU는 수천 개 계산을 동시에 해내는 병렬 처리의 달인입니다.
  • 예쁨과 속도 사이에서 개발자들은 끊임없이 똑똑한 요령을 찾아냅니다.

다음에 게임을 켜서 캐릭터를 움직일 때, 잠깐만 생각해 보세요. 그 부드러운 움직임 뒤에서 GPU 속 수천 개의 작은 계산기가 1초에 수억 번씩 "이 점은 무슨 색이지?"를 묻고 답하고 있습니다.

정말 대단한 일이 아무렇지도 않게 벌어지고 있는 것이죠.

출처

광고

리깅 파이프라인 자동화 도구

반복 작업은 스크립트에게. 현업에서 쓰는 리깅 툴 모음.

리깅 도구 보기