Làm cách nào tôi có thể tạo bản đồ ngẫu nhiên giống như bản đồ ngẫu nhiên Age of Empires II?


18

Tôi thích cách Age of Empires II tạo ra các bản đồ ngẫu nhiên (đa dạng, chuyển đổi quần xã tốt, bản đồ cảm thấy ngẫu nhiên mà không cảm thấy hỗn loạn), nhưng đang đấu tranh để nhân rộng phong cách. Tôi đã cố gắng sử dụng tiếng ồn Perlin, nhưng mọi thứ phát ra quá đồng nhất hoặc nếu không, giá trị Perlin -> heuristic địa hình quá nhạy cảm và dễ vỡ để tạo ra nhiều loại thế giới.

Tôi nhớ loại bản đồ AoE2 "Không xác định" đã quảng cáo "100.000 bản đồ có thể", gợi ý một số cách sử dụng số hạt giống, nhưng tôi không chắc cách sử dụng số hạt giống để tạo ra giống tôi đã thấy.

Những thuật toán và phương pháp phỏng đoán nào tôi có thể sử dụng để tạo ra các bản đồ ngẫu nhiên có cảm giác như bản đồ ngẫu nhiên AoE2?

Chỉnh sửa để cụ thể hơn:

Nghĩ thêm về vấn đề của tôi và nghiên cứu những gì tôi thích về công cụ bản đồ ngẫu nhiên của AoE2, tôi tin rằng vấn đề lớn nhất của tôi là quản lý việc phân phối nước và thực vật trên bản đồ . Bây giờ tôi thấy tôi cũng đã gắn kết điều đó trong tâm trí của mình bằng "chuyển đổi sinh học có ý nghĩa", nhưng đó là một vấn đề khác (mặc dù tôi hy vọng việc tiếp tục sử dụng tiếng ồn Perlin sẽ khiến nó khó giải quyết).

Tôi đã thêm một số bản đồ ngẫu nhiên AoE2 làm nổi bật những gì tôi thích về công cụ lập bản đồ của họ, những nỗ lực của tôi không thể tái tạo được. Tất cả các ảnh chụp màn hình được lấy từ loại bản đồ ngẫu nhiên, "Tùy chỉnh" -> "Không xác định". Tôi đã không hướng dẫn trò chơi sử dụng các khu vực địa lý cụ thể như quần đảo.

Hơn nữa bên dưới là hình ảnh từ công cụ bản đồ của riêng tôi. Mỗi pixel tương ứng với một ô bản đồ AoE2.

Một điều phức tạp cho dự án của tôi là tôi muốn bản đồ lớn hơn nhiều lần so với bản đồ AoE2. Do đó, bất kỳ công cụ nào tôi sử dụng đều phải có khả năng tạo ra toàn bộ quần xã trong mỗi bản đồ và không phải là một bộ quần xã sinh vật hẹp trên mỗi bản đồ, như sử dụng AoE2.

Bản đồ Age of Empires II

Hồ nội địa

Đây là một ví dụ có các hồ nội địa và một số thứ nhìn ra sông. Tôi thích cách bản đồ bao gồm một lượng lớn nước nằm rải rác, nhưng nước đó vẫn hơi tập trung - có những vùng đất rộng lớn có sẵn để xây dựng đế chế của bạn. Bạn không cần phải dành toàn bộ trò chơi lên kế hoạch cho thành phố của mình trên mặt nước.

Đảo kết nối

Đây là ví dụ tương tự khi trò chơi đủ thông minh để kết nối các đảo với đầm lầy có thể đi qua được. Tôi không thể tưởng tượng làm thế nào một thuật toán dựa trên tiếng ồn sẽ tạo ra đầm lầy ở đó và chỉ những nơi đó. Ngoài ra, hãy chú ý cách trò chơi tạo ra vùng đất sao cho mỗi người chơi có vùng đất riêng, rộng lớn để bắt đầu. Nó không tạo ra các miếng đất ngẫu nhiên, sau đó đoán chính xác xem cái nào sẽ là thứ kinh khủng nhất cho mỗi người chơi bắt đầu.

Quần đảo

Tôi thích bản đồ này cũng sử dụng nhiều nước, nhưng không bao gồm nhiều hồ nội địa. Tương phản nó với hình ảnh đầu tiên. Tôi thích cách AoE2 tạo ra các khu vực địa lý hoàn toàn khác nhau bằng cách sử dụng cùng các khối xây dựng. Nỗ lực của tôi trong việc sử dụng tiếng ồn Perlin đã thất bại ở đây - Tôi hoặc có được những đại dương trải dài khổng lồ làm lùn khối đất hoặc Vùng đất 10.000 hồ. Tôi cũng thấy khó có được cả hai hòn đảo và các lục địa được kết nối (nghĩ là Bắc / Nam Mỹ).

Khô, tươi tốt Sa mạc khô

