Tôi đang thực hiện cải thiện tiếng ồn Perlin . Tính năng chính của nó cho ngẫu nhiên là bảng hoán vị được mã hóa cứng, cung cấp các gradient cơ bản ngẫu nhiên nhưng có thể tái tạo tại các ô của lưới. Bảng hoán vị chỉ là hoán vị của các số nguyên 0..255
và thường là bảng sau (được sao chép trực tiếp từ triển khai ban đầu của Perlin):
{151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7,
225, 140, 36, 103, 30, 69, 142, 8, 99, 37, 240, 21, 10, 23, 190, 6, 148, 247,
120, 234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32, 57, 177, 33,
88, 237, 149, 56, 87, 174, 20, 125, 136, 171, 168, 68, 175, 74, 165, 71, 134,
139, 48, 27, 166, 77, 146, 158, 231, 83, 111, 229, 122, 60, 211, 133, 230, 220,
105, 92, 41, 55, 46, 245, 40, 244, 102, 143, 54, 65, 25, 63, 161, 1, 216, 80,
73, 209, 76, 132, 187, 208, 89, 18, 169, 200, 196, 135, 130, 116, 188, 159, 86,
164, 100, 109, 198, 173, 186, 3, 64, 52, 217, 226, 250, 124, 123, 5, 202, 38,
147, 118, 126, 255, 82, 85, 212, 207, 206, 59, 227, 47, 16, 58, 17, 182, 189,
28, 42, 223, 183, 170, 213, 119, 248, 152, 2, 44, 154, 163, 70, 221, 153, 101,
155, 167, 43, 172, 9, 129, 22, 39, 253, 19, 98, 108, 110, 79, 113, 224, 232,
178, 185, 112, 104, 218, 246, 97, 228, 251, 34, 242, 193, 238, 210, 144, 12,
191, 179, 162, 241, 81, 51, 145, 235, 249, 14, 239, 107, 49, 192, 214, 31, 181,
199, 106, 157, 184, 84, 204, 176, 115, 121, 50, 45, 127, 4, 150, 254, 138, 236,
205, 93, 222, 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156, 180};
Để tham khảo, một miếng vá nhỏ được tạo ra từ tiếng ồn do bảng này tạo ra trông như thế này:
Tuy nhiên, tôi muốn mã linh hoạt hơn một chút và cho phép bảng này được xáo trộn lại để tôi có thể tạo trường nhiễu hoàn toàn mới (thay vì chỉ lấy mẫu ở một độ lệch khác). Nhưng không phải tất cả các hoán vị đều được xáo trộn như nhau. Trong trường hợp không chắc là hoán vị ngẫu nhiên chỉ là mảng được sắp xếp từ 0
đến 255
, tiếng ồn sẽ trông như thế này:
Điều đó hơi tệ. Tất nhiên, có cơ hội trong , đây không phải là một trường hợp tôi cần phải lo lắng. Nhưng chắc chắn, đây không phải là hoán vị duy nhất mang lại những đồ tạo tác rất đáng chú ý. Các hoán vị được sắp xếp ngược và gần như sắp xếp có thể có cùng các vấn đề. Vậy có bao nhiêu hoán vị khác là không phù hợp? Giả sử mã sẽ được sử dụng trong một trò chơi phổ biến để tạo ra một thế giới ngẫu nhiên ở phía trước, sẽ vẫn khó chịu nếu mỗi thế giới thứ 100.000 được tạo ra sẽ nhìn từ xa thường xuyên.
Vì vậy, câu hỏi là, chính xác điều gì tạo ra một bảng hoán vị tốt (hoặc xấu) và làm cách nào để đánh giá chất lượng của bảng hoán vị theo lập trình, để tôi có thể chia sẻ lại bảng một lần nữa trong trường hợp không chắc là tôi sẽ "xấu" " bàn?