Age of Empires II가 무작위 맵을 생성하는 방식이 좋았습니다 (좋은 다양성, 괜찮은 생체 전환, 혼란을 느끼지 않고 무작위로 느꼈습니다).하지만 스타일을 복제하는 데 어려움을 겪고 있습니다. 예를 들어 Perlin 노이즈를 사용하려고 시도했지만 모든 것이 너무 균일하거나 그렇지 않은 경우 Perlin의 가치-> 지형 휴리스틱이 너무 민감하여 취약하여 다양한 세계 유형을 만들 수 없습니다.
AoE2 맵 유형 "알 수 없음"이 "100,000 개의 가능한 맵"을 광고하여 시드 번호 사용을 제안했지만 시드 번호를 사용하여 내가 본 다양성을 생성하는 방법을 잘 모르겠습니다.
AoE2 임의 맵처럼 느껴지는 임의 맵을 생성하는 데 어떤 알고리즘과 휴리스틱을 사용할 수 있습니까?
보다 구체적으로 편집 :
내 문제에 대해 더 많이 생각하고 AoE2의 랜덤 맵 엔진에 대해 내가 좋아하는 것을 연구하면서 가장 큰 문제는지도에서 물과 식물의 분포를 관리하는 것입니다 . 이제는 "생각할 수있는 생체 전환"과 관련이 있다고 생각하지만 다른 문제입니다 (Perlin 노이즈를 계속 사용하면 해결하기 까다로울 것입니다).
나는 매핑 엔진에 대해 내가 좋아하는 것을 강조하는 몇 가지 AoE2 랜덤 맵을 추가했다. 모든 스크린 샷은 임의의지도 유형 인 "맞춤"-> "알 수 없음"에서 가져옵니다. 나는 열도와 같은 특정 지역을 사용하도록 게임에 지시하지 않았다.
아래는 내지도 엔진의 이미지입니다. 각 픽셀은 하나의 AoE2 맵 타일에 해당합니다.
프로젝트의 한 가지 복잡한 점은 맵이 AoE2 맵보다 몇 배나 더 크길 원한다는 것입니다. 따라서 내가 사용하는 모든 엔진은 AoE2와 같이 맵마다 하나의 좁은 세트의 생물 군계가 아니라 각 맵에서 전체 범위의 생물 군계를 만들 수 있어야합니다.
에이지 오브 엠파이어 II지도
다음은 내륙 호수와 강이 보이는 것들을 보여주는 예입니다. 나는지도에 흩어져있는 많은 양의 물이 어떻게 포함되어 있는지를 좋아하지만 그 물은 여전히 약간 집중되어 있습니다. 제국을 짓는 데 사용할 수있는 넓은 땅이 있습니다. 물 주위에 도시를 계획하는 데 전체 게임을 할 필요는 없습니다.
다음은 게임이 섬을 통과 가능한 습지와 연결하기에 충분히 똑똑한 유사한 예입니다. 소음 기반 알고리즘이 어떻게 습지를 만들고 그 장소 만 만들지 상상할 수 없습니다. 또한 게임이 어떻게 토지를 만들 었는지 확인하십시오. 각 플레이어는 자신 만의 개인 전용 토지를 가지고 있습니다. 그것은 임의의 땅 패치를 만들지 않았으며, 각 플레이어가 시작하기에 가장 끔찍한 부분을 가장 잘 추측합니다.
이지도는 물을 많이 사용하지만 내륙 호수는 많이 포함되어 있지 않습니다 . 첫 번째 이미지와 대조하십시오. AoE2가 동일한 빌딩 블록을 사용하여 완전히 다른 지역을 만드는 방식이 마음에 듭니다. Perlin 소음을 사용하려는 시도는 여기에서 실패했습니다. 나는 땅 덩어리를 뒤흔들고있는 거대한 거대한 바다 나 10,000 호수의 땅을 얻었습니다. 또한 섬 과 연결된 대륙 (북남미 생각)을 모두 얻는 것이 어렵다는 것을 알았습니다 .
이 이미지를 위의 이미지와 대조하십시오. 그들은지도의 건조가 수위에 의존하지 않음을 보여줍니다. 첫 번째 이미지에는 물이 거의 없지만 숲과 잔디가 들어있는지도가 있습니다. 두 번째 이미지에는 적당량의 물이 있지만 사막입니다. 나는 그것이 가능하다는 것을 좋아합니다 (당신의 세계에 뉴 멕시코 또는 사하라와 코스타리카가 있다고 생각하십시오).
내 자신의지도
지도를 작성하는 좋은 방법은 여러 차원의 데이터를 나타내는 여러 수준의 Perlin 노이즈를 계층화하는 것입니다. 인기있는 권장 사항에 따라 Whittaker 표에서 지형 유형을 선택하여 높이와 습도를 조정 했습니다 .
두 개의 펄린 맵을 가져 와서 간단한 값을 통해 각각의 값을 정수로 양자화 if perlin_val < x { i=some_int } else if perlin_val < y...
한 다음 (상승, 수분) 정수 쌍을 지형 유형 테이블 (예 : [1,0]-> 열대 사막, [1,1)에 매핑했습니다 ]-> 초원). 이 시스템에 바다가 포함되었습니다-고도 = 정의 된 바다.
좋은 변형이 있으며 여러면에서 실제와 같은 느낌이 들지만 몇 가지 문제가 있습니다.
첫째, 해양 깊이에는 패턴이 없습니다. 당신은 해안 근처의 얕은 물과 더 깊은 물을 더 기대할 것입니다.
둘째, 모든 물이 바다에 집중되어 있습니다. Perlin 소음이 대륙 한가운데 갑자기 더 낮은 값으로 떨어지지 않기 때문에 호수 나 강이 없습니다.
각 생물 군계의 양 사이에 균형을 잡는 것은 매우 어렵습니다. 나는 이것을 다음으로 귀속합니다.
Perlin 노이즈는 정규 분포를 따르므로 각 차원 매핑의 확률을 조정하는 방법을 예측하기가 어렵습니다.
여러 차원의 균형을 맞추는 것은 어렵습니다. 어쩌면 더 많은 (2,3)을 원하므로 (n, 3)을 얻을 확률이 높아집니다. 글쎄, 지금은 너무 많고 (3,3) 모든 것이 잘못 보입니다.
부드러운 데이터를 얻을 수있을 정도로 노이즈를 근접하게 확대했을 때 Perlin 값에 대한 완벽한 샘플을 얻지 못했습니다. 그래서 내 앞의지도에 대한 분포를 조정하고 새로운 임의의지도를 새로 고치고 매우 다른 결과를 얻었습니다.
나는 Perlin 값의 세 번째 세트에서 물을 만들어 강 / 락수 문제를 해결하려고했습니다. 이진 물 / 토지 결정은 위의 모든 것들을 땅에 적용합니다. 이렇게하면 물 분배를 제어하기가 훨씬 쉬워 지지만 (아직 완벽하지는 않지만 더 나아짐), 이해가되지 않는 많은 생물 군계 변화가 있다는 문제가 발생합니다. 예를 들어, 울창한 초원 한가운데서 해변에 눈이 내리는 등의 설명 할 수없는 사막의 패치. 위에서 언급 한 이유로 인해 육지 생물 군계의 비율을 통제하기는 여전히 어렵습니다.
위의 문제를 보면서 Perlin 노이즈를 한 차원에만 매핑하는 간단한 알고리즘을 시도했습니다. 이제 0 = 심해-> 1 = 얕은 바다-> 2 = 해변 ...-> N = 눈에서 에스컬레이션되는 지형 유형 배열이 있습니다. 이로 인해 섬과 대륙이 생성되고 각 지형의 비율을 훨씬 쉽게 균형 잡을 수 있지만 지형 유형이 너무 모여 있습니다. 모든 토지 질량은 일반적으로 지표면에 흩어져있는 지형 유형이없는 고도지도처럼 보입니다. 모든 육지 덩어리는 대략 같은 특징을 가지고 있으며 항상 같은 순서로 항상 같은 고리 모양입니다.