Làm cách nào để tạo các hang động giống với các hang động của Minecraft?


34

Tôi đã làm việc trên một thế giới thủ tục 3D được một thời gian và tôi muốn bắt đầu thêm các hệ thống hang động. Tôi hiện đang sử dụng Tiếng ồn Perlin 2D / 3D để tạo địa hình kết hợp với Marching Cubes cho địa hình mượt mà hơn. Tôi chỉ bị bối rối khi nói đến những hang động nối dài.

Tôi hy vọng sẽ có được thứ gì đó giống như hệ thống hang động của Minecraft. Chúng dường như rất kết nối với nhau, phân nhánh ngẫu nhiên theo gần như bất kỳ hướng nào và gần như bất kỳ điểm nào trong hang sẽ có một cái nhìn khá tròn với bán kính khá bằng nhau trong suốt (không phải là từ ngữ tốt nhất, nhưng không hoàn toàn chắc chắn về cách khác để đặt nó) .

Thách thức lớn nhất để tạo ra các hang động như tôi muốn là tôi muốn tạo ra thế giới một cách nhanh chóng. Hiện tại thế giới được tạo ra một đoạn bởi chunk, bắt đầu từ nơi người chơi đang ở và nó tạo ra từ đó. Tôi sẽ KHÔNG muốn tạo ra bất kỳ thế giới nào và sau đó đào hang bằng cách sử dụng mô hình lang thang, automata di động, v.v.

Có bất kỳ thuật toán nổi tiếng nào có thể được sử dụng cho việc này không? Nếu vậy, có ai muốn chia sẻ cách họ làm điều gì đó tương tự không? Tôi đánh giá rất cao bất kỳ sự giúp đỡ nào.

Một ví dụ tốt: nhập mô tả hình ảnh ở đây


5
Hãy nhìn vào đây , và cuộn xuống.
William Mariager

Có một số tạp chí dành cho nhà phát triển trò chơi trong vòng 24 tháng qua có thảo luận chuyên sâu về cách thực hiện những gì bạn đang cố gắng thực hiện. Tôi sẽ nhấn trang web của họ.
Joey Green

@JoeyGreen Tên tạp chí là gì? Hay bạn có một liên kết đến trang web của họ?
jumpnett

1
Nó được gọi là tạp chí phát triển trò chơi. gdmag.com . Bạn có thể nhận được đăng ký và nhận phiên bản pdf của tạp chí trong hơn 10 năm qua. Nếu bạn đăng ký, có một cách để tìm kiếm thông qua các vấn đề trước đó và tìm ra vấn đề bạn muốn.
Joey Green

Câu trả lời:


30

Hang động của Minecraft được tạo ra bằng phương pháp "giun perlin". Máy phát điện rắn qua địa hình và chui ra một đường hầm. Minecraft không sử dụng tiếng ồn perlin 3d để tạo hang động, bởi vì nó có xu hướng để lại các túi không liên kết trong địa hình. Các hang động Minecraft không được tạo ra thông qua tiếng ồn 3d Perlin kể từ các phiên bản Alpha đầu tiên.

Dưới đây là các hang động trong Gnomescroll được tạo từ phương pháp "sâu perlin".

Hệ thống hang động Gnomescroll Góc nhìn người thứ nhất 1

Hệ thống hang động Gnomescroll Góc nhìn người thứ nhất 2

Hệ thống hang động Gnomescroll Người thứ ba Xem 2

Đây là libnoise "Perlin Worms" từ hướng dẫn libnoise. Kỹ thuật tái tạo chặt chẽ các hang động được tạo ra trong Minecraft.

Linoise Hướng dẫn sâu Perlin

Các thông số rắn ảnh hưởng đến chất lượng của hệ thống hang động và xác định các hang động thẳng đứng như thế nào và chúng thay đổi hướng nhanh như thế nào. Các hang động trong nhánh minecraft và bán kính của đường hầm hang được thay đổi theo chiều dài của các hang động.

Minecraft tạo ra các hang động trên một đoạn bằng cơ sở chunk. Cách tiếp cận được yêu cầu rất phức tạp và chưa có ai tạo ra hoàn toàn công cụ tạo hang động của Minecraft, mặc dù có sự quan tâm của các nhà điều hành máy chủ.

Cách tiếp cận có khả năng nhất tạo ra các hang động rắn chunk bằng chunk khi bản đồ vô hạn được tạo ra và mở rộng ra bên ngoài. Các hang động trên khối hiện tại là các chức năng của các hạt hang động trên các khối N gần nhất đối với một số N. Sử dụng một trình tạo số ngẫu nhiên là một hàm của các tọa độ khối để gieo các hang động, có thể tính toán các hang động trên khối hiện tại cho một bản đồ vô hạn trong khi chỉ đánh giá các khối trong bán kính khối hữu hạn.


3
Bạn có thể thêm một số thông tin hoặc tài nguyên để tìm hiểu về điều "sâu perlin" này không?
David Gouveia

1
Đây là hướng dẫn về "sâu perlin
HaltingState

Không cần thiết, nhưng nếu bạn có thể giải thích về đoạn cuối đó, tôi sẽ đánh giá rất cao nó. Để tạo một con sâu, tôi cho rằng bạn cần một điểm bắt đầu cho mỗi con sâu, cần phải nằm trong N khối của bất kỳ người chơi nào trong đó N là độ dài tối đa của một con sâu.
Thần thoại

3
Chính xác. Mỗi con sâu có một điểm bắt đầu và bị chấm dứt nếu nó đi lang thang ngoài bán kính khối nhất định. Có một trình tạo số ngẫu nhiên tạo ra một chuỗi số ngẫu nhiên giả ngẫu nhiên là một hàm của tọa độ khối. Các số ngẫu nhiên này xác định vị trí và số lượng giun bắt nguồn từ nút đó. Giun cũng có thể phân nhánh. Gánh nặng tính toán sẽ giảm nếu giun có tính "cục bộ" hơn và không thể mạo hiểm nhiều hơn bán kính khối nhỏ.
Dừng lại vào

Có lẽ không chính xác những gì tôi muốn nghe, nhưng những gì tôi đang mong đợi. Cảm ơn một lần nữa HaltingState. :)
Thần thoại

7

Tôi sẽ tạo ra một đám mây các điểm bên trong các khu vực có địa hình vững chắc - bạn có thể thử nghiệm với các mật độ khác nhau. Sau đó, tôi sẽ sử dụng một thuật toán như một cây bao trùm tối thiểu để kết nối tất cả các điểm - điều này sẽ đảm bảo rằng mọi khu vực đều có thể tiếp cận được. Sau đó, chỉ cần vẽ các vùng rỗng lớn (bao gồm không khí) từ nút này sang nút khác (tức là một dòng voxels dày).


Tôi chỉ có thể không hiểu chính xác ý của bạn là gì, nhưng làm thế nào để tôi làm điều này một cách nhanh chóng khi thế giới tạo ra?
Thần thoại

Một cách có thể là tạo cây bao trùm tối thiểu trong mỗi đoạn riêng biệt, sau đó kết nối từng đoạn bằng cách tìm hai nút gần nhất giữa hai khối. Sau khi một đoạn được điền vào bằng thuật toán địa hình mặc định của bạn, bạn có thể làm rỗng nó xung quanh cây bao trùm tối thiểu.
Gavan Woolery

1
một giải pháp khác (dễ dàng hơn), mặc dù kém hiệu quả hơn và có lẽ là "ồn ào" hơn, là sử dụng chuyển động brownian để tạo ra một con đường (giống như một con kiến ​​đào xung quanh một cách ngẫu nhiên).
Gavan Woolery


1

Sử dụng hàm tiếng ồn để gán giá trị cho mỗi khối để xác định xem nó có đường hầm hay không và sau đó sử dụng chúng để quyết định nơi đặt hang. Nếu bạn muốn các đường hầm, chỉ cần sử dụng nhiều chức năng tiếng ồn hơn (với các hạt khác nhau) và sử dụng các giá trị của chúng để xác định xem có đường hầm hay không. Sau đó, sử dụng các chức năng "vẽ" thông thường để tạo các đường hầm. Để làm cho mọi thứ thực tế hơn, sử dụng nhiều tiếng ồn hơn để thực hiện chuyển vị ngẫu nhiên cho các điểm gốc của các hang động / đường hầm nói trên.

Nếu bạn không muốn sử dụng nhiều chức năng tiếng ồn, bạn có thể thăm dò ở khoảng cách lớn hơn - ví dụ, thay vì làm ồn3d (2,2,2) cho chunk tại (2,2,2) làm noise3d (2,2, 16) và sử dụng (2,2,16) cho một giá trị, (2,2,17) cho giá trị thứ hai, v.v .... sau đó chỉ cần điều chỉnh tần số của bạn cho phù hợp để làm cho tất cả các giá trị độc lập hoặc tương quan ở quy mô ngắn.

Để thay đổi mật độ hang động trên toàn thế giới, hãy sử dụng chức năng tần số thấp hơn khác sẽ ảnh hưởng đến các giá trị nói trên.

Trong trường hợp điều này dẫn đến các hang động lộn xộn, chỉ cần tăng khoảng cách của các điểm liên kết đã nói hoặc điều chỉnh thuật toán.

Tôi không chắc liệu Minecraft có làm hang như thế này không (mặc dù tôi nghĩ vậy), nhưng giải pháp này sẽ mang lại kết quả khả quan.


-5

đây là

Mặc dù hầu hết các hang động như những người ở trên đều sử dụng sâu Perlin , một số người thà làm điều đó bằng tay. Bằng cách này, họ có thể làm cho nó theo cách họ muốn nó chính xác chặn cho khối. Một hang động được tạo ra bằng cách sử dụng sâu Perlin có thể không chính xác và chỉ có thể làm cho hang cao 5 feet và rộng 6 feet, điều này có thể không chính xác vì bạn có thể muốn nó cao 10 feet và rộng 15 feet.

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.