Tại sao nó đắt gấp đôi để tạo ra một chức năng tiếng ồn có thể được lát gạch?


12

Tôi đã thấy ở một số nơi làm cho vòng lặp nhiễu Perlin liên tục yêu cầu tính toán nó hai lần theo các cách hơi khác nhau và tổng hợp hai kết quả.

Câu hỏi thường gặp về toán học tiếng ồn Perlin này đưa ra một công thức:

Ftôioop(x,y,z)= =(t-z)F(x,y,z)+zF(x,y,z-t)t

để tạo một hàm nhiễu lặp theo hướng . Nó cũng đề cập rằng việc mở rộng này, để lặp trong 2 kích thước sẽ mất 4 đánh giá của và để lặp trong 3 kích thước sẽ phải mất 8 đánh giá của .FzFF

Tôi hiểu rằng điều này mang lại sự kết hợp liền mạch giữa các ô không chỉ liên tục mà còn liên tục khác biệt, nhưng tôi trực giác mong đợi rằng đó là trường hợp nếu chức năng nhiễu được đánh giá đơn giản một lần với các điểm lưới giảm modulo kích thước ô yêu cầu. Nếu chức năng nhiễu chỉ bao giờ dựa trên các điểm lưới xung quanh ngay lập tức (4 đối với nhiễu 2D, 8 đối với nhiễu 3D) thì chắc chắn chỉ cần sử dụng các điểm lưới ngoài cùng bên trái khi điểm cần tính vượt qua cạnh phải của ô sẽ cho chất lượng tiếng ồn như giữa các điểm lưới khác?

Vì tôi đã thấy cách tiếp cận tính toán nhiều lần này ở một số nơi, tôi cho rằng nó phải có một số lợi thế, nhưng tôi đang cố gắng để thấy nhược điểm khi chỉ đơn giản là bọc các điểm lưới trở lại từ đầu khi chúng quá lớn. Tôi đang thiếu gì?

Câu trả lời:


18

Thật không may là mọi người thường khuyên điều này. Pha trộn giữa hai (hoặc bốn, v.v.) bản dịch của hàm nhiễu theo cách đó là một ý tưởng khá tồi. Không chỉ đắt tiền, nó thậm chí còn không mang lại kết quả chính xác!

Tiếng ồn Perlin Tiếng ồn hỗn hợp

Bên trái là một số tiếng ồn Perlin. Bên phải là hai trường hợp nhiễu Perlin, xếp chồng lên nhau và trộn từ trái sang phải.

Sự khác biệt là loại tinh tế, nhưng bạn có thể thấy rằng hình ảnh thứ hai có độ tương phản thấp hơn trong một cột dọc chạy xuống giữa. Đó là nơi pha trộn 50% giữa hai trường hợp khác nhau của chức năng nhiễu. Một sự pha trộn như vậy không giống như chức năng tiếng ồn ban đầu: nó trông giống như một mớ hỗn độn.

OK, vì vậy nó không phải là khá xấu chỉ cần nhìn vào tiếng ồn thô ... nhưng nếu bạn sau đó làm bất cứ biến đổi phi tuyến vào hình ảnh, độ tương phản không đồng dạng có thể gây ra vấn đề. Ví dụ, đây là những hình ảnh đạt ngưỡng 60%. (Chẳng hạn, hãy nghĩ đến việc tạo ra các hòn đảo trong một đại dương.)

Ngưỡng tiếng ồn Perlin Ngưỡng hỗn hợp tiếng ồn Perlin

Bây giờ bạn có thể thấy rõ hình ảnh bên phải có ít hơn, các vùng trắng nhỏ hơn ở giữa.

Giống như bạn đã đề cập, đối với nhiễu dựa trên lưới như Perlin, một cách tốt hơn là xếp các gradient giả ngẫu nhiên tại các điểm lưới. Điều đó dễ dàng và rẻ tiền, và sau đó bạn có thể áp dụng thuật toán nội suy cho các gradient như bình thường (giống như phép nội suy song tuyến tính của một kết cấu ốp lát). Điều này tạo ra tiếng ồn ốp lát mà không có bất kỳ tạo tác kỳ lạ nào, bởi vì nó hoạt động với thuật toán nhiễu cơ bản hơn là trên đỉnh của nó. Bạn có thể sử dụng một chiến lược tương tự với tiếng ồn Worley (tiếng ồn di động) bằng cách xếp các điểm tính năng ngẫu nhiên mà nó sử dụng làm cơ sở.

Tuy nhiên, với nhiều quãng tám, không phải lúc nào cũng dễ dàng. Nếu tỷ lệ tương đối giữa các quãng tám (còn gọi là "lacunarity") không phải là số nguyên hoặc số hữu tỷ đơn giản, thì bạn có thể không tìm thấy điểm ốp lát thuận tiện trong đó tất cả các lưới của quãng tám khớp với nhau. Bạn có thể xếp từng quãng tám một cách độc lập, nhưng tiếng ồn tổng thể vẫn không thể điều chỉnh được trong trường hợp đó.


4
Hình ảnh cạnh nhau thực sự tạo ra sự khác biệt để có được cảm giác trực quan cho lời giải thích. Tôi sẽ ghi nhớ điều này cho câu trả lời của riêng tôi.
trichoplax
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.