Tương phản hình ảnh này với hình trên nó. Chúng cho thấy sự khô cằn của bản đồ không phụ thuộc vào mực nước. Hình ảnh đầu tiên có một bản đồ gần như không có nước, nhưng vẫn có rừng và cỏ. Hình ảnh thứ hai có một lượng nước vừa phải, nhưng là một sa mạc. Tôi thích điều đó là có thể (nghĩ rằng có cả New Mexico hoặc Sahara và Costa Rica trong thế giới của bạn).

Bản đồ của riêng tôi

Tôi đã đọc ở một loạt các địa điểm rằng một cách tốt để xây dựng bản đồ là tạo ra nhiều mức độ nhiễu Perlin, mỗi mức đại diện cho một chiều dữ liệu khác nhau. Theo khuyến nghị phổ biến, tôi đã đi với độ cao và độ ẩm, chọn loại địa hình từ bảng Whittaker ở đây .

Tôi lấy hai bản đồ perlin, định lượng các giá trị từ mỗi thành số nguyên thông qua một đơn giản if perlin_val < x { i=some_int } else if perlin_val < y..., sau đó ánh xạ các cặp số nguyên (độ cao, độ ẩm) vào một bảng các loại địa hình (ví dụ: [1,0] -> sa mạc nhiệt đới, [1,1 ] -> đồng cỏ). Đại dương được bao gồm trong hệ thống này - độ cao = 0 đại dương xác định.

g1_success

Có sự thay đổi tốt, và theo nhiều cách, nó cảm thấy giống như một thế giới thực, nhưng có một vài vấn đề:

  • Đầu tiên, không có mô hình nào cho độ sâu đại dương. Bạn sẽ mong đợi những vùng nước nông gần bờ và những vùng nước sâu hơn nữa, không có vần điệu hay lý do nào là nơi đó

  • Thứ hai, tất cả nước tập trung ở các đại dương; không có hồ hoặc sông, vì tiếng ồn Perlin đột nhiên giảm xuống giá trị thấp hơn ở giữa lục địa.

  • Tạo sự cân bằng giữa số lượng của mỗi quần xã là rất, rất khó. Tôi gán cái này cho:

    • Nhiễu Perlin tuân theo phân phối chuẩn, do đó, việc ước tính cách điều chỉnh xác suất của mỗi ánh xạ kích thước là khó khăn

    • Cố gắng cân bằng nhiều chiều là khó khăn - có thể tôi muốn nhiều hơn (2,3) vì vậy tôi tăng tỷ lệ nhận được (n, 3). Chà, bây giờ tôi có quá nhiều (3,3) và mọi thứ có vẻ sai.

    • Khi tôi phóng to nhiễu đủ gần để có dữ liệu mượt mà, tôi đã không nhận được một mẫu giá trị Perlin rất hoàn chỉnh. Vì vậy, tôi sẽ điều chỉnh các bản phân phối của mình cho bản đồ trước mặt, tải lại bản đồ ngẫu nhiên mới và nhận được kết quả rất khác nhau.

x-riêng-nước

Tôi đã cố gắng khắc phục vấn đề sông / hồ bằng cách tạo ra nước từ bộ giá trị Perlin thứ ba. Một quyết định nước / đất nhị phân, sau đó áp dụng tất cả các công cụ trên vào đất. Điều này làm cho việc kiểm soát phân phối nước trở nên dễ dàng hơn (vẫn chưa hoàn hảo, nhưng tốt hơn), nhưng đưa ra một vấn đề là có rất nhiều chuyển đổi sinh học không có ý nghĩa. Ví dụ, các mảng sa mạc không thể giải thích được giữa đồng cỏ tươi tốt, tuyết trên bãi biển, v.v ... Vẫn khó kiểm soát tỷ lệ của quần xã đất, vì những lý do nêu trên.

Thất bại một chiều

Nhìn vào các vấn đề trên, tôi đã thử một thuật toán đơn giản hơn, chỉ ánh xạ nhiễu Perlin thành một chiều. Bây giờ tôi có một loạt các loại địa hình leo thang từ 0 = đại dương sâu -> 1 = đại dương nông -> 2 = bãi biển ... -> N = tuyết. Trong khi điều này mang lại các hòn đảo và lục địa, và làm cho việc cân bằng tỷ lệ của từng địa hình trở nên dễ dàng hơn rất nhiều, các loại địa hình quá xa nhau. Mỗi khối đất trông giống như một bản đồ độ cao, thường không có các loại địa hình nằm rải rác trên bề mặt của nó. Mỗi khối đất có các đặc điểm xấp xỉ nhau, luôn theo cùng một thứ tự và luôn có cùng hình dạng giống như chiếc nhẫn.


Tôi không chắc ai không thuộc nhóm phát triển ban đầu thực sự có thể trả lời câu hỏi của bạn, nhưng tôi đề nghị hạt giống thấp hơn nhiều so với bạn mong đợi. Hạt giống gần như chắc chắn tạo ra các bản đồ khác nhau cho mỗi loại bản đồ cơ sở, và bao gồm tất cả chúng trong bất kỳ kết hợp nào rất có thể là thứ cho phép nó đạt tới 100.000.
Magus

