SPH з вільною поверхнею — бризки, краплі та хвилі
Хвиля, що розбивається об берег, крапля, яка відривається від крана, вода, що вихлюпується з відра — усе це події з участю вільної поверхні: межі між рідиною й порожнім простором (або повітрям), форма якої заздалегідь невідома й має виникати із самої симуляції. Сітчасті (Ейлерові) розв'язувачі мають з цим труднощі, бо їм потрібно відстежувати, де саме межа рідини проходить усередині фіксованої сітки. Метод згладжених частинок (Smoothed Particle Hydrodynamics, SPH) обходить цю проблему майже безкоштовно — поверхня це просто те місце, де закінчуються частинки.
1. Чому частинкові методи підходять для вільних поверхонь
У сітчастому (Ейлеровому) розв'язувачі кожна комірка домену зберігає значення стану рідини незалежно від того, чи справді рідина займає цю область. Відстеження межі між рідиною й повітрям вимагає допоміжного представлення — рівня набору (level set), поля частки об'єму (volume-of-fluid, VOF) або маркерних частинок, посіяних виключно для трасування межі. Коли бризки розпадаються на краплі або два потоки зливаються, це допоміжне поле має правильно обробляти зміни топології, що є справді складною чисельною проблемою (тонкі плівки зникають, краплі не відриваються чисто, маса витікає).
SPH є Лагранжевим: рідина і є частинками. Немає окремого поля межі, яке треба підтримувати — вільна поверхня неявно там, де густина частинок спадає до нуля. Крапля, що відділяється від струменя, — це просто група частинок, чия зв'язність із сусідами змінюється; жодного спеціального коду не потрібно. Саме тому SPH (і споріднені методи — MPM і PBF) домінують у VFX із великою кількістю бризок і в багатьох дослідницьких CFD-кодах для проривів дамб, ударів хвиль і берегової інженерії.
2. Проблема дефіциту густини
SPH оцінює густину в частинці i як суму зважених ядром внесків від кожного
сусіда j у межах радіусу згладжування h:
Глибоко всередині рідини частинка оточена з усіх боків, тож ця сума збігається до правильної густини спокою. Однак поблизу вільної поверхні носій ядра поширюється в порожній простір, де немає частинок — сума недораховує, і обчислена густина виходить штучно заниженою, навіть попри те, що справжня фізична густина на поверхні точно така сама, як у товщі рідини.
Це і є проблема дефіциту густини. Без корекції рівняння стану (використовується для перетворення густини на тиск у слабостисливому SPH) сприймає цей дефіцит як від'ємний тиск, що хибно тягне поверхневі частинки всередину — симульована рідина набуває штучної "плівки", яка опирається природному утворенню тонких листів і дрібних бризок.
Поширені способи усунення: обнулення від'ємного тиску для поверхневих частинок, використання скоригованого (перенормованого) ядра густини, що враховує втрачену масу ядра, або перехід до бездивергентного / нестисливого SPH (IISPH, DFSPH), де тиск розв'язується неявно, а не читається безпосередньо з потенційно заниженої оцінки густини.
3. Виявлення вільної поверхні
Багато частин симуляції — поверхневий натяг, рендеринг, адаптивна роздільність — потребують знати, які частинки саме лежать на межі. Класична техніка — метод колірного поля (Morris, 2000): трактувати кожну частинку як таку, що несе скалярний "колір" c = 1 для рідини, й інтерполювати його так само, як будь-яке інше поле SPH:
У товщі рідини градієнт ∇c близький до нуля, бо колірне поле майже однорідне в усіх напрямках. Поблизу поверхні ∇c має помітну величину й спрямований назовні — це одночасно позначає поверхневі частинки (|∇c| вище порогу) і дає нормаль поверхні, потрібну для рендерингу й сил поверхневого натягу.
Дешевша альтернатива — прямий підрахунок дефіциту сусідів: частинка, чия кількість сусідів або зважена ядром густина падає нижче частки очікуваного значення в товщі рідини (зазвичай 80–95%), класифікується як поверхнева. Це взагалі уникає обчислення градієнта й досить швидке, щоб виконуватись на кожному підкроці.
4. Поверхневий натяг — модель CSF
Поверхневий натяг виникає через дисбаланс когезійних міжмолекулярних сил на межі: молекули в товщі притягуються рівномірно в усіх напрямках, але молекули на поверхні відчувають чисту тягу всередину, що макроскопічно проявляється як сила, пропорційна кривизні межі (співвідношення Юнга–Лапласа, ΔP = σκ). Модель Continuum Surface Force (CSF) Brackbill, Kothe та Zemach (1992) перетворює це на об'ємну силу для кожної частинки, використовуючи колірне поле з попереднього розділу:
Тут σ — коефіцієнт поверхневого натягу (≈ 0,072 Н/м для води за 20 °C), κ — локальна кривизна, обчислена з лапласіана колірного поля, а δₛ локалізує силу у вузькій смузі біля справжньої межі. На практиці ∇²c шумний за типового кроку частинок SPH, тому виробничі реалізації часто використовують простішу й надійнішу модель парної когезії Akinci та ін. (2013), яка застосовує короткодіючу притягальну сплайн-силу безпосередньо між сусідніми частинками замість двічі диференціювати поле:
Цей сплайн C(r) ретельно нормалізований так, що інтегрування по всій околиці дає нульову чисту силу в товщі рідини (когезія скасовується), тоді як точно на викривлених поверхнях виникає чисте тяжіння всередину — це відтворює округлення крапель, капілярний підйом у тонких трубках і скупчення води на негідрофільних поверхнях, і при цьому жодного разу не потрібно обчислювати другу похідну.
5. Розтягувальна нестійкість і злипання частинок
Стандартні сили тиску SPH використовують градієнт згладжувального ядра (зазвичай ядра Spiky), яке за від'ємного тиску стає притягальним замість відштовхувального — а це саме той режим, у який вільні поверхні й поверхневий натяг штовхають частинки. Результат — добре відома розтягувальна нестійкість (tensile instability): частинки злипаються в нефізичну ґратку або скупчення замість формування гладкого листа, найпомітніше в тонких бризках і краплях, де від'ємний тиск звичне явище.
Корекція штучного тиску Monaghan додає невеликий відштовхувальний доданок щоразу, коли значення ядра зростає відносно свого значення за початкової відстані між частинками, безпосередньо протидіючи притягальній гілці:
Альтернатива, яка не потребує підбору констант, — перехід на іншу родину ядер: ядро Wendland C2 має градієнт, що лишається скінченним і добре поведеним за малих відстаней між частинками, і є фактичним стандартом у сучасних кодах SPH (SPlisHSPlasH, DualSPHysics) саме тому, що опирається злипанню без спеціального латкового доданка.
6. Розв'язувачі тиску біля поверхні — WCSPH проти PCISPH
Слабостисливий SPH (WCSPH) читає тиск безпосередньо з рівняння стану Тейта, наведеного вище. Він простий і повністю явний, але вимагає жорсткого рівняння стану (велике k), щоб утримати похибки густини малими, що своєю чергою змушує використовувати крихітний крок часу через умову Куранта–Фрідріхса–Леві — чисельна швидкість звуку має триматися помітно вище за найшвидшу швидкість рідини в сцені, а бризки регулярно породжують швидкі краплі, що робить це дорогим.
Прогнозно-корективний нестисливий SPH (PCISPH) та споріднені методи (IISPH, DFSPH) натомість розв'язують тиск неявно, ітеруючи цикл прогноз-корекція на кожному кроці, доки густина не відхилиться від густини спокою менш ніж на допуск (часто <1%):
Поблизу вільної поверхні цю ітеративну корекцію треба поєднувати з виправленням дефіциту густини з розділу 2 — інакше розв'язувач "виправляє" штучно занижену поверхневу густину, роздуваючи тиск, і поверхня стає надто жорсткою, схожою на батут. Більшість сучасних реалізацій спершу виявляють поверхневі частинки й або обмежують їхню цільову густину, або взагалі пропускають для них обмеження нестисливості, дозволяючи поверхневому натягу й гравітації керувати їхнім рухом.
Інтерактивна симуляція рідини Спостерігайте, як частинкова рідина формує хвилі, бризки й краплі в реальному часі7. Тверді межі та фантомні частинки
Вільна поверхня — лише половина проблеми меж; SPH-рідина також має правильно взаємодіяти з твердими стінками (склянка, пляж, корпус човна). Найпростіший підхід — викласти тверді поверхні статичними граничними частинками, які беруть участь у сумуванні густини й тиску так само, як частинки рідини, але ніколи не рухаються. Їхня присутність заповнює носій ядра біля стінки, запобігаючи хибному дефіциту густини там (та сама проблема, що й у розділі 2, але на жорсткій, а не вільній межі).
Наївно розміщені граничні частинки все ж дозволяють рідині проникати крізь кути або тонкі стінки на високій швидкості, тож поширені вдосконалення: фантомні частинки, віддзеркалені через межу під час симуляції, обробка меж екстраполяцією тиску (Akinci, 2012), яка обчислює фізично узгоджений тиск для граничних частинок замість фіксованого значення, та щільно упаковані багатошарові граничні оболонки (2–3 частинки завглибшки), що дають ядру повний носій навіть під ковзними кутами.
8. Рендеринг поверхні — Marching Cubes і метакулі
Самі частинки рендеряться як хмара сфер, що виглядає як піна, а не як цілісна поверхня рідини. Виробничі рендерери натомість будують гладку неявну поверхню з позицій частинок і витягують полігональну сітку з неї щокадру:
- Метакулі / "блобі"-поверхні — сумувати гладку функцію спадання (ядро Wyvill або Гауса), центровану в кожній частинці, щоб побудувати скалярне поле, а потім порогувати його на ізо-значенні, що представляє поверхню рідини.
- Marching Cubes — семплувати скалярне поле на регулярній вокселній сітці й витягувати трикутну сітку на ізоповерхні, розв'язуючи неоднозначні конфігурації кубів через Marching Cubes 33 або Dual Contouring для водонепроникних результатів.
- Анізотропні ядра (Yu & Turk, 2013) — розтягувати неявне ядро для кожної частинки вздовж локальних головних осей околиці, що дає значно гладші листи й тонкі плівки, ніж ізотропні сфери, ціною обчислення коваріаційної матриці та її власного розкладу для кожної частинки.
Для реального часу у веб-демо набагато дешевший варіант у просторі екрана: рендерити частинки як сфери лише з глибиною, розмити отриманий буфер глибини, щоб згладити зернистість частинок, реконструювати нормалі з розмитої глибини через градієнт у просторі екрана й затінити з заломленням і відбиттям Френеля — без 3D-вокселної сітки чи витягування сітки, і саме так більшість реального часу WebGL/Three.js SPH-демо отримують переконливий вигляд води за інтерактивної частоти кадрів.