'Normal Map'에 해당되는 글 1건

  1. 2009.12.07 미세한 요철 표현의 기본형「법선맵 Normal Map」


아래에서 퍼옴

http://allosha.tistory.com/category/니시카와%20젠지/법선맵(노말맵)



2008-04-25 12:00:00
ここまでで、リアルタイム3Dグラフィックスの歴史や概念の部分は大体理解いただけたのではないだろうか。今回からは、実際に3Dゲームなどで応用されている3Dグラフィックス技術の概念などについて細かく紹介していこ ...... >> Read more

(C) Mainichi Communications Inc. All rights reserved.



여기까지해서 리얼타임 3D그래픽스의 역사나 개념 부분은 대강 이해했을 것 같다. 이번회 부터는 실제로 3D게임등에서 응용되고 있는 3D그래픽스 기술의 개념등에 대해 자세히 소개해 나갈 생각이다.

주로, Xbox 360이나 PS3, 2006년 이후의 PC 3D게임 그래픽스등에서 많이 사용되는 테크닉이나 기술을 중심으로 소개해 나가겠다.


법선맵(노말맵) 기술의 대두

2000년, 다이렉트X 8이 발표되고 GPU가 프로그래머블 셰이더 아키텍쳐 기반이 되면서 가장 많이 보급된 기술이 법선맵을 이용한 범프매핑일 것이다.

그래서, 우선 수회에 걸처 「법선맵」의 기술적인 개념에 대한 해설과 실제 게임타이틀에서 응용된 방법들을 소개하겠다.


한개 폴리곤 미만의 미세한 요철(凹凸)을 표현하기 위해

실시간 3D그래픽스는 최종적으로는 적당한 해상도의 2D프레임에 그려진다. 당연하다.

예를 들어 수백만 폴리곤의 고정밀 3D모델이 있다고 해도 이것을 640×480 도트의 화면에서 표시하면, 대부분의 폴리곤이 1 픽셀 미만으로 밖에는 표시되지 않을 것이다.

이것은 극단적인 예이지만, 열심히 세세한 모델링을 해도 실제 표시는 그 모델링 정밀도가 소용 없게  되는 경우가 많다는 것이다. 특히, 그것이 현저한 것이 미세한 요철부분이다.

예를 들면, 인간의 피부상의 주름, 돌층계나 벽돌의 연결부분, 파충류나 어류의 비늘, 무기나 장식품에 새겨진 릴리프 모양 같은 세세한 요철은, 폴리곤으로 모델링을 해도 그것이 실제 표시될 때는 제대로 표시되지 못하는 경우가 많다. 표시되지 못하는 것 뿐이라면 차라리 낫지만, 폴리곤 데이터로서 존재하게 되면, 그것은 메모리를 보다 많이 소비하게 되고, CPU→GPU에의 3D모델의 전송도 불필요하게 시간이 걸려 버린다. 그리고 실제로는 대부분이 한픽셀 이하로 떨어져 버리지만, 그런데도 정점셰이더는 그 미세 요철의 다각형을 모두 처리해야 하기 때문에, 쓸데 없이 고부하를 강요 당하게 된다.

거기서, 발상을 전환해 세세한 요철을 그럴듯 하게만 보이면 된다……라는 페이크(fake) 기법이 모색되기 시작한다. 이것에 대한 하나의 해법이 「법선맵을 이용한 범프맵핑」이다.

이 방법은, 최종적으로 요철이 있는 것 처럼 음영이 나오게 하는 것에 주력하고, 실제로 폴리곤 레벨에서는 세세한 요철을 만들지 않는 것이 특징이다 (대략적인 요철은 만드는 경우가 많다).


법선벡터(노말벡터)만 있으면 음영은 낼 수 있는 것에 착안

미세한 요철이 「요철로 보인다」는 것은 왜일까?

그것은 요철에 밝은 곳이나 어두운 곳이 생기기 때문에 -- 즉 음영이 나오기 때문이다.
그럼 「음영이 나온다」라고 하는 것은 어떤것일까?

