Симплекс-шумСимплекс-шум (англ. Simplex noise) — метод побудови n-вимірної функції шуму, подібно до шуму Перлина («класичного шуму»), але з меншою кількістю артефактів і кращою продуктивністю. Кен Перлин розробив алгоритм у 2001 році щоб усунути обмеження класичної функції шуму, особливо за великої кількості вимірів. Переваги симплекс-шуму над шумом Перлина:
В той час як класичний шум інтерполює значення градієнтів вузлових точок сітки (тобто північно-східного, північно-західного, південно-східного й південно-західного для двовимірної сітки), симплекс-шум поділяє простір на симплекси (тобто -вимірні трикутники). Це зменшує кількість вузлів. Гіперкуб у вимірах має кутів, симплекс — лише . У 2D трикутники рівносторонні, але за більшої кількості вимірів симплекси лиш близькі до правильної форми. Симплекс-шум корисний для програм комп'ютерної графіки, які будують шуми для двох, трьох, чотирьох чи п'яти вимірів. За більшої кількості вимірів n-вимірні сфери навколо кутів симплекса знаходяться недостатньо щільно, тим самим занулюючи функцію на вільних ділянках простору. Деталі алгоритмуСимплекс-шум зазвичай реалізують як дво-, три-, чи чотиривимірну функцію, проте він може бути визначений для довільної скінченної кількості вимірів. Реалізація складається з чотирьох кроків: відхилення координат, поділ на симплекси, вибір градієнта і сумування ядер. Відхилення координатВхідні координати трансформують за допомогою формули: де Результатом є розміщення координати на решітці A*n, яка, по суті, є розміщенням вершин стільникового гіперкуба, розплющеного вздовж своєї головної діагоналі настільки, щоб відстань між точками (0, 0, …, 0) і (1, 1, …, 1) дорівнювала відстані між (0, 0, …, 0) і (1, 0, …, 0). Вихідні координати (x', y', …) дозволяють визначити, в яку комірку зміщеного одиничного гіперкуба потрапляє вхідна точка, (xb'=floor(x'), yb'=floor(y'), …), і її внутрішні координати (xi'=x'-xb', yi'=y'-yb', …). Поділ на симплексиКоли вищезгадане визначено, значення внутрішніх координат (xi', yi', …) сортуються за спаданням, щоб визначити, якій ортосхемі Шлефлі симплекса належить точка. Тоді результуючий симплекс складають з вершин, що відповідають впорядкованому обходу від (0,0, …, 0) до (1, 1, …, 1), і є n! варіантів, що можуть відповідати одній перестановці координат. Іншими словами, починаємо від нульової координати, потім послідовно додаємо ті, що відповідають найбільшому значенню внутрішньої координати, закінчуючи відповідником найменшого значення. Наприклад, точка (0.4, 0.5, 0,3) буде лежати всередині симплекса з вершинами (0, 0, 0), (0, 1, 0), (1, 1, 0), (1, 1, 1). Значення по осі ординат найбільше, тому визначення координат симплекса починатимемо з нього. Потім збільшуємо значення по осі абсцис, і так далі. Вибір градієнтаКожна вершина симплекса додається до базової координати відхиленого гіперкуба, потім хешується у псевдовипадковий градієнтний вектор. Хеш можна реалізувати багатьма способами. Варто звертати увагу на вибір множини градієнтів, щоб мінімізувати появу артефактів. Сумування ядерВнесок кожної з n+1 вершин симплекса враховується за допомогою суми радіально симетричних ядер з центром у кожній вершині. Спочатку за допомогою оберненої формули визначаються невідхилені координати: де Ця точка віднімається від вхідних координат, щоб отримати невідхилений вектор переміщення. Цей вектор потрібен для двох цілей:
Далі внесок ядра кожної суми визначається з рівняння де r2 зазвичай обирають рівним 0,5 чи 0,6. 0,5 забезпечує відсутність розривів, в той час як 0,6 може покращити зовнішній вигляд у застосунках, де розриви непомітні. 0,6 використовувався у оригінальній реалізації Кена Перлина. Правовий статусВикористання реалізації у 3D and higher для textured image synthesis покривається патентом U.S. Patent 6 867 776, якщо алгоритм реалізований з використанням специфічних методик, описаних у будь-якому з пунктів патенту. Див. такожПосилання
|
Portal di Ensiklopedia Dunia