귀령단/개발노트

22년 3월 1일 개발노트

문종식[지마] 2022. 3. 10. 21:14

개발일지를 개발노트로 명칭을 바꿔야겠다. 일지는 뭔가 나만을 위한 일기장 같은 느낌인데.

노트는 내가 하루동안 개발을 하면서 겪었던 시행착오, 새롭게 배운 것들을 기록해둬서

추후에 참고할 수 있는 용도로 쓸수있고, 그리고 더 나아가 비슷한 작업을 하는 사람들에게 조금이나마 도움이 될수 있을 수 있으니까. 뭐 사실 명칭이야 일지나 노트나 내용만 잘 채우면 상관 없겠다만

그래도 노트라는 명칭이 마음이 간다.

지금까지 나는 개발일지를 게임의 홍보목적으로 생각했다.

하지만 생각해보면, 게임을 홍보를 하는데에 있어서는 큰 내용이 필요없다.

시각적으로 이목을 끌만한 요소와 그를 설명하는 짧은 글귀 몇 개면 충분하다.

사람은 몇 초안에 이 게임에 관심을 가질 건지 말 것인지 판단 할 수 있고,

긴 글은 오히려 그 판단 가능성을 악화시키기 때문이기에.

따라서 오늘부터 개발노트를 작성을 시작하겠다.

큰 문제가 없으면 개발을 하면서 틈틈히 기록을 해두어서

매일 포스팅할 수 있도록 해야지.

일단 과거 노트부터 업데이트하겠다.


언리얼 Landscape - Height map에 관해서

게임 배경이 한국인 만큼, 산이 많은 한국의 지형 데이터를 Heightmap으로 추출해서 Landscape에 적용하고 싶어서 관련 사항을 알아보았다. 손으로 스컲팅해서 지형을 만드는 건 애초에 고려하지 않았다. (이 때에는 Unity Landmass에 대해서 몰랐던 상태. Landmass를 활용하면 스컲팅이 가능할수도.)

  • Heightmap 추출을 하기위해서 인터넷에서 구할 수 있는 지형자료(위성데이터)는 DEM데이터라고한다.
  • DEM (수치표고모델) 데이터는 일종의 Heightmap으로서 지형의 높낮이 데이터를 포함한 이미지 파일이다.
  • 이 이미지를 활용하여 원하는 곳의 지형데이터를 Heightmap으로게임엔진에 적용할 수 있다.
  • DEM 데이터는 해상도가 매우 중요하다.
    • 아마 최소 10m 단위를 기준으로 한 데이터라면 좋은 해상도라고 보일 수 있음.
    • 한국 같은 경우, 정부의 통제로, 90m 해상도의 DEM 파일만 공개되어 활용할 수 있다고 한다.
    • 현재 Copernicus DEM은 세계 데이터를 30m까지 표현한다고 한다.
    • 래서 이곳에 계정도 만들고 사이트에 접속했으나 이상하게 DEM 관련데이터를 받으려고 하면 Access Denied가 뜨면서 아예 시도조 차 못하게 되어있다. 한국 지형데이터는 쓸만한 걸 구하는게 아직 이 시점에서는 (아마 앞으로도) 어렵다는 결론을 내린다.
유럽우주청에서 전 세계 30m 해상도의 Copernicus DEM(정확히는 DSM)인 GLO-30을 공개하기로 했다는 소식입니다. 분쟁국으로 보이는 몇몇 나라는 공개대상에서 제외됐지만 찾아보니 한반도는 모두 공개대상이네요. 미국의 SRTM DEM, GDEM, 일본의 ALOS DEM 등도 모두 전 세계의 30m 해상도 DEM(DSM)을 제공합니다. 아, 우리 세금으로 운영되는 국토지리정보원에서는 90m 해상도의 DEM만을 국민에게 제공합니다. 이건 국토지리정보원 탓이 아닌 게 국정원에서 90m 이상의 고해상도 DEM은 공개 못하게 하고 있거든요. 비싼 세금은 한국에 내고 고정밀 공간정보는 외국 것을 쓰라는 나랏님의 깊은 뜻입니다.