이것은 라이팅(광원 처리)이 되기 때문이다.

그럼 라이팅에 필요한 것은 무엇일까?

반사 방정식에는 그 표현하고 싶은 재질에 따라 여러가지가 있지만, 라이팅에 필요한 기본 파라미터는, 시점으로부터의 시선을 나타내는 「시선벡터」, 그리고 물건을 비추는 빛의 방향을 나타내는 「광원벡터」라는 2개의 벡터와 빛에 비추어지는 면(픽셀, 폴리곤)의 방향을 나타내는 벡터인 「 법선벡터」이다.

법선벡터는, 표현하고 싶은 요철에 밀접하게 관련된 파라미터이며, 그 요철의 법선벡터만 있으면, 이것을 사용해 반사방정식을 풀기만 하면 요철 같은 음영을 만들어 낼 수 있다.

다만, 실제로는 요철이 없기 때문에, 그 요철이 실제로 있는지 없는지 판별하기 어려울 정도의 각도나 멀리서 보는 경우가 아니면 부자연스러움이 드러나 버린다. 역으로, 정말로 요철이 있는 것인지 잘 모를 정도의 매우 미세한 요철의 음영 표현에는 적합하다고 할 수 있다.

그러면 미세 요철의 법선 벡터를 어떻게 다루면 좋을까?

최종적으로 미세 요철의 음영은 픽셀을 그린 결과로서 나오기만 하면 되므로, 즉 픽셀 단위로 법선 벡터를 줄려면  어떤것이 적당할지만 생각하면 된다

그럼, 해답은 저절로 나온다.「텍스처」이다.

텍스처라고 하면 일반적으로는 폴리곤에 붙이는 화상이나 모양을 연상하기 쉽다.

예를 들면, 화상텍스처(Diffuse Texture)를 폴리곤에 붙이는 경우는, 텍스처로부터 읽어낸 텍셀(텍스처를 구성하는 화소)의 색을, 지금부터 그릴 픽셀의 색으로 해버린다.
이 텍스처에 미세 요철의 법선벡터를 넣어 두고 텍스처로부터 읽어낸 텍셀을, 법선벡터로서 보고, 그 시점에서 픽셀단위의 라이팅, 즉 반사 방정식을 풀면, 표현하고 싶은 미세한 요철의 음영을 낼 수 있게 된다.

일반적인 텍스처의 텍셀은 화상텍스처의 경우 α(투명도), R(빨강), G(초록), B(파랑)의 최대 네개 요소의 색 정보로 나누어 할당할 수 있는데, 이것을 예를 들어 α을 제외한 RGB의 세 요소에 법선 벡터의 x, y, z성분을 할당해 기록해 둔다. 렌더링 시에 픽셀셰이더에서 이 텍스처로부터 텍셀을 꺼낼 때, 이 RGB 성분을 법선 벡터의 x, y, z 성분으로 간주하고  반사 방정식을 푼다.

이 법선 벡터를 저장한 텍스처를 특별히 「 법선맵 」(Normal Map)이라고 부른다. 일반적으로, 이 법선맵을 이용한 미세 요철 표현은 「법선맵을 이용한 범프매핑」이라고 부르는 것이 맞겠지만, 범프매핑의 기법으로서 법선맵을 활용하는 방법이 표준이 되어 버려서, 범프 맵핑과 「법선맵을 이용한 범프매핑」이 같은 의미로 쓰이고 있다. 또, 텍스처맵을 붙이는 것을 텍스쳐매핑이라고 하는것과 연관지어, 이 기법을 「 법선맵을 붙인다 」는 의미를 담은 「 법선매핑(Normal Mapping) 」이라고 부르는 경우가 많아졌다. (계속)

그림1: 법선 맵을 이용한 범프 맵핑의 개념

<그림 설명>
상:
광원벡터 L, 법선벡터 N, 시선 E, 3D모델 -> 라이팅을 하면 음영이 나온다.
하:
평면
① 비록 실제로는 평면이라도
② 법선벡터의 정보만 있으면...
③ 그것으로 라이팅을 해주면
④ 보기에는 입체적인 음영을 낼 수 있다.




