티스토리 뷰
이제 최종 프로젝트에서 절차적 생성을 이용한 필드 확장 기능을 작업하기 시작했다.
그러니, 오늘은 절차적 생성에 대해서 정리 해 보자.
절차적 생성이란?
'절차적 생성', 최근 들어 게임계에서 매우 자주 듣게 되는 단어다.
이 절차적 생성 자체를 주요 포인트로 삼은 게임도 있고, 반대로 '손으로 그린' 것을 특징으로 삼은 게임도 있다.
그렇다면 절차적 생성이 무엇이길래 이렇게 최근 들어 키워드로서 자주 활용되는 것일까.
일반적으로 '절차적 생성'이라고 말하면 레벨의 절차적 생성을 이야기 하는 경우가 많다.
그도 그럴게, 가장 눈에 띄로 체감도 잘 되는 영역이 레벨의 적차적 생성이라서...
그렇다 보니, 절차적 생성이 '필드 구성을 자동으로 생성하는 기능'으로 오해하는 경우도 있다고 알고 있다.
결론 부터 말하자면, 레벨의 절차적 생성은 절차적 생성의 극히 일부에 해당한다.
절차적 생성이라는 단어 자체는 '특정 절차에 따라서 구성 요소를 자동으로 생성하는 기능'을 말하기 때문.
때문에 Hack&Slash에서 자주 쓰이는 장비 옵션이라던지, 엘리트 몬스터의 랜덤 특성 같은 것도 절차적 생성에 속한다.
그와 반대로, 필드 생성이나 캐릭터 생성도 절차적 생성에 속한다. 즉, 어마어마하게 넓은 범위를 아우르는 개념인 셈이다.
그렇다면 본 작성글에서 이 모두를 다룰 수 는 없을 것이고, 몇몇 시스템은 그럴 필요도 없을 것이다.
그러니, 본 작성글, 더 나아가서 본 주제에서는 최근 뜨거운 감자에 해당하는 주제인 '레벨의 절차적 생성'을 기반으로 서술하겠다.
레벨의 절차적 생성?
기획자 입장에서 가장 골치아픈 요소가 과연 무엇일까.
'머리 아픈 요소'를 고르라고 한다면 컨텐츠가 되겠지만, '골치 아픈 요소'라면 '레벨의 텅 빈 공간'이 되게 될 것이다.
그도 그럴게, 필드에 빈 공간이 있다는 것은 그 구간 동안은 플레이어 경험이 바닥을 친다는 의미라고도 볼 수 있다 보니, 기획자의 입장에서 '빈 공간'은 반드시 채워야 할 '미완성 구역'이 될 수 밖에 없다.
수집 요소를 하나라도 더 넣거나, 이스터에그를 넣거나... 다양한 방식으로 '채워져야 하는' 부분인 셈이다.
그럼 여기에서 약간 생각을 돌려보자. 이 '빈 레벨을 채우는 것'이 과연 쉬운 일일까?
결론 부터 말하자면 '쉽긴 하다. 근데 세밀히 챙길 수록 품이 많이 든다.'는 것이 문제다.
그리고, 레벨 구성 자체가 반은 노가다, 반은 노하우인 영역인지라, 전체적인 흐름을 구성, 조정, 완성 하는 데에 드는 시간도 어마어마하다는 것이 문제.
이러한 상황에서 대두된 것이, '그럼, 규격화 하면 되지 않는가'라는 부분이었다.
범용적으로 활용할 수 있는 컨텐츠를 생성하고, 빈 자리에 배치하면 되지 않겠느냐는 것.
이것이 흔히 말하는 '유비식 오픈월드'의 시작이라고 보면 좋다.
[유비식 오픈월드: 필드에 일정 간격으로 '적 진지'가 존재하며, 적 진지에서는 공통적으로 활용되는 '목표'를 제시하는 레벨 방식]
자, 이제 레벨 컨텐츠가 규격화 되었다. 그럼 자연스럽게 대두되는 요소도 있을 것이다.
그렇다. 자동 생성... 즉, '적차적 생성'인 것이다.
필드의 절차적 생성에 대해서
이번에는 상술한 내용에서 조~금 뒤로 물러나 보자. 컨텐츠 단위가 아니라 필드 구성으로 생각하는 것이다.
물론, 필드 구성과 컨텐츠 구성이 어느 정도 맞물려 있는 것은 사실이지만, 그렇다고 컨텐츠 구성 = 필드 구성인 것은 아니다. 그렇다 보니, 컨텐츠를 제외하고 필드의 절차적 생성 만 구현하는 게임들도 상당수 존재한다.
당장 마인 크래프트 부터가 절차적 생성의 대표명사고, 테라리아나 림월드 등도 절차적 생성으로 필드를 생성하고 있으니 말이다.
물론, 레벨의 절차적 생성도 복잡하긴 하지만, 필드의 절차적 생성도 상당히 복잡한 편이다. 오히려 요즘 들어서 화두가 되고 있는 절차적 생성은 대부분 필드의 절차적 생성에 관한 경우가 많다. 그 만큼 복잡하다는 것이다.
필드의 절차적 생성은 2D 환경과 3D 환경에 따라서, 그리고 2D 환경에서도 사이드뷰냐 탑뷰냐에 따라서 사용하는 방법이 다르다. 여기에 더해서 같은 시점에서도 사용할 수 있는 수단이 어마어마하게 다양하다.
참고로, 절차적 생성 알고리즘에는 공통적인 문제가 있다. 바로 '수학적 계산이 매우 활발하게 사용되는 영역'이라는 것.
이를 자연스럽게 활용하려면 어떤 공식을 왜 써야 하며, 그 공식에 의해서 어떤 결과가 초래되는 지를 모두 파악하고 있어야 한다.
그렇다. 공부해야 한다는 것이다.
자, 그러면 간단하게 어떤 방법이 있는 지 정리 해 보자.
본문에는 수식 없이 간단하게 사용할 수 있는 알고리즘 정도 만 서술할 예정이다.
격자 조합법
문자 그대로 격자에 맞춰서 필드의 풀을 만든 뒤, 그 조합을 통해서 생성하는 방법.
절차적 생성 중에서는 가장 간단하고 쉬운 방식. 동시에 가장 자주 활용되는 방식이다.
여기서 조금 더 나아가면 복수 좌표를 하나로 묶어서 필드를 구성할 수도 있고, 반대로 특정 면에는 특정 지역 만 생성되도록 구성하는 것도 가능하다. 여기에 회전이나 반전 등을 더해서 필드 구성을 다채롭게 만드는 경우도 있다.
사용 예시: Rogue Legacy, The Binding of Issac
Binary Space Partitioning [이진 공간 분할법]
풍래의 시렌에서 사용하기 시작하여, 현재는 '이상한 던전' 계열 게임에서 적극적으로 활용하는 알고리즘.
화면을 가로 혹은 세로 방향으로 2분할 하는 것을 반복하여 공간을 할당하고, 이를 잇는 방식이다.
이 때 폭은 특정 범위 안에서 랜덤으로 구성한다.
'특정 오브젝트'를 배치하기는 난감하지만 일괄적인 타일맵이 있다면 활용하기 좋은 방식.
사용 예시: 풍래의 시렌, 이상한 던전 시리즈들
Minimum Spanning Tree [최소 신장 트리]
한 번에 대량의 방을 생성한 이후, 이를 겹치지 않을 때 까지 점점 멀어지도록 구성, 이후 방을 정해진 개수 만큼만 남기고 나머지는 모두 삭제한 뒤 인근 방들을 잇는 방식. '반드시 포함되어야 하는 방'이 있다거나 하는 경우에 활용하기 좋다.
사용 예시: Enter the Gungeon
본문에 작성된 내용들 이외에도 절차적 생성의 종류는 많다.
본문은 정말로 간단하게 정리한 것이며, 실제로 절차적 생성에 대해서 깊게 다룬다고 한다면 상술한 내용들으로는 택도 없을 정도로 복잡한 영역이다.
그래도 요즘 게임 게발에 관해서는 꽤나 중요한 주제이기도 하니까, 틈틈히 공부하고 정리해 두면 좋을 듯 하다.
[세부 알고리즘에 대해서는 각기 별개 게시글으로 작성할 예정이다. 연속적으로 작성할지 여부는 미정.]
'스파르타 내일배움캠프 > Today I Learned' 카테고리의 다른 글
Today I Learned - Day 77 [지형 절차적 생성 - 격자형] (2) | 2025.01.03 |
---|---|
Today I Learned - Day 76 [Nav Mesh의 난점] (0) | 2025.01.01 |
Today I Learned - Day74 [씬을 어떻게 구성하면 좋은지에 대한 넋두리] (0) | 2024.12.27 |
Today I Learned - Day 73 [외부 데이터 로드 - 1: ResourceLoad] (1) | 2024.12.26 |
Today I Learned - Day 72 ['오브젝트' 풀의 난점] (0) | 2024.12.24 |