레이 트레이싱의 선구자, 전역 조명의 탄생을 말하다

by NVIDIA Korea

편집자 : 레이 트레이싱에 대해 들어본 적은 없어도 분명 적은 있으실 겁니다. 레이 트레이싱은 실제 세계에서 빛이 움직이는 모습을 모방해 어떤 현대 영화보다 더욱 정교하게 특수 효과를 만들어 내는 그래픽 렌더링 기법을 말합니다. 엔비디아는 RTX 실시간 레이 트레이싱 기법을 선보임으로써 정교한 기법을 더욱 빠르게, 더욱 쉽게 사용할 있도록 노력하고 있으며, 게임부터 제품 설계에 이르는 모든 분야에 영화같은 품질의 그래픽을 제공하고자 합니다. 오늘은 레이 트레이싱 기술 개발자 사람인 터너 휘티드(Turner Whitted) 통해 개발 초기부터 현재까지의 레이 트레이싱의 발자취를 소개하고자 합니다. 휘티드는 엔비디아 리서치와 함께음영 처리된 디스플레이를 위한 향상된 조명 모델이라는 논문을 썼으며, 이는 현대 레이 트레이싱 기법으로 처리한 컴퓨터 그래픽의 토대를 만들었습니다.

레이 트레이싱과 전역 조명

고등학교 물리 시간에 배운 것처럼, 레이 트레이싱은 지난 수 세기 동안 존재해 온 개념입니다. 컴퓨터 그래픽에 사용되는 전역 조명(global illumination)은 그보단 짧은 역사를 가지고 있지요.

헨리 고로(Henri Gouraud)와 뷔 투엉 퐁(Bui Tuong Phong)이 제안한 초기 컴퓨터 그래픽 음영 모델은 광원과 표면 상 지점 사이의 공간적 관계에 기반해 반사 정도를 계산했습니다. 그 후 짐 블린(Jim Blinn)은 표면의 미세 구조 상호 반사를 설명하는 켄 토렌스(Ken Torrance)의 작업에서 파생된 반사 모델을 개발했습니다. (롭 쿡(Rob Cook)과 켄 토렌스가 이후 이 모델을 확장해 현재 널리 사용되는 쿡-토렌스(Cook-Torrance) 음영 모델을 탄생시킵니다.) 그 직후 블린과 마틴 뉴웰(Martin Newell)은 광원을 주변 환경에 대한 360도 텍스처 맵으로 대체한 환경 매핑(environment mapping)을 설명하는 논문을 발표했습니다.

제 관심을 끌었던 것이 바로 이 환경 매핑 개발이었습니다. 표면에 문과 창문이 반사된 반짝이는 주전자의 렌더링은 컴퓨터로 생성된 이미지라고 생각하기 어려울 정도로 사실적이었습니다. 몇 시간이고 그 이미지를 보면서 이를 어떻게 개선할 수 있을지 고민했습니다. 환경 매핑에는 결정적 한계가 하나 있었는데, 바로 렌더링되는 사물과 가까이 있는 사물의 반사를 정확하게 렌더링 할 수 없다는 점이었습니다.

터너 휘티드의 1979년 시그라프(SIGGRAPH) 논문에 삽입된 이미지는 휘티드가 작업을 마무리 했던 뉴저지 홀름델(Holmdel)에 있는 벨 랩(Bell Labs) 건물과 흡사한 구조가 특징입니다.

퐁 모델의 효과는 지엽적이고, 토렌스의 모델과 파생물은 규모 면에서 보면 미시적입니다. 때문에 규모 면에서 블린과 뉴웰 모델을 ‘전역(global)’이라고 표현해, ‘전역 조명(global illumination)’이라는 용어를 쓰는 것이 자연스러워 보였습니다. 그러자 이런 궁금증이 들었습니다. 그렇다면 환경 매핑의 한계에 구애 받지 않고 전역 조명을 구현하는 방법은 무엇일까?

 

레이 트레이싱, 전역 조명을 구현하기 위한 자연스러운 선택

레이 트레이싱은 매우 간단하기 때문에 컴퓨터 그래픽에서 전역 조명을 구현하는데 딱 알맞았습니다. 이미지 생성용 레이 캐스팅은 IBM의 아서 아펠(Arthur Appel)이 처음 시작했으며, 로버트 골드스타인(Robert Goldstein)과 MAGI의 동료들에 의해 상용화 되었습니다. MAGI는 원래 탱크 내 방사선 추적을 위해 멀티 바운스 레이 트레이싱을 사용했습니다. 저는 업무 경력 초창기 시절 해양 음향학 쪽에 몸 담았던 적이 있어서, 여러 수심에서 굴절되고 표면에서 반사되어 레이 트레이싱 된 소리의 도표를 기억하고 있었습니다. 마침내 그 도표에서 본 것이 머리 속에 떠올랐고, 블린과 뉴웰이 처음 시작한 전역 조명 방법을 개선할 방안에 대한 감이 잡혔습니다.

