Ch2-3. 지형과 식물 : 랜드스케이프 - 페인트, 머테리얼, UV 좌표, 노말맵, 레이어 인포

Date:     Updated:

카테고리:

태그:

인프런에 있는 배틀로얄 게임을 만들어보며 배우는 언리얼 게임 개발 강의를 듣고 정리한 필기입니다. 😀 강의 들으러 가기


Chapter 2. 지형과 식물

랜드스케이프 - 페인트

페인트 모드를 사용하기 위해선 랜스스케이프용 머터리얼 만들고, 랜드스케이프에 넣어주어야 한다. 그래야 해당 머테리얼의 텍스처들을 읽어와서 그 텍스처로 색과 질감을 칠할 수가 있게 된다.

🚀 랜드스케이프용 머테리얼 만들기

✈ 텍스처 임포트 하기

머테리얼을 만들기 위해선 사용할 텍스처들이 필요하다. .TGA 확장자.

image

푸르딩딩 한 것들은 노말맵이고 다른 것들은 텍스처다. 텍스처들을 임포트 해온다.


✈ 머테리얼 만들기

콘텐츠 브라우저에서 우클 - 머테리얼 생성 하여 머테리얼을 만들어준다. 그리고 해당 머테리얼에 위에서 임포트할 4 개의 텍스처와 4 개의 노말 맵들을 이렇게 임포트 한다.

image

image

임포트한 4 개의 텍스처 + 4 개의 노말 맵들과 최종적으로 만들어질 머테리얼 노드이다. 이 텍스처 노드들과 두 번째 사진같은 Landscape 관련 다른 노드들과 결합하여 M_Jungle 머테리얼의 베이스 컬러, Metallic, 러프니스 등등을 연결하여 결정할 것이다. 텍스처와 노말맵들은 드래그 해서 머테리얼에 드롭 하면 간단하게 가져올 수 있다.


UV 좌표(LandscapeCords)

image

텍스처의 좌표를 UV 좌표라고 한다.

  • 텍스처 이미지를 3차원 공간의 폴리곤에 입히기 위해 변환 기준이 되는 2차원 좌표계다.
    • 좌표값들은 0 ~ 1 사이의 float 값(비율)으로 표현한다.
    • 엔진마다 (0,0) 원점의 기준이 다르다. 유니티의 경우 좌측 하단이 원점이고, 언리얼의 경우 좌측 상단이 원점이다.
  • 3 D 모델을 u, v 이렇게 2 개의 축(0~1)을 가지는 2 차원 그림으로 나타낸 것이라고 생각하면 될 것 같다.
    • 지구를 uv 매핑하면 세계 지도가 되고, 정육면체를 uv 매핑하면 전개도가 되듯이.
  • 출처 위키 백과 UV 매핑

image

  • LandscapeCords 노드를 통해 랜드스케이프 터레인에 머티리얼 망을 매핑시킬 수 있다.
    • 이를 통해 텍스처들의 UV 에 연결시켜준다.
    • 이제 각 텍스처들이 이 노드의 설정값 대로 매핑이 되게 된다.

image

image

LandscapeCords의 디테일 패널에서 Mapping Scale 값을 0 에서 5 로 UV를 키워주니 위와 같이 자잘자잘했던 지형의 패턴이 커져 더 자연스러워졌다. 격자 하나하나가 다 텍스처다.


머터리얼의 베이스 컬러(LandscapeLayerBlend)

image

  • 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 👉 모래 텍스처
  • 이렇게 레이어를 사용하여 텍스처를 관리하면 가중치를 줄 수 있다.
    • 가중치가 높은 텍스처일 수록 가장 위에 칠해진다.
    • 레이어를 여럿 블렌딩하여 최종 텍스처를 입힌 터레인을 만들어 낼 수 있다.
  • 이렇게 4 개의 레이어를 블렌딩한 이 LandscapeLayerBlend 노드를 머테리얼의 베이스 컬러에 연결한다.
    • 머테리얼의 전반적인 색 정의
랜드스케이프에 머터리얼 적용하기

image

랜드스케이프 액터에 여태 만든 머터리얼을 저장한 후 (반드시 미리 저장해야 반영이 된다) Landscape Material에 할당한다.

