렌더링의 개요
- 렌더링
렌더링이란 "장면을 이미지로 전환하는 과정"입니다. 우리가 살고 있는 3차원 공간이 사진기에 의해 사진이라는 2차원 이미지로 바뀌어 기록되는 것처럼 컴퓨터 속의 가상 공간은 렌더링이라는 과정을 통해 2차원 이미지로 바뀌어 우리에게 보여지는 것입니다. 사실 보통 우리가 렌더링이라고 부르는 과정(Render 명령을 내리고 나서부터 결과가 나오기까지)은 100% 컴퓨터에 의해서 이루어집니다. 이 과정동안 여러분들이 할 수 있는 일은 아무것도 없습니다. 하지만 그럼에도 불구하고 우리는 컴퓨터가 어떤 과정을 통해서 3차원 장면이 2차원 이미지를 바꿔나가는지 그 구체적인 방법을 잘 이해하고 있어야만 합니다. 왜냐구요? 그래야만 쉽고 빠르게 여러분들이 원하는 결과를 얻을 수 있기 때문입니다.
- 와이어프레임 렌더링
일단 가장 간단한 렌더링 방법으로는 오브젝트의 모서리(Edge) 만을 그려주는 와이어프레임(Wireframe) 렌더링 기법이 있습니다. 이 방법은 (1)처리 속도가 빠르며 (2)오브젝트의 구조를 쉽게 파악할 수 있기 때문에 작업용 화면 표시 방법으로 적합하긴 하지만 이름 그대로 뼈대만 보여주기 때문에 최종 결과물에는 적합하지 않습니다. 따라서 우리가 원하는 사실적인 결과를 얻기 위해서는 좀 더 많은 것들을 고려해야 하는데 그 중 가장 대표적인 것이 (1)어떤 면이 보일 것인지를 결정하는 일과 (2)보이는 면이 어떤 색을 갖게 될 것인지를 결정하는 일입니다. 즉, 여러분이 얻고자 하는 2차원 이미지의 각 픽셀마다 그 픽셀을 통해 보이는 면이 어떤 것이며 그 면이 어떤 색을 갖는지를 계산하고 그 결과를 종합한다면 여러분들이 원하는 결과를 얻을 수 있을 것입니다.
[그림 1] 와이어프레임 렌더링
- 은선 제거
두 작업 중 전자에 해당하는 작업을 우리는 은선 제거(Hidden Line Removal)라고 부릅니다. 은선(隱線:Hidden-Line)이란 현재 시점에서 오브젝트의 다른 부분이나 혹은 다른 오브젝트 등에 의해 가려져 보이지 않는 숨겨진 모서리(Edge)들을 의미하는데 이와 같은 은선 제거 과정을 거치면 어떤 면이 최종적으로 우리에게 보이는 면인지를 검출(Visible-Surface Determination)할 수 있게 됩니다.
[그림 2] 은선 제거
60년대 이후 수많은 은선 제거 기법들이 개발되었지만 그 중에서 가장 대표적인 은선 제거 기법은 바로 Z-Buffer Algorithm입니다. Pixar의 설립자인 Ed. Catmull에 의해 개발된 Z-Buffer Algorithm은 각 면의 깊이 값을 별도의 Buffer에 임시로 저장하며 비교해서 최종적으로 어떤 면이 보일 것인지를 결정하는 방법입니다. Z-Buffer라는 이름은 이처럼 깊이 값을 저장하는 Buffer를 사용한다고 해서 붙여진 이름입니다. 좀 더 구체적으로 설명하면 각 픽셀마다 Polygon Table의 순서에 따라 각 오브젝트 표면의 색상과 깊이 값을 계산한 다음 계산된 깊이 값과 현재 Z-Buffer에 저장되어 있는 값을 비교해서 새로 계산된 값이 더 크다면(시점과 더 가깝다면) Frame Buffer를 갱신하고 그렇지 않다면 기존의 값을 그대로 사용하는 것입니다. 이런 과정을 반복하면 결국 Z-Buffer의 값이 가장 클 때의 Frame Buffer 값이 해당 픽셀의 색으로 결정되므로 가장 시점과 가까이 있는 물체를 찾아내는 효과를 얻을 수 있습니다. 이 기법은 (1)Z-Buffer로 사용하기 위한 메모리가 별도로 필요하고 (2)보이건 보이지 않건 일단 모든 오브젝트를 모두 고려해야 하므로 다소 비효율적이라는 단점에도 불구하고 (1)원리가 매우 단순하기 때문에 구현하기 쉽고 (2)각 픽셀에 투영되는 면의 색과 깊이 값만 구하면 되므로 Polygon Mesh은 물론 모든 유형의 오브젝트에 적용할 수 있으며 (3)결과를 저장할 때 Z-Buffer의 값을 같이 저장하면 각각의 오브젝트들을 따로 렌더링해서 나중에 합성하거나 Depth of Field 효과를 주는 등의 작업도 가능해진다는 장점덕분에 가장 널리 사용되고 있습니다. 그런데 최근에는 Z-Buffer Algorithm이 직접 사용되기보다는 A-Buffer Algorithm이라는 변형된 방법이 더 많이 사용되고 있습니다. A-Buffer의 A는 Antialiased, Area-Averaged, Accumulation의 약자로서 Z-Buffer Algorithm에 안티에일리어싱 기능을 추가한 것입니다.
[그림 3] Z-Buffer Algorithm
Z-Buffer와 함께 또 하나 꼭 알아두어야 할 은선 제거 기법은 바로 Scanline Algorithm입니다. 이 기법은 오브젝트를 구성하는 모서리 목록(Edge Table)과 Polygon 목록(Polygon Table)을 이용 한번에 한 줄씩 각 Scanline과 만나는 면들을 골라내고 이 면들에 대해서만 보이는 면을 판정(Visible-Surface Determination)하는 방법입니다. 여기서 중요한 것은 렌더링이 "한 번에 한 줄씩 진행된다"는 점이죠. 여러분들도 잘 알고 계실, 때로는 후진 Renderer쯤으로 치부하기도 하는 Scanline Renderer란 바로 은선 제거를 위해 Scanline Algorithm을 사용하는 렌더러를 말하는 것입니다. 이와 관련된 좀 더 포괄적인 내용은 뒤에서 다시 언급하기로 하겠습니다.
- Local Illumination Model
앞서 살펴본 방법들에 의해 보일 면이 결정되었다면 각 픽셀에서 보이는 면이 어떤 색을 갖는지를 계산해서 최종적인 이미지가 완성하게 되는데 이와 같이 오브젝트의 표면이 어떤 색을 갖게 될 것인지 계산해 내기 위해 사용하는 것이 Local Illumination Model입니다. 사실 렌더링 과정 중에 가장 중요하고 꼭 이해해야하는 과정이 바로 이것이죠.
우리가 어떤 오브젝트를 보고 색을 느낀다는 것은 결국 그 오브젝트의 표면에서 반사되는 빛을 눈이 감지하는 것입니다. 예를 들어 우리가 빨간 사과를 보면서 저 사과 참 빨갛다라고 느끼는 것은 사과의 표면이 다른 색은 흡수하고 빨간색 빛만 반사해 내기 때문입니다. 즉, 조명의 방향과 표면의 특성 등 여러 가지 요인에 따른 빛의 작용을 계산한다면 각 픽셀에서 보이는 오브젝트 표면의 색상을 결정할 수 있을 것입니다. 그리고 이렇게 오브젝트 표면에서 일어나는 빛의 작용을 수학적으로 재현하는 방법(공식)이 바로 Illumination Model입니다. 특별히 앞에 Local이라는 단어를 붙인 이유는 빛의 작용을 계산함에 있어 Local Illumination Model이란 오브젝트 표면의 색상을 결정할 때 우리가 관심을 갖는 특정 표면과 이 표면을 직접 비추는 광원만을 고려하기 때문입니다. 물론 실제 세계에서는 굴절처럼 주위 환경과의 상호 작용을 통해 얻어지는 것들도 있습니다. 이런 것들은 뒤에 나올 Global Illumination Model을 통해서 구현하게 되므로 뒤에서 다시 언급하기로 하겠습니다.
일단 Local Illumination Model을 이해하기 위해서는 먼저 물체 표면에서 이루어지는 빛의 반사 작용에 대해 알아야 합니다. 빛의 반사에는 크게 2가지 종류가 있는데 하나는 빛이 입사한 방향과 상관없이 임의의 방향으로 빛이 흩어져 버리는 난반사(Diffuse Reflection)이고 또 하나는 일정한 방향으로 빛이 반사되어 나가는 정반사(Specular Reflection)입니다. 결국 난반사에 의해 반사되는 색상이 바로 여러분들이 보게 되는 물체의 색상이며 정반사에 의해 생기는 것이 하이라이트입니다. 이상적인 경우 정반사(Specular Reflection) 되는 빛은 Normal을 기준으로 입사된 각도 그대로 반사됩니다(입사각 = 반사각). 특별히 이런 경우를 일컬어 거울 반사(Mirror Reflection)라고 부르기도 하지요. 하지만 이런 경우는 예외적인 경우이고 이 세상에 존재하는 대부분의 오브젝트들은 거울 반사(Mirror Reflection) 방향을 중심으로 빛이 분산되기 시작해서 거울 반사(Mirror Reflection) 방향에서 멀어질수록 빛의 세기가 점점 줄어다가 결국 자연스럽게 난반사(Diffuse Reflection)되는 빛의 세기로 바뀌게 됩니다. 따라서 광원, 표면, 시점간의 관계를 고려해서 난반사 및 정반사되는 빛의 세기(Intensity)을 계산하면 물체 표면의 색상이 구해지고 이것이 바로 Local Illumination Model인 것입니다. (RGB각 채널별로 빛의 세기를 계산한 다음 종합하면 색이 되는 거죠.)
[그림 4] 물체 표면에서의 빛의 반사
가장 대표적이고 기본적인 Local Illumination Model은 1975년 Phong에 의해 개발되었습니다. Phong은 난반사의 계산을 위해서는 Lambert의 코사인 법칙을 이용하고 정반사의 계산을 위해서는 cosnα을 곱하는 방법을 이용했습니다. α는 반사 벡터 R과 시점 벡터 V사이의 각도로서 이 방법을 사용하면 반사 벡터 R과 시점 벡터 V가 일치하는 지점을 최대 값으로 해서 두 벡터 사이의 각도가 벌어질수록 정반사의 세기가 점점 줄어들게 됩니다. n은 사용자가 임의로 지정하는 숫자로서 하이라이트의 크기를 조절하는 역할을 합니다. MAX의 Glossiness 값(R2.5의 Shininess 값)이 바로 여기에 해당됩니다. 결국 이 방법은 실제 표면에서 일어나는 물리적인 현상을 기초로 한 방법이 아니라 실험적이며 경험적인 접근 방법입니다. 따라서 이 방법을 사용해서 얻어진 결과는 실제 상황과 다소 차이가 날 수 밖에 없다는 원죄(?)를 갖고 있기는 하지만 상대적으로 계산량이 적고 구현이 간단하며 최종적으로 얻어지는 결과물이 상당히 '그럴 듯 하게 보이기' 때문에 이 방법은 지금까지도 기본적인 Illumination Model로서 가장 널리 애용되고 있습니다.
- Physically Based Local Illumination Model
그러나 언제나 그렇듯이 사람들은 좀 더 정확한 결과를 원했고 이를 위해 좀 더 물리적으로 올바른 Illumination Model들을 개발하게 되는데 이와 같은 방법들이 바로 Physically Based Illumination Model들입니다. Blinn을 비롯한 Cook-Torrence, Anisotropic Model 등이 이에 해당되는데 거의 대부분의 Physically Based Illumination Model들은 올바른 하이라이트를 얻기 위해 정반사 특성의 계산에만 이와 같은 방법을 적용할 뿐 난반사 특성은 Phong에서 사용했던 Lambert의 코사인 법칙을 그대로 사용합니다. 하지만 최근에는 Oren-Nayer 모델같이 난반사(Diffuse Reflection) 특성을 계산하기 위한 Physically Based Illumination Model도 개발되고 있습니다.
Blinn Model은 최초의 Physically Based Illumination Model로서 정반사 특성을 계산함에 있어 Phong이 사용했던 cosnα 대신에 응용물리학자인 Torrence와 Sparrow에 의해 개발된 Torrence-Sparrow Model 사용합니다. 이론적으로 복잡한 얘기를 다 하기에는 지면이 부족하고 Blinn 모델이 Phong 모델과 비교해서 갖게 되는 실질적인 차이점은 Specular를 계산할 때 조명의 입사각에 따라 Specular 특성이 바뀌느냐 안 바뀌느냐에 있습니다. 즉 Phong 모델에서는 입사각과 관계없이 항상 반사각 방향으로 정반사율(Specular Reflectance)이 높게 나오지만 실제 세계에서는 빛이 비스듬하게 입사할 경우(입사각이 클 경우) 반사각보다 더 비스듬한 방향으로 정반사율(Specular Reflectance)이 높게 나오게 됩니다. 이런 현상을 일컬어 정반사율(Specular Reflectance)이 높은 부분(peak)과 반사각이 일치하지 않고 떨어져 있다고 해서 off-specular peak라고 부르는데 정오에 태양이 지면에서 거의 수직해 있을 때는 하이라이트가 별로 발생하지 않던 아스팔트 표면이 석양 무렵 태양 빛이 지면에 비스듬하게 입사할 때에는 훨씬 반짝여 보이는 것이 바로 이 현상 때문입니다. Blinn 모델은 이 현상을 제대로 표현할 수 있는 것이죠. 같은 이유에서 조명이 뒤에서 비춰지는 경우(Backlight)에도 Blinn 모델의 특성이 두드러지게 나타납니다.
[그림 5] Phong & Blinn
이 밖에도 금속 질감을 효과적으로 재현하기 위한 Cook-Torrence Illumination Model이나 매끈하게 연마된 금속이나 머리카락 등에서 볼 수 있는 방향성을 갖는 하이라이트 재현을 위한 Anisotropic Illumination Model 등이 많이 사용되는 Physically Based Illumination Model들 입니다. 마지막으로 Oren-Nayer 모델의 경우 특이하게 난반사 특성의 계산을 위해 Physically Based Illumination Model을 사용하는 경우로서. 이 Model을 사용하면 백묵이나 복숭아처럼 미세하게 거친 표면을 효과적으로 재현할 수 있습니다.
- Global Illumination Model
여기 까지 설명한 방법들을 종합해서 만들어진 Renderer가 바로 소위 Scanline Renderer라고 부르는 Renderer입니다. Z-Buffer와 Scanline Algorithm을 이용해서 보여지는 부분을 검출하고 Local Illumination Model을 적용해서 픽셀의 색을 결정하는 방법입니다. 사실 이 정도만 해도 웬만한 것들은 다 표현할 수 있을 뿐만 아니라 렌더링 속도도 매우 경제적이기 때문에 그 동안 많은 사랑을 받아 왔습니다. 그런데 앞에서도 잠깐 언급했지만 Local Illumination Model은 빛의 작용을 계산함에 있어 리가 관심을 갖는 특정 표면과 이 표면을 직접 비추는 광원만을 고려하기 때문에 이 방법만 가지고는 오브젝트간의 반사나, 굴절, 그림자 등과 같이 다른 오브젝트에 의해 반사되거나 다른 오브젝트를 투과, 굴절해서 오브젝트 표면에 영향을 미치는 빛에 의한 결과들을 재현할 수 없다는 문제가 있었습니다. 그리하여 개발된 것이 바로 Local Illumination Model의 반대인 Global Illumination Model입니다.
이 방법은 렌더링 과정에서 오브젝트 상호간의 관계도 모두 고려하기 때문에 오브젝트들 간의 상호 반사(Interreflection), 굴절, 그림자 효과 등을 재현할 수 있어 훨씬 사실적인 이미지를 생성할 수 있습니다. Ray Tracing과 Radiosity가 가장 대표적인 예죠. 다만 좋은 결과를 얻으려니 그 만큼 많은 요인들을 고려해야 하고 그러다 보니 엄청난 렌더링 시간이 걸린다는 치명적인 단점을 가지고 있지요. 따라서 불과 얼마 전까지만 해도 실제 업무에서 이 기법을 적용한다는 것은 매우 힘든 일이었습니다. 다행히 최근에는 하드웨어 환경이 워낙 빨리 좋아지는 데다가 속도 개선을 위한 많은 방법들이 개발되어 활용이 점점 늘고 있습니다.
단, 한가지 알아 두셔야 할 것은 Global Illumination Model인 Ray Tracing이나 Radiosity가 분명 훌륭한 방법이기는 하지만 이 방법들이 실제 하는 일에 비해 사용자들에게 너무 과대 포장되어 알려지는 경향이 있다는 점입니다. 어떤 사람들은 Ray Tracing이 아니면 렌더링도 아니라고 하는 사람들도 있고 Radiosity야 말고 환상 그 자체라고 말하는 사람들도 있습니다. 물론 그럴 수도 있지만 Global Illumination Model에 의한 결과가 Local Illumination Model에 의한 결과와 크게 차이나지 않는 경우도 많고 얻을 수 있는 결과에 비해 지나치게 많은 계산 시간을 필요로 해서 실무에서는 사용하지 못하는 경우도 많다는 점 기억해 두시길 바랍니다.
- Recursive Ray Tracing
1980년 Turner Whitted는 "An Improved Illumination Model for Shaded Display"라는 논문을 통해 눈에서부터 각 픽셀을 향해 광선(Ray)을 방출한 다음 이 광선(Ray)의 굴절, 반사등을 계산해서 광선(Ray)이 시작되었던 조명에 이를 때까지의 경로를 역추적해(Trace) 나가고 이 과정을 통해 각 픽셀의 색상을 결정하는 혁신적인 렌더링 방법을 발표했으니 이 것이 바로 그 유명한 Ray Tracing입니다. 특히 광선(Ray)을 추적하는 과정에서 반사와 굴절이 되풀이(Recursion)해서 일어난다고 해서 Recursive Ray Tracing이라고 부르는데 처음 개발된 Ray Tracing이라는 뜻에서 Classic Ray Tracing이라고 부르기도 하고 Whitted가 개발 했다고 해서 Whitted Ray Tracing이라고 부르기도 합니다.
[그림 6] Recursive Ray Tracing
예제 그림은 이 방법에 의해 렌더링된 전형적인 예를 보여주고 있는데 눈에서 각 픽셀을 향해 방출된 광선은 ○오브젝트 표면에 반사나 굴절이 설정되어 있을 경우 계속해서 새로운 광선(Ray)을 방출해 나가다가(초록색 광선) ○광원과 만나거나(빨간색 광선) ○거울 반사(Mirror Reflection)가 전혀 없는 표면을 만나거나(보라색 광선) ○아무런 오브젝트와 만나지 못하거나(파란색 광선) ○정해진 최대 반복 횟수에 도달하면 추적을 멈추고 그 동안 거쳐온 표면의 세기(Intensity) 값을 모두 모아 픽셀의 세기(Intensity)값을 구하게 되고 ○여기에 각 과정마다 Light Ray를 이용 그림자의 생성 여부를 결정하는 작업(노란색 광선)을 추가해서 최종 결과를 얻게 되는 것입니다.
이때 한가지 꼭 알고 있어야 할 중요한 사실은 Ray Tracing에서 고려하는 것은 오직 각 오브젝트간에 일어나는 거울 반사(Mirror Reflection) 즉 완전 정반사(Perfect Specular Reflection) 특성뿐이라는 점입니다. Ray Tracing에서도 난반사 특성이라던가 불완전한 정반사(Imperfect Specular Reflection) 특성을 계산할 때에는 기존의 Local Illumination Model을 그대로 사용합니다. 결국 이 말이 뭘 의미하겠습니까? 거울 반사(Mirror Reflection) 특성이 없는 일반적인 오브젝트를 렌더링할 때에는 Ray Tracing 렌더러나 Local Illumination Model만을 사용하는 Scanline 렌더러나 결과에 별 차이가 없을 수밖에 없다는 말입니다. 이 시점에서 문득 생각하는 것이 있지 않으십니까? 네. 그렇습니다. Ray Tracing 렌더러로 만들어진 예제들은 한결같이 모두 금속구나 유리잔들이었죠. 바로 이런 근본적인 한계가 있었기 때문에 Ray Tracing의 장점을 100% 보여줄 수 있는 특수한 경우인 금속구나 유리잔만을 예제로 보여주었던 것입니다.
- Distributed Ray Tracing
Recursive Ray Tracing이 거울 반사나 굴절, 그림자 등을 매우 사실적으로 표현해 주었음에도 불구하고 부족한 것이 있었으니 그것은 Classic Ray Tracing에 의해 얻어지는 결과물들이 모두 지나치게 깨끗하고 완벽하다는 점이었습니다. 실제 공간에서는 아무리 반짝반짝하게 닦아 놓은 금속구라 하더라도 그 표면에 반사되는 주위 환경은 약간 흐릿하게 보이지만 Recursive Ray Tracing에서는 광선(Ray)들이 반사될 때 완벽하게 100% 반사되어 아주 이상적인 거울같은 또렷한 반사가 얻어지기 때문에 이와 같은 Super Realistic한 결과가 '너무나 사실적이라 오히려 사실적이지 않았었기 때문입니다, 사람들이 보통 컴퓨터에서 만들어진 이미지를 보고 차갑다라고 말하는 것도 이와 같은 과도한 완벽함 때문인데 Distributed Ray Tracing 바로 이와 같은 문제들을 해결해 줍니다. 사실 지금 사용되는 대다수의 Ray Tracing Renderer들은 이 방법을 기반으로 하고 있습니다.
이 방법의 핵심은 한 줄로 이루어진 가느다란 광선(Ray) 개념 대신 여러 광선(Ray)을 골고루 뿌리는(distribute) 개념을 사용한다는 점입니다. 즉, 눈에서 출발한 광선이 반사나 굴절되는 과정에서 하나의 광선만을 방출하는 것이 아니라 여러개의 광선을 무작위로 방출하는 것입니다. 예를들어 Reflected Ray를 방출하는 과정에서 하나의 광선(Ray) 대신 여러 광선(Ray)을 방출하고 그 결과를 종합해서 표면의 반사를 계산하면 부드럽게 뭉개지는 반사(Blurry Reflection)를 표현하는 것입니다. 뿐만 아니라 가상의 렌즈를 설정하고 이 방법을 적용하면 피사계 심도(Depth of Field) 효과를 얻을 수도 있고 Light Ray(Shadow Ray)에 적용하면 부드러운 그림자를 만들 수 있고 시간의 흐름에 적용하면 Motion Blur 효과를 만들 수도 있습니다.
[그림 7] Distributed Ray Tracing에 의한 Motion Blur (c)Pixar
- Two-Pass Ray Tracing
Distributed Ray Tracing이 많은 문제들을 해결해 주었지만 아직도 해결되지 않은 문제가 하나 있습니다. 그것은 바로 Caustic이라고 부르는 현상입니다. 예제 그림을 보면 쉽게 알 수 있겠지만 빛이 유리나 물 같이 고르지 못한 표면을 갖는 매개체를 통과해서 굴절되거나 반사되며 어떤 무늬를 만드는 현상을 말합니다. Recursive Ray Tracing이나 Distributed Ray Tracing이 이런 현상을 표현하지 못하는 이유는 앞서 언급했듯 거울 반사(Mirror Reflection)가 전혀 없는 표면을 만나면 광선 추적 작업이 끝나 버리기 때문입니다.
이와 같은 문제를 해결해서 Caustic 현상을 표현할 수 있도록 해주는 것이 바로 Two-Pass Ray Tracing입니다. Two-Pass Ray Tracing에서는 먼저 광원으로부터 광선(Ray)을 발사한 다음 이 광선(Ray)이 벽이나 천장과 같은 Diffuse 표면에 닿을 때까지 추적하고 이렇게 추적된 각 광선(Ray)의 에너지 즉 Caustic 이미지를 Diffuse 표면상에 그려주는 첫 번째 Pass를 거친 다음 두 번째 Pass인 기존의 Ray Tracing으로 최종적인 결과를 얻는 것입니다. 이 방법은 눈과 광원 양쪽 방향으로부터 동시에 Rat Tracing 작업을 수행한다고 해서 Bi-Directional Ray Tracing이라고 부르기도 하고 눈으로부터 추적하는 기존의 방법과 반대 방향으로 작업이 진행된다고 해서 Backward Ray Tracing이라고 부르기도 합니다.
[그림 8] Caustic
- Radiosity
자 이렇게 다양한 Ray Tracing 기법들이 개발되고 많은 문제들을 해결했음에도 불구하고 아직까지 해결되지 않은 중요한 현상 하나가 있으니 바로 난반사된 광선이 다른 표면에 영향을 미치는 Diffuse Interreflection 현상입니다. 예제 그림에서 광원은 뚫려진 천장을 통해 들어오고 있는 태양 광선(Ray) 밖에 없습니다. 따라서 만약 이 장면을 Ray Tracing으로 렌더링했다면 태양광이 직접 비춰지고 있는 부분을 제외한 나머지 부분은 그림자로 간주되어 완전히 검은색으로 렌더링되었을 것입니다. 하지만 실제 상황은 그렇질 않습니다. 실제 상황에서는 예제 그림과 같이 직접 빛이 비춰지지 않는 곳에도 바닥이나 벽면 등 주위 오브젝트 표면에서 난반사된 빛이 상호 다른 오브젝트 표면에 반사(Diffuse Interreflection) 되어 오른쪽 그림과 같은 결과가 얻어지게 됩니다. 특히 그림에서 붉은 색 바닥에서 난반사된 붉은색 광선이 흰색 천장에 번져 붉은 기를 만들어 것처럼 Diffuse Interreflection에 의해 특정 색상이 다른 오브젝트 표면에 영향을 주는 현상을 Color Bleeding이라고 부릅니다.
[그림 9] Radiosity
따라서 이와 같은 현상을 재현하기 위해 난반사 특성의 계산에 있어 주위의 다른 오브젝트들과의 관계를 포괄적(Global)으로 고려하는 방법이 개발되었으니 이것이 바로 Radiosity 기법입니다. Radiosity에서는 먼저 장면을 이루는 모든 surface를 Patch라고 불리는 조각으로 나누고 광원에서 특정 Patch로 또 이 Patch로부터 다른 Patch 그리고 또 다른 Patch로 얼마만큼의 광 에너지가 전달되는지 그 양을 계산합니다. 그러니까 어떤 Patch가 광원 Patch로부터 받는 에너지의 양이 100%라고 할 때, 몇 %는 이 Patch가 흡수하고, 다른 Patch로 몇 %를 반사하며 이렇게 반사된 에너지를 받는 Patch는 또다시 얼마만큼을 흡수하고 얼마만큼을 반사하는지를 계속해서 계산하게 되는 것입니다. 이때 얼마만큼이 흡수되고 얼마만큼이 반사되는 지는 전적으로 두 Patch간의 기하학적 관계(위치, 방향)에 의해서 결정되고 이를 Form Factor라고 합니다. 이와 같은 계산이 반복되면 전체적으로 에너지 평형을 이루게 되는 각 Patch의 에너지 흐름을 방정식을 세워서 계산할 수 있게 됩니다. 이때 광원에서 나오는 빛 에너지가 장면을 이루는 Environment 내부에서만 돌고 돌다가 평형을 이루게 되는 상태를 가정하고 작업을 진행하게 되는데 Radiosity에 의해 렌더링된 이미지가 거의 대부분 건물 내부 모습인 것도 바로 이런 이유 때문입니다.
계산이 완료되면 그 결과는 Patch의 색상으로 장면상에 지정이 되고 이렇게 지정된 결과는 Scanline 렌더링 등의 방법에 의해 최종적인 이미지로 만들어집니다. 이점이 매우 중요한데 이를 다른 말로 풀어서 설명하면 오브젝트 표면의 음영이라던가 그림자 등이 아예 오브젝트 표면에 그려 넣어진다는 말입니다. 이는 Radiosity가 Ray Tracing과 반대로 정반사는 고려하지 않고 난반사만을 고려하기 때문에 가능한데 그 결과 시점과는 관계없이 오로지 조명의 입사각만이 결과에 영향을 미치는 난반사 고유의 특성 덕분에 Radiosity 역시 시점 독립적(View-Independent)인 특성을 갖게 됩니다. 시점 독립적(View-Independent)이라는 특성을 갖게 되면 어떤 점이 좋겠습니까? 네 그렇죠! 카메라가 움직여도 다시 렌더링을 할 필요가 없습니다! 장면상의 오브젝트들이 움직이지만 않는다면 일단 한번 계산이 끝나면 그때부터는 마음대로 시점을 바꿔 보고 싶은 부분을 볼 수 있는 것입니다. 오브젝트가 거의 움직이지 않고 카메라만 이동하는 Fly Through 애니메이션이 대부분인 건축 시뮬레이션에 아주 제격이죠.
Radiosity 기법이 중요한 또 하나의 이유는 실제와 같은 조명 설정으로 실제 상황과 거의 근접한 물리학적으로 올바른 결과물을 얻을 수 있다는 점입니다. 이런 기능은 렌더링 결과와 실제 상황이 일치해야 하는 제품 디자인 분야나 인테리어, 건축 시뮬레이션 분야에 필수적이죠.
그러나 Radiosity라고 문제가 없겠습니까. 일단 Radiosity의 경우 난반사만 고려하기 때문에 반사, 굴절을 표현할 수 없어 대부분 Ray Tracing을 함께 사용하는 Hybrid 형태의 렌더러 형태로 제공됩니다. 먼저 Radiosity 기법을 이용해서 난반사(Diffuse) 특성의 계산을 끝낸 다음 Ray Tracing으로 반사와 굴절을 추가해서 마무리하게 됩니다. 또 하나는 엄청난 렌더링 시간입니다. 앞서 Radiosity의 작동 원리에서 알 수 있듯이 장면을 이루는 모든 Patch간의 에너지 이동을 모두 고려하려면 엄청나게 큰 방정식을 풀어야 한다는 점입니다. 얼마나 큰고 하니 장면을 이루는 Patch의 총 개수를 N이라 할 때 N x N 행렬을 풀어야 합니다. 물론 이런 문제를 조금이나마 해결하기 위해 Progressive Refinement 기법을 사용합니다. 이 기법은 에너지의 흐름이 완전 평형 상태가 될 때까지 계산하고나서 결과를 보여주는 것이 아니라 장면을 점진적으로(Progressive) 개선(Refinement)되어 가능 과정을 보다가 필요한 수준의 결과가 얻어지면 더 이상 계산을 진행시키지 않고 그 결과를 사용하는 것이죠. 물론 그래도 여전히 만족할 만한 결과를 얻기에는 많은 인내를 필요로 합니다.
[그림 10] Radiosity, Progressive Refinement
최신 렌더링 기법
- Photon Map을 이용한 Ray Tracing
이 방법은 최근 가장 각광을 받고 있는 렌더링 기법입니다. 1995년 Henrik Wann Jensen에 이해 처음 소개된 이 기법은 앞서 설명했던 Two-Pass Ray Tracing의 일종입니다. Caustic 이미지를 생성하기 위해 사용하는 첫 번째 Pass를 수행함에 있어 Photon Map을 이용하는 것이죠. 즉, 광원으로부터 광자(Photon)들을 방출한 다음 이 광자들이 반사되고 굴절되는 과정을 통해서 Photon Map을 생성한 다음 이를 이용해서 최종적인 결과를 얻는 것입니다. 일반적으로 작업의 효율을 위해 Caustic을 재현하기 위한 Photon Map과 Diffuse Interreflection을 재현하기 위한 Photon Map, Participating Media을 재현하기 위한 Photon Map을 별도로 생성합니다.
[그림 11] Photon Map을 이용한 Diffuse Interreflection
이 방법의 가장 큰 장점은 Ray Tracing임에도 불구하고 Diffuse Interreflection을 재현할 수 있다는 점입니다. 게다가 렌더링 속도도 매우 빠르며 Radiosity에서처럼 Mesh를 분할할 필요도 없습니다. 또한 이 방법을 이용하면 Participating Media 까지도 다룰 수 있습니다. 좀 쉽게 얘기하면 Volumetric Effect까지도 재현할 수 있다는 말이죠.
그 덕에 이 방법은 최근 가장 인기 있는 렌더링 기법이 되었습니다. 여러분들이 잘 아시는 Mental Ray가 바로 이 방법을 사용하고 있고 최근 관심을 끌고 있는 Arnold 렌더러 역시 이 기법을 사용합니다. 아마도 머지 않아 거의 모든 상용 렌더러 들이 이 기법을 채택할 것으로 보입니다. Soft Shadow부터 Blurry Reflection, Motion Blur, Depth of Field, Diffuse Interreflection, Caustic, Volumetric Effect 까지 못하는 것 없는 다재다능한 기능에다가 속도까지 빠르니 뭘 더 바라겠습니까.
- Image Based Rendering
이 기법은 이름 그대로 모델링-렌더링-애니메이션이라는 전통적인 3차원 애니메이션 제작 과정 대신에 미리 찍어 놓은 사진들을 이용해서 필요한 이미지를 얻어내는 방법입니다. 물론 이 방법은 여러 가지 제약이 많습니다. 하지만 그럼에도 불구하고 이 방법이 주목받는 이유는 바로 매우 사실적인 렌더링 결과에 있습니다. 하긴 그럴 수밖에 없는 것이 실제 촬영된 사진을 바탕으로 렌더링을 하는데 이보다 더 사실적인 결과물이 어디있겠습니까. 99년 SIGGRAPH에서 발표되었던 Fiat Lux라던가 98년에 발표된 Rendering with Natural Light가 바로 이 기법을 이용한 애니메이션들입니다.
- NPR(Non Photorealistic Rendering)
지금까지의 렌더링 기술의 발전은 모두 어떻게 하면 더 사실적인 결과물을 얻을 수 있을까에 초점이 맞춰져 있었습니다. 이러한 렌더링 기술들은 Photorealism이라는 신조어까지 만들어 내며 그 동안 급속한 발전을 이루어 왔습니다. 그러나 Ray Tracing과 Radiosity를 비롯한 각종 Global Illumination Model들이 속속 개발되면서 Photorealistic 렌더링 기법이 거의 완성단계에 이르게 되자 사람들의 관심은 자연스럽게 새로운 방향으로 돌려지게 되었고 그래서 시작된 것이 바로 NPR(Non Photorealistic Rendering)입니다.
NPR은 주로 유화나 수채화 목탄화 등 전통적인 회화 기법들을 재현해 주는데 특히 최근에 셀 애니메이션과 3D 애니메이션의 접목이 시도되면서 더욱 많이 활용되고 있습니다. 디즈니의 타잔은 NPR이 아주 효과적으로 사용된 예가 되겠지요.
[그림 12] Fish (c)PDI
사실 NPR은 매우 많은 가능성을 갖고 있는 렌더링 기법입니다. Photorealistic Rendering 기법들이야 "사실적"이라는 한계 아닌 한계를 갖고 있지만 NPR이야 한계가 있겠습니까? 간단히 생각해 보자면 유화, 파스텔, 수채화, 판화, 펜화 등 무수한 회화 기법들을 표현하는 방법들이 있겠고 더 나아가자면 이제까지 없었던 전혀 새로운 느낌의 렌더링 결과물을 만들어 낼 수도 있을 것입니다. 이미 프랑스의 Ex Machina의 경우 독자적인 NPR렌더러를 사용해서 자신만의 독특한 느낌을 갖는 애니메이션을 만들어 내고 있습니다.
Copyright(c) 타 사이트에 이 글을 옮기지 말아 주시고 링크하실 경우 출처를 밝혀 주십시요.
ww.3dsmax.newt - The MAX Site
http://www.3dsmax.net/4_article/rendering.htm