디시인사이드 갤러리

마이너 갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

[강좌/팁] Normal map(노말맵) 및 baking에 관하여

ㅇㅇ(110.10) 2024.07.03 05:09:37
조회 4024 추천 31 댓글 11
														
키워드: Normal map, 노말맵, Baking, 베이킹, 하이폴리, high poly, 로우폴리, low poly


Game-ready asset 만드는 workflow를 익히는동안 마지막까지 어려웠던 normal map baking에 대해 말해보려함


이 글에서 얘기할건

1) Normal map의 목적과 원리
2) Normal map baking의 원리
3) 완벽한 Normal map을 만들기 위한 workflow
4) 흔한 Artifact에 대한 문제해결

Normal map을 전혀 안써봤으면 읽을때가 아니고
적어도 직접 baking을 해보고 몇번 문제를 맞닥뜨렸는데 "왜 이러는지"를 이해하고싶을때 권장





0. Normal

normal에 대한 개념은 수학에서 말하는 normal (=normal vector)와 완전 동일하기 때문에
기하벡터 이상의 수학을 한사람이면 별도의 설명이 없어도 무리없이 이해할것이나
만약 normal의 의미와 개념이 아직 잡혀있지 않다면 이글을 읽을때가 아니고 잘정리된 아래글을 먼저 읽는걸 추천




1. Normal map


23b2c22be4de07ab6fafc6bc18d61b33284901c940fd2301c1fcad5aa855567169f9d11b2746c68d03



이렇게 생긴게 노말맵임



1) Normal map의 등장배경


게임같은데 쓰일 모델은 가능한 리소스를 적게 쓰는게 생명이기에

내가 만든 하이폴리 모델을 그냥 바로 사용하기는 어려울때가 많음


그래서 눈속임으로 로우폴리 모델을 대신 만들어 사용하되

Shading시 하이폴리처럼 처리하도록 눈속임을 주는게 Normal map의 사용 목적임


viewimage.php?id=2fb1d528e1d72a&no=24b0d769e1d32ca73fe980fa11d028315d554368bac55d95d5bf55b6a4862c09e8755b8758357563542ca8e6b37b586ba4cd3e46f89e96e57057bf9f89bcf3cc2ecce8


2) Normal map이 하는 일


하이폴리가 가진 Normal 정보를 이미지 형태로 저장해 로우폴리에다 덮어씌움으로써 눈속임을 만드는데

그 이미지가 Normal map이고

이미지를 만드는 과정이 Normal map baking임


로우폴리 모델은 Normal map을 참고해서 Geometry가 가진 Normal을 변형시켜 하이폴리처럼 보이게함



3) Normal map의 정보저장 구조


R,G,B 채널이 각각 Normal의 x,y,z방향 정보를 담고있다고 보면 되는데

그래서 RGB (127, 127, 255)인 보라색이 기본임


23b2c22be4de07ab6fafc5e458db343a509a2e285e87dd0da93d15


여기서 G채널이 담은 정보가 +y냐 -y냐에 따라 노말맵도 두가지 종류로 나뉘는데

OpenGL은 +Y, DirectX는 -Y이므로 내가 어떤걸 쓰고있는지 항상 알고 작업해야됨


참고로 Blender는 Baking시 각 채널(X,Y,Z) 방향을 지정할 수 있고 Substance painter는 프로젝트 만들때 두가지중 선택가능함





2. Normal Baking의 원리


Normal baking의 3요소:

1) Low poly mesh 2) High poly mesh 3) Cage


즉 이 3가지가 있어야 성공적으로 Baking 할수있는거고

문제가 생긴다면 이 세가지중 하나에서 발생했다는 뜻임



0ebcc066b7826af223ef81f84682646d742f50fcffc0e3ba660d3200281f48f7c641478b86f9a3bd39808a


복잡해보여도 뭐가 뭔지 이해하면 사실 Baking을 다 안건데

여기서 In-game mesh가 로우폴리고 High-res mesh가 하이폴리임


보통 Normal baking을 하는 방식에는 두가지가 있는데 (통일된 용어는 아님)


1) Distance-based raycast(좌):

로우폴리 고유의 노말방향을 따라서 그대로 빛을 쏘듯이 projection함.

메쉬의 노말 정보를 그대로 사용하기 때문에 Hard edge가 있으면 노말이 불연속적이기에 정보 소실이나 중첩이 생김.


2) Cage-based raycast(우):

로우폴리 고유의 노말을 전부 무시하고 smooth시킨 Cage라는 오브젝트를 만들어 이로부터 projection함.

