모델링을 잘하는 것도 "재주" 중의 재주라고 할 수 있다. 그러나, 3D 모델링은 누구나 타고날 때부터 잘하는 것은 아니다. 많은 연습과 시행착오를 거쳐서 훌륭한 3D 모델러가 ?수 있다. 미술을 전공한 사람만이 좋은 양질의 모델링을 잘하는 것은 결코 아니다. 전혀 미술적인 감각이 없는 사람도 누구 못지 않는 양질의 모델링을 할 수 있음은 물론이다. 중요한 것은 개개인의 눈썰미가 과연 누가 더 세세한 것까지 볼 수 있느냐에 달려있다. 따라서 멋진 모델링을 할 수 있는 비법을 그동안의 경험을 바탕으로 여기에 소개하고자 한다.
1. 자신의 컴퓨터 주위에 있는 것부터 3D로 만들어라.
길은 먼 곳에 있는 것이 아니다. 모델링 소재를 찾아서 이리저리 헤매지 말고, 먼저 자신의 목전에서 눈에 띄이는 것부터 모델링을 하여야 한다. 그 이유는 늘상 자신이 보면서 직접 참고하여 모델링할 수 있기 때문이다. 먼저 자신의 마우스를 만들고, 컴퓨터를 만들고, 책상을 만들고, 책상 위의 책을 만드는 방법으로 자신이 직접 눈으로 보면서 만들 수 있는 것부터 만들어야 한다.
2. 복잡한 것은 Line을 사용하여 윤곽을 따서 Extrude하는 방법으로 만들어라.
복잡한 물체일수록 Line으로 윤곽을 따서, Extrude를 적용하거나 Loft를 사용하여 만드는 습관을 들여야 한다. 곡선 형태의 오브젝트는 Line으로 윤곽을 따서 적절히 Extrude하거나 Loft를 사용하면, 웬만한 것은 다 만들어진다.
3. Low Polygon으로 오브젝트를 만드는 방법을 숙달시켜라.
대부분의 오브젝트들은 3ds max의 기본 오브젝트인 Geometry를 사용하여, Polygon 또는 Vertex 모드에서 주물럭거려서 만드는 방법에 숙달되어야 한다. 적은 양의 Face를 갖는 오브젝트를 만드는 방법에 먼저 숙달되어져야 한다.
4. 모든 모델링은 부분부분으로 조각내어서 모델링하는 방법을 사용하라.
한꺼번에 하나의 물체를 만들려는 욕심은 버리고, 그 물체의 요소요소를 조각내어서 모델링하는 방법으로 모델링을 하여야 한다. 조립식 권총이나 조립식 비행기, 조립식 탱크등과 같은 미니어춰를 만들 때와 똑같은 방법으로, 하나의 모델링을 여러 개의 부분조각으로 모델링하는 방법으로 모델링을 하여야 한다. 그래야, 원활한 애니메이션을 할 수 있을 뿐만 아니라, 쉽게 포기하지 않고 작업을 할 수 있다. 또 부분부분 조각하여야, 작업하면서 시스템의 부하를 최대한 줄일 수 있어서 작업하기가 한결 편할 것이다.
5. 가상의 물체를 모델링하려고 노력하지 말라.
세상에 존재하지 않는 자신만의 사이버적인 모델링은 시간낭비이다. 실존하고 현존하는 오브젝트를 만들도록 노력하여야 한다. 아무리 가상의 모델링을 잘한다 하여도, 현존하고 실존하는 양질의 모델링보다는 덜 칭찬을 받는다. 실제와 똑같은 모델링을 하도록 노력하여야 나중에 진짜로 실력있는 3D 모델러가 될 수 있다.
6. 모델링은 하면 할수록 누구나 실력이 늘어난다.
첫술에 배부르지 않는 것과 마찬가지로 3D 모델링은 하면 할수록 실력이 늘어난다. 성질 급한 사람치고, 좋은 모델링을 할 줄 아는 사람은 여태까지 본 적이 없다. 자신의 인내력과의 싸움이 모델링이다. 그러므로, 모든 것을 하루 이틀에 만리장성을 쌓아야 한다는 그런 조급증은 금물이다. 그렇다고 허구헌날 모델링을 한다고 시간을 허비하는 것도 결코 좋은 것은 아니다. 쉽게 포기하기 때문이다. 도중에 막히면 잠시 덮어두고, 다른 작업을 하는 방식으로 작업을 하다보면, 언젠가는 덮어두었던 것을 금방 할 수 있을 날이 곧 온다.
7. 자랑스런 대한의 아들 딸답게 한국적인 소재를 모델링하도록 하라.
되도 않는 실력으로 서양식 건물을 모델링한다고 야단이고, 서양 영화에서 나오는 것을 흉내내서 모델링한다고 법석을 떨어보아야 결국은 서양 모델링의 아류에 불과하다. 5천년 역사를 가진 우리의 것을 모델링하면, 누구에게도 자랑할 만한 소재가 될 것이다. 같은 시간과 같은 노력을 들여서, 서양의 아류에도 못 미치는 것을 만들 바에는 자랑스럽게 우리의 것을 소재로 모델링을 한다면, 아류가 아닌 주류가 될 것이다. 지금까지 거의 모든 책이나 작품을 보아도, 맥스맨처럼 한국적인 소재를 가지고 모델링하는 사람이 어느 누구도 없다. 지천에 널린 것이 한국적인 소재이다. 불국사, 석굴암, 경회루, 경복궁, 남대문,동대문,88올림픽 경기장, 월드컵 경기장, 초가집, 기와집, 가마솥, 젓가락, 밥상, 절구,항아리,된장,고추장,김치,깍두기,배추,감,배,대추,소나무,무궁화등등 소재가 너무나도 무궁무진한 것이 우리의 것이다. 이런 것을 모델링을 하면, 세계 최고의 3D 모델러가 될 것이다. 서양의 모델러들은 우리가 따라갈 수 없는 경지에 이르렀다. 그들과 서양 것으로 경쟁하려고 까불지 말고, 우리 것으로 그들을 감동시켜야 한다. 서양인들은 우리 것을 모르지 않는가? 우리 것을 만들어서 서양인에게 보여주어 보라. 그들의 입에서 감탄사가 절로 나올 것이다. 서양인은 태고적부터 동양에 대한 향수(오리엔탈리즘)와 무한한 동경을 품고 사는 사람들이다. 곡선의 미학이 풍만한 동양적인 것으로 서양인을 감동시켜야 한다. 그러기 위해서는 우리의 것으로 승부를 하여야 한다. 우리 것이 좋은 것이여~!
8. 스케치나 밑그림을 반드시 먼저 그려야 하는 것은 아니다.
간혹 스케치나 일러스트 또는 밑그림을 먼저 그려야 한다고 말하는 사람들이 있다. 틀린 말은 아니지만, 그럴 시간이 있으면 마우스로 뷰포트에서 직접 Line으로 그리는 것이 더욱 더 시간을 절약할 수 있다. 어차피 컴퓨터와 마우스로 우리는 먹고 산다. 이제 연필이나 펜은 우리의 영역을 떠난 것이다. 연필이나 펜으로 스케치를 하여 본들, 쓸데없는 공상만 할 뿐이다. 마우스를 자유자재로 움직여야 하는 것이 3D 모델러의 숙명이다. 마우스를 잡고 평생을 살 사람에게는 연필이나 펜은 더 이상 필요없다. 그와 같은 스케치나 밑그림은 머리 속에서 상상으로 그리는 것만으로도 족하다. 컴퓨터를 안고 살아야 하는 사람에게는 머리 속이 바로 캔버스요, 연습장인 것이다. 디지털 시대는 No Paper시대이다.
9. 인체 해부나 색채학을 따로 공부하여야 한다는 그릇된 생각은 버려라.
모델링과 맵핑을 잘하기 위하여 색채학을 공부하여야 한다거나 또는 캐릭터를 잘 모델링하려면 인체 해부학을 알아야 한다고 말하는 이야기들이 상당히 많다. 그렇다면, 미술을 공부한 사람과 의사들은 전부 훌륭한 3D 모델러가 될 수 있다는 말인가? 만일 그와 같은 소리가 맞다면, 장면에서 자동차를 모델링하고, 자동차가 달리는 카 레이싱을 연출한다면, 자동차 공학을 배워야 하고, 카 레이서 훈련을 받아야만 제대로 된 카 레이싱 장면을 연출할 수 있다는 말인가? 또 산과 들에 있는 나무와 숲을 잘 모델링하려면, 조경학을 공부하여야 한다는 말인가? 그렇지는 않을 것이다. 물론 약간의 상식적인 차원에서 그와 같은 것을 미리 알아두는 것은 대단히 좋은 프로 정신이며, 당연히 그렇게 하여야 한다. 하지만, 3D는 누구나 할 수 있으며, 또한 누구나 눈썰미만 있다면, 표현하지 못할 것이 없다. 누구나 특정 소재를 모델링하게 되면, 당연히 그 모델링에 대해서 스스로 자연히 공부하게 된다. 그것만으로도 족하다. 그 이상으로 따로 시간을 내어서, 인체 해부학을 공부할 필요도 없고, 무슨 색채학이라는 그런 책을 볼 필요도 없다. 중요한 것은 마우스로 컴퓨터 속에서 누가 더 눈썰미있게 잘 표현하느냐에 달려있는 것이다. 그것은 개인의 상식과 훈련된 감각만으로도 충분하다. 태권도를 할 줄 모르는 사람이 태권도 장면을 제대로 연출할 수는 없다. 또 스키를 탈 줄도 모르는 사람이 스키 활강장면을 제대로 연출할 수는 없다. 운전도 못하는 사람이 멋진 자동차 운전 장면을 연출할 수는 없다. 그렇다고, 작업을 위해 태권도를 배우라고 할 수 없을 뿐만 아니라, 스키를 배우라고도 할 수 없고, 운전 학원에 등록하라고도 할 수 없다. 태권도 장면은 태권도를 할 줄 아는 사람에게 작업을 지시하고, 스키 장면은 스키를 탈 줄 아는 사람에게 작업을 지시하고, 운전 장면은 운전을 할 줄 아는 사람에게 작업을 할당하면, 그만이다. 또는 그와 같은 장면을 리얼하게 해 본 경험이 있는 사람에게 작업을 지시하거나, 관련 비디오나 장면을 주의 깊게 보고 연출하면 그만이다. 그와 같은 태권도,스키,운전등과 같은 것은 개인의 상식과 역량일 뿐, 3D 모델링이나 애니메이션을 위하여 선행되어야 하는 필수적인 것은 아닌 것이다. 어차피 인간은 누구나 전부 다 만물박사이거나, 007 제임스 본드는 아닌 것이다. 따라서 훌륭한 3D 모델러는 스스로 자신을 훈련하고, 스스로 상식으로 충만되도록 노력하여야 하는 것이지만, 모든 것을 다 혼자서 할 수는 없는 것이다. 그러므로, 특정한 것을 따로 공부하여야 한다는 것은 시간이 남아도는 사람에게나 있을 법한 이야기이지만, 반드시 그렇게 할 필요는 없는 것이다.
10. 애니메이션을 먼저 알아야 모델링을 잘 할 수 있다.
필자는 지금까지 이런 주장을 오랫동안 하고 있다. 이 말의 의미는 애니메이션을 모르는 사람에게는 아무런 의미를 갖지 못한다. 애니메이션을 할 줄 아는 사람들은 이 말의 의미가 무엇인지 체험적으로 자연히 알게 된다. 3ds max에서 모델링은 애니메이션을 위한 수단일 뿐이다. 허구헌날 애니메이션되지 않는 스틸 이미지에만 온갖 노력을 기울이는 사람들에게는 이 말은 아무런 의미도 갖지 않는다. 특히 캐릭터의 경우에는 누구나 모델링을 하여 애니메이션하고 싶어한다. 그러나, 애니메이션을 해 본 적도 없는 사람들은 아무리 멋진 캐릭터를 만든다할지라도 결코 그 캐릭터를 애니메이션할 수는 없다. 이유는 간단하다. 애니메이션에 적합하도록 모델링하지 않았기 때문이다. 이러한 이유에서 애니메이션을 먼저 배워야 한다는 것이다. 자동차나 다른 움직이는 물체들도 마찬가지이다. 애니메이션의 원리를 모르고, 무작정 모델링을 하여본들 그것은 그림의 떡일 뿐이다. 지금까지 많은 3ds max 사용자들이 이러한 이유로 애니메이션 기술이 대단히 취약하다. 학원이나 책에서 모두 애니메이션을 모른 상태에서 모델링 기술을 가르치고 알려주니, 제대로 애니메이션을 할 수가 없는 것이다. 따라서 맥스맨21 아카데미에 있는 많은 애니메이션 예제를 공부하여 보면, 어떻게 모델링하는 것이 애니메이션을 가능하게 하는 지를 알려줄 것이다.
매핑
아무리 모델링을 꼼꼼하게 잘 한다 하더라도, 아무리 최신 렌더링 기법을 사용한다 하더라도 이것만으로는 우리가 원하는 모든 것들을 표현할 수가 없습니다. 오브젝트 표면에 모델링만으로는 감당할 수 없는 혹은 감당하기 힘든 디테일을 추가하기 위해 사용하는 방법이 바로 매핑(Mapping)입니다. 좀 더 적극적으로는 복잡한 모델링을 대체함으로써 경제적인 결과를 얻기 위해 매핑 기법을 사용하기도 합니다

