귀령단/개발일지

[귀령단] 공식개발일지#003

문종식[지마] 2022. 8. 29. 17:13

 

안녕하세요. 데이브릭 스튜디오입니다! 주말 잘 보내셨나요?

현재 개발 중인 게임 [귀령단] 프로젝트의 환경구축에 관한 일지를 정리해보려고 합니다.

이번 포스팅은 기술적인 내용들이 많게 될 것 같습니다.

(난이도가 높지는 않아요!)

 


 

[목표수립 및 접근법]

세계를 많이 돌아다녀본 것은 아니지만, 각 나라는 그 고유의 지형 특성이 어울려져서

그 특유의 분위기를 만들어내는 것 같습니다.

한국 또한, 국토의 대부분이 산지로 뒤덮혀 있는 곳으로서 그 특성이 매우 강하기에

어설프게 해외 환경 어셋을 가져다가 쓰면 이도저도 아닌 분위기와 환경이 만들어질 것 같아서,

저는 우선 한국의 지형 데이터를 언리얼 엔진의 Landscape로 적용을 해보고 싶었습니다.

게임엔진에서 크게 지형을 만드는데에는 두가지 접근법이 있습니다.

height map의 예

첫번째는 Height map이라는 텍스쳐 맵을 활용해서 Landscape 제작을 하는 것이고,

두번째는 Landscape 툴을 활용해서 손으로 제작하는 수제작 방식이죠.

따라서 저는 우선 첫번째 방법을 찾아보려 했습니다.

손으로 제작하는 것은 아무리 생각해도 비효율적이기 때문이죠.

이 Height map을 추출하는 방식 또한 여러 방식이 있습니다.

인터넷에서 구할 수 있는 위성데이터에 기반한 지형자료 (DEM데이터)를 활용하는 방법이 있고,

World machine, Gaea와 같은 툴을 활용하여 Procedural한 방식(노드기반)으로 Height map을 추출하는 것이죠.

저는 한국의 DEM데이터를 구해보려 했습니다.

DEM데이터는 수치표고모델이라고도 알려져있고, 일종의 Heightmap으로서 지형의 높낮이 데이터를 포함하고 있죠.

이 DEM데이터는 해상도가 매우 중요합니다. 결국 지형을 표현해야하는 일종의 이미지와 마찬가지니까요.

10m 단위를 캡쳐한 데이터가 활용할 수 있는 범위의 크기라고 하는데,

안타깝게도 한국은 90m 단위로 캡쳐한 데이터 밖에 공개가 되어있지 않더군요.

(유일한 분단국가인 이유가 크겠죠. 국정원에서 공개를 못하게 막아놨다고 합니다.)

너무나 아쉽지만 어쩔 수 없죠. 그래서 결국 두번째 방법으로 Height map을 추출하게 되었습니다.

GAEA 예시화면 (퍼온 이미지 입니다.)

두번째 방법은 툴을 활용해서 직접 Height map을 추출하는 방식인데, 아무래도 진입장벽이 있습니다.

새로운 툴을 배워야하는 것이니까요. 그래도 언리얼에서 수작업으로 진행하는 것보다는 훨씬 효율적이라 생각이 됐습니다.

그렇게 저는 Gaea라는 프로그램을 수박 겉핥기(?)식으로 공부를 하게 되었고,

네이버 지도 + 구글어스를 활용해서 원하는 지역을 레퍼런스 삼아서 Height map을 추출하게 되었습니다.

생각보다 그 과정은 크게 복잡하지 않았습니다.

혹시라도 참고하실 분을 위해 강좌 링크도 첨부합니다. (영어강좌입니다.)

다만, 이렇게 제작된 Heightmap을 언리얼로 가져오는 데에 이슈가 몇 가지 생기게 됩니다.

첫번째는 - Landscape의 적절한 사이즈 찾기입니다.

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

그렇다면 어떤 사이즈의 Height map을 추출해야하는 가?에대한 문제였습니다.

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

높이의 경우에는 Landscape의 Z축 스케일 값에 따라서 확인을 해주면 된다고합니다.

 

언리얼 메뉴얼 중 일부분. 이 곳에서는 하와이의 마우나 케나 산을 예제로 설명을 해주고 있습니다.

두번째는 - Landscape의 적절한 해상도(resolution) 찾기입니다.

지형 데이터는 넓은 지형을 커버하는 만큼, 퍼포먼스 친화적이지 않습니다.

단순 폴리곤 계산외에 텍스쳐링도 고려를 해야하기 때문에

자칫 과다하게 사용했다가는 전혀 활용을 할 수 없게 되는 것이죠.

특히나 플레이어 입장에서는 사람의 시점으로 지형을 봐야하기 때문에

적절한 해상도를 적용시키지 않으면, 지형 데이터도, 텍스처 데이터도 퀄리티가 너무 낮게 나와버립니다.

추후에 테셀레이션 기법을 활용해서 이 문제를 없앨 수 있지 않을까 싶지만,

테셀레이션도 결국 landscape 초기 설정 값에 근거해서 적용이 되기 때문에, 만병통치약은 아니더군요.

따라서 초반에 landscape를 제작하는데에 있어서 단순 크기 외에 이 해상도 설정도 꼭 고려해야할 사항 중 하나입니다.

일단 만들고 추후에 Rescale 기능을 활용해서 조절하면 되지 않으냐?라고 생각하실 수 있겠지만

Rescale이 완벽한 기능은 아닙니다..해상도로 컨트롤 할 수 있는 범위가 정해져있고

이로 인해서 Component 간 약간의 빈 공간이 발생하기도 하더라구요..

해상도가 틀리면, 쪼개진 면들이 저렇게 적나라하게 보이는 것이죠.

 


 

 

지금이야 많은 우여절을 겪고, 이 이슈에 관해 자신있게 일지를 남길 수 있지만

이 때 당시에는 이 방법만이 정답인 줄 알았기에 너무나 답답하고 어려운 문제였습니다.

지형이 어느정도 퀄리티가 나와야 전체적인 품질이 향상될 것이라고 생각되었기에..

아 물론, 지금도 그 생각은 변함없지만,

이 때 제가 했던 접근법은 공부가 많이 되었지

무조건 맞은 답이라고는 생각하지 않습니다.

자신에게 알맞은 방법으로 효율적으로 제작하는게 답이겠죠.

아이러니 하지만, 이 때 제가 만든 지형데이터는 쪼개고 쪼개 일부분만 활용하고

나머지 원경은 3D Mesh로 처리하게 되었답니다..!(와우)

다음 포스팅에서는, Landscape의 텍스처링에 관한 내용으로 돌아오겠습니다.

읽어주셔서 감사합니다.