노말이 전부 연속적이기에 정보소실은 없지만 skewing과 같은 방향상의 왜곡이 발생함.


38b3c32beadd2cae6bbbd5b411d4696a9d18b989387382e0b8c3de1fd946d6261120b33fd7

3eb0df29f1da3da26dbed1b05b867265bfc2f009db9d7fd50c128e12dba167009c36a0


두 방식에 각각 장단점은 이 그림보면 이해가 좀더 잘될거임

첫짤(distance based)는 각 면의 노말 방향이 보존되어 수직으로 projection되기 때문에 나사 모양이 제대로 찍히지만 Hard edge에서 artifact가 생기고

두번째짤(cage based)는 Edge에서 artifact는 없지만 cage를 만들며 projection되는 방향이 왜곡됐기 때문에 skew됨


이런 문제를 해결하는 방법은 뒤에서 서술함.



7ae4d524b48b6aa039be84e744d5216d1e2b4d42dfd029ce0dfa3388426578c442029df9501fd9e9d14a421bafff3c211988dbc640d369


사실 블렌더는 앵간한 방식은 다 Cage-based가 기본이라 후자방식만 알아도 큰 문제 없지만

Baking시 문제해결을 위해선 그 원리를 이해하고 있어야겠죠?



보통 Baking할때 저 메뉴에서 둘중하나로 갈거임

1) Extrusion과 Max ray distance를 지정해서 baking하거나

2) Custom cage를 만들어서 지정하거나


사실 둘다 본질은 똑같음

1)에서 Extrusion은 로우폴리에서 얼마나 Extrusion(Alt+S 누른것과 같음)시켜 cage를 만들거냐이고

Max ray distance는 Cage로부터 어디까지 projection시킬거냐임


그렇다는 말인 즉슨 Cage에서부터 Max ray distance만큼의 거리 안에 로우폴리 및 하이폴리가 모두 들어와야 (=둘이 비슷하게 붙어있어야) 제대로 베이킹되겠죠?

(이와 관련된 문제 및 문제해결을 뒤에서 서술함)


2)에서 Cage를 직접만들때 Alt+S로 만들면 1)이랑 다를바가 없는데 여기서 추가된건 내가 직접 부분적으로 수정할수 있다는점.





23b2c22be4de2aa37ebedfa713c3696c1cea3663c0f698a76000c5a24b2b8690a5b3f883ea763c2a


그리고 Baking 과정을 이해함에 있어 또하나 염두해둬야 할게 있는데


노말에 영향을 미칠수 있는것 = Smoothing group (Flat shading/Edge sharp) 역시 고려해야된다는거임


Hard edge에서 노말은 불연속적이기 때문에 baking 결과에도 영향이 있다




Hard edge는 전통적으로 normal baking시 문제원인에서 상위랭킹이었기에

이를 피하고자 그냥 전체에 smoothing걸어버리는 경우도 있긴 한데


전체 smoothing을 한경우와 / Hard edge를 잘 사용한 경우 둘다 적절한 baking을 거쳤다면 shading 결과는 동일하지만 다른 노말맵이 나옴

영상에서 두경우를 잘 비교해서 설명했긴 한데 웬만하면 후자처럼 Hard edge를 살릴 수 있으면 살리는게 더 깔끔한 결과가 될거임


이유는 다양하지만 난 LOD 모델에도 동일 노말맵을 사용할 경우, baking된 맵 위에 Normal 데칼을 더 입히는 경우 편리함을 꼽고싶음




3. Normal map baking을 위한 Workflow


사실 많이해보고 시행착오 쌓기 + 공부하기의 순환구조가 제일 좋긴한데

Polycount를 참고해서 남들의 경험치를 내것으로 만듭시다 (http://wiki.polycount.com/wiki/Texture_Baking)


1. 인게임 테스팅

대충 형태만 잡아서 최종적으로 쓰일 엔진에서 테스트해보며 전체적인 흐름을 설계합니다


2,3. 하이폴리 만들기 -> 로우폴리 만들기

경우에 따라 로우폴리 먼저할수도 있는데 어짜피 하이폴리에 맞춰 다시 다듬어야됨

모델링 과정부터 신경써야할 것: Topology(토폴로지), Smoothing group

4. UV 정리

이거 의외로 중요한데 많이 간과함

3에서 만든 모든 Hard edge는 Seam을 넣어 UV island를 분리시켜야됨 (뒤에서 이유는 자세히 서술함)


5. Triangulation

Triangulation의 방향에 따라서도 Normal map 적용결과가 다르게 보이기 때문에 이를 미리 해줘야됨 (특히 Mirroring 전에 해야됨)


6,7. Mirror/UV offset

Mirror 쓸경우 UV 한칸씩 미뤄서 안겹치게 해야함 (Mirror modifier에서 설정가능)

Mirror의 경계도 Hard edge 못지않게 문제 많이 만들수 있음에 유의


8,9. 하이폴리 최적화, 메쉬 분리작업(Explode)

같이 베이킹할때 서로 겹칠수 있는걸 따로 베이킹시킬수 있도록 분리하는 과정을 Explode라 함


10~12. Cage 만들기, Baking




4. 흔한 문제 및 문제해결



1) 노말맵 이미지가 끊겨보이는 경우