Texture 매핑
보통 Texture 매핑이라고 하면 보통 비트맵 이미지를 이용해서 오브젝트 표면의 무늬를 입히는 것으로만 생각하는 경우가 많습니다. 물론 이 경우가 Texture 매핑의 가장 대표적인 예이기는 하지만 이렇게 표면에 무늬를 입히는 작업은 Texture 매핑을 응용한 예의 하나 일뿐 그 자체가 Texture 매핑은 아닙니다. Texture 매핑의 정확한 의미는 "외부에서 주어지는 값으로 변수나 색상 값을 대체하는 과정"이라고 할 수 있습니다.
방금 말씀드린 오브젝트 표면에 무늬를 입히는 경우는 오브젝트 표면의 색상을 결정하는 Diffuse 값에 매핑을 적용한 경우에 해당되는 것이죠. 매핑에 의해 오브젝트의 각 부분의 Diffuse 색상이 각기 다른 값을 갖게 되고 이것은 결국 Texture Map이 오브젝트 표면에 씌워진 것과 같은 결과를 만들어 주는 것입니다. Diffuse 매핑 혹은 Color 매핑이라고 부르는 방법이죠. 만약 물체의 투명도(Opacity 혹은 Transparency) 값에 매핑을 사용한다면 물체의 각 부분에 서로 다른 투명도를 적용되는 것이고 Shininess 값에 사용되면 물체 각 부분의 정반사 정도가 달라지는 것입니다.
매핑을 위해 "외부에서 값을 주는" 주는 가장 대표적인 방법은 비트맵 이미지를 사용하는 것인데 이때 사용되는 비트맵 이미지를 Texture Map혹은 매핑 소스(Mapping Source)라고 부릅니다. 또 다른 방법으로는 Texture를 일련의 과정을 통해 자동적으로 생성해서 사용하는 방법이 있는데 이런 방법은 Procedural Texture라고 부릅니다. 이 방법에 대해서는 뒤에서 다시 살펴보도록 하겠습니다

