Làm thế nào là một chức năng tiếng ồn perlin 3d được sử dụng để tạo địa hình?


20

Tôi có thể quấn đầu bằng cách sử dụng chức năng nhiễu perlin 2d để tạo giá trị độ cao nhưng tôi không hiểu tại sao chức năng nhiễu perlin 3d sẽ được sử dụng. Trong blog của Notch, http://notch.tumblr.com/post/3746989361/terrain-generation-part-1 , ông đã đề cập đến việc sử dụng chức năng nhiễu perlin 3d để tạo địa hình trên Minecraft. Có ai biết làm thế nào sẽ được thực hiện và tại sao nó sẽ hữu ích? Nếu bạn chuyển các giá trị x, y và z không có nghĩa là bạn đã có chiều cao?

Câu trả lời:


19

Nhiễu perlin 2D là tốt cho bản đồ chiều cao, nhưng trong trường hợp này có vẻ như anh ta không sử dụng bản đồ chiều cao. Thay vào đó anh ta có một lưới 3D, nơi bất kỳ ô nào cũng có thể trống. Điều này cho phép các hang động và các thành tạo như vậy, trong đó chiều cao mặt đất không phải là một giá trị duy nhất cho vị trí 2D đã cho.


14

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.

Nói một cách đơn giản, đối với mọi nơi có thể có khối, hàm nhiễu sẽ được ước tính và nếu nó> 0, khối sẽ được đặt. Chức năng tiếng ồn của notch bị lệch bằng cách thêm chiều cao từ mực nước vào giá trị của nó, đó là lý do tại sao các khu vực thấp hơn chủ yếu là rắn (chiều cao là âm lớn, vì vậy chiều cao + tiếng ồn cũng âm) và các khu vực cao hơn hầu như trống rỗng (chiều cao là dương lớn, vì vậy chiều cao + nhiễu cũng dương).

Có lẽ có một số thuật giả kim bổ sung để quyết định loại khối nào được tạo ra và khắc các hang động. Nhưng tôi đoán nó không liên quan trực tiếp đến chức năng tiếng ồn này.

Cũng lưu ý rằng phương pháp này hoạt động cho Notch vì Minecraft có địa hình dựa trên voxel. Nếu bạn đã cố gắng thực hiện điều đó trong một thế giới dựa trên đa giác, chỉ cần lấy mẫu hàm nhiễu là không đủ. Bạn phải sử dụng một số thuật toán để biến các mẫu thành một bề mặt và tạo các đa giác gần đúng với bề mặt này. Một thuật toán như vậy là diễu hành khối .


8

Tiếng ồn 3D trở thành bắt buộc nếu địa hình cần mạng lưới hang động và nhô ra.

Để trích xuất một isosurface từ thông tin mật độ, 2 kỹ thuật phổ biến nhất là Marching Cubes (MC) và Dual Contouring (DC) mới hơn. Cấu trúc dữ liệu cần thiết là khá khác nhau tùy thuộc vào phương pháp được chọn.

Như đã đề cập trước đây, bài viết về GPU Gems 3 của Geiss là một điểm khởi đầu rất có ý nghĩa để hiểu và thực hiện các địa hình MC trên GPU (Lưu ý rằng phương pháp MC của anh ấy chạy hoàn toàn trên GPU và cần ít nhất SM4 - có khả năng GS4).

Vì dữ liệu mật độ trên các voxel MC chỉ có thể nằm trên các cạnh của voxel, MC cổ điển có thể tạo ra âm lượng mà không giữ các tính năng cạnh sắc nét. DC không phải chịu nhược điểm này vì thông tin mật độ được thể hiện dưới dạng điểm 3D (bộ giảm thiểu QEF) đặt bất cứ nơi nào bên trong voxel cộng với dấu hiệu ở mỗi góc.

Mặt khác, MC không phải chịu các mặt tự giao nhau vì tất cả các tam giác được tạo ra được đặt trong các voxels tương ứng của chúng, trong khi DC cần các tính toán bổ sung để ngăn các giao điểm giữa các mặt được tạo. Các tác giả DC đã giải quyết vấn đề này trong một phiên bản cải tiến của thuật toán của họ.

http://www.cs.wustl.edu/~taoju/research/interfree_apers_final.pdf

http: //www.cs.ber siêu.edu / ~ jrs / mesh con / SeceferWarren2.pdf

Đồng nghiệp này cũng đề xuất một cách tiếp cận có khả năng sạch hơn dựa trên phân tích lồi / lõm để tránh tự giao nhau. Anh ta cũng sử dụng các quy tắc chia tách quad tốt hơn để giúp duy trì hướng của cạnh:

http://www2.mae.cuhk.edu.hk/~cwang/pub/TRIntersectionFreeDC.pdf

Classic MC cũng không phải là "không có crack" và có thể yêu cầu vá crack nếu chạy trên quãng tám không giới hạn. DC không bị vấn đề cuối cùng này.

Dưới đây là một khảo sát khá hay và đầy đủ về hầu hết các kỹ thuật trích xuất lưới: http : //www.cs.ber siêu.edu / ~ jrs / mesh /

Một cách tiếp cận octree / voxel về bản chất là "thân thiện với CSG", giúp dễ dàng lên kế hoạch cho một chiến lược cấp độ trò chơi "phá hủy" hoàn toàn gọn gàng, nhưng nếu cần thực hiện tất cả điều này trong một trò chơi, thì độ sâu của octree cũng sẽ cần phải nản lòng -phụ thuộc.

Nếu toàn bộ nội dung vừa với bộ nhớ hoặc được truyền phát chính xác, dữ liệu cũng có thể được sử dụng để hiển thị AO và tính toán vật lý / va chạm.


"Tiếng ồn 3D trở thành bắt buộc nếu địa hình cần mạng lưới hang động và nhô ra." Bắt buộc? Như trong, đây là cách duy nhất để tạo ra hang động và nhô ra? Không. Tôi đang tạo một sơ đồ chiều cao từ tiếng ồn perlin 2D và sau đó khắc các hang động và nhô ra vào nó như một bước riêng biệt, để có cái nhìn tự nhiên hơn. Thật sai lầm khi các nhà phát triển trò chơi trẻ vừa chớm nở nói rằng đây là cách DUY NHẤT để tạo ra các hang động và nhô ra trong một thế giới được tạo theo thủ tục.
Domarius

5

Tôi đoán, trong ví dụ cụ thể đó, là anh ta đã sử dụng giá trị z để xác định loại vật liệu nào: đá gốc, đá, bụi bẩn hoặc không khí.


-3

Minecraft sử dụng thuật toán diễu hành để tạo địa hình 3D. Tôi không có một lời giới thiệu cho điều này, tôi xin lỗi. Tôi không chắc chính xác những gì Notch đã nói khi ông đề cập đến hàm Perlin Noise - có lẽ là một hạt giống cho thuật toán khối diễu hành. Thêm thông tin ở đây:

Và một bài viết GPU Gems tuyệt vời nếu bạn quan tâm đến việc diễu hành:


2
Khối lập phương là một thuật toán để tạo lưới từ trường vô hướng. Điều đó có nghĩa là nó cần phải có dữ liệu trước, sau đó nó tạo ra một lưới để phù hợp với dữ liệu. Nó không phải để tạo dữ liệu hoặc địa hình.
MichaelHouse

-6
for (int x = 0; x < Width) 
{
  for (int y = 0; y < Depth) 
  {
    for (int z = 0; z < Height) 
    {
      if(z < Noise2D(x, y) * Height) 
      {
        Array[x][y][z] = Noise3D(x, y, z)
      } else {
        Array[x][y][z] = 0
      }
    } 
  } 
} 

2
-1; Ngay cả với việc làm rõ bạn đã thêm đây là một câu trả lời khá tệ, nó không giải thích rõ ràng mục đích của đoạn mã cũng như tác động ngữ nghĩa của nó đối với dữ liệu kết quả và nó không giải quyết được hầu hết các câu hỏi mà người dùng thực sự có.

Ive đã chỉnh sửa mã, làm thế nào bây giờ?
Maxim DC

Nó giải thích cách sử dụng nhiễu 3D để tạo địa hình, theo ý kiến ​​của tôi là đúng
Maxim DC

Sau đó giải thích điều này trong câu trả lời của bạn và giải quyết các câu hỏi mà người dùng đã có. Nếu không, đó là một câu trả lời deadcode.
Piddock Tom 'Blue'
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.