프랙탈 기반 절차 도시 레이아웃에 적합한 알고리즘은 무엇입니까?


19

배경

나는 상당히 큰 규모의 초보 도시를 설계 할 마인 크래프트 서버를 운영합니다. 나는 규칙 표시와 폭도 감금소와 같은 일련의 것들을 가지고 있으며, 거기에 건물을 넣고 싶습니다. 도시 자체는 크기가 최대 1000 x 1000 블록으로 매우 넓고 넓어 질 것입니다.

건물 자체에는 3 개의 블록의 배수와 같이 특정 기본 큐브를 기반으로하는 큐브 또는 직사각형 공간이 있습니다. 거리와 건물 사이의 거리는 거리의 중요성에 따라 5-11 블록 너비가 바람직합니다.

도시 계획을 시작할 때 건물이 얼마나 큰지, 얼마나 많은지 알 수있을 것입니다.

문제

문제는 도시의 레이아웃을 디자인하는 것입니다. 분명히 그러한 규모의 무언가로 도시 계획자 배경이 아닌 프로그래밍 배경에서 나올 때 문제에 대해 내 머리를 감싸기조차 시작하기가 매우 어렵습니다.

문제는 도시가 가능한 한 자연스럽게 보이기를 원한다는 것입니다. 물론 이것은 간단한 그리드 패턴으로 구축하기가 쉽지만 그리드 또는 그리드처럼 보이는 것을 피하고 싶습니다.

질문

코드를 사용하여 설계하는 데 도움을주기 위해 어떤 알고리즘을 추구 할 수 있습니까? 마인 크래프트가 이미 지형 생성에 프랙탈을 사용하고 도시가 자연스럽게 프랙탈 패턴으로 자라나는 것처럼 어떤 식 으로든 프랙탈을 사용하면 가장 자연스럽게 보일 것이라고 생각했습니다.

나는 그것이 테트리스 재생 알고리즘과 어떤면에서 비슷하다고 생각합니다. 따라서 누군가 그 방향으로 존재하는 솔루션을 가지고 있다면 도움이 될 것입니다. 사용하고 싶은 모양을 정의 할 수있는 곳을 파악하고 있으며, 소프트웨어는 건물의 분포를위한 가장 "최적의"솔루션을 찾을 때까지 반복됩니다. 파이썬을 사용 하여이 문제를 해결하는 데 도움이되는 것이 있습니까?

당연히 이것은 게임 디자인에서 일반적으로 도시 세대에 흥미로운 영향을 미치므로 최고의 솔루션이 무엇인지 매우 기쁘게 생각합니다.

편집 하기 위해 건물을 설계하고 게임을 할 때이 시점에서 레이아웃을 찾고 있습니다.


3
마인 크래프트는 프랙탈을 사용합니까? 나는 단지 연속 소음 기능 (Perlin 또는 Simplex, 믿습니다)을 사용한다는 인상을 받았습니다.
Martin Sojka

@Martin Sojka Perlin 노이즈는 실제로 프랙탈이므로 거기에 있습니다.
Nevermind

1
@Nevermind : 프랙탈의 정의 특성은 자기 유사성입니다 . 프랙탈 의 일부를 선택하여 원본의 크기로 크기를 조정하면 "유사한"(같은 구조를 가짐)됩니다. 특히, 프랙탈 신호의 주파수 스펙트럼은 스케일에 변하지 않습니다. Perlin 노이즈로 그렇게하면 Perlin 노이즈의 확장 영역 만 얻을 수 있습니다. 주파수 스펙트럼도 이동합니다.
Martin Sojka

@Nevermind Perlin 노이즈는 실제로 프랙탈이 아니지만 Brownian 모션 (Perlin 노이즈를 사용할 수있는 기술)은 프랙탈이며 일반적으로 Perlin 노이즈라고합니다.
Elva

그래, 미안, 나는 사람들이 펄린 소음과 핑크 소음을 혼동 할 때 항상 교정하지만, 여기서 나는 같은 실수를 저지르고 있습니다. 나의 유일한 방어책은 마인 크래프트가 실제로 분홍색 (갈색 움직임) 노이즈를 사용한다는 것입니다. IIRC.
Nevermind

답변:


20

최근에 절차 도시 레이아웃을위한 알고리즘을 구현했습니다. 여전히 진행중인 작업이지만 유망한 것으로 보입니다. 보세요:

절차 적 도시 예

이 레이아웃을 생성하는 데 사용되는 알고리즘은 L-Systems를 기반으로 합니다. 나는 기본 Element클래스를 가지고 있는데, 사각형은 맵에 그 위치를 표시하고 사각형 안에 Grow다른 것을 만들고 메소드 를 생성 Elements합니다. 그런 다음이 기본 클래스에서 상속 된 실제 요소는있다 : City, Street, Building

세대는 다수의 "씨앗"오브젝트 (제 경우 City에는 맵에 무작위로 배치 된 단일 요소)로 시작합니다. 그런 다음 시스템은 모든 요소를 ​​반복하고 모든 요소 Grow가 비활성화 될 때까지 ( Growreturn false) 또는 많은 수의 반복이 통과 될 때까지 호출 합니다.

그림의 도시는 몇 가지 간단한 규칙을 사용하여 만들어졌습니다.

  • CityStreet어딘가에 영역을 분할 하는 요소 가됩니다 .
  • 모든 Street거리가 0 ~ 3 개의 길거리에서 자랍니다.
  • 또한 Street지속적으로 Building측면에 임의의 크기를 맞추려고 노력합니다 .

결과는별로 흥미롭지는 않지만 나쁘지는 않습니다. 시스템을 쉽게 확장 할 수 있으며 진행 상황을 이해할 수있을만큼 간단합니다 (-8


단순성을 좋아하십시오. 도시는 사실 유기체에 의해 통제되기 때문에 실제로 유기적이라고 생각합니다. 마음의 눈으로 보는 것처럼 완벽을 추구하는 L- 시스템은 아마도이 과정의 가장 근사치 일 것입니다.
Jonathan Dickinson

나는 그것을 좋아한다. =) 이제 파이 게임에서 구현하기 위해 ...
Ken

8

몇 년 전부터 절차 적 건물 생성에 관한 이 GDC 이야기 가 있습니다 . 템플릿 집합을 기반으로 개별 건물을 만들지 만 도시 전체를 만드는 것은 아닙니다 (거리 레이아웃 등). 불행히도 무료 코드는 없습니다. 토크에 설명 된 시스템은 Unreal에서 구현 되었지만 무료 버전의 UDK인지 여부는 확실하지 않습니다. 어쨌든 동일한 아이디어 중 일부를 사용하여 자체 시스템을 구축 할 수 있습니다.

인터넷 검색 '절차'또는 '절차 도시'에서도 주제에 관한 몇 가지 다른 논문과 기사를 제공합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.