블로그 이미지
바비봉
과거 현재 미래 ...

calendar

          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Notice

Tag

    2009.11.20 15:49 Direct3D
    FPS 게임 Doom3와 언리얼3의 퀄리티를 보았는가.
    Doom3와 언리얼3의 높은 퀄리티가 인정을 받는 중 하나는 실시간 노말맵의 구현했다는 것이다. 노말맵이란 기술이 이전 부터 존재했다지만 콘솔이 아닌 실제 PC 상용게임에 구현됐다는 것 자체에 큰 의미를 두어도 좋을 것이다. 또한 요즘 한창 주가가 오르고 있는 ZBrush의 강력함도 노말맵의 지원여부에 있다고 해도 과언이 아닐 것이다.

    온게임스쿨에서 게임그래픽스를 담당하시는 이재성 강사님께 3dsmax7에서 본격적으로 지원하기 시작한 실시간 노말맵(Normal Map) 구현에 대해 상세한 분석을 들어보자.

    노말맵(Normal Map)에 대하여
    DOOM3를 비롯해 최근 출시되고 있는 해외 실시간 3차원 게임에 있어서 게임성의 가장 중요한 요소중의 하나는 게임세계의 사실성을 극대화시키는 작업입니다. 사실성의 극대화를 위해서 북미 개발자들이 주목하는 분야는 렌더링(Rendering)부분과 물리엔진에 관련된 분야에 집중되고 있는 것으로 보여집니다. 우리나라에서 유행하는 실시간 대규모 온라인 게임에 있어서는 복잡한 물리엔진은 클라이언트들간의 동기화에 심각한 문제를 초래할 것이므로 당분간은 그리 중요한 요소로 볼 수 없을 것입니다.

    반면 렌더링에 있어 효율적이고 높은 수준의 품질을 수행할 수 있도록 해주는 셰이딩(Shading)에 관련된 기술들은 상당히 유용하게 쓰이리라 생각됩니다. 그 가운데 노말 매핑(Normal mapping)기술은 구현방식이 공개되어 있으면서도 효율적인 수행결과를 자랑하며 이미 DOOM3나 Unreal3엔진과 같은 같은 몇몇 FPS게임에서 보여진바와 같이 획기적인 실시간 렌더링 품질 향상을 증명하고 있습니다.

                     하이폴리곤 쉐이딩_와이어 프레임 상태

                       로우폴리곤 쉐이딩_와이어 프레임 상태

                      하이폴리곤에서 추출한 노말맵이 적용된 모습

    이 글에서는 이와 같이 최근 각광받고 있는 노말맵핑에 관해 전반적으로 알아보겠습니다.

    실시간으로 진행되는 3차원 게임에 있어서 초당 프레임율은 게임을 진행하는데 쓰이는 요소들이 컴퓨터의 리소스를 어느정도 소모하는지에 따라 결정됩니다.
    여기에는 모델 데이터의 해상도, 텍스쳐 맵의 갯수, 물리적 연산을 비롯한 특수효과와 같은 부가적인 요소들이 함께 영향을 미치게 됩니다. 실시간 3차원 게임에 있어서 프레임율이 낮으면 사용자들이 금방 싫증을 내고 게임을 하지 않게 되므로 개발자들은 게임의 프레임율을 높이고 게임이 안정적으로 진행되도록 하기 위해 적은 수의 폴리곤과 저해상도의 텍스쳐 맵을 사용해 왔습니다. 그러나 폴리곤 수와 텍스쳐 해상도를 낮게 설정할수록 게임의 사실성은 점점 줄어듭니다.

    이러한 게임그래픽 기술의 맹점은 게임의 사실성을 추구하는 현재의 흐름에서 보았을 때 큰 문제가 아닐수 없습니다. 더구나 그만그만한 게임에 눈이 높아진 게임 이용자들의 몰입감을 유지하기 위해서는 더 이상 세모나 네모난 얼굴로 동일한 방향만 바라보는 눈동자를 가진 이상하게 생긴 캐릭터들은 매력이 없게 되었습니다. 노말매핑기술은 저해상도 모델 데이터를 이용하여 고해상도 모델 데이터의 모습을 표면에 시뮬레이션하므로 적은 시스템 리소스를 이용하여 많은 시스템 리소스를 사용한 것과 같은 효율적인 작업을 진행할 수 있도록 해주며 프레임율(Frame Rate)향상에도 기여합니다. 이 기술은 배경이나 캐릭터 어느것에도 제한되지 않고 사용이 가능하기 때문에 게임그래픽의 전체적인 수준을 향상시킬 수 있습니다.

    노말 매핑은 이제 실시간 비디오게임산업에서 이제 표준적인 과정이 되어가고 있습니다. 디스플레이 드라이버에서도 노말맵이 지원되면서 노말맵을 보다 고수준의 인터페이스에서 다룰수 있게 되었으며 그래픽 툴 분야에서도 활발히 수용되어 3DS MAX의 경우 버전 7.0 부터는 완전히 맥스에 통합되어 지원되고 있습니다.

    이제 노말매핑의 구현원리와 3DS MAX 7.0에서 노말 매핑이 어떻게 구현되는지 알아보겠습니다.


    1. 노말맵의 구현 원리

    일반적으로 컴퓨터 화면상에 물체의 표면이 렌더링되어 나타나게 하려면 가상의 정점과 다각형으로 이루어진 3차원 물체를 2차원 컴퓨터 모니터 스크린상에 투영하는 렌더링 파이프라인을 거쳐야 합니다. 이 과정에서 셰이딩을 계산해주게 되는데 셰이딩은 물체의 음영이 어떻게 보여질지 처리하는 과정입니다.

    셰이딩을 물체의 음영자체라고 본다면 이러한 셰이딩의 전제조건은 물체 표면의 존재여부, 그리고 빛입니다. 이 중 빛은 위치가 고정되어 있으나 물체의 표면은 굴곡의 형태에 따라 다양한 방향성을 가진 형태로 보여져야 합니다.

    만약 물체의 표면이 방향성이 없는 상태에서 한 방향으로만 보여진다면 2차원 평면처럼 보여질 것입니다. 뒤에 있는 면이나 앞에 있는 면 혹은 옆에 있는 면이 한 방향으로 보여진다면 앞,뒤,옆을 구분할 수 없겠지요. 따라서 물체의 표면을 분간하기 위해서는 물체 표면의 방향을 알아야 하는데 그 방향을 알아내기 위해서 3차원의 축을 기준으로 방향을 설정하는 것이 노말 벡터(Normal Vector)입니다. 벡터는 크기와 방향을 갖는 수학적 개념인데 3차원 그래픽에서 유용하게 쓰이는 필수적인 개념입니다.

    3DS MAX의 경우 물체표면을 이루는 다각형들의 노말(Normal)을 확인할 수 있는 기능이 있습니다. Edit Mesh나 Edit Poly에서 Face 모드나 Polygon 모드에 들어가시면 Show normal옵션이 있습니다. 이 옵션을 켜면 물체 표면의 노말들이 마치 털처럼 삐죽 솟은 상태로 보여집니다. 이 노말을 편집할 수도 있는데 Edit Normal 모디파이어를 사용하면 편집도 가능합니다. 결과는 물체표면의 음영이 바뀌는 것을 확인할 수 있습니다. 또한 노말 벡터는 물체표면에 수직입니다.

           3DS MAX에서의 폴리곤 서페이스의 노멀 벡터 디스플레이

    위 그림으로부터 알 수 있듯이 노말벡터는 방향성을 갖기 때문에 컴퓨터 그래픽스에서 물체표면의 셰이딩을 결정하는 중요한 정보입니다. 고해상도 데이터로 이루어진 모델의 표면은 많은 수의 폴리곤으로 이루어져 있어 각각의 폴리곤에 대한 노말벡터도 전체적으로 많습니다.

    따라서 많은 양의 노말은 물체가 많은 표면으로 이루어져 있다는 뜻이므로 물체의 표면을 부드러운 곡면으로 보이게 하는 역할을 수행합니다. 노말맵 텍스쳐 이미지는 이러한 물체의 노말정보를 텍스쳐 이미지 형태의 저장공간에 저장해 둔 파일입니다. 이 저장된 정보는 비슷한 형태의 저해상도 모델에 적용되어 텍셀의 셰이딩 계산시 고해상도 모델에서 쓰였던 노말정보로 렌더링 됩니다.

    이것이 실시간 게임에서 저해상도 모델을 고해상도처럼 보이게 하는 마술같은 노말맵의 구현원리입니다. 그러면 그 구체적인 과정은 어떻게 이루어질까요?

    먼저 다음 하이폴리곤 모델의 노말정보를 얻기 위해 로우폴리곤 텍셀로부터 하이폴리곤 표면을 향해 반직선을 투영합니다. 이 투영을 통해 반직선과 하이폴리곤 모델표면과의 교점을 얻고 그 부분의 노말정보를 얻습니다. 이렇게 얻어진 노말 정보를 로우폴리곤 모델의 텍셀에 저장하는 것입니다. 이렇게 얻어진 텍스쳐 이미지가 노말 텍스쳐 이미지입니다.

    이 이미지는 일반적으로 파란색으로 보여집니다. 그 이유는 벡터값을 텍스쳐의 RGB값으로 전환하는 과정에서 B값 즉, 노말값을 1로 정규화하기 때문에 전체적으로 파란색을 보이게 되는 것입니다.

            ==>로우폴리곤 모델로부터 하이폴리곤 모델로의 반직선 투영

    위 그림에서는 로우폴리곤 표면텍셀에서 쏘아올린 반직선이 하이폴리곤 표면에 교차하는 모습을 보여주는 개념도입니다. 여기서 얻어진 노말정보는 노말맵을 생성하는 데 쓰입니다. 컴퓨터 그래픽스에서 일반적으로 각각의 축에 대해 RGB를 적용하는 원칙은 순서대로입니다. 즉 X축은 R(Red), Y축은 G(Green), Z축은 B(Blue)입니다. 그림에서 파란색 화살표는 지역표면의 Z축 반직선을 의미합니다.

                           반직선과 하이폴리곤 모델과의 교차점

    위 그림에서 보여지는 붉은 색 점은 로우폴리곤의 텍셀 즉, 텍스쳐 이미지의 픽셀이 위치한 로우폴리곤의 3차원 모델로부터 하이폴리곤으로 투영된 반직선과 하이폴리곤과의 교점입니다. 이 지점의 노말정보가 우리가 관심을 갖고 사용해야 할 노말정보입니다. 노말맵을 생성하는 여러가지 도구들은 이 정보를 텍스쳐 이미지로 저장하는 역할을 수행하는 것입니다.


    2. 노말맵의 종류

    노말맵에는 오브젝트 공간 노말맵(object space normal map)과 탄젠트 공간 노말맵(tangent space normal map)이 있습니다. 오브젝트 공간 노말맵은 말그대로 오브젝트의 좌표계 상에서의 노말을 저장한 것이고, 탄젠트 공간 노말맵은 노말 벡터를 텍스쳐가 지정되는 표면 공간 좌표계에 대하여 구한 다음 저장한 것입니다. 따라서, 탄젠트 공간 노말맵은 다른 말로 텍스쳐 공간 노말맵(texture space normal map)이라고도 부릅니다.

    두 방식은 각각 장단점을 갖습니다. 스키닝 기법을 사용하는 캐릭터와 같은 모델의 경우 정점이 몰핑되면서 노말 벡터의 방향이 바뀌게 되는데 이때는 고정된 오브젝트의 공간좌표계는 의미가 없어집니다. 이러한 경우 표면의 방향이 계속 바뀌므로 탄젠트 공간 노말맵을 사용해야 합니다. 그러나 벽이나 건물처럼 표면이 고정적이고 변형되지 않는다면 구현이 쉽고 빠른 오브젝트 공간좌표계를 사용하는 오브젝트 공간 노말맵을 사용하는 것이 효과적일 것입니다. 이러한 노말맵의 종류는 3DS MAX 7.0의 선택옵션에 나타나 있어 원하는 노말맵을 생성할 수 있도록 해줍니다.

                                    ==>오브젝트의 공간 좌표계

                              오브젝트의 표면 지역 공간 좌표계


    3. 3DS MAX에서의 노말맵의 활용

    Discreet사의 홈페이지에는 노말맵을 비롯한 3DS MAX 7.0의 새로운 기능을 상세히 설명해놓은 PDF파일이 공개되어 있습니다. 맥스에서의 Normal Map의 활용은 노말맵 생성단계와 디스플레이단계로 나눌수 있습니다. 노말맵의 생성은 프로젝션 모디파이어를 통해 이루어지며 프로젝션된 하이폴리곤 모델의 표면에 로우폴리곤 모델의 텍셀공간좌표로부터의 반직선의 교차점을 이용해 로우폴리곤의 텍셀좌표에서의 노말값을 적용합니다. 결과적으로는 하이폴리곤 모델의 반직선 교차점의 노말값이 로우폴리곤 모델의 텍셀에서의 노말값으로 계산됩니다.

                           MAX에서의 로우폴리곤 맵 적용 개념도

    맥스 7.0에서 노말맵을 생성하는 과정은 다음과 같다.

                           3DS MAX 7.0에서의 노말맵 생성과정

    1. 하이폴리곤 모델과 가능한 비슷한 형태의 로우폴리곤 모델을 만든다.
    2. 오브젝트의 하이폴리곤 버젼을 준비한다. 오브젝트 자체를 변형하기 쉽다면 외부 오브젝트를 불러와도 무관하다.
    3. 프로젝션 모디파이어를 로우폴리곤 오브젝트에 추가한다. 모디파이어는 새장같이 생겼는데 더 커질수도 있고 편집할수도 있다. 이 모디파이어의 역할은 로우폴리곤으로부터 하이폴리곤으로 반직선을 투영하기 위한 것이다.
    4. 외부오브젝트와 하이폴리곤오브젝트를 겹치게 위치시킨다. 모든 필요한 지오메트리를 포함하는 사이즈와 형태로 새장의 모양을 만들어줘야 한다
    5. Render to texture명령을 이용해 노말맵을 생성한다.
    6. 결과적으로 생성된 노말맵을 범프맵에 적용시켜 렌더링 해본다.

                        3DS MAX 7.0에서의 노말맵을 적용한 결과

    맥스 7.0에는 뷰포트 디스플레이를 통해 노말맵을 볼 수 있는 기능이 생겼다. 스탠다드 재질에 있는 DirectX Manager롤아웃에는 DX Display of Standard라는 옵션이 있다. 이 옵션을 켜면 실시간으로 노말맵이 디스플레이되는 것을 확인해볼수 있다.

    3DS MAX 7.0에서 Standard Material에 있는 DirectX Manager 롤아웃

    이상으로 노말맵의 구현원리와 맥스에서의 구현에 대해 알아보았습니다.
    이것은 개념적 측면에서 바라본 노말맵의 내용입니다만 노말맵을 이용하면 수많은 응용으로서 사용될 수 있을 것입니다.

    다음에는 3DS MAX 7.0에서 직접 모델을 제작하여 노말맵을 적용하면서 노말맵에 관련된 새로 추가된 기능과 활용에 대해 알아보겠습니다.

    Discreet 공식 홈페이지에는 3DS MAX 7.0의 새로운 기능에 대한 설명이 있습니다. 이 글에서의 노말맵 기능에 대한 설명은 이 문서를 참조 했음을 밝힙니다.

     



    'Direct3D' 카테고리의 다른 글

    환경맵  (0) 2010.02.23
    조명(Light)  (0) 2009.11.25
    노말맵(Normal Map)이란 무엇인가?  (0) 2009.11.20
    라이트맵  (0) 2009.11.10
    멀티텍스처링(MultiTexturing)  (0) 2009.11.10
    픽셀 세이더  (0) 2009.11.10
    posted by 바비봉

    댓글을 달아 주세요