수학·컴퓨터

빛의 궤적을 쫓다: 레이 트레이싱과 빛의 물리학

현실과 구분이 안 될 정도로 정교한 컴퓨터 그래픽스(CG)를 만들어내는 궁극의 렌더링 기술, '레이 트레이싱'의 물리학적 원리와 연산의 한계를 분석한다.

편집부 · 2024년 6월 19일 · 읽는 데 4분

체크무늬 바닥에 놓여 네온 불빛을 완벽하게 굴절하고 반사하는 아름답게 렌더링된 유리구, 3D 그래픽 개념
체크무늬 바닥에 놓여 네온 불빛을 완벽하게 굴절하고 반사하는 아름답게 렌더링된 유리구, 3D 그래픽 개념

최근 개봉하는 할리우드 블록버스터 영화나 최신 콘솔 게임들을 보면 턱이 빠질 정도로 놀라게 된다. 빗물이 고인 아스팔트 바닥에 네온사인 간판이 아른거리며 반사되고, 몬스터의 번들거리는 갑옷 표면에 주변의 불길이 일렁이는 모습이 소름 돋도록 현실과 똑같기 때문이다. 아무리 폴리곤(3D 뼈대)을 정교하게 깎고 텍스처 맵을 고화질로 발라본들, 결정적으로 '빛과 그림자'가 가짜 티가 나면 인간의 뇌는 즉각 그것이 컴퓨터 그래픽(CG)임을 알아챈다. 현실 세계의 완벽한 묘사를 위해 컴퓨터 공학자들은 마침내 얄팍한 눈속임(래스터화 기법)을 버리고 자연의 물리 법칙을 그대로 컴퓨터 안에 우겨넣는 무식하고도 위대한 결단을 내렸다. 우주 공간에서 날아오는 빛의 입자(광자) 하나하나가 물체에 부딪히고 튕겨 나가는 궤적을 수학적으로 일일이 추적하여 계산해 내는 궁극의 렌더링 기술, '레이 트레이싱(Ray Tracing, 광선 추적)'이다. 그래픽 카드의 칩셋이 녹아내릴 듯한 어마어마한 수학적 연산을 통해 모니터 안에 완벽한 3차원의 빛을 창조해 내는 레이 트레이싱의 물리학적 메커니즘을 뜯어보자.

광원 추적의 미련함과 역발상

현실 세계에서 사물이 보이는 물리적 원리는 단순하다. 태양이나 전구(광원)에서 수조 개의 빛 입자가 뿜어져 나와 사과 표면에 부딪힌다. 일부 빛은 사과의 빨간색을 제외하고 흡수되며, 튕겨 나간 붉은 빛이 내 눈(망막)으로 들어오면 나는 빨간 사과를 인식한다. 초기 그래픽 공학자들은 이 자연 법칙을 컴퓨터 시뮬레이션으로 똑같이 구현하려 했다. 가상의 태양을 만들고 거기서 빛의 가닥(Ray) 수조 개를 발사시켜 물체에 튕기게 한 뒤 카메라 렌즈에 들어오는 빛을 계산하려 한 것이다. 하지만 치명적인 문제가 있었다. 태양에서 출발한 수조 개의 빛 중에서 카메라 렌즈(우리의 눈) 구멍으로 쏙 들어오는 빛은 고작 0.0001%도 안 된다. 나머지 99.9999%의 빛은 벽에 부딪히고 하늘로 튕겨 나가 카메라에 닿지도 않는다. 카메라에 들어오지도 않을 쓰레기 빛들의 궤적을 추적하느라 슈퍼컴퓨터가 며칠을 계산해도 모니터에는 검은 화면만 맴도는 어처구니없는 비효율이 발생했다.

거꾸로 쏘는 빛, 시선 추적의 마술

이 미친 연산량을 획기적으로 줄이기 위해 공학자들은 기발한 역발상을 해냈다. "태양에서 출발한 빛을 추적하지 말고, 카메라(내 눈)에서부터 빛을 거꾸로 쏘자!" 이것이 레이 트레이싱의 핵심 아이디어인 '역방향 광선 추적(Backward Ray Tracing)'이다. 모니터 화면이 1920x1080 해상도라면 픽셀이 약 200만 개다. 카메라 렌즈에서 각 픽셀을 향해 200만 가닥의 가상 레이저(광선)를 역으로 발사한다. 이 광선이 가상 세계를 날아가다 사과에 부딪히면 멈춘다. 그리고 사과에 부딪힌 그 지점에서 다시 천장에 달린 전구(광원)를 향해 직선(그림자 광선)을 그어본다. 만약 전구까지 가는 길에 컵이 가로막고 있다면 사과는 그림자에 가려진 어두운 색이 되고, 아무 장애물이 없다면 붉게 빛나는 색을 칠하면 된다. 카메라에 들어오는 딱 200만 가닥의 유효한 광선만을 거꾸로 추적하기 때문에, 수조 번의 헛수고 연산을 획기적으로 줄이면서도 물리적으로 완벽하게 정확한 빛과 그림자를 계산해 낼 수 있게 된 것이다. 복잡한 반사가 있는 매우 사실적이고 반짝이는 금속 자동차로 변환되는 와이어프레임 3D 모델, 렌더링 프로세스

반사와 굴절, 물리학 법칙의 완벽한 묘사

레이 트레이싱이 기존 그래픽 기술(래스터화)과 비교해 압도적인 화질을 자랑하는 이유는 투명한 유리나 거울, 그리고 울퉁불퉁한 표면에서의 빛의 굴절과 반사를 물리적으로 100% 완벽하게 모사하기 때문이다. 카메라에서 쏜 광선이 맑은 유리 구슬에 부딪히면, 수학 알고리즘은 스넬의 법칙(Snell's Law)이라는 물리학 공식을 꺼내 든다. 유리의 굴절률에 따라 광선의 각도를 꺾어서 구슬 안으로 통과시키고, 뒷면으로 빠져나간 광선이 뒤쪽 바닥의 타일 무늬를 읽어온다. 거울에 부딪히면 입사각과 반사각을 정확히 계산해 반대쪽 풍경을 광선에 실어 나른다. 심지어 물에 젖어 살짝 거친 콘크리트 바닥에 빛이 부딪히면, 빛을 한 방향이 아닌 여러 가닥으로 무작위로 난반사(산란)시켜 계산(패스 트레이싱)함으로써 인위적이지 않고 부드러운 은은한 빛 번짐까지 구현해 낸다. 레이 트레이싱이 적용된 게임 화면을 보면 유리창에 비친 내 캐릭터의 모습이나, 금속 표면에 왜곡되어 반사되는 주변 폭발의 불꽃이 소름 끼치도록 자연스럽게 펼쳐진다.

초당 60프레임의 벽, RT 코어의 등장

레이 트레이싱 알고리즘은 이미 1980년대에 완성되었지만, 오랫동안 픽사(Pixar) 애니메이션이나 헐리우드 CG 영화 등 시간이 오래 걸려도 상관없는 녹화된 영상(오프라인 렌더링)에만 쓰였다. '토이스토리' 한 장면을 렌더링하는 데 슈퍼컴퓨터로 수십 시간이 걸렸기 때문이다.

이어서 읽기