image

그러면 이렇게 페인트를 랜드스케이프에 칠할 수 있게 된다. LandscapeLayerBlend 노드를 통해 만들었던 4 개의 텍스처 레이어 들이 이렇게 반영된다.

레이어 인포

image

텍스처 레이어의 + 버튼을 누르면 레이어 인포 오브젝트를 생성할 수 있다. 레이어 인포 오브젝트란 랜드스케이프 레이어에 대한 정보가 들어있는 애셋이다. 모든 랜드스케이프 레이어에는 레이어 인포 오브젝트가 할당되어 있지 않고서는 페인트가 불가능하다.

  • 레이어 인포 유형
    • 1️⃣ 웨이트 블렌딩된 레이어(Weight-Blended)
      • 일반적으로 이 유형을 사용한다.
      • 레이어 순서에 상관 없이 마지막에 칠한 텍스처가 가장 가중치가 높다고 판단되어 렌더링 된다.
      • 웨이트 블렌딩된 레이어는 일반적인 유형의 레이어로 서로 영향을 끼칩니다: 웨이트 블렌딩된 레이어를 칠하면 다른 모든 웨이트 블렌딩된 레이어의 웨이트를 낮춥니다. 예를 들어, 진흙을 칠하면 풀밭이 제거되고, 풀밭을 칠하면 진흙이 제거됩니다.
    • 2️⃣ 웨이트 블렌딩 되지 않은 레이어(Non Weight-Blended)
      • 포토샵 레이어 같은 유형
      • 레이어 순서와 상관 있다. 현재 가장 밑에 있는 레이어는 3 레이어인 Sand 이다. Sand 가 보이려면 위의 3 개의 텍스처는 칠해지지 않아야 한다.
      • 웨이트 블렌딩되지 않은 레이어는 서로간에 독립적이어서, 하나를 칠해도 다른 레이어의 웨이트에 영향을 끼치지 않습니다. 좀 더 고급 이펙트에 사용되는데, 이를테면 눈을 다른 레이어에 블렌딩할 때, 풀이냐 진흙이냐 돌이냐 눈이냐 하는 대신, 웨이트 블렌딩되지 않은 눈 레이어를 사용하여 “풀, 진흙, 돌” 과 "눈덮인 풀, 눈덮인 진흙, 눈덮인 돌" 사이를 블렌딩할 수 있습니다.

image

이렇게 각각의 4 개의 레이어 인포 오브젝트가 생겼고, 레이어에 할당된 것을 확인할 수 있다.

image

레이어에 우클을 하면 “레이어 채우기”가 있는데 이걸 누르면 해당 텍스처 레이어로 랜드스케이프가 100% 칠해진다.


머터리얼의 Metalic (+ 상수 노드)

image

표면이 얼마나 빤딱빤딱한 금속 같은지. 랜드스케이프를 금속처럼 표현하진 않을 것이므로 상수 0 을 연결해준다.

  • 상수를 추가하려면 1번키 + 좌클 하면 상수 노드를 추가할 수 있다.
    • 상수 값은 디테일 패널에서 설정할 수 있다.


머터리얼의 러프니스

image

러프니스는 머터리얼의 거친 정도. 부드럽고 0 에 가까울 수록 거울처럼 반사되고, 거칠고 1 에 가까울 수록 무광이다.

해당 텍스처 에셋에서 Grass 빼고 나머지 3 개의 텍스처의 알파A 값엔 러프니스 값이 설정이 되어 있어 이를 끌어오면 됐었다. Grass 는 러프니스 값을 0.9 로 설정했다. 러프니스 또한 이 4 개의 텍스처를 LandscapeLayerBlend 로 블렌딩하여 이를 머터리얼의 러프니스에 연결한다. 기존에 만들어둔 풀, 자갈, 잎, 모래 레이어의 러프니스으로 연결지어주는 것이다.


머터리얼의 오파시티 마스크(Landscape Visibility Mask)

image

  • 머테리얼 노드의 디테일 패널에서 Blend Mode 를 Masked 로 변경하면 오파시티 마스크 입력 핀이 활성화 된다.
    • 머터리얼을 완전히 보이게 하거나 투명하게(뚫려있게) 하거나 할 수 있다.

