Tạo địa hình cho Nền tảng 2D dựa trên Ngói


15

Tôi hiện đang làm việc trên một nền tảng 2D dựa trên gạch tương tự như Terraria theo một số cách, mặc dù tôi gặp khó khăn với việc tạo địa hình. Tôi có một số điều cơ bản được thực hiện, mặc dù chúng không đi ra như bất cứ điều gì hữu ích.

Tôi đã thử một vài kỹ thuật khác nhau như Tiếng ồn Perlin và đọc về một số kỹ thuật khác như Dịch chuyển trung điểm, mặc dù tôi không chắc cái nào là tốt nhất hoặc kết hợp các kỹ thuật khác nhau để tạo ra các khu vực khác nhau. (Chẳng hạn như Dịch chuyển điểm giữa cho hình dạng chung của địa hình và Tiếng ồn Perlin cho các hang động.)

Tôi đã tìm thấy một lời giải thích tuyệt vời về cách tôi có thể tạo nó với Thư viện tiếng ồn ngẫu nhiên , mặc dù nó có trong C ++ và tôi không biết đủ C ++ để biên dịch nó thành một DLL mà tôi có thể sử dụng từ C #. Tôi đã cố gắng sao chép điều này trong C #, mặc dù vậy, tôi không biết làm thế nào tôi có thể hợp nhất hai hiệu ứng lại với nhau (độ dốc cho cơ sở chung, và sau đó là fractal để biết chi tiết).

Hiện tại tôi đang sử dụng Plasma Fractal và kết quả rất đa dạng. Ví dụ, nó có thể tạo địa hình nơi hầu như không có bề mặt hoặc có thể tạo địa hình nơi không có bề mặt nào cả.

Một ví dụ về một bản đồ ổn, sẽ tốt hơn với một số cải tiến hơn, mặc dù. (Đen là rắn, trắng là không khí):

Bản đồ tốt

Và một ví dụ về một bản đồ khủng khiếp. (Đen là rắn, trắng là không khí):

Bản đồ khủng khiếp

Về cơ bản, điều tôi đang hỏi là, cách nào sẽ tạo ra địa hình tốt hơn hoặc buộc nó phải đảm bảo rằng có một diện tích bề mặt hợp lý, với thời gian tạo ra càng nhanh càng tốt. Hoặc, thay vào đó, làm thế nào tôi có thể đạt được kết quả tương tự như Thư viện tiếng ồn tình cờ, nhưng trong C #.

Bất kỳ ví dụ sẽ được rất nhiều đánh giá cao.


Xin chào, tôi đã tự hỏi làm thế nào bạn thực hiện điều này. Tôi đang cố gắng để hiểu về cách tạo ra những thế giới như thế này và tôi thích kết quả mà bạn đang nhận được. Bạn đang sử dụng thuật toán nào vì nó không giống như tiếng ồn perlin 2D và nó chắc chắn không phải là tiếng ồn perlin 1D.
G3tinmybelly

Câu trả lời:


8

Tôi sẽ thử gắn bó với tiếng ồn Perlin, nhưng thêm trọng lượng cho nó dựa trên chiều cao, để đảm bảo mật độ trung bình nhất định ở độ cao nhất định. Để trích dẫn một phần bài đăng của Notch về thế hệ địa hình Minecraft :

Vì vậy, tôi đã chuyển hệ thống sang một hệ thống tương tự dựa trên tiếng ồn 3D Perlin. Thay vì lấy mẫu độ cao mặt đất, thì tôi đã coi giá trị nhiễu là mật độ mật độ, trong đó mọi thứ thấp hơn 0 sẽ là không khí và bất cứ thứ gì cao hơn hoặc bằng 0 sẽ là mặt đất. Để đảm bảo lớp dưới cùng chắc chắn và lớp trên cùng không, tôi chỉ cần thêm chiều cao (bù theo mực nước) vào kết quả được lấy mẫu.

Về cơ bản, bạn đang lấy một lát cắt nhỏ của địa hình Minecraft. Vì vậy, tạo ra tiếng ồn 2D Perlin, nhưng hãy cân nó sao cho bất cứ thứ gì trên một điểm nhất định đều có khả năng là không khí, và bất cứ thứ gì dưới một điểm nhất định đều có khả năng là trái đất.

Điều này sẽ cung cấp cho bạn một địa hình mặt đất tốt, với một số phần nhô ra và các tính năng thú vị, cũng như một số hang động và đảo nổi. (Nếu bạn không muốn các đảo nổi, bạn có thể kiểm tra chúng và xóa chúng bằng tay.) Phương pháp này sẽ không cung cấp cho bạn những thứ như đường hầm, vì vậy bạn sẽ muốn có một phương pháp để thêm chúng vào sau khi tạo địa hình, chẳng hạn như đi bộ ngẫu nhiên .


Không hoàn toàn chắc chắn rằng tôi đang sử dụng Perlin Noise với tiềm năng đầy đủ của nó. Sau khi làm đúng như bạn mô tả, nó chỉ tạo ra rất nhiều hang động, với rất nhiều hòn đảo nổi. Không có định nghĩa loại địa hình thực tế. Sử dụng một gradient để cân nhắc kết quả, tôi nhận được kết quả này .
Kích thước bóng mờ

@Shaded Dimensions - Thông số tiếng ồn Perlin của bạn cần điều chỉnh. Bạn có tiếng ồn rất thay đổi, khi những gì bạn muốn là một mô hình rộng hơn, mịn hơn nhiều. Kiểm tra freespace.virgin.net/hugo.elias/models/m_perlin.htm và thử làm rối tung một số thông số của bạn. Hãy thử kiên trì thấp hơn và ít quãng tám hơn. (Các thuật ngữ này có thể khác nhau, vì vậy hãy đọc bài viết đó.)
dlras2

Được rồi, cảm ơn vì liên kết. Tôi cũng phát hiện ra rằng trọng lượng không hoạt động như dự định sau khi thay đổi một vài thông số.
Kích thước bóng mờ

Được rồi, sửa đổi các tham số khá một chút và tôi đã có một cái gì đó khá chấp nhận được, ít nhất là bây giờ. Tôi cũng đã loại bỏ các hang động tạo ra chỉ cho thử nghiệm này, vì tôi muốn hoàn thành địa hình thực tế trước tiên. Đây là kết quả cuối cùng . Chỉ cần thêm kiểm tra để loại bỏ những hòn đảo nổi. Cảm ơn một lần nữa.
Kích thước bóng mờ

@ Kích thước mờ - Đẹp! Rất nhiều thời gian, địa hình tốt đến từ việc điều chỉnh các thông số và lớp phủ tiếng ồn. Sẽ mất một lúc trước khi bạn nhận được thứ gì đó mà bạn rất hài lòng, nhưng bạn luôn có thể sử dụng những gì bạn có bây giờ và quay lại để thêm các tinh chỉnh hoàn thiện. Chúc may mắn!
dlras2
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.