제가 레이 트레이싱을 사용하기 망설였던 것은 순전히 성능에 대한 우려 때문이었습니다. 실시간 상호작용을 위한 컴퓨터 그래픽과 영화용 그래픽 간에는 항상 격차가 있었습니다. 제너럴 일렉트릭(General Electric)의 달 착륙 시뮬레이터는 우주비행사 교육을 위해 실시간으로 실행되어야 하는데, 이러한 점이 데이비드 에반스(David Evans)와 아이번 서덜랜드(Ivan Surtherland)의 비행 시뮬레이터 및 이와 유사한 유타대학교 연구에 제약으로 작용했습니다. 헨리 고드가 개발한 매끄러운 음영처리 기법은 사실상 아무런 비용 없이 실시간으로 실행할 수 있는 기법이었습니다. 뷔 투옹 퐁의 논문 내용 중 거의 알려지지 않은 부분 중 하나는 실시간 음영 처리용 회로의 설명인데, 사실 퐁의 음영 중 대다수는 실시간으로 실행되지 않았습니다.

프레임 버퍼를 사용하는 것이 가능해지면서 컴퓨터 그래픽 환경은 극적으로 달라졌습니다. CRT 재생률로 이미지를 렌더링하는 대신, 어느 속도로나 렌더링하고 화면 상의 정적 이미지를 볼 수 있게 되었습니다. Z-버퍼(z-buffer)와 결합된 에드 캣멀(Ed Catmull)의 세분화된 알고리즘은 복잡한 곡선 표면을 임의적으로 프레임 메모리로 렌더링할 수 있는데, 여기에는 1000분의 몇 초 정도가 아니라 몇 분이 걸렸습니다. 블린과 뉴웰의 환경 매핑에는 프레임 당 수십 분 가량이 소요되었습니다. 속도가 느리더라도 더욱 사실적인 이미지를 구현하려는 당시 분위기에 힘입어, 조금 더 느리게 해봐도 되겠다는 용기가 생겼습니다.

 

그림자를 더하다굴절

1978년 벨 랩의 컴퓨터 시스템 연구소는 디지털 이큅먼트 PDP-11/45 미니컴퓨터와 픽셀 프레임 버퍼당 9비트를 갖췄습니다. C 프로그래밍 언어와 더불어 이들 리소스는 블린과 뉴웰 버전보다 개선된 레이 트레이싱을 시도해 볼 수 있는 완벽한 환경이었습니다. (저는 첫 번째 C 프로그램을 쓰기 전에 브라이언 커닝헌(Brian Kerninghan)과 데니스 리치(Dennis Ritchie)의 프로그래밍 매뉴얼을 조금 더 꼼꼼히 읽었어야 했습니다. 애초에 제가 어셈블리 언어 프로그래머이다 보니, C 언어가 회귀(recursion)를 허용한다는 점을 몰랐던 겁니다. 저는 힘들게 스택을 구성하면서 C 언어가 자체적으로 제공하는 회귀를 사용하지 못한 채 멀티 바운스의 회귀 가능한 레이 트레이싱 프로그램을 일일이 손으로 썼습니다.)

마침내 화면에 서로 반사되는 구의 이미지가 나타났습니다. 뉴웰과 프랭크 프로우(Frank Crow) 모두 초기 이미지 일부에 바둑판을 포함시켰으며, 저도 이를 따라해야겠다는 생각을 했습니다. 거기까지는 그런대로 괜찮았습니다. 이 시점에서 추가 광선을 광원까지 추적하는 것은 매우 쉬운 일이었습니다. 그 결과 나온 그림자는 시간이 좀 걸리긴 했지만, 추가 코딩은 그렇게 번거롭지 않아서 그만한 가치가 있었습니다.

사소한 코딩 변경이란 광선 목록(a list of rays)을 광선 나무(a tree of rays)로 바꾸는 것이었습니다. 컴퓨터 과학에 대한 지식이 없는, 전기 엔지니어이자 하드웨어 설계자인 저에게 이는 그 전에 다뤄본 적이 없는 데이터 구조였습니다. 그래도 효과가 있었습니다.

1979년 휘티드는 서로 반사되는 구를 컴퓨터로 생성한 아주 획기적인 이미지를 공개했는데, 이는 전역 조명을 위한 레이 트레이싱의 가치를 보여주었습니다.