Texture Map를 이용해서 오브젝트 표면 특성을 대체하기 위해서는 Texture Map의 어느 픽셀이 오브젝트 표면의 어느 부분에 대응될 것인지를 결정해 주어야 합니다. 말이 좀 어렵다면 비트맵 이미지가 오브젝트에 씌워질 때 어떻게(위치, 방향, 크기) 씌워질 것인지를 결정하는 것이다라고 이해하면 되겠습니다.
이런 작업을 하자면 오브젝트 표면에도 Texture Map에 대응하는 좌표계를 설정해 주어야 하는데 비트맵 이미지는 2차원의 직교 평면을 이루고 있으므로 오브젝트 표면에도 이에 대응하는 좌표를 설정해 주어야 합니다. 그리고 이렇게 오브젝트 표면에 설정되는 좌표계를 매핑 좌표계라고 부르는데 오브젝트 평면에 매핑 좌표계가 설정되면 대응되는 좌표의 Texture Map의 픽셀 값(Pixel과의 혼동을 막기 위해 Texel이라고 부릅니다.)이 표면 특성 값으로 사용되어 매핑이 이루어지게 되는 것입니다.

매핑 좌표에서는 우리가 보통 사용하는 XYZ 좌표계 대신에 바로 앞 알파벳을 딴 UVW 좌표를 사용하는데 UVW는 각각 XYZ축에 대응됩니다. 결국 매핑 소스로 사용된 비트맵 이미지에서 가로 방향이 U축이고 세로 방향이 V축인 셈이고 일반적으로 매핑 좌표가 필요한 경우는 2D Map을 사용할 때이므로 그냥 줄여서 UV 좌표라고 부르기도 합니다. 또한 매핑 좌표는 한정된 평면 안에서의 위치만을 정의하면 되므로 UV 좌표에서는 좌표값은 항상 0과 1 사이의 값이 됩니다. 예를 들어 비트맵 이미지의 한쪽 끝이 0,0이라면 대각선 반대쪽은 1,1이고 정 중앙은 0.5, 0.5가 됩니다.
오브젝트에 매핑 좌표를 설정하는 가장 대표적인 방법은 3대 기본 좌표계인 직교, 원통, 극 좌표계를 이용해서 좌표계를 오브젝트에 투영(Projection)하는 방법입니다. 평면형(Planar) 좌표계는 사각형 평면을 따라 이미지를 투영하는 것이고 원통형(Cylindrical) 좌표계는 이미지를 원통형으로 구부려 투영하는 것입니다. 구형(Spherical) 좌표계는 일단 원통형(Cylindrical)으로 이미지를 둘러싼 다음 위와 아래를 다시 모아 마치 지도로 지구본을 감싸듯 이미지를 투영하는 것입니다.