미세한 요철의 높낮이를 색의 농담(濃淡)으로 표현한 높이맵에서 법선맵을 생성

법선맵의 디자인 툴은 무료나 상용 소프트웨어 양쪽에서 다양하게 릴리즈되어 있지만, 상용으로는 Pixologic사의 「ZBrsuh 」가 유명하다. 아울러, ZBrush에서는 하이폴리곤으로 모델링 한 미세요철의 디테일을 로우폴리곤모델 + 법선맵으로 출력하는 기능도 갖추고 있다.

Pixologic사의 「ZBrsuh」에 의한 하이폴리곤 모델로부터의 법선맵 생성

혹은, 「흰색을 높다」 「검정색을 낮다」라고 정의해서, 높이을 표현하는 하이트맵 (높이맵, 디스플레이스먼트맵이라고도 한다)을 준비해 이 흑백의 그레이스케일 텍스처로부터, 법선맵을 생성하는 방법도 자주 사용된다. 높이맵은 흑백의 농담(濃淡)으로 요철(凹凸)을 표현할 수 있으므로, 손으로 미세요철을 그릴 때에는 직관적이고 알기 쉽다. 앞서 말한 ZBrush는, 하이폴리곤모델을 로우폴리곤+높이맵으로 변환하는 기능도 가지고 있다.

높이맵은 미세요철의 높낮이 만을 나타내고 있을 뿐이므로, 법선맵으로의 변환이 필요하게 된다.

이것은 높이맵의 각 텍셀에서의 인접 높낮이값을 구해 가로방향과 세로 방향에 대한 기울기를 계산한다. 각 점에서의 법선벡터는 거기에서의 가로 방향의 기울기, 세로 방향의 기울기와 쌍방으로 직교하는 벡터이므로, 이것을 계산해 준다. 이것을 높이맵의 모든 텍셀 단위로 계산해서, 구한 법선벡터를 텍스처에 출력해 주면 법선맵이 완성된다.

이 높이맵으로부터 법선맵을 변환 생성하는 것은 픽셀셰이더를 활용해서 실시간으로도 가능하지만, 법선맵 자체가 움직이지 않을 경우는, 미리 오프라인으로 사전에 생성해 두기도 한다. 반대로 높이맵을 움직여서, 이것을 리얼타임으로 법선맵으로 변환해 애니메이션하는, 미세요철을 표현하는 독특한 테크닉도 실현 가능하다. 덧붙여서, 머지않아 본 연재에서도 다룰 「수면의 실시간 잔물결 애니메이션」등의 표현은 실제로 이 테크닉을 이용한다.

그림2: 높이맵으로부터 법선맵으로의 변환

<그림 설명>
(좌) 높이맵에서 표현되는 요철(凹凸)의 이미지
(우) 높이맵의 높이로 부터 법선벡터를 구하는 이미지
높이맵

법선매핑(노말매핑)의 실제

법선맵을 이용한 범프매핑의 실제 흐름은 아래의 그림3과 같다.

그림3: 여기에서 가볍게 소개했던 그림을 다시 개재한다.
픽셀쉐이더가 하는일의 예 -- 범프매핑이 완성될 때까지의 개념도. 높이맵으로부터 법선맵으로의 변환도 픽셀셰이더에서 할 수 있다.법선맵은 법선벡터를 저장하는 텍스처로, 텍셀당 XYZ로 나타내지는 3차원 법선벡터 하나가 저장된다.(XY만 저장하고 Z는 계산으로  구하는 방법도 있음)

높이맵을 법선맵으로 변환하고, 픽셀셰이더에서 법선맵을 참조해 법선벡터를 꺼내, 이것을 픽셀단위의 라이팅에 사용한다.

여기서,  한가지 주의해야 할 것은, 법선맵에 있는 법선벡터는, 단지 텍스처라는 평면 위에 구성된 미세요철면의 방향일 뿐, 지금부터 매핑할 폴리곤의 방향을 전혀 고려하지 않고 있는다는 것이다.

