Làm thế nào tôi có thể tạo ra tiếng ồn thủ tục trên một quả cầu?


15

Tôi muốn tạo ra tiếng ồn thủ tục trên bề mặt của một quả cầu (ví dụ để tạo ra các hành tinh hoặc các quả bóng có kết cấu bằng đá cẩm thạch). Tất nhiên, tôi chỉ có thể lấy một thuật toán nhiễu tiêu chuẩn và ánh xạ nó lên quả cầu, nhưng điều này có tất cả các vấn đề khi chiếu một mặt phẳng lên một quả cầu, như biến dạng trên các cực hoặc ở nơi khác.

Tôi cho rằng tôi có thể tạo ra tiếng ồn âm lượng và "cắt" quả cầu, nhưng điều này có vẻ không hiệu quả một cách không cần thiết - và nếu tiếng ồn có một số vật phẩm dựa trên lưới, chúng sẽ không xuất hiện đồng đều trên quả cầu. Hơn nữa, ít nhất là trong trường hợp nhiễu Simplex, việc cắt các lát 2D ra khỏi nhiễu 3D thường trông khác với tạo ra nhiễu 2D ngay lập tức.

Có cách nào để tránh những vấn đề này, ví dụ như bằng cách tạo ra tiếng ồn tự nhiên trên quả cầu không? Tiếng ồn ít nhất phải có chất lượng của tiếng ồn Perlin , lý tưởng nhất là tiếng ồn Simplex .


Có lẽ phép chiếu ba mặt, như đã thấy trong GPU Gems 3 ? Câu hỏi đặt ra là liệu tiếng ồn có bị mờ đi hay không mong muốn khi nó bị trộn lẫn giữa các hình chiếu khác nhau.
Nathan Reed

Tôi đã thêm một phương pháp có thể vào bài viết của tôi. Nó có thể có giá trị làm rõ câu hỏi của bạn với các yêu cầu chi tiết hơn. tức là tại sao một lát 2D của tiếng ồn 3D không thỏa mãn yêu cầu thị giác của bạn? Yêu cầu hiệu suất của bạn là gì?
John Calsbeek

@JohnCalsbeek Thành thật mà nói, tôi không có bất kỳ yêu cầu khó khăn nào trong tay. Đây chỉ là một câu hỏi mà tôi tò mò về điều mà tôi nghĩ rằng tôi sẽ thử bản beta riêng tư. Tất nhiên, việc cắt một lát 2D ra khỏi nhiễu 3D sẽ đủ cho nhiều ứng dụng, nhưng tôi chắc chắn rằng nó sẽ có một số tác động về hiệu suất và bất đẳng hướng (có thể hoặc không thể nhận thấy). "Cắt quả cầu ra khỏi tiếng ồn 3D là lựa chọn tốt nhất của bạn, bởi vì ..." chắc chắn là một câu trả lời hợp lệ.
Martin Ender

Bạn có thể kiểm tra chiếc shadertoy này có tiếng ồn trên một quả cầu: shadertoy.com/view/4sfGzS
Alan Wolfe

Câu trả lời:


15

Tôi chỉ xem xét việc sử dụng nhiễu 3D và đánh giá nó trên bề mặt của quả cầu.

Đối với nhiễu gradient tự nhiên trong miền của bề mặt của hình cầu, bạn cần một mẫu điểm thường xuyên trên bề mặt có thông tin kết nối tự nhiên, với diện tích gần bằng nhau trong mỗi ô, để bạn có thể nội suy hoặc tính tổng các giá trị liền kề. Tôi tự hỏi nếu một cái gì đó như lưới Fibonacci có thể hoạt động:

Lưới Fibonacci trên bề mặt của một hình cầu

Tôi đã không nhai qua toán học để xác định xem sẽ có bao nhiêu công việc để tìm ra các chỉ số và khoảng cách với bốn người hàng xóm của bạn (tôi thậm chí không biết liệu cuối cùng bạn có bốn người hàng xóm được xác định rõ hay không), và tôi nghi ngờ nó có thể kém hiệu quả hơn là chỉ sử dụng nhiễu 3D.

Chỉnh sửa: Một người khác đã nhai qua toán học! Xem bài viết mới này về Ánh xạ Fibonacci hình cầu . Có vẻ như nó sẽ đơn giản để thích ứng với tiếng ồn hình cầu.


Nếu bạn đang hiển thị một hình cầu, không chỉ đánh giá tiếng ồn trên bề mặt của hình cầu, và sẽ ổn khi kết hợp hình cầu của bạn với độ phân giải của mạng nhiễu của bạn, bạn có thể tạo một lưới trắc địa trên bề mặt của hình cầu (một icosahedron được chia nhỏ, thông thường):

Hình cầu trắc

Mỗi đỉnh của hình cầu có thể có độ dốc được tạo ngẫu nhiên cho nhiễu gradient. Để có được thông tin này cho trình đổ bóng pixel (trừ khi bạn muốn nội suy đơn giản như nhiễu giá trị), bạn có thể cần một kỹ thuật như kết xuất khung dây của bài viết này với tọa độ barycentric : thực hiện kết xuất không theo dõi, với mỗi đỉnh chứa tọa độ nhị phân của đỉnh đó trong tam giác . Sau đó, bạn có thể đọc từ SV_PrimitiveID(hoặc tương đương OpenGL) trong trình đổ bóng pixel, đọc ba độ dốc nhiễu từ các đỉnh dựa trên hình tam giác bạn đang sử dụng và sử dụng bất kỳ phép tính nhiễu nào bạn muốn bằng cách sử dụng tọa độ nhị phân nội suy.

Tôi nghĩ phần khó nhất của phương pháp này là đưa ra một sơ đồ để ánh xạ ID tam giác của bạn thành ba mẫu để tìm kiếm các giá trị nhiễu ở mỗi đỉnh.

Nếu bạn cần nhiều quãng tám nhiễu hoặc nhiễu ở độ phân giải tốt hơn mô hình hình cầu của bạn, bạn có thể thực hiện một lưới trắc địa thô với các đỉnh và thực hiện một vài cấp độ phân chia trong bộ đổ bóng pixel. tức là từ tọa độ nhị phân, hãy tìm ra tam giác được chia nhỏ nào nếu lưới được nối tiếp, và sau đó tìm ra ID nguyên thủy và tọa độ nhị phân sẽ là gì đối với tam giác đó.


2
Tôi chưa bao giờ nghe nói về lưới Fibonacci trước đây; điều đó thật tuyệt
Nathan Reed

Đó là một bài báo hấp dẫn. Có vẻ như bạn có thể điều chỉnh các tham số để đưa gần hơn vào lưới vuông hoặc lưới lục giác, điều này sẽ cho phép các cách tiếp cận khác nhau để tạo ra tiếng ồn.
trichoplax

Tôi đã có một số kết quả không tồi khi nội suy gần các cạnh của gạch (được bao bọc cạnh), nhưng nó phụ thuộc vào hiệu ứng bạn đang cố gắng đạt được và các thông số tiếng ồn chính xác. Hoạt động tuyệt vời cho tiếng ồn hơi mờ, không tốt với những cái tăng đột biến / hạt mịn.
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.