그러나 이런 방법은 개념이 간단한 만큼 다음과 같은 단점을 갖고 있습니다. 평면형(Planar) 좌표계는 비트맵 이미지가 한 방향에서 투영되므로 투영되는 방향과 평행을 이루지 않는 면들이 있을 경우 줄이 생기며 원통형(Cylindrical) 좌표계는 이미지의 양쪽 끝이 만나는 지점에서 무늬가 불연속적이 되고 뚜껑 부분 처리가 힘들죠. 구형(Spherical) 좌표계는 역시 원통형 좌표계와 마찬가지로 양쪽 끝이 만나는 지점에서 무늬가 불연속이며 극지점 처리가 어렵다는 단점이 있습니다.

매핑 좌표를 설정하는 또 다른 방법으로는 오브젝트 표면 자체에 내장되어 있는 좌표를 이용하는 방법이 있습니다. Bezier Patch나 NURBS Surface같은 Parametric Surface들은 그 생성 원리상 각 표면이 기본적으로 내장된 UV좌표를 갖고 있으므로 이 UV좌표를 그대로 매핑 좌표로 할 수 있습니다. 또한 최근에는 이런 방법을 확장시켜 Parametric Surface를 이용해서 원하는 모양의 매핑 좌표를 만들고 이를 오브젝트에 투영시키는 방법이 개발되어 사용되고 있습니다.