법선맵은 단지 2D 텍스처이므로, 매핑할 폴리곤의 좌표계는 전혀 고려되지 않는다. 그래서, 좌표계의 통일을 위한 변환 처리가 필요하게 된다.

그림4

<그림 설명>
(버블) 여기의 법선벡터는 이른바 텍스처좌표계에서의 법선벡터이므로 그대로 폴리곤에 적용할 수 없다.
법선맵(텍스처좌표계),
로컬좌표계,
3D모델


가장 직관적인 것은, 법선맵으로부터 가져온 법선벡터를 월드좌표계나 로컬좌표계로 그때그때마다 변환하는 방법일 것이다. 이 방법은 전픽셀에 대해서, 꺼내온 법선벡터 하나 하나를 좌표계 변환 계산을 해주어야야 하므로 부하가 심하다.

그 때문에, 정점셰이더에서 픽셀셰이더로 받아서 넘겨지는 광원벡터나 시선벡터를, 법선맵을 적용하는 폴리곤 기준의 좌표계와 텍스처 좌표계가 딱 맞도록 변환하는 방법이 일반화되어 있다. 적용하는 법선맵이 고정적인 경우는 법선맵 자체를 사전에 오프라인에서 3D모델의 로컬좌표계로 변환해 두는 방법도 사용된다. 이 부분의 구현방법의 차이는 3D게임 엔진의 설계등에 따라 다르다.(계속)

그림5

<그림 설명>
①일치 시키기 위해서
법선맵,
(버블)좌표계를 법선맵 기준에 맞추어 픽셀단위로 라이팅
법선맵으로 부터 꺼낸 법선 벡터
광원 L,
시선 E,
3D모델,
픽셀셰이더,
정점셰이더,
② 시선 E와 광원 L의 좌표계를 변환



실제의 3D게임에서 보는 법선매핑 활용

법선 매핑은 어떤 장면에 많이 사용될까? 실제의 3D게임에서 보고 가기로 하자.

가장 기본적인 것은, 벽돌이나 암벽과 같은 배경 오브젝트의 재질 표현이다. 전혀 움직이지 않는, 배경 폴리곤에 적용하는 법선맵이면 좌표계는 고정되므로, 계산 부하를 감소 시키기 위해, 법선맵에 넣을 법선벡터의 방향을 미리 로컬좌표계나 월드좌표계로 변환한 상태로 생성해 버리는 것도 좋을지 모른다.

「하프 라이프 2」(VALVE)로 부터. 법선 맵을 Off(왼쪽)한 것과 On( 오른쪽)한 것. 통나무 가죽의 미세 요철에 주목.
(C)2004 Valve Corporation. All rights reserved. Valve, the Valve logo, Half-Life, the Half-Life logo, the Lambda logo, Counter-Strike, the Counter-Strike logo, Source, and the Source logo are trademarks or registered trademarks of Valve Corporation in the United States and/or other countries. All other trademarks are property of their respective owners.


또, 동물이나 괴물의 피부의 미묘한 요철감, 옷의 주름, 자동차나 비행기, 로봇등의 메카닉등의 몰드디테일등도 법선맵의 기본활용 예이다.

캐릭터의 피부등의 질감 표현에 이용하는 경우에는, 비늘이나 가시 같은 복수패턴의 법선맵을 적당하게 스케일링 하면서 혼합해 적용한다는 것도 재미있다. 벡터합 계산은 단순히 대응요소끼리 더하면 되므로 그리 큰 부하는 없다.

「로스트 플라넷」(캡콘)으로 부터.  법선맵 Off (왼쪽)와 On( 오른쪽). 몬스터의 으스스한 피부의 질감도 법선매핑으로 자주 표현된다.
Character Wayne by (C)Lee Byung Hun/BH Entertainment CO., LTD, (C)CAPCOM CO., LTD. 2006, 2007 ALL RIGHTS RESERVED.