이 정도까지 할 수 있다면 고등학교 물리 시간에 배운 대로 아예 과감하게 굴절까지 해봐도 되지 않을까 하는 생각이 들었습니다. 쉽지 않은 작업이었지만, 결과는 놀라웠습니다.

 

조정형 슈퍼 샘플링, 구세주 역할을 하다

이런 점진적 기능을 실현하는데 소요되는 시간은 우리가 제어할 수 있는 부분이 아니라는 점은 익히 알고 계실 겁니다. 각 이미지의 렌더링 시간을 예측하기 위해 저는 512×512 이미지 해상도를 64분의 1로 줄이고, 시계로 시간을 재보았습니다. 그렇게 측정한 시간에 64배를 곱하니 전해상도 렌더링을 제법 정확하게 예측할 수 있었습니다. 그러나 전해상도에서 보이는 들쭉날쭉한 부분을 정리해야 했고, 이를 해결할 수 있는 단 한 가지 실질적인 방법은 슈퍼 샘플링이었습니다. 하지만 그러자 예상 렌더링 시간이 16배로 늘어났습니다. 전 패닉에 빠졌습니다.

저는 당시 시그라프 컨퍼런스에 제출할 초안을 작성 중이었고, 거기에 렌더링 이미지를 포함시켰습니다. 제출 마감일은 다되어 가는데, 16배 슈퍼 샘플링으로는 예측 렌더링 시간이 제출 기한을 넘길 판이었습니다. 그때 조정형 슈퍼 샘플링이라는 구세주 같은 아이디어가 번뜩 떠올랐습니다. 필요한 곳에만 추가 샘플을 넣으면 되는 이 방법은 몇 시간 밖에 걸리지 않는 작업이었고, 이미지가 렌더링되는 동안 저는 새로운 아이디어를 포함시켜 초안을 수정했습니다.

 

아래의 애니메이션에 나타난 이미지 시퀀스를 만들 때 이러한 효율성은 더욱 빛을 발합니다.

몇 달 후에 벨 랩의 한 임원이 실시간 레이 트레이싱을 구현하려면 무엇이 필요한지 물었습니다. 당시 우리의 신제품 VAX-11/780은 단순한 장면의 픽셀 하나를 60분의 1초의 속도로 처리했는데, 저는 적색, 녹색, 청색 전구를 각각 하나씩 올린 크레이(Cray) 슈퍼컴퓨터를 픽셀 당 하나씩 배치하는 어마어마한 양의 슈퍼컴퓨터 배열을 제안했습니다. 사실 이건 웃자고 한 말이었는데 결국 실제로 시도해 보게 되었죠.

 

실시간 레이 트레이싱

1979년 레이 트레이싱 논문 초판을 보면 다중 프로세서에서 작업을 분할하는 것에 대한 언급이 있습니다. 이후 레이 트레이싱과 관련해 ‘처치 곤란 병렬(embarrassingly parallel)’이라는 용어가 나오기 시작했습니다. 논문 초판에는 구 하나가 다른 구 안에 들어 있는 가속 구조에 대한 힌트도 있습니다. 몇 년간 저는 스티브 루빈(Steve Rubin)과 함께 계층적 경계 볼륨에 대한 그의 아이디어를 레이 트레이싱에 적용하기 위해 노력했습니다. 그 결과는 훌륭했고, 바둑판 상에 떠 있는 구 보다 더욱 복잡한 장면도 렌더링할 수 있었지만, 실시간 렌더링은 아직 이루지 못한 상황이었습니다.

빛과 그림자: 창문 안에 놓인 유리병 이미지는 레이 트레이싱을 가속화 하기 위해 경계 볼륨 계층 구조를 도입한 1980년 SIGGRAPH 논문에 나온 것입니다.

그 후 몇 년간 저는 레이 트레이서 사례 이미지를 교육용으로 사용했지만, 근본적으론 다른 주제로 넘어갔습니다. 하지만 다른 연구자들이 비실용적인 알고리즘을 실용적으로 만들어 주는 가속 기법을 통해 박차를 가했습니다. 구와 바둑판으로 시연된 이미지 품질을 훨씬 뛰어 넘는 추가적인 발전도 함께 이뤄졌습니다.

이는 모두 무어의 법칙(Moore’s law)이 발전하고 병렬 처리가 가능해짐으로써 이뤄졌습니다. 컴퓨터 그래픽 분야의 격세지감을 체감하기라도 하듯, 저는 40년 후에 깨어나 실시간 레이 트레이싱이 상품화된 상황을 보고 있습니다. 이게 어떻게 가능했던 걸까요? 분명 놀랍도록 똑똑한 몇몇 사람들이 많은 노력을 기울인 덕분이겠지요.