하지만 어떤 방법을 사용하더라도 부분 단점을 갖고 있을 수밖에 없기 때문에 지금 이 시간에도 다양한 매핑 좌표 설정 방법들이 속속 개발되고 있습니다.
3D Painting, Texture Unwrap
대개의 경우 매핑 작업은 매핑 소스를 먼저 준비한 다음 매핑 좌표를 잘 조절해서 원하는 위치에 Texture Map을 적용시키는 방식으로 진행되어 나갑니다. 하지만 이런 방법을 사용하기 적합하지 않은 경우도 있습니다. 예를 들어, 사람 얼굴을 위한 Texture Map을 만드는 경우 아무런 기준도 없이 모델에 딱 맞는 매핑소스를 그린다는 것은 매우 어려울 것입니다. 따라서, 이런 경우에는 맵을 그려 오브젝트에 맞추는 것이 아니라 매핑 좌표에 맞춰 오브젝트를 펼쳐 놓고 이 위에 맵을 그리는 방식으로 작업을 진행하게 되는데 이런 방법을 Texture Unwrap이라고 합니다.

또는, 붓을 들고 조각품을 색칠하듯 3차원 상태의 모델을 보며 그 위에 직접 Texture Map을 그리는 방법을 사용하기도 하는데 이런 방법을 3D Painting이라고 합니다. 이 방법은 뭐니 뭐니해도 직관적으로 작업이 이루어진다는 점이 가장 큰 장점입니다. 하지만, 아무래도 정밀한 작업은 힘들기 때문에 아주 정밀하게 맵을 그려야 하는 경우에는 앞서 말씀드린 Texture Unrwap 기법을 사용하는 경우가 더 많습니다.

