Ch2-3. 지형과 식물 : 랜드스케이프 - 페인트, 머테리얼, UV 좌표, 노말맵, 레이어 인포
카테고리: UE4 Lesson 3
태그: UE4 Game Engine
인프런에 있는 배틀로얄 게임을 만들어보며 배우는 언리얼 게임 개발 강의를 듣고 정리한 필기입니다. 😀 강의 들으러 가기
Chapter 2. 지형과 식물
랜드스케이프 - 페인트
페인트 모드를 사용하기 위해선 랜스스케이프용 머터리얼 만들고, 랜드스케이프에 넣어주어야 한다. 그래야 해당 머테리얼의 텍스처들을 읽어와서 그 텍스처로 색과 질감을 칠할 수가 있게 된다.
🚀 랜드스케이프용 머테리얼 만들기
✈ 텍스처 임포트 하기
머테리얼을 만들기 위해선 사용할 텍스처들이 필요하다.
.TGA
확장자.
푸르딩딩 한 것들은 노말맵이고 다른 것들은 텍스처다. 텍스처들을 임포트 해온다.
✈ 머테리얼 만들기
콘텐츠 브라우저에서 우클 - 머테리얼 생성 하여 머테리얼을 만들어준다. 그리고 해당 머테리얼에 위에서 임포트할 4 개의 텍스처와 4 개의 노말 맵들을 이렇게 임포트 한다.
임포트한 4 개의 텍스처 + 4 개의 노말 맵들과 최종적으로 만들어질 머테리얼 노드이다. 이 텍스처 노드들과 두 번째 사진같은 Landscape 관련 다른 노드들과 결합하여 M_Jungle
머테리얼의 베이스 컬러, Metallic, 러프니스 등등을 연결하여 결정할 것이다. 텍스처와 노말맵들은 드래그 해서 머테리얼에 드롭 하면 간단하게 가져올 수 있다.
UV 좌표(LandscapeCords)
텍스처의 좌표를
UV 좌표
라고 한다.
- 텍스처 이미지를 3차원 공간의 폴리곤에 입히기 위해 변환 기준이 되는 2차원 좌표계다.
- 좌표값들은 0 ~ 1 사이의 float 값(비율)으로 표현한다.
- 엔진마다 (0,0) 원점의 기준이 다르다. 유니티의 경우 좌측 하단이 원점이고, 언리얼의 경우 좌측 상단이 원점이다.
- 3 D 모델을 u, v 이렇게 2 개의 축(0~1)을 가지는 2 차원 그림으로 나타낸 것이라고 생각하면 될 것 같다.
- 지구를 uv 매핑하면 세계 지도가 되고, 정육면체를 uv 매핑하면 전개도가 되듯이.
- 출처 위키 백과 UV 매핑
- LandscapeCords 노드를 통해 랜드스케이프 터레인에 머티리얼 망을 매핑시킬 수 있다.
- 이를 통해 텍스처들의 UV 에 연결시켜준다.
- 이제 각 텍스처들이 이 노드의 설정값 대로 매핑이 되게 된다.
LandscapeCords의 디테일 패널에서 Mapping Scale 값을 0 에서 5 로 UV를 키워주니 위와 같이 자잘자잘했던 지형의 패턴이 커져 더 자연스러워졌다. 격자 하나하나가 다 텍스처다.
머터리얼의 베이스 컬러(LandscapeLayerBlend)
- LandscapeLayerBlend 노드를 통해 4 개의 텍스처맵을 각각 4 개의 레이어로 만들어 블렌딩한다.
- LandscapeLayerBlend 노드는 다수의 다수의 텍스처 또는 머티리얼 망을 서로 블렌딩하여 랜드스케이프 레이어로 사용할 수 있게끔 만들어준다.
- LandscapeLayerBlend 노드를 클릭한 상태로 디테일 패널에 가면
- 이렇게 Layers 배열에 레이어들을 추가할 수 있다.
- 0 레이어 : Grass
- 1 레이어 : Gravel
- 2 레이어 : Leaf
- 3 레이어 : Sand
- 만든 각각의 레이어들이 LandscapeLayerBlend의 입력핀으로 생기게 된다. 이에 4 개의 텍스처들을 연결한다. 4 개의 텍스처를 각각 4 개의 레이어로 관리한다.
- 0 레이어 : Grass 👉 풀 텍스처
- 1 레이어 : Gravel 👉 자갈 텍스처
- 2 레이어 : Leaf 👉 잎 텍스처
- 3 레이어 : Sand 👉 모래 텍스처
- 이렇게 Layers 배열에 레이어들을 추가할 수 있다.
- 이렇게 레이어를 사용하여 텍스처를 관리하면 가중치를 줄 수 있다.
- 가중치가 높은 텍스처일 수록 가장 위에 칠해진다.
- 레이어를 여럿 블렌딩하여 최종 텍스처를 입힌 터레인을 만들어 낼 수 있다.
- 이렇게 4 개의 레이어를 블렌딩한 이 LandscapeLayerBlend 노드를 머테리얼의 베이스 컬러에 연결한다.
- 머테리얼의 전반적인 색 정의
랜드스케이프에 머터리얼 적용하기
랜드스케이프 액터에 여태 만든 머터리얼을 저장한 후 (반드시 미리 저장해야 반영이 된다) Landscape Material
에 할당한다.
그러면 이렇게 페인트를 랜드스케이프에 칠할 수 있게 된다. LandscapeLayerBlend 노드를 통해 만들었던 4 개의 텍스처 레이어 들이 이렇게 반영된다.
레이어 인포
텍스처 레이어의 +
버튼을 누르면 레이어 인포 오브젝트를 생성할 수 있다. 레이어 인포 오브젝트란 랜드스케이프 레이어에 대한 정보가 들어있는 애셋이다. 모든 랜드스케이프 레이어에는 레이어 인포 오브젝트가 할당되어 있지 않고서는 페인트가 불가능하다.
- 레이어 인포 유형
- 1️⃣ 웨이트 블렌딩된 레이어(Weight-Blended)
- 일반적으로 이 유형을 사용한다.
- 레이어 순서에 상관 없이 마지막에 칠한 텍스처가 가장 가중치가 높다고 판단되어 렌더링 된다.
- 웨이트 블렌딩된 레이어는 일반적인 유형의 레이어로 서로 영향을 끼칩니다: 웨이트 블렌딩된 레이어를 칠하면 다른 모든 웨이트 블렌딩된 레이어의 웨이트를 낮춥니다. 예를 들어, 진흙을 칠하면 풀밭이 제거되고, 풀밭을 칠하면 진흙이 제거됩니다.
- 2️⃣ 웨이트 블렌딩 되지 않은 레이어(Non Weight-Blended)
- 포토샵 레이어 같은 유형
- 레이어 순서와 상관 있다. 현재 가장 밑에 있는 레이어는 3 레이어인 Sand 이다. Sand 가 보이려면 위의 3 개의 텍스처는 칠해지지 않아야 한다.
- 웨이트 블렌딩되지 않은 레이어는 서로간에 독립적이어서, 하나를 칠해도 다른 레이어의 웨이트에 영향을 끼치지 않습니다. 좀 더 고급 이펙트에 사용되는데, 이를테면 눈을 다른 레이어에 블렌딩할 때, 풀이냐 진흙이냐 돌이냐 눈이냐 하는 대신, 웨이트 블렌딩되지 않은 눈 레이어를 사용하여 “풀, 진흙, 돌” 과 "눈덮인 풀, 눈덮인 진흙, 눈덮인 돌" 사이를 블렌딩할 수 있습니다.
- 1️⃣ 웨이트 블렌딩된 레이어(Weight-Blended)
이렇게 각각의 4 개의 레이어 인포 오브젝트가 생겼고, 레이어에 할당된 것을 확인할 수 있다.
레이어에 우클을 하면 “레이어 채우기”가 있는데 이걸 누르면 해당 텍스처 레이어로 랜드스케이프가 100% 칠해진다.
머터리얼의 Metalic (+ 상수 노드)
표면이 얼마나 빤딱빤딱한 금속 같은지. 랜드스케이프를 금속처럼 표현하진 않을 것이므로 상수 0 을 연결해준다.
- 상수를 추가하려면
1번키 + 좌클
하면 상수 노드를 추가할 수 있다.- 상수 값은 디테일 패널에서 설정할 수 있다.
머터리얼의 러프니스
러프니스는 머터리얼의 거친 정도. 부드럽고 0 에 가까울 수록 거울처럼 반사되고, 거칠고 1 에 가까울 수록 무광이다.
해당 텍스처 에셋에서 Grass 빼고 나머지 3 개의 텍스처의 알파A
값엔 러프니스 값이 설정이 되어 있어 이를 끌어오면 됐었다. Grass 는 러프니스 값을 0.9 로 설정했다. 러프니스 또한 이 4 개의 텍스처를 LandscapeLayerBlend 로 블렌딩하여 이를 머터리얼의 러프니스에 연결한다. 기존에 만들어둔 풀, 자갈, 잎, 모래 레이어의 러프니스으로 연결지어주는 것이다.
머터리얼의 오파시티 마스크(Landscape Visibility Mask)
- 머테리얼 노드의 디테일 패널에서 Blend Mode 를 Masked 로 변경하면
오파시티 마스크
입력 핀이 활성화 된다.- 머터리얼을 완전히 보이게 하거나 투명하게(뚫려있게) 하거나 할 수 있다.
- LandscapeVisibilityMask 노드를 추가하여 오파시티 마스크에 연결해준다.
원래는 이렇게 컴포넌트 단위로만 삭제를 할 수 있었지만…
위와 같이 Masked 모드로 하고, LandscapeVisibilityMask 노드까지 추가하여 연결해주고나면 이렇게 조각 모드에서 비저빌리티 모드를 사용할 수 있게 된다. 이 모드로 랜드스케이프를 칠하면 저렇게 내가 칠한 모양 그대로 투명하게(랜드스케이프 뚫게)할 수 있다. 동굴 입구를 만들거나 낙사 지점을 만들거나 등등 유용하게 사용할 수 있을 것 같다.
shitf
로 다시 메꿀 수도 있다.
머터리얼의 노말
4 개의 노말맵도 LandscapeLayerBlend 로 블렌딩하여 머테리얼의 Normal
에 연결해준다. 기존에 만들어둔 풀, 자갈, 잎, 모래 레이어의 노말맵으로 연결지어주는 것이다.
노말맵이란?
포프님 유튜브.
노말맵이란 👉 울퉁 불퉁함을 보여주기 위해서 모델 위에 씌여지는 특별한 텍스처 이미지
나무위키 曰 노말 맵핑 (Normal Mapping)은 폴리곤의 법선 벡터 (Normal Vector)의 값을 사용하여 로우 폴리곤의 그래픽 환경에서 입체감 및 질감을 구현하는 방법이다. 물체의 질감을 폴리곤으로 표현하기엔 연산량을 많이 차지하는데 이걸 텍스쳐로 대신하는 표현해주는 일종의 “눈속임” 기술이다. 물체의 표면에 굴곡이 있을 때 그 굴곡 때문에 표면의 방향이 바뀌고 그 방향에 따라 빛이 다르게 반사되기 때문에 보는 사람이 그 굴곡을 느낄 수 있다. 결국 표면 질감에서 중요한건 진짜 굴곡이 아닌 반사각이기 때문에 3D그래픽으로 물체를 표현할 때 표면을 실제로 굴곡이 있는 형태로 만들지 않고, 평면으로 만들고 그 위에 어떤 각도로 보일지 그려놓으면 하나의 폴리곤으로 굴곡이 있는 표면을 표현할 수 있다. 라고 한다. 출처 : 나무위키 노말 매핑 문서
- 진짜로 모델을 울퉁불둥하게 세밀하게 만들어버리면 폴리곤 수가 너무 많아지고 라이트 연산이 어마어마 할 것이다. 성능도 떨어지게 된다.
- 따라서 폴리곤을 늘리지 않고 텍스처 이미지(노말맵)에 울퉁 불퉁한 정보들을 하나의 2D 그림(노말맵)에 저장해두고 이를 통하여 빛 연산을 계산한다.
- 푸르딩딩한 파란색인 텍스처 맵이다.
- 노말 맵은 울퉁불퉁함 즉, 들어가고 나오고에 대한 정보를 가진다. 따라서 0 ~ 1 의
Z
값을 가진다. (바깥 표면 계산이므로 사실 들어간 부분에 대한 정보는 넣지 않는다. 즉 음수는 없음) - XYZ 를 RGB 에 대응시키면 Z 는 B 에 대응되어 Z 가 Blue 가 되버린 것 뿐이다.
- -1~1 을 0~255 에 대응시키는데 사실상 음수는 쓰이지 않으므로 대략 127~128 정도부터가 z = 0 에 대응한다.
- 노말 맵은 울퉁불퉁함 즉, 들어가고 나오고에 대한 정보를 가진다. 따라서 0 ~ 1 의
- 레드 하이라이트가 어느쪽에 생기는지에 따라 노말 X 방향이 어딘지도 알고 그린 하이라이트가 어느 방향으로 생기는지에 따라 노발 Y 방향도 알 수 있다.
- Y 컴포넌트 하이라이트를 뒤집어서 아티스트가 보기 쉽게 해주기도 한다.
이렇게 랜드스케이프 머테리얼 완성
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기