ГоловнаСтаттіГенеративне мистецтво

3D «Звивини»: Потокові поля без заглиблень та витоків

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

mysimulator teamОновлено — червень 2026≈ 7 хв читання▶ Відкрити симуляцію

Проблема з випадковим шумом як полем потоку

Шум Перліна та його родичі (Сімплекс, Ворлі) є стандартним інструментом для додавання органічного хаотичного ефекту в комп’ютерній графіці, і спокуса безпосередньо відбирати функцію 3D шуму та використовувати її градієнт як швидкість частинок. Результат виглядає задовільно шумом для текстури, але як поле потоку він працює дуже погано: градієнтні поля мають ненульову дивергенцію майже всюди, що означає, що деякі області простору діють як невидимі джерела відтоку, втягуючи частинки, і інші – як невидимі джерела, відштовхуючи їх. Спостерігайте за його роботою протягом кількох секунд, і ви побачите, що частинки скупчуються у згустках або покидають цілі області екрану.

жива демонстрація · пов'язана симуляція● LIVE

Рішення – це один векторної ідентичності

Обчислення векторного простору надає вихідний шлях, який не потребує жодного розв’язку рівнянь гідродинаміки: для будь-якого гладкого векторного поля Ψ, обертання цього поля, ∇×Ψ, гарантовано має нульову дивергенцію. Це ідентичність, ∇·(∇×Ψ) = 0, що вірне для кожної можливої Ψ – отже, якщо ви будуєте поле швидкості шляхом обертання потенціального поля, неприводимість автоматично забезпечується, а не потрібно її розв’язувати.

Psi(x,y,z) = ( noise1(x,y,z), noise2(x,y,z), noise3(x,y,z) ) // 3 незалежні шумові поля v = curl(Psi) = ( dPsi_z/dy - dPsi_y/dz, dPsi_x/dz - dPsi_z/dx, dPsi_y/dx - dPsi_x/dy ) // приблизно обчислюйте кожну часткову похідну центральною різницею: dPsi_z/dy ≈ ( Psi_z(x, y+e, z) - Psi_z(x, y-e, z) ) / (2*e) Використовуйте три незалежні шумові поля, по одному на компонент потенціалу Ψ, та обчислюйте обертання чисельно за допомогою центральної кінцевої різниці (стандартна техніка, популяризована у 2007 році в статті SIGGRAPH Роберта Брідсона про шум обертання для процедурної гідродинаміки потоку). Результат – справжнє неприводиме поле швидкості, вибіркове в будь-якому місці простору в 3D, за незначні витрати обчислень – набагато дешевше, ніж розв’язання рівняння Пуассона для тиску, яке потребує реального розв’язника Нав’єр-Стокс.

Psi(x,y,z) = ( noise1(x,y,z), noise2(x,y,z), noise3(x,y,z) )   // 3 independent noise fields

v = curl(Psi) = ( dPsi_z/dy - dPsi_y/dz,
                   dPsi_x/dz - dPsi_z/dx,
                   dPsi_y/dx - dPsi_x/dy )

// approximate each partial derivative with a central difference:
dPsi_z/dy ≈ ( Psi_z(x, y+e, z) - Psi_z(x, y-e, z) ) / (2*e)

Чому це схоже на турбулентність

Шум типу Перліна має енергію, розподілену рівномірно по широкому діапазоні просторових частот, а не сконцентровану в одній шкалі. Його обертання успадковує цю властивість: ви отримуєте звиви та водоспливи різного розміру, що уві скрученому вигляді нагадують водоспади віртуальних воріт турбулентного потоку, хоча тут жодна величина не підкоряється рівнянням Нав’є-Стокса. З'єднання кількох октав шуму з різними частотами (фракційний бруновианський рух) перед обчисленням обертання ще більше посилює схожість, додаючи тонкі спіралі поверх великих повільних водоспливів – такий самий метод накопичення октаж використовувався для того, щоб шум Перліна виглядав як природний рельєф або хмари.

Де це використовується

Шумову модуляцію спіралі часто використовують у виробництві візуальних ефектів: дим, вогонь, ефекти магії та частинно-базовані потоки рідин у фільмах та іграх часто керуються за допомогою шумової модуляції спіралі замість повної симуляції рідини, оскільки її можна обчислювати в будь-якій точці та в будь-який час – без сітки, без історії симуляції, вона легко паралелізується на мільйони частинок — і її можна накладати поверх грубої реальної симуляції для додавання дешево дрібних підсіткових деталей. Обмін відбувається у тому, що вона не має пам'яті про перешкоди, межі чи збереження імпульсу; це кінематичне наближення потоку, а не фізичне, і її обирають спеціально тому, що "виглядає непрозоро" часто є тим, що потрібно для зйомки.

Frequently asked questions

Чому не використовувати просто необроблене Perlin або Simplex шуми як поле швидкості?

Оскільки необроблений шум має ненульову дивергенцію майже всюди, що означає, що частинки накопичуються в деяких областях і висмоктуються з інших. Curl noise вирішує цю проблему за конструкцією: обернена векторного поля завжди є дивергенційно-вільною, тому частинки ні клацаються в джерелах, ні не відходять з них.

Що саме ви купуєте, беручи curl?

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

Чи є curl noise справжньою симуляцією рідини?

Ні — у нього немає механізмів проекції тиску або адвекції, як у реальному розв'язувачі Нав’є-Стокса, і він повністю ігнорує межі та перешкоди. Це дешева кінематична апроксимація, яка виглядає як рідина завдяки тому, що вона поділяє одну ключову властивість з реальними незміцнюваними потоками: нульова дивергенція.

Спробуйте наживо

Усе, що вище, працює прямо у вашому браузері — відкрийте 3D Curl Noise Flow Field і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.

▶ Відкрити симуляцію 3D Curl Noise Flow Field

Що ви знайшли?

Додати кроки відтворення (опційно)