2194df31e79c28a8699fe8b115ef046ec2f7ff8f7d


해결법: 문제없음 원래그럼.

만일 shader 적용후에도 경계가 확인된다면 이미지가 sRGB가 아닌 non-color로 되어있는지 확인할것




2) Hard edge를 따라 생기는 Artifact

:Hard edge를 따라 1-2픽셀 정도로 선처럼 생기는 경우


viewimage.php?id=2fb1d528e1d72a&no=24b0d769e1d32ca73fe980fa11d028315d554368bac55d95d5bf55b6a4862c09e8755b8758357563542ca8e6b37b586ba4cd3e46f89e96e52650e299debca7cc965fdd


해결법: 모든 Hard edge에 Seam을 넣고 UV island를 분리함


이유: 두 면이 UV상 붙어있을때 그 경계에선 interpolation된 색이 노말을 지정하기 때문에 경계에서 노말 정보가 왜곡되는거임

UV island를 분리시킴으로써 두 색상의 interpolation을 참조하지 않도록 함.



3) 제멋대로 생기는 sharp edge


7fec8673bd9c32b6699fe8b115ef046c9d495cbffd


해결: Autosmooth를 끄고 로우폴리에 smoothing/sharp edge를 다시 넣을것

초기화할때 "Clear Custom Split Normals Data" 기능을 이용해볼수 있음


블렌더 4.1 넘어오면서 Autosmooth 기능이 modifier로 옮겨갔는데 이후로 이거 마주친적이 없는것같음





4) 일부가 baking되지 않거나 이상한 색상으로 나옴



34ad852cc79c28a8699fe8b115ef046cc7453d9dd8


이유: Cage가 적절히 설정되지 않아서 그럼.

기본 보라색으로 나오는건 Cage에서 Ray distance까지의 범위에 메쉬가 들어가지 않아서 그런거고
노란색/초록색으로 나오는건 뒤집힌 노말로, concave하거나 디테일 밀도가 높은곳에서 잘못된 노말을 참조한거임

전혀 나오지 않으면 설정값의 스케일이 넘사벽으로 안맞는거고 그냥 Alt+S로 직접 cage 만드는편이 나음


해결법:

1) 로우폴리와 하이폴리 메쉬가 적절히 겹쳐지게 만든다

2) Extrusion / Ray distance를 적절히 설정한다. Extrusion된 cage로부터 Ray distance까지의 거리 안에 로우/하이 메쉬가 모두 들어가있어야함

3) Projection이 겹치는 부분이 없는지 확인한다. 특히 Concave하게 들어간 부분을 확인하고 필요한경우 Explode(분리)함

4) Topology가 적절한지 확인함. 확인안하고 섭디넣다가 이렇게 될수도 있음

5) 그래도 해결되지 않으면 직접 Custom mesh를 수정해 적절히 메쉬를 포함하도록 손봄

...

6) 그래도 해결되지 않으면 포토샵등의 매체를 이용해 덧칠해 수정함 (솔직히 매우비추임)



5) 원통 등의 구조에서 물1결같은(Wavy) 패턴으로 나옴


0ebcc066b7826af223ef81f84682646d732f56fdffc0eeba63043000281f48f77ed4f94ec3d1f6b1a397


원통형 오브젝트 베이킹할때 많이 생김 (예: 하이폴리가 24각기둥이고 로우폴리가 6각기둥임)


이유: 24각형과 6각형의 원주간 거리가 다르듯이 cage와 하이폴리 오브젝트 사이 거리의 차이때문에 생김


해결법: 로우/하이폴리의 괴리가 심할수록 더 부각되는 문제로 명확한 해결법은 없음.

6)과 본질적으로 동일한 문제로 사이에 Edge를 더 추가해서 줄여볼순 있지만 사라지진 않음.

완전 없애려면 로우/하이폴리가 둘다 n각기둥이게 하던가 해야됨



