2011-12-11 27 views
10

Tại số gamedev.SE, chúng tôi phát hiện ra rằng flash implementation of Perlin-noise dường như bị lệch hoàn toàn so với các triển khai khác.Làm thế nào là nhiễu Perlin trong flash được thực hiện?

Tôi không tìm thấy bất kỳ chi tiết triển khai trực tuyến nào, nhưng tôi tự hỏi liệu có ai có thể biết thuật toán nào đang được sử dụng cho Perlin-noise trong flash hay không.

Sử dụng bitmapData.perlinNoise(32, 32, 1, 200, false, false, 7, true); tạo ra hình ảnh như thế này mà chỉ có các tham số numOctaves đã được thay đổi (1, 2, 4 từ trái sang phải):

perlin noise in flash

Tuy nhiên hiện thực khác của Perlin nhiễu trông khá khác nhau. Ví dụ hình ảnh từ Wikipedia article about Perlin-noise:

Perlin noise as depicted on Wikipedia

Cũng this Actionscript Implementation of Perlin-noise tạo ra kết quả khá khác nhau, như bạn có thể nhìn thấy trong hình ảnh sau (quãng tám 1, 24 từ trái sang phải):

Perlin noise AS3

Điều tôi quan tâm nhất là giao diện của tiếng ồn chỉ với một quãng tám. Trong việc thực hiện flash, bạn có thể thấy rõ ràng rằng tiếng ồn đang hình thành một thứ gì đó giống như các đốm màu tách rời.

Quan trọng: Tiếng ồn phát ra trong flash sử dụng false cho tham số fractalNoise. Nếu fractalNoise được đặt thành true, kết quả thực sự rất giống với kết quả từ Wikipedia và các triển khai khác.

Các mô tả về các thông số đọc như sau:

giá trị Một Boolean. Nếu giá trị là đúng, phương thức tạo ra nhiễu fractal; nếu không, nó tạo ra sự hỗn loạn. Một hình ảnh với sự bất ổn có thể nhìn thấy sự gián đoạn trong gradient có thể làm cho nó hiệu ứng hình ảnh sắc nét gần đúng hơn như ngọn lửa và sóng biển.

Như chúng ta có thể thấy, họ nói về nhiễu loạn để mô tả phương pháp tạo tiếng ồn. Vì vậy, tôi đoán câu hỏi là: Đó là đầu ra được tạo ra bởi flash vẫn Perlin-tiếng ồn? Hay có một cái tên khác cho loại tiếng ồn đó? Và quan trọng nhất: Ai có thể tìm thấy một thực hiện để tạo ra tiếng ồn như thế này?

Trả lời

1

nó được một thời gian looong kể từ khi tôi làm bất cứ xử lý hình ảnh, nhưng có lẽ một số những điều này sẽ giúp:

Tài liệu tham khảo: (Và những người biết câu trả lời ...) http://www.kelvinluck.com/assets/perlin_noise_experiments/, http://www.quasimondo.com/archives/000672.php, http://www.sjeiti.com/?p=305

Sự hiểu biết của tôi là việc triển khai Flash sẽ xuất ra các kết quả dựa trên các phép tính nguyên chứ không phải là các phao. Điều này sẽ giải thích tại sao kết xuất nhanh, nhưng cũng hơi khác về diện mạo.

Hy vọng rằng ít nhất bạn đặt đúng hướng ...

+0

Xin lỗi, nhưng không phải vậy. Tôi thậm chí đã sử dụng mã từ một trong các liên kết của bạn để tạo ra hình ảnh của nhiễu mà tôi * không * quan tâm. Việc triển khai flash không khác vì nó là số nguyên (không phải) và nếu bạn xuất một hình ảnh ở cuối, bạn sẽ có số nguyên, không có cách nào xung quanh. Việc triển khai flash cho phép bạn chọn giữa nhiễu "nhiễu loạn" và "thông thường". Những gì tôi quan tâm là một thuật toán cho ** nhiễu loạn **. Nếu bạn tìm kiếm hình ảnh của Google cho "tiếng ồn hỗn loạn" và "tiếng ồn perlin", bạn sẽ thấy sự khác biệt. – bummzack

4

Có một số nhầm lẫn về thuật ngữ, rõ ràng. Nhưng về mặt kỹ thuật, tiếng ồn mà Perlin mô tả là một quãng tám đơn, không có bất kỳ sự tổng kết nào. Nó trông giống như hình ảnh Wikipedia đầu tiên.

Tôi chắc chắn hầu như không ai thực sự sử dụng điều đó. Mọi người thêm lên một vài quãng tám, thường làm cho biên độ lớn hơn ở tần số thấp hơn. "Lớn hơn bao nhiêu" là sự kiên trì. Dù sao, khi bạn thêm nó lên, nó được gọi là tiếng ồn fractal.

"nhiễu Perlin" thực sự chỉ có nghĩa là bạn tạo ra một loạt các gradient ngẫu nhiên và nội suy chúng. Nhưng mọi người đề cập đến tiếng ồn fractal như tiếng ồn Perlin, bởi vì nó là một tổng của một số sóng nhiễu Perlin.

Lưu ý rằng thường xuyên, như trong các triển khai tham chiếu, các giá trị đầu ra của hàm Perlin và Simplex tập trung vào 0 và (đôi khi) được chia tỷ lệ thành [-1, +1]. Ngoài ra, đây là những tương tự nhưng không chính xác giống hệt nhau - tiếng ồn Simplex trông hơi khác nhau. Đôi khi chúng được gọi là nhiễu Perlin, vì Ken Perlin ban đầu nghĩ về tiếng ồn Perlin (anh gọi nó là "tiếng ồn"), và sau đó tăng tốc nó bằng cách loại bỏ một số dư thừa và tạo ra nhiễu đơn giản (mà anh gọi là "tiếng ồn được cải thiện")). Simplex có thể trông hơi tối hơn một chút (lưới là khác nhau vì vậy rõ ràng nó trông khác nhau) và các phần thông qua nhiễu cao hơn không hoạt động giống như với Perlin.

Các vấn đề liên quan