「CALL OF DUTY2」(ACTIVISION)으로 부터. 옷의 주름등도 법선맵의 기본적용의 예이다. 캐릭터의 손발이 움직이고, 옷도 신축 하는데, 법선 맵의 옷의 주름만은 변화하지 않는다 …… 라는 것은 부자연스럽게 보이거나 하는 경우도.
(C)2005 Activision Publishing, Inc. Call of Duty is a registered trademarks of Activision Publishing, Inc. All rights reserved.

「CALL OF DUTY2」(ACTIVISION)으로 부터. 법선 맵 Off(왼쪽)와 On( 오른쪽). 메카닉의 몰드 표현도 법선 맵이 활약하는 장소다.
(C)2005 Activision Publishing, Inc. Call of Duty is a registered trademarks of Activision Publishing, Inc. All rights reserved.

「DOOM3」(id software)로 부터. 인간의 얼굴의 주름 표현에 법선매핑을 사용하는 것은 자주 있지만, 이와 같이 얼굴에 상처를 늘려 징그럽게에 변하는 것을 표현한다고 말했었던 것에도 사용할 수 있다.
(C)2004 Id Software, Inc. All rights reserved. Distributed by Activision Publishing, Inc. under license. DOOM and id are registered trademarks of Id Software, Inc. in the U.S. Patent and Trademark Office and in some other countries. Activision is a registered trademark of Activision, Inc. and its affiliates. The ratings icon is a registered trademark of the Interactive Digital Software Association. All other trademarks and trade names are the properties of their respective owners.


법선 매핑은 미세 요철 표현에는 좋다고는 해도, 역시 그 폴리곤에 시점이 너무 가까워지면 , 실제로는 요철이 없는 것을 들켜 버린다.

이것을 개선하기 위해서 독일 CRYTEK사의 3D슈팅게임 「FARCRY」에서는, 독특한 방법을 구현하고 있다.

다른 많은 3D게임이 그렇듯, FARCRY에서도, 시점에서 가까울 때에 표시하기 위한 하이폴리곤으로 구성된 고품위 모델과 시점에서 멀 때 표시하기 위한 로우폴리곤으로 구성된 저해상도 모델을 따로 사용하고 있다. FARCRY에서 독특한 점은, 이, 시점에서 멀어졌을 때의 표시에 이용하는 로우폴리곤모델에 대한 착상이다.

그것은, 로우폴리곤화로 인해 잃은 디테일을 법선맵을 준비해, 로우폴리곤모델에는 이것을 적용해서, 가까울 때나 멀리 있을 때나 동등한 디테일 표현으로 되어 있는 것처럼 보이게 하는 것이다. CRYTEK에서는, 이 테크닉을 「POLYBUMP」기술이라고 명명하고 있다.

어떤 의미에서는, 법선매핑을 LOD(Level of Detail : 시점으로부터의 거리에 따라 적당하게, 표현의 수위를 조작하는 것)시스템에 짜넣은 좋은 예라고 할 수 있다.

  

왼쪽이 약 2800 다각형의 하이 디테일 모델.
폴리곤수를 1/10 의 약 280 개의 로우 디테일 모델로 변환해서, 사라진 디테일을 법선 맵으로 출력한다

   1/10의 다각형수의 모델에 법선 맵을 적용한
   것이 오른쪽의 그림. 시점에서 멀어졌을 때의
   로우폴리곤 모델이 이 레벨로 표시되고
   있으면, 로우디테일 모델로 바뀌었다는 것을
   거의 눈치채지 못할지도 모르다

법선맵으로 대체한 얼굴의 디테일에 주목
(C)2004 Crytek. All Rights Reserved.Published by Ubisoft Entertainment. Far Cry, Ubisoft and the Ubisoft logo are trademarks of Ubisoft Entertainment in the US and/or other countries. Distributed by Kid Station Inc. under license by Ubisoft Entertainment. CryEngine, Polybump technology and Crytek are either trademarks or registered trademarks of Crytek GmbH. All Rights Reserved.


 

Posted by 노을삼킨별
,