6) 디테일이 왜곡되어(Skewed) 나옴


0ebcc066b7826af223ef81f84682646d732f56feffc5eeba62083503301e5dcdb34cc172dcb9d0e6fd0b54a689d9d1


viewimage.php?id=2fb1d528e1d72a&no=24b0d769e1d32ca73fe980fa11d028315d554368bac55d95d5bf55b6a4862c09e8755b8758357563542ca8e6b37b586ba4cd3e46f89e96b57455b9978eb4a8cc51ac04


말그대로 디테일이 면에 수직이 아니라 skew 되어 보임


이유: Cage만들면서 normal 방향이 왜곡돼서 그럼.

경계에서 노말을 smoothing 시키다보니 원래 면에 수직이어야 했을 노말이 바깥쪽으로 휘어지면서 동시에 projection 방향도 휘어짐.


해결법: 사이에 Edge를 더 추가함.
사이에 면을 더 추가함으로써 왜곡을 유발하는 Edge를 분리시켜 적어도 가운데쪽에선 노말이 수직이게 유지되도록 할수 있음.








-더 참고해 읽어보면 좋을만한것-

http://wiki.polycount.com/wiki/Texture_Baking


추천 비추천

31

고정닉 9

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기
자동등록방지

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 말머리 제목 글쓴이 작성일 조회 추천
3006 설문 여행 같이 다니면 고난이 예상되는 스타는? 운영자 25/04/28 - -
42345 공지 당분간 통피 금지 [3] 건축블렌더갤로그로 이동합니다. 25.02.08 1156 2
30591 공지 블렌더 튜토리얼 / 팁 모음 [12] Ha_rang갤로그로 이동합니다. 23.10.30 24252 25
30588 공지 ★★★★ ★★★★ 질문 전에 제발 꼭 읽기!!★★★★ ★★★★ [11] Ha_rang갤로그로 이동합니다. 23.10.30 16042 29
37470 공지 호출벨 [4] pigen갤로그로 이동합니다. 24.06.16 1953 0
28805 공지 Wenbo zhao 튜토리얼 이벤트 한답니다 [13] x_xvv갤로그로 이동합니다. 23.08.19 6200 15
21846 공지 광고글 관련 공지. [3] pigen갤로그로 이동합니다. 22.12.17 4737 12
43702 일반 여기갤 쓰는 사람들은 모션 종사자들임? 블갤러(61.78) 14:51 5 0
43701 질문 특정 면만 섭디 안 먹이는 방법 있어? [3] 블갤러(183.107) 13:33 31 0
43700 일반 오토웨이트는 ai도입 못하나 [2] 블갤러(14.6) 11:21 53 0
43699 일반 여기서 메쉬에 본을 합치려면 ...? 수염난감자갤로그로 이동합니다. 07:43 42 0
43698 일반 고수님들 지오메트리노드 질문입니다 블갤러(118.36) 06:38 29 0
43697 일반 리깅은 진짜 강의도 자료도 너무 없네 허 [2] 블갤러(122.36) 04:05 94 0
43696 일반 도장만들기 생각보다 쉽네 [1] ㅇㅇ갤로그로 이동합니다. 02:34 82 1
43695 일반 카니발 50%정도 만듦 [1] 블랙배찌갤로그로 이동합니다. 04.30 97 1
43694 질문 블렌더 뉴비 질문점요 [2] 블갤러(116.44) 04.30 84 0
43693 일반 모델링 노트북은 걍 닥치고 에이수스 사면됨? 블갤러(125.130) 04.30 39 0
43692 질문 실내디자인 하는 사람들에게 질문 [11] 블갤러(61.101) 04.30 99 0
43691 일반 태초마을 해버림 [2] 민초피자빵갤로그로 이동합니다. 04.30 124 0
43690 질문 블렌더에서 애니메이션 중력 시뮬레이션 중간 모습을 오브젝트로 바꿀수있나요 블갤러(112.168) 04.30 68 0
43689 일반 랜더뷰아이콘 사라짐 [1] 블갤러(112.164) 04.30 68 0
43688 질문 이런모양으로 두깨감 일정하게 구부리고싶은데 뭐눌러야해요? [1] 롤랑갤로그로 이동합니다. 04.30 81 0
43687 질문 블렌더에 쓰려고 스페이스마우스 사는거 배보다 배꼽이 큰가 [2] ㅇㅇ갤로그로 이동합니다. 04.30 91 0
43686 일반 블렌더 하면서 찍어본 사진들 모음1 il13345갤로그로 이동합니다. 04.30 218 5
43685 일반 30일 첼린지좌 응곤- 발음이 웃김 [1] 인터넷친구갤로그로 이동합니다. 04.30 94 0
43684 일반 smart fill 애드온 쓰는사람 있나여 블갤러(203.251) 04.30 41 0
43683 일반 이거 쇼파 흰색으로 어떻게함?? [4] 블갤러(211.104) 04.30 91 0
43682 질문 블렌더 스컲팅 할때 뭐 쓰시나요? [1] 노라상어8갤로그로 이동합니다. 04.30 44 0
43681 일반 님들 블랜더는 이런 녹화기능 없나요? [1] 블갤러(118.36) 04.30 70 0
43680 강좌/ 꿀팁) 챗지피티가 짜준 파이썬 코드는 python 콘솔에 복붙하지 말것 [2] 블갤러(1.242) 04.30 217 9
43679 질문 형들 블린이인데 커브랑 패스랑 뭐가 다른거임?? [1] 블갤러(119.193) 04.29 56 0
43678 질문 차 도장?을 씌우고 싶은데 무슨 공부를 하면될까요 [4] ㅇㅇ갤로그로 이동합니다. 04.29 130 0
43677 질문 마야-언리얼 워크플로우 관련 튜토리얼 ㅊㅊ좀 ㅇㅇ갤로그로 이동합니다. 04.29 33 0
43676 일반 이거 뭐가 문제일까 [2] 민초피자빵갤로그로 이동합니다. 04.29 147 0
43675 일반 1일차 [4] 초보자1(116.125) 04.29 129 1
43674 일반 단추게이 함 보고가 [2] 마리는바닐라향갤로그로 이동합니다. 04.29 144 1
43673 질문 30일 챌린지 1일차에서 문제가 생겼는데 도움좀... [3] 블갤러(118.223) 04.29 143 0
43672 일반 흙수저 컴퓨터 세팅 부탁드립니다. [3] 블갤러(218.156) 04.29 92 0
43670 일반 체인이 늘어나는 애니메이션 리깅에 문제가 생겼는데 도움 부탁드립니다.. [2] 블붕이(211.228) 04.29 97 0
43669 질문 블렌더는 Retriangulate 없음? [3] 블갤러(125.143) 04.29 113 0
43668 질문 Quad Remesher 이거 월정액 아님? [2] ㅇㅇ(121.155) 04.29 129 0
43667 일반 초보) 단추만들기 생각보다 복잡하네 피드백좀 [10] 솔라리아_갤로그로 이동합니다. 04.29 195 0
43666 질문 믹사모가 그렇게 리깅을 잘 해줌? [2] 젠장갤로그로 이동합니다. 04.29 145 0
43665 일반 블렌더 아바타 페이셜 질문입니다 [6] 블갤러(39.115) 04.29 159 0
43664 일반 블린이 9일차 땅크만드는중 [3] 엘큼갤로그로 이동합니다. 04.29 168 2
43663 일반 실시간 블붕이 ㅈ됐다 [1] 블갤러(210.123) 04.28 153 0
43661 일반 블렌더뉴비 씹덕캐 스컬핑 해보는중 [2] 블갤러(125.128) 04.28 155 0
43660 질문 페이셜받았는데 수정 [1] 블갤러(121.163) 04.28 52 0
43659 작품 뷰석 블갤러(58.140) 04.28 91 2
43658 질문 edge를 vertice로 자르는 법? [1] 블갤러(211.201) 04.28 74 0
43657 일반 역시 차는 바퀴가 있어야되 [6] 민초피자빵갤로그로 이동합니다. 04.28 158 0
43656 일반 챗지피티 단점 [1] 블갤러(211.201) 04.28 106 3
43655 일반 왕초보들에게 블렌더를 가르치게 됐는데 커리큘럼좀 봐줄래 [3] 블갤러(175.198) 04.28 162 0
43653 질문 다른 오브젝트끼리 버텍스 머지안되는거 왜이럼? [8] 사랑해요!갤로그로 이동합니다. 04.28 149 0
43652 일반 블렌더 해봤음 [4] 블갤러(125.128) 04.28 270 3
43650 질문 a 단축키 누르면 여러개가 뜨는데 어떻게 해결해야하나요 ㅇㅇ(211.108) 04.27 76 0
43649 일반 카니발 20%정도 만듦 [2] 블랙배찌갤로그로 이동합니다. 04.27 171 2
뉴스 레드벨벳 예리, 주지훈과 한솥밥… 블리츠웨이 行 디시트렌드 10:00
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2