Unity/Theory

[Unity] 절차적 맵 생성 (Procedural Map Generation)

JEE_YA 2025. 4. 21. 22:16

 

절차적 맵 생성, Procedural Map Generation

코드나 컴퓨터 알고리즘을 이용하여 자동(동적)으로 생성하는 기법

게임을 실행할 때마다 새로운 맵이나 레벨을 자동으로 만들어낼 수 있으며 리플레이성 향상과 개발 효율성에 크게 기여한다.

- 로그라이크 게임에서 매번 새로운 맵을 만들 때 혹은 오픈월드 게임에서 넓은 맵을 비교적 적은 시간으로 제작할 때 주로 사용한다.

 

장점

무한성 : 난수생성기와 알고리즘에 의해 생성되므로 무한한 수의 맵을 생성할 수 있다.

다양성 : 난수, 변수에 따라 다른 맵이 생성되어 플레이어에게 새로운 경험을 제공한다

효율성 : 맵을 수동으로 디자인하는것에 비해 시간/리소스를 절약할 수 있다

 

단점

예측 불가능 : 때때로 불균형하거나 클리어가 불가능한 맵이 생성될 수 있다.

디자인 제어 어려움 : 특정 구조나 구성 유지가 어려워 설계 의도 반영이 힘듬

 


 

주요기법 일부 정리

 

노이즈 기반 기법 : 자연스러운 랜드스케이프나 높낮이 표현에 적합

Perlin 노이즈

- Ken Perlin이 개발한 알고리즘으로 자연스럽고 연속적인 유기적 잡음을 생성하는데 사용

- 2차원 또는 3차원으로 구성된 그리드에서 각 좌표의 값에 대한 임의성을 추가하여 자연스러운 무작위 패턴을 만든다.

- 산, 언덕, 해변 같은 자연 지형 생성에 자주 사용

 

Simplex 노이즈

Perlin 노이즈의 개선된 버전으로, 빠르고 더 나은 품질의 노이즈를 제공하고 단순한 구조를 가지고 있다.

 

 

셀룰러 오토마타(Cellular Automata)

- 간단한 규칙을 사용하여 맵의 타일을 반복적으로 업데이트하여 유기적인 형태를 만듬

- 초기값을 랜덤하게 준 뒤 이웃셀의 상태를 기준으로 타일을 반복적으로 갱신

- 난수에 의존적이기 때문에 어떤 형태의 지형이 만들어질지 예측하기 어려움

- 흔히 동굴이나 유기적인 형태를 만들 때 사용됨

 

BSP (Binary Space Partitioning)

- 맵을 큰 직사각형으로 시작해서 재귀적으로 분할

- 각 영역에 방을 배치하고 방들 사이에 복도를 연결

- 3차원(또는 2차원) 공간을 효율적으로 다루기 위해 하나의 공간을 재귀적으로 둘씩 나누어가는 기법

- 구조적이고 미로처럼 이어진 던전을 만들기 좋으며 로그라이크 구조에서 많이 사용됨

 

파동 함수 붕괴 (Wave Function Collapse, WFC)

- 붕괴(Collapse) : 한칸이 하나의 타일로 확정되는 순간

- 파동(Wave) : 각 칸이 여러가지 가능한 상태를 가질 수 있는 초기 상태(어떤타일이 될지 정해지지 않은 상태)

- 특정 패턴을 유지하면서 맵을 생성하는 알고리즘, 퍼즐처럼 규칙에 맞춰 맵이 채워짐

- 타일 간 제약 조건을 기반으로 자연스럽게 맵 생성(벽 옆엔 벽만, 문 옆엔 바닥만 같은 규칙), 로직이 복잡하지만 결과는 디자인적 일관성 유지

- 구조적 퍼즐형 맵에서 많이 사용