🌀 3D Поле Потоку Завихреного Шуму

Тисячі частинок рухаються у 3D полі завихреного шуму на канвасі. Завихрений шум (∇×F) є безрозбіжним, утворюючи плавні турбулентні потоки.

Генеративне мистецтвоІнтерактивно
Клік по канвасу розкидає частинки · P пауза · R скинути

Як це працює

Завихрений шум отримується обчисленням завихрення (∇×F) 3D потенційного шумового поля. Ключова математична властивість: дивергенція будь-якого завихрення дорівнює нулю (∇·(∇×F) = 0), що робить поле швидкостей безрозбіжним. Це означає відсутність "стоків" або "джерел" у потоці — густота частинок зберігається скрізь.

На практиці ми семплюємо 3D шумове поле Перліна у злегка зміщених позиціях, щоб чисельно апроксимувати часткові похідні, необхідні для завихрення. Координата Z шумового запиту повільно зростає з часом, створюючи плавну часову еволюцію 2D патерну потоку.

curl(F)_z = ∂F_y/∂x - ∂F_x/∂y
швидкість = (∂N(x,y,z)/∂y - ∂N(x,y+e,z)/∂x, ...)
z = час * 0.003 (повільна часова еволюція)

Кожна частинка зберігає свою позицію (px, py) та лічильник часу життя. Коли частинка виходить за межі канвасу або перевищує свій час життя, вона повторно засівається у випадковій позиції. Ефект загасання слідів досягається накладанням напівпрозорого чорного прямокутника на кожному кадрі замість повного очищення канвасу.

Часті запитання

Що таке завихрений шум?

Завихрений шум — це безрозбіжне векторне поле, отримане обчисленням завихрення (∇×F) потенційного шумового поля. Оскільки дивергенція будь-якого завихрення дорівнює нулю, частинки рухаються без стоків або джерел.

Чому завихрений шум є безрозбіжним?

За тотожністю векторного числення ∇·(∇×F) = 0 для будь-якого гладкого векторного поля F. Це математичне твердження гарантує збереження густини частинок скрізь у полі потоку.

Що таке поле потоку у генеративному мистецтві?

Поле потоку — це сітка векторів, що спрямовують частинки по канвасу. Кожна частинка зчитує вектор у своїй поточній позиції та рухається вздовж нього. При використанні шумової основи результат виглядає органічно й турбулентно.

Що таке шум Перліна?

Шум Перліна — функція градієнтного шуму, винайдена Кеном Перліном. Вона генерує плавно інтерпольовані псевдовипадкові значення, ідеальні для текстур, рельєфу та полів потоку. 3D версія дозволяє кодувати час як вісь Z.

Як 3D шум забезпечує часову анімацію?

Використовуючи час симуляції як третю (Z) координату шумової функції, поле потоку плавно еволюціонує з часом. По мірі зростання Z, 2D зріз 3D шумового поля органічно зсувається, роблячи рух частинок безперервним.

У чому різниця між шумом Перліна та симплексним шумом?

Симплексний шум — вдосконалена версія шуму Перліна. Використовує симплексні решітки (трикутники у 2D, тетраедри у 3D) замість кубічних. Усуває артефакти по осях та має кращу обчислювальну складність.

Скільки частинок можна запустити в реальному часі?

На сучасному браузерному канвасі з GPU-прискоренням 3000–8000 частинок зазвичай працюють при 60 fps. Ця симуляція використовує 500–6000 частинок залежно від повзунка.

Що таке техніка загасання слідів?

Замість очищення канвасу щокадру поверх малюється напівпрозорий чорний прямокутник. Це поступово гасить старі позиції частинок, залишаючи світні сліди, що розкривають структуру поля потоку.

Чи може завихрений шум симулювати реальну гідродинаміку?

Завихрений шум наслідує вигляд турбулентного потоку, але не розв'язує рівняння Нав'є-Стокса. Проте він обчислювально дешевий і виробляє переконливу турбулентність для ігор та генеративного мистецтва.

Що таке октавне нашарування (фрактальний шум)?

Октавне нашарування підсумовує кілька шумових функцій різних частот та амплітуд: W(x) = Σ (1/2^i)·noise(2^i·x). Результат — фрактальний шум (дробовий броунівський рух), що імітує хмари та рельєф.

Про цю симуляцію

Кожна частинка зчитує 3D фрактальне шумове поле в чотирьох крихітних зміщених точках, а curlAt() перетворює ці скінченні різниці на швидкість через ∂Fy/∂x − ∂Fx/∂y — числове завихрення шумового потенціалу. Оскільки завихрення математично гарантовано безрозбіжне, частинки ніколи не накопичуються у стоках і не зникають у джерелах, а безкінечно вирують, тому збільшення Октав постійно додає тонших турбулентних деталей, не порушуючи потік.

🔬 Що показано

Тисячі світних слідів частинок, що вирують у плавному, безрозбіжному турбулентному потоці, з візерунком, що повільно еволюціонує з часом у міру просування координати Z шумового поля.

🎮 Як користуватись

Регулюйте Частинки, Швидкість, Масштаб та Октави, обирайте довжину Загасання слідів та Режим кольору, клацайте на канві, щоб розсипати сплеск нових частинок у цій точці, або натискайте P/R для паузи/скидання.

💡 Чи знали ви?

Завихрений шум — улюблений прийом у візуальних ефектах та іграх саме тому, що він ніколи не «розходиться» чисельно так, як можуть справжні розв'язувачі рідин — ви отримуєте переконливу турбулентність без жодного ризику нестабільності розв'язання рівнянь Нав'є-Стокса.

Часті запитання

Чому частинки ніколи не злипаються разом і не спустошують якусь ділянку?

Поле швидкостей отримане з завихрення шумового потенціалу, і тотожність векторного числення div(curl(F))=0 гарантує, що результуючий потік безрозбіжний, тож густина частинок зберігається скрізь.

Що саме додає до потоку збільшення Октав?

Функція fbm() підсумовує дедалі вищочастотні, нижчоамплітудні шарові шуми для кожної доданої октави, накладаючи тонші турбулентні деталі поверх великомасштабних вихорів, не змінюючи загальний напрямок потоку.

Що відбувається, коли я клацаю на канві?

Клацання породжує 200 нових частинок, розсіяних у випадковому радіусі навколо курсора, спершу замінюючи наявні частинки, а потім додаючи нові, дозволяючи ввести помітний сплеск у потік.

Як симуляція анімує візерунок з часом так, щоб він не повторювався?

Час симуляції подається в координату Z 3D шумового пошуку, тож кожен кадр зчитує трохи інший зріз шумового об'єму, створюючи плавну безперервну еволюцію замість статичного чи циклічного візерунка.

Що насправді змінює налаштування Загасання слідів?

Замість очищення канвасу, кожен кадр малює напівпрозорий чорний прямокутник поверх усього; нижча непрозорість залишає довгі світні сліди, а вища майже миттєво стирає старі позиції.