Ring of Fire 개발..7

저번에 올린 개발일지를 보니, 위에 썼던 글이 죄다 잘렸네요.

ㅋㅋㅋ 뜬금없이 글의 시작이 ‘하지만’으로 시작하고 있었군요… 진작 확인해볼걸…

뭐라 적었는지 기억도 안 나니, 그냥 대충 수정했습니다.

다음부터는 글 올린 뒤에도 바로 확인하도록 하겠습니다.

 

지옥같던 폭염이 지나고, 이제 조금은 선선한 날씨가 오고 있는 느낌이네요.

여전히 햇빛 아래에선 덥지만 그래도 요즘은 꽤 살만합니다.

 

Ring of Fire 에 관한 얘기를 해보자면, 현재는 오픈월드 엔진을 손보고 있습니다.

게임의 메인 스토리의 진행과 그에 맞는 인물과 대화, 퀘스트 등을 작업하려고 했는데, 그러기 위해선 오픈월드 씬을 빌드하는 작업을 먼저 완성해놔야 할 것 같더군요.

그 전에도 어느정도 사용 가능한 엔진을 만들어 놨었는데, 여러 기능들을 추가하다보니 버그도 많아져서 언제 한 번 새로 작성해야겠다고 생각은 하고 있었습니다.

원래라면 유니티에서 HLOD System을 패키지로 출시한 이후에 진행하려고 했던 부분이지만, 역시나 평소처럼 감감 무소식이라 그냥 깃허브에 있는 프리뷰 버전의 HLOD System 리포지토리를 클론해서 사용하기로 했습니다. 언리얼에는 이미 포함된 기능인데 언제쯤에나 유니티에 포함되려나요..

HLOD (Hierarchical Level of Detail) 이 뭐냐면, 쉽게 말해 근처에 있는 오브젝트들을 묶음으로써 렌더링 비용을 줄여주는 기능입니다.

여러번 렌더링해야했던 오브젝트들을 묶어서 한 번에 렌더링함으로써 성능을 올린다고 보시면 됩니다.

이미지 출처 : https://youtu.be/xkogUcEGlQs?si=5AkKN3zL-pzeymSl

여태까지는 단순히 타일로 나뉘어진 장면마다 메쉬를 결합해주고 있었습니다.  

HLOD와 비슷한 방식으로 최적화를 해주는 기능이긴 하지만, 오브젝트에 가까이 다가가더라도 카메라의 시야를 벗어나는 오브젝트가 그대로 결합된 채 렌더링되기 때문에 HLOD만큼의 성능적인 이점은 없었습니다. 

이처럼 카메라의 시야를 벗어나는 오브젝트를 렌더링하지 않는 기능을 절두체 컬링 (Frustrum Culling) 이라고 합니다.

오브젝트가 개별로 렌더링 될때는 이 절두체 컬링이 기본적으로 작동하지만, 여러개의 오브젝트가 하나의 오브젝트로 결합되면, 그 중 일부가 시야를 벗어나더라도 여전히 다른 일부가 시야 안에 포함되어있기때문에 불필요하게 렌더링되는 문제가 있는 것이죠.

HLOD는 이런 결합을 계층적으로 (Hierarchical) 실행하기때문에, 가까이 있을때는 작은 단위의 결합을, 멀리 있을때는 큰 단위의 결합을 사용해서 성능상 큰 이점이 있다고 볼 수 있습니다. 

단점으로는 그 만큼 결합된 메쉬를 생성하기 때문에 게임 용량이 늘어나는 게 있겠네요.

사실 3일 정도면 충분하지 않을까 생각했는데 벌써 일주일째 붙잡고 있네요.

한 번 빌드해서 결과를 확인하려면 최소 몇 분에서 길면 한 시간 이상은 빌드가 진행되는 걸 기다려야하니, 특히 오래 걸리는 것 같습니다.

덕분에 틈틈이 생겨난 시간으로 오랜만에 책도 읽고 하고 있습니다.

그래도 이 고생하면서 완성해놓으면, 아마 게임 출시때까지는 큰 걱정 없이 사용할 수 있지 않을까 기대하고 있습니다.

Address List

BUSINESS

olivecrow.games@gmail.com

BUG REPORT & QUESTION

olivecrow.report@gmail.com

olivecrow

Indie Game Developer