Procedural Texture
컴퓨터 그래픽에서 Procedural이라는 용어가 나오면 일단 "자동적인"내지는 "컴퓨터에 의해 만들어지는"이라고 해석하면 됩니다. 그렇다면 Procedural Texture Map의 뜻은 "컴퓨터에 의해서 자동적으로 만들어지는 Texture Map"정도가 되겠지요. Procedural Texture Map의 핵심은 이와 같이 사용자에 의해 주어지는 변수 값들을 바탕으로 특정 함수(주로 Fractal이나 Noise 함수)를 이용해서 Texture Map을 컴퓨터가 스스로 만들어 낸다는데 있습니다.

주위에서 가장 흔하게 볼 수 있는 Procedural Texture의 예로는 포토샵에 있는 Gradient 기능을 생각해 볼 수 있습니다. 여러분들이 시작 지점의 색상과 위치 끝나는 지점의 색상과 위치 등 몇 가지 변수 값들을 지정해 주기만 하면 설정에 따라 아주 멋진 Gradient를 만들어지죠. 그런데 이렇게 만들어진 결과를 3D 프로그램에서 매핑 소스로 사용하고 싶다면 어떻게 할까요? 물론 포토샵에서 만들어서 비트맵 이미지로 저장한 다음 3D 프로그램으로 가져와 사용해도 되겠지만 그것보다는 아예 Gradient를 만드는 프로그램 루틴을 3D 프로그램에 알려준 다음 3D 프로그램이 알아서 Gradient를 만들어 Texture Map으로 사용하면 더 편할 것입니다. 이것이 바로 Procedural Texture의 기본 원리입니다.
Procedural Texture는 생성되는 데이터의 자원에 따라 2D Procedural Texture와 3D Procedural Texture로 나눌수 있는데 앞서 언급한 Gradient의 경우는 2D Procedural Texture라고 할 수 있습니다. 2D Procedural Texture의 경우는 그냥 비트맵이 그때그때 생성되어 사용된다고만 생각하면 어려울 것이 없습니다. 당연히 매핑 좌표도 필요하겠죠.
중요한 것은 3D Procedural Texture입니다. Solid Texture라고도 불리는 이 방법은 주어진 함수에 의해 Texture Space라는 3차원 공간을 형성하고 오브젝트를 이 공간에 집어넣어 표면의 색상이나 변수 값을 결정하는 방법입니다. 돌덩이를 깎아내는 과정과 똑같다고 보면 되겠습니다.

Bump 매핑 & Displacement 매핑
Bump 매핑이란 오브젝트 표면의 울퉁불퉁함을 표현하기 위한 특수한 형태의 Texture 매핑으로 (1)아스팔트 표면처럼 모델링으로는 처리하기에 너무 미세하게 거친 표면이나 (2)수면처럼 울퉁불퉁한 모양이 애니메이션 되어야 하는 경우에 주로 사용됩니다.
그림11에서 파란 화살표는 각 면의 Normal로서 면은 그대로 두고 Normal 만을 흐트러뜨리면 가운데 그림과 같은 결과가 얻어집니다. 바로 이와 같이 오브젝트에 적용된 매핑 소스의 밝기 값에 따라 오브젝트 표면의 Normal 값을 변화시켜 울퉁불퉁한 표면을 처리하는 방법을 Bump 매핑이라고 합니다. 일종의 눈속임이죠. 결국 Normal만을 흐트려뜨렸을 뿐 오브젝트 자체에는 아무런 변화가 없으므로 중간 부분은 그럴듯하게 보이지만 오브젝트 가장자리는 여전히 직선을 이루는 문제가 발생합니다.