image

  • LandscapeVisibilityMask 노드를 추가하여 오파시티 마스크에 연결해준다.

image

원래는 이렇게 컴포넌트 단위로만 삭제를 할 수 있었지만…

image

위와 같이 Masked 모드로 하고, LandscapeVisibilityMask 노드까지 추가하여 연결해주고나면 이렇게 조각 모드에서 비저빌리티 모드를 사용할 수 있게 된다. 이 모드로 랜드스케이프를 칠하면 저렇게 내가 칠한 모양 그대로 투명하게(랜드스케이프 뚫게)할 수 있다. 동굴 입구를 만들거나 낙사 지점을 만들거나 등등 유용하게 사용할 수 있을 것 같다.

  • shitf로 다시 메꿀 수도 있다.


머터리얼의 노말

image

4 개의 노말맵도 LandscapeLayerBlend 로 블렌딩하여 머테리얼의 Normal에 연결해준다. 기존에 만들어둔 풀, 자갈, 잎, 모래 레이어의 노말맵으로 연결지어주는 것이다.

노말맵이란?

포프님 유튜브.

image

노말맵이란 👉 울퉁 불퉁함을 보여주기 위해서 모델 위에 씌여지는 특별한 텍스처 이미지

나무위키 曰 노말 맵핑 (Normal Mapping)은 폴리곤의 법선 벡터 (Normal Vector)의 값을 사용하여 로우 폴리곤의 그래픽 환경에서 입체감 및 질감을 구현하는 방법이다. 물체의 질감을 폴리곤으로 표현하기엔 연산량을 많이 차지하는데 이걸 텍스쳐로 대신하는 표현해주는 일종의 “눈속임” 기술이다. 물체의 표면에 굴곡이 있을 때 그 굴곡 때문에 표면의 방향이 바뀌고 그 방향에 따라 빛이 다르게 반사되기 때문에 보는 사람이 그 굴곡을 느낄 수 있다. 결국 표면 질감에서 중요한건 진짜 굴곡이 아닌 반사각이기 때문에 3D그래픽으로 물체를 표현할 때 표면을 실제로 굴곡이 있는 형태로 만들지 않고, 평면으로 만들고 그 위에 어떤 각도로 보일지 그려놓으면 하나의 폴리곤으로 굴곡이 있는 표면을 표현할 수 있다. 라고 한다. 출처 : 나무위키 노말 매핑 문서

  • 진짜로 모델을 울퉁불둥하게 세밀하게 만들어버리면 폴리곤 수가 너무 많아지고 라이트 연산이 어마어마 할 것이다. 성능도 떨어지게 된다.
    • 따라서 폴리곤을 늘리지 않고 텍스처 이미지(노말맵)에 울퉁 불퉁한 정보들을 하나의 2D 그림(노말맵)에 저장해두고 이를 통하여 빛 연산을 계산한다.
  • 푸르딩딩한 파란색인 텍스처 맵이다.
    • 노말 맵은 울퉁불퉁함 즉, 들어가고 나오고에 대한 정보를 가진다. 따라서 0 ~ 1 의 Z 값을 가진다. (바깥 표면 계산이므로 사실 들어간 부분에 대한 정보는 넣지 않는다. 즉 음수는 없음)
    • XYZ 를 RGB 에 대응시키면 Z 는 B 에 대응되어 Z 가 Blue 가 되버린 것 뿐이다.
      • -1~1 을 0~255 에 대응시키는데 사실상 음수는 쓰이지 않으므로 대략 127~128 정도부터가 z = 0 에 대응한다.
  • 레드 하이라이트가 어느쪽에 생기는지에 따라 노말 X 방향이 어딘지도 알고 그린 하이라이트가 어느 방향으로 생기는지에 따라 노발 Y 방향도 알 수 있다.
    • Y 컴포넌트 하이라이트를 뒤집어서 아티스트가 보기 쉽게 해주기도 한다.


image

이렇게 랜드스케이프 머테리얼 완성



🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

UE4 Lesson 3 카테고리 내 다른 글 보러가기

댓글 남기기