출처:
*https://endofcap.tistory.com/1926*
[하늘맑은 세상]
관련 링크 :
https://spacedata.copernicus.eu/web/cscda/cop-dem-faq
https://www.youtube.com/watch?v=OpEpjCbuzAU&t=5s

언리얼 Landscape - Height map에 관해서(2부)

언리얼 Landscape 파이프라인에 대해 며칠간 계속 연구를 진행했다.

자료는 Youtube와 Wingfox. 늘 느끼는 거지만 인터넷에는 정말 공부할 자료가 무궁무진하다.

그리고 유니티에 비해서 체계적으로 정리되어있는 자료들이 더 많은 것 같고,

언리얼을 접할 때마다 유니티에서 아쉬웠던 부분들이 잘 보완이 되어있는 것을 보고 (그 반대도 물론 있겠지만)

언리얼의 매력에 푹 빠져잇다.

특히 블루프린트의 강점을 이제야 체감할 수 있게 되었고,

Landscape도 여러가지로 참 많은 부분을 고려해서 만들어졌음을 이번 공부 때 알게 되었다.

(하지만 불안정한 부분들도 무진장 많다. 기능이 너무 많은것도 문제다.)

 

다시 본론으로 돌아가서, 지형데이터를 활용하는 것은 거의 필수적으로 고려되어야 할 부분이라고 생각이 되는데, 아쉽게도 한국은 지형데이터를 추출하기에 매우 어려운 상황이다.

그렇다고 주변국의 상황도 보았지만 주변국이면 북한 일본 중국이다. 있을리가 있나 ㅎㅎ

어쨌던 결국은 지형 데이터를 직접 만들어야했다.

 

지형데이터는 노드기반의 Procedural 방식으로 제작을 한다.

World machine, Gaea 등 여러 프로그램들이 있는데, 이번에는 Wingfox에서 제공하는 튜토리얼을 따라

이전에 얼핏 들어본적 있는 Gaea라는 프로그램에 대해 알아보았다.

Procedural 방식이다보니, 이쪽 분야도 파고들면 들수록 서로 비슷한 점이 많아서, 접근난이도는 그리 높지 않았다.

관련링크 :
https://www.wingfox.com/c/8531

기본적인 적용방식은 Gaea 같은 3rd party software에서 지형 Heightmap 제작 + 텍스처링을 위해 활용할 수 있는 마스크맵을

최대한 다양하게 제작 → Quixel, Substance painter과 같은 텍스처링 프로그램을 활용해서 마스크맵에 해당되는 텍스처들을 제작 → 언리얼로 임포트해서 Heightmap 적용 및 텍스처링 작업 (마스크를 활용해서 텍스처를 원하는 곳에 배치)

 

따라서 최대한 수작업은 피하고, Procedural 접근법을 사용해서 보다 실제적으로, 효율적으로 텍스처링을 하는 것이다.

생각보다 결과물 퀄리티도 훌륭하고, 작업시간도 길지 않다. (물론 목표에 따라 다르겠지만 ㅎ)

 

위 작업을 하면서 첫번째로 겪었던 이슈는 원하는 크기의 landscape가 내가 만든 Height map으로 부터 추출 되어야 했다.

(최적화는 둘째치고..)

예를 들면 내가 원하는 맵의 크기는 5km x 5km짜리인데.

그렇다면 어떻게 Heightmap을 추출해야하는 가하는 문제인 것이다.

조금 찾아본 결과, heightmap의 크기 1px = 1m로 이해를 하면 되고,

높이의 경우에는 landscape의 Z 축 Scale 값에 따라서 확인을 해줘야하는 것 같다.

언리얼 엔진도 1x1x1 cube가 1m이니, 타깃 높이와 크기가 있다면 비교하면서 조정해주는 것은 어렵지 않다.

 

위 자료는 , 언리얼 Landscape에 원하는 높이를 적용할 수 있을 때 쓸수 있는 공식. 하와이의 마우나 케나 산을 예제로 설명하고 있다.(언리얼 공식문서)

 

Gaea에서 지형생성 후, 언리얼로 임포트한 모습. 다음은 원하는 텍스처를 Landscape에 페인팅하는 기능과 Tessellation 그리고 간략한 최적화까지 진행을 해야하는 순서이다.