그래서 눈속임이 아니라 기하체의 형태 자체를 매핑 소스의 밝기 값에 따라 바꿔버리는 방법을 사용하게 되었으니 그것이 바로 Displacement 매핑입니다. 그림은 Displacement 매핑에 의한 결과로서 가장자리를 보면 Bump 매핑과의 차이를 쉽게 구별할 수 있습니다.
Environment 매핑
지금까지 살펴본 내용은 모두 Texture Map을 오브젝트 표면에 대응시키는 Texture Mapping에 대한 얘기들이었습니다. 하지만, 우리는 또 다른 형태의 매핑을 사용할 수 있으니 바로 Environment 매핑입니다. 이 기법은 이미지를 오브젝트 표면이 아닌 환경(Environment)에 매핑하는 기법으로 Local Illumination Model만을 사용하는 렌더러에서는 반사(Reflection)나 굴절(Refraction)과 같이 오브젝트 상호간의 관계에 의해 생성되는 현상들을 표현할 수 없었기 때문에 이를 해결하기 위해 도입된 방법입니다. 혹자들은 "가난한 자의 Ray Tracing"이라고 부르기도 하지요. 비록 요즘 하드웨어 환경이 좋아지다 보니 Ray Tracing을 이용하기가 쉬워져서 다소 인기가 시들해진 감은 있지만 아무리 Ray Tracing이라 하더라도 반사가 정확하게 표현되려면 장면 안에 반사될 물체들을 모두 만들어 주어야 하기 때문에 여전히 많이 활용되고 있는 기법입니다. 카메라 뒤 보이지도 않는 부분까지 모두 만드느니 이 방법을 여전히 경쟁력을 갖고 있습니다. Toy Story에서도 반사와 굴절 부분은 Ray Tracing이 아니라 Environment 매핑에 의해 모두 처리되었습니다.(PR Renderman은 Ray Tracing이 지원되지 않는 Scanline Renderer입니다.) Environment 매핑은 시점이 바뀌거나 오브젝트가 움직이게 되면 오브젝트 특정 지점에서 반사되어 보이는 부분이 바뀌게 되므로 해당 오브젝트 표면의 색상도 바뀌는 특징을 갖습니다. 또한 환경에다 매핑을 하므로 오브젝트에 별도의 매핑 좌표를 만들 필요 없죠.
Environment 매핑을 구현하기 위한 가장 대표적인 방법은 장면 안에 천체와 같은 가상의 거대한 구가 있다고 가정하고 여기에 이미지를 매핑해서 환경(Environment)으로 사용하는데 이를 구형 환경 매핑(Spherical Environment Mapping)이라고 합니다.

혹은 가상의 6면체를 만들어 환경을 구성하는 Cubic Environment 매핑도 많이 사용하는데 이 방법은 Spherical Environment 매핑에 비해 이미지의 왜곡 현상이 덜 하다는 장점을 갖습니다. 반면에 매핑 소스로 사용될 6장의 이미지를 만들기가 매우 힘들다는 단점도 있죠. 따라서 Cubic Environment 매핑을 사용할 때에는 별도의 매핑 소스를 만들기보다는 컴퓨터가 장면에 가상의 카메라 6대를 설치하고 이를 통해 자동적으로 매핑 소스를 만들어 쓰는 방법을 사용하는 경우가 많습니다. 뭐 이렇게 되면 이론적으로는 거의 Ray Tracing과 거의 차이가 없지요.

- 렌더링
렌더링이란 "장면을 이미지로 전환하는 과정"입니다. 우리가 살고 있는 3차원 공간이 사진기에 의해 사진이라는 2차원 이미지로 바뀌어 기록되는 것처럼 컴퓨터 속의 가상 공간은 렌더링이라는 과정을 통해 2차원 이미지로 바뀌어 우리에게 보여지는 것입니다.
사실 보통 우리가 렌더링이라고 부르는 과정(Render 명령을 내리고 나서부터 결과가 나오기까지)은 100% 컴퓨터에 의해서 이루어집니다. 이 과정동안 여러분들이 할 수 있는 일은 아무것도 없습니다.
하지만 그럼에도 불구하고 우리는 컴퓨터가 어떤 과정을 통해서 3차원 장면이 2차원 이미지를 바꿔나가는지 그 구체적인 방법을 잘 이해하고 있어야만 합니다. 왜냐구요? 그래야만 쉽고 빠르게 여러분들이 원하는 결과를 얻을 수 있기 때문입니다.
- 와이어프레임 렌더링
일단 가장 간단한 렌더링 방법으로는 오브젝트의 모서리(Edge) 만을 그려주는 와이어프레임(Wireframe) 렌더링 기법이 있습니다. 이 방법은 (1)처리 속도가 빠르며 (2)오브젝트의 구조쉽게 파악할 수 있기 때문에 작업용 화면 표시 방법으로 적합하긴 하지만 이름 그대로 뼈대만 보여주기 때문에 최종 결과물에는 적합하지 않습니다. 따라서 우리가 원하는 사실적인 결과를 얻기 위해서는 좀 더 많은 것들을 고려해야 하는데 그 중 가장 대표적인 것이 (1)어떤 면이 보일 것인지를 결정하는 일과 (2)보이는 면이 어떤 색을 갖게 될 것인지를 결정하는 일입니다. 즉, 여러분이 얻고자 하는 2차원 이미지의 각 픽셀마다 그 픽셀을 통해 보이는 면이 어떤 것이며 그 면이 어떤 색을 갖는지를 계산하고 그 결과를 종합한다면 여러분들이 원하는 결과를 얻을 수 있을 것입니다.
[그림 1] 와이어프레임 렌더링
- 은선 제거
두 작업 중 전자에 해당하는 작업을 우리는 은선 제거(Hidden Line Removal)라고 부릅니다. 은선(隱線:Hidden-Line)이란 현재 시점에서 오브젝트의 다른 부분이나 혹은 다른 오브젝트 등에 의해 가려져 보이지 않는 숨겨진 모서리(Edge)들을 의미하는데 이와 같은 은선 제거 과정을 거치면 어떤 면이 최종적으로 우리에게 보이는 면인지를 검출(Visible-Surface termination) 할 수 있게 됩니다.
[그림 2] 은선 제거
[그림 3] Z-Buffer Algorithm
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에 안티에일리어싱 기능을 추가한 것입니다.
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도 개발되고 있습니다.
[그림 5] Phong & Blinn
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 모델의 특성이 두드러지게 나타납니다.
이 밖에도 금속 질감을 효과적으로 재현하기 위한 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 llumination 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
[그림 7] Distributed Ray Tracing에 의한 Motion Blur (c)Pixar
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 효과를 만들 수도 있습니다.
- Two-Pass Ray Tracing
[그림 8] Caustic
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이라고 부르기도 합니다.
- Radiosity
[그림 9] Radiosity
자 이렇게 다양한 Ray Tracing 기법들이 개발되고 많은 문제들을 해결했음에도 불구하고 아직까지 해결되지 않은 중요한 현상 하나가 있으니 바로 난반사된 광선이 다른 표면에 영향을 미치는 Diffuse Interreflection 현상입니다. 예제 그림에서 광원은 뚫려진 천장을 통해 들어오고 있는 태양 광선(Ray) 밖에 없습니다. 따라서 만약 이 장면을 Ray Tracing으로 렌더링했다면 태양광이 직접 비춰지고 있는 부분을 제외한 나머지 부분은 그림자로 간주되어 완전히 검은색으로 렌더링되었을 것입니다. 하지만 실제 상황은 그렇질 않습니다. 실제 상황에서는 예제 그림과 같이 직접 빛이 비춰지지 않는 곳에도 바닥이나 벽면 등 주위 오브젝트 표면에서 난반사된 빛이 상호 다른 오브젝트 표면에 반사(Diffuse Interreflection) 되어 오른쪽 그림과
같은 결과가 얻어지게 됩니다. 특히 그림에서 붉은 색 바닥에서 난반사된 붉은색 광선이 흰색 천장에 번져 붉은 기를 만들어 것처럼 Diffuse Interreflection에 의해 특정 색상이 다른 오브젝트 표면에 영향을 주는 현상을 Color Bleeding이라고 부릅니다.
[그림 10] Radiosity, Progressive Refinement
따라서 이와 같은 현상을 재현하기 위해 난반사 특성의 계산에 있어 주위의 다른 오브젝트들과의 관계를 포괄적(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)되어 가능 과정을 보다가 필요한 수준의 결과가 얻어지면 더 이상 계산을 진행시키지 않고 그 결과를 사용하는 것이죠. 물론 그래도 여전히 만족할
만한 결과를 얻기에는 많은 인내를 필요로 합니다.
최신 렌더링 기법
- Photon Map을 이용한 Ray Tracing
[그림 11] Photon Map을 이용한 Diffuse Interreflection
이 방법은 최근 가장 각광을 받고 있는 렌더링 기법입니다. 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을 별도로 생성합니다.
이 방법의 가장 큰 장점은 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의 경우
'Information > 좋은 정보' 카테고리의 다른 글
트랙백이란? (0) | 2007.05.16 |
---|---|
(2014년)신용카드 결제일별 이용기간과 신용공여기간,신용카드구매팁 (0) | 2007.05.11 |
오토차량 운전테크닉 (0) | 2007.05.11 |

