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

배경

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

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

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

문제

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

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

질문

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

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

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

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



답변

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

절차 적 도시 예

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

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

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

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

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


답변

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

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


답변

나는 절차 적 도시를 만드는 아주 좋은 / 자세한 튜토리얼을 살펴 보았습니다. 비디오가 @ http://www.youtube.com/watch?v=-d2-PtK4F6Y
튜토리얼은 저자의 블로그에 : http://www.shamusyoung.com/twentysidedtale/?p=2940는
희망이 도움이 야망


답변