Làm cách nào để loại bỏ địa hình nổi khi được tạo bằng Tiếng ồn Perlin 3D?


10

Tôi hiện đang sử dụng 3D Perlin Noise để tạo địa hình ngẫu nhiên kết hợp với Marching Cubes.

Vấn đề của tôi dường như nằm ở việc mở rộng chức năng tiếng ồn để có được độ cao hợp lý trong địa hình của tôi. Nếu chỉ có một quãng tám được sử dụng, tất cả các điểm liên quan đến nhiễu rõ ràng được nội suy dẫn đến dữ liệu khá trơn tru. Tuy nhiên, để có được phần nhô ra / hang động / địa hình lởm chởm, tôi phải sử dụng nhiều quãng tám với biên độ khác nhau và / hoặc chia tỷ lệ các giá trị kết quả theo chiều cao 'tối đa' mà tôi muốn trên bản đồ.

Tôi có thể đang thiếu một cái gì đó, nhưng bằng cách sử dụng các hình khối diễu hành với tiếng ồn perlin 3D, tôi thường xuyên có được các mảnh địa hình nổi.

Bất kỳ ý tưởng nào về cách tôi có thể sửa lỗi này hoặc nếu có các chức năng nhiễu khác tôi có thể sử dụng để có kết quả như tôi đang mô tả? Tôi muốn đồi / thung lũng / núi / hồ / vv. Không cần các bit nổi tách biệt với phần còn lại của bản đồ. Tôi tin rằng đây là một vấn đề tương tự như những gì Minecraft có khi nó có địa hình chỉ thỉnh thoảng bay lơ lửng trên bầu trời theo thế hệ.

Cảm ơn vì sự giúp đỡ, Thần thoại

Câu trả lời:


9

Có lẽ cách duy nhất để hoàn toàn thoát khỏi địa hình nổi là kiểm tra kết nối. Tùy thuộc vào kích thước bản đồ của bạn, đó có thể là một tùy chọn. Bạn có thể làm điều đó bằng cách chọn điểm cơ bản, giống như tận cùng của thế giới của bạn. Sau đó, đảm bảo tất cả các voxels của bạn là:

  1. Kết nối với cơ sở.
  2. Đã kết nối với một voxel được kết nối với cơ sở.

Có khả năng bắt đầu từ một điểm được kết nối đã biết (như dưới cùng của thế giới của bạn), sau đó thực hiện lần đầu tiên các voxels được kết nối sẽ hoạt động khá tốt. Hãy chắc chắn rằng bạn đang gắn cờ các voxels như được kết nối trong khi bạn đi. Bạn có thể làm điều này mỗi chunk.

Ngoài ra, có những cách ít tốn kém hơn để giảm thiểu, nhưng không loại bỏ hoàn toàn địa hình nổi.

  • Độ lệch của gradient : Bạn có thể thiên vị vị trí của các voxels rắn với một gradient. Hàm gradient sẽ giảm mạnh sau khi bạn ở trên "mặt đất". Bài viết này nói về việc sử dụng một gradient và có một số mẹo gọn gàng khác.

  • Tiếng ồn bản đồ chiều cao: Thay vào đó, bạn có thể tạo tiếng ồn dưới dạng bản đồ chiều cao. Điều này sẽ loại bỏ các phần nhô ra và hang động, nhưng bạn có thể mô phỏng những phần đó với một lớp tiếng ồn trừ thêm.

  • Tiếng ồn ít ồn hơn : Sử dụng ít quãng tám hơn trong tiếng ồn địa hình của bạn và tạo ra tiếng ồn trừ để có được phần nhô ra và hang động.


Địa hình chỉ có thể được kết nối thông qua đoạn liền kề nếu đó là phần nhô ra từ đó.
Loren Pechtel

@Loren: Điều đó hoàn toàn tốt mặc dù. Miễn là công cụ cho phép bạn giải quyết các khối theo chỉ số đầy đủ, nó sẽ hoạt động mà không có vấn đề gì.
Phil

@LorenPechtel Tôi nói bạn có thể làm điều đó trên một đoạn, nhưng bạn cần kiểm tra các đoạn liền kề khi bạn ở cạnh của một đoạn. Điều này có thể trở thành một vấn đề khi tạo địa hình mới và chưa tạo ra đoạn liền kề. Khi bạn gặp tình huống này khi bạn có địa hình nổi tiềm năng, bạn có thể tạo ra đoạn liền kề hoặc sử dụng thuật toán tiếng ồn để phân tích các voxels cho đến khi bạn tìm thấy "nền tảng" hoặc kết nối đã biết với đoạn hiện tại.
MichaelHouse

0

có thể đã quá muộn để trả lời, nhưng bây giờ tôi đã bắt đầu với thứ tạo ra địa hình voxel này, với Perlin Noise và tôi đã tìm ra cách tạo ra địa hình mà không cần những mảnh nổi đó. Tôi nghĩ rằng điều này có thể giúp bạn. Vì vậy, để tạo địa hình, trước tiên tôi tạo một sơ đồ chiều cao hơn là tôi đọc các pixel từ sơ đồ chiều cao đó. Bây giờ đến phần thú vị, tôi đọc giá trị "độ sáng" (thực ra là thang độ xám) của từng pixel trên sơ đồ chiều cao đó và cho tôi chiều cao của phần cụ thể đó trên bản đồ, sau đó để tạo địa hình tôi cho rằng bản đồ chiều cao này là địa hình của tôi nhìn từ trên cao, vì vậy nếu giá trị thang độ xám của một pixel (sau khi được ánh xạ tới địa hình "maxHeight" của tôi) trên bản đồ độ cao đó, hãy giả sử 30, điều đó có nghĩa là ở điểm cụ thể đó trong địa hình của tôi, tôi sẽ chỉ tạo ra 30 voxels trong trục y và điều này mang lại cho tôi một địa hình không có phần nổi. Nếu bạn muốn hang động và vân vân, bạn có thể áp dụng một tiếng ồn khác trên bản gốc (dưới bề mặt) để tạo ra những hang động đó. Hy vọng điều này làm việc cho bạn.


1
Tôi tin rằng điều này tương tự như gạch đầu dòng thứ hai trong câu trả lời của tôi ở trên?
MichaelHouse
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.