Câu hỏi này dường như lạc đề vì nó đang hỏi chi tiết triển khai về một trò chơi đã tồn tại cụ thể, thay vì về việc tạo ra một trò chơi.
Trevor Powell

@TrevorPowell Sau khi xem xét các hướng dẫn cho các câu hỏi về chủ đề cho trang web này, tôi đã đọc lại câu hỏi.
spiffytech

Bạn đăng bài chỉnh sửa đó khoảng mười giây sau bình luận của tôi. Bây giờ là dịch vụ! ;)
Trevor Powell

1
-1 Tôi vẫn còn quá rộng. Bạn cần phải cụ thể về "bản đồ cảm thấy như thế nào" nghĩa là gì. Ví dụ cụ thể về những gì bạn đang nói về được yêu cầu trả lời câu hỏi này. Thế hệ thủ tục, là nghệ thuật hơn mọi người thường nghĩ. Sáng tạo nghệ thuật và nhận thức là một chủ đề chủ quan. Chọn một điều cụ thể mà bạn muốn tập trung vào và chỉ hỏi về điều đó. Phạm vi của câu hỏi này hiện đang rất rộng.
MichaelHouse

Câu trả lời:


9

Hãy xem bài viết xuất sắc của Amit Patel mà tôi cảm thấy là một nguồn tài nguyên tinh túy để tạo ra địa hình theo thủ tục ...

http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/

Điều quan trọng anh ta làm là sử dụng cấu trúc đồ thị để mô hình hóa địa hình của mình, chứ không phải bản đồ tiếng ồn thẳng (Perlin et al). Tôi sẽ không nhúng hình minh họa của anh ấy, nhưng đọc bài viết và tôi nghĩ bạn sẽ thấy hữu ích khi khiến bạn suy nghĩ về một cách tiếp cận khác.

Nếu bạn đang tạo một trò chơi loại CIV / AOE, vị trí của các tài nguyên sẽ rất quan trọng. Bạn không thể có tài nguyên chính quá hiếm hoặc tài nguyên giá trị cao quá phổ biến. Nếu bạn cho rằng mỗi đa giác là một vùng có một đặc điểm nhất định (xem hình minh họa của bài viết, nó sẽ có ý nghĩa hơn), tôi có thể thấy việc gán tài nguyên cho mỗi đa giác dựa trên một số thuật toán bạn chọn. Bạn có thể trở nên khá thông minh bằng cách làm cho các tài nguyên trong một đa giác bị thiên vị thống kê bởi những người hàng xóm để một khu rừng bên cạnh sa mạc có thể là hiếm, nhưng ví dụ, khu rừng bên cạnh đồng cỏ phổ biến hơn.


2
Hướng dẫn của Amit tạo ra địa hình quá thực tế cho Age of Empires. :)
Seth Battin

Hehe đúng, đúng. Nhưng khái niệm cơ bản về việc sử dụng các ô có kích thước khác nhau (trong đó mỗi ô là một loại địa hình cụ thể) sẽ hoạt động tốt như một cách tiếp cận tôi nghĩ. Loại bỏ ý tưởng về chiều cao địa hình khỏi phương trình.
Tim Holt

Tôi đã xem lại bài viết của Amit, nhưng nó được tối ưu hóa quá chặt chẽ xung quanh việc có một hòn đảo duy nhất. Làm cho độ cao trở thành một chức năng đơn giản của khoảng cách từ bờ sẽ tạo ra kết quả khó xử với nhiều hòn đảo, hoặc các lục địa lớn hơn, và phương pháp phân phối nước của anh ta giả định một đỉnh cao nổi bật trong cảnh quan cuối cùng chảy ra đại dương. Nếu tôi loại bỏ chiều cao địa hình khỏi sơ đồ của Amit, tôi sẽ không chắc chắn làm thế nào để điều chỉnh ý tưởng phân phối quần xã của anh ấy cho dự án của tôi.
spiffytech

5

Tôi tạo các kịch bản bản đồ ngẫu nhiên cho Age of Empires 2 . Phiên bản gần đây nhất của tôi là dành cho phiên bản HD.

Nếu bạn đang tìm hiểu cách tạo bản đồ cho Age of Empires 2, thì có hướng dẫn tuyệt vời này về RMS (Kịch bản bản đồ ngẫu nhiên) .

Age of Empires sử dụng một hệ thống chuyên gia, cho phép các kịch bản viết các thói quen cho các quy tắc tạo, mà bạn có thể học hỏi được rất nhiều từ đó. Đối với các khu vực, tôi tưởng tượng rằng đó chỉ đơn giản là một trường hợp che giấu các khu vực và áp dụng các tập lệnh / thói quen khác nhau cho các khu vực bị che giấu tương ứng. Bạn có thể dễ dàng xem quy tắc tạo các tập lệnh bản đồ hiện có bằng cách mở chúng trong trình soạn thảo văn bản. Tôi viết của tôi trong Notepad

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.