Коли ви проводите курсором крізь нашу симуляцію рідини і спостерігаєте, як вона брижиться, хлюпає та розбризкується, ви бачите роботу Згладженої гідродинаміки частинок (Smoothed Particle Hydrodynamics, SPH) прямо у своєму браузері. SPH було винайдено 1977 року незалежно Люсі (Lucy), а також Гінголдом і Монаганом (Gingold, Monaghan) для моделювання астрофізичних течій. Сьогодні цей метод лежить в основі рідинних ефектів реального часу в іграх, конвеєрах візуальних ефектів та інженерних симуляціях. Ось математика, що стоїть за ним.
Основна ідея: частинки як зразки рідини
Класична обчислювальна гідродинаміка розв'язує рівняння Нав'є–Стокса на фіксованій сітці. Кожна комірка сітки має густину, швидкість і тиск, а рівняння описують, як рідина перетікає між сусідніми комірками. Це добре працює для течій, що залишаються в межах фіксованої області — наприклад, обтікання крила повітрям, — але ускладнюється, коли рухається сама поверхня рідини: хвилі, бризки, краплі.
SPH використовує інший підхід. Замість фіксованої сітки рідина представлена великою кількістю частинок, кожна з яких несе масу, позицію, швидкість та інші величини. Неперервне поле рідини відновлюється з частинок у будь-якій точці простору шляхом зваженого усереднення по сусідніх частинках. Частинки рухаються разом із рідиною, автоматично обробляючи вільні поверхні — там, де рідина закінчується і починається повітря, — без будь-якої спеціальної обробки.
Цей лагранжевий підхід (що слідує за частинками) є ключовою перевагою SPH над ейлеровими (прив'язаними до сітки) методами для течій із вільною поверхнею: поверхня відстежується неявно — просто за розташуванням частинок.
Ядрові функції: математика згладжування
Слово «згладжена» в назві SPH походить від ядрової функції W(r, h) — дзвоноподібної функції, яка присвоює вагу кожній сусідній частинці залежно від відстані r та довжини згладжування h. Ядро повинно бути нормалізованим (інтеграл дорівнює 1), симетричним (залежить лише від |r|) і зникати за межами певної граничної відстані (зазвичай 2h).
Найпоширенішими ядрами в SPH реального часу є ядро Poly6 для оцінки густини та ядро Spiky для сил тиску. Ядро Spiky, запропоноване Мюллером (Müller) та співавторами у їхній статті на SIGGRAPH 2003 року, яка привнесла SPH в ігри та комп'ютерну графіку, має ненульовий градієнт у самій точці частинки — це критично важливо для обчислення відштовхувальних сил тиску, що запобігають злипанню частинок.
Довжину згладжування h зазвичай обирають так, щоб вона охоплювала 20–50 частинок у 2D. Більше h означає плавнішу, але менш деталізовану рідину; менше h зберігає дрібні деталі, але потребує більшої кількості частинок для стабільності.
Густина і тиск: крок за кроком
Кожен крок симуляції складається з послідовності обчислень для кожної частинки:
- 1 Знайти сусідів. Для кожної частинки i зібрати всі частинки j на відстані до 2h. Просторова хеш-сітка робить цю операцію O(N) замість O(N²).
- 2 Обчислити густину. ρi = Σj mj W(|ri − rj|, h) — зважена сума мас сусідніх частинок.
- 3 Обчислити тиск. За допомогою рівняння стану: Pi = k(ρi − ρ0), де k — константа жорсткості, а ρ0 — густина спокою.
- 4 Обчислити силу тиску. Fpressure,i = −Σj mj (Pi + Pj) / (2ρj) ∇W(|ri − rj|, h)
- 5 Обчислити силу в'язкості. Fvisc,i = μ Σj mj (vj − vi) / ρj ∇²W(|ri − rj|, h)
- 6 Інтегрувати. Додати гравітацію, застосувати сумарну силу, оновити швидкість і позицію за допомогою leapfrog-інтегратора або симплектичного методу Ейлера.
Побачити SPH у дії
Наша Симуляція рідини виконує повноцінний SPH-розв'язувач прямо у вашому браузері. Перетягуйте перешкоди, змінюйте в'язкість і спостерігайте, як хвилі тиску поширюються крізь сотні взаємодіючих частинок — усе обчислюється наживо за алгоритмом, описаним вище.
Сили тиску та рівняння стану
Реальна вода майже нестислива — її густина ледь змінюється під тиском. SPH із простим рівнянням стану P = k(ρ − ρ0) є слабко стисливим: він допускає невеликі коливання густини в обмін на уникнення дорогого розв'язання, якого вимагає сувора нестисливість. Параметр жорсткості k має бути достатньо високим, щоб утримувати відхилення густини нижче кількох відсотків, але не настільки високим, щоб крок часу довелося зробити непрактично малим для стабільності симуляції.
Для точнішого нестисливого SPH — що використовується в інженерних застосуваннях — такі алгоритми, як IISPH (Implicit Incompressible SPH) або DFSPH (Divergence-Free SPH), розв'язують рівняння для тиску неявно на кожному кроці часу. Вони збігаються до майже нульового відхилення густини, але потребують ітеративних розв'язувачів, які надто повільні для рендерингу в реальному часі.
Поверхневий натяг і в'язкість
Поверхневий натяг у SPH моделюється або методом кольорового поля (обчислення нормалі до межі розділу за градієнтами густини та застосування сили на основі кривизни), або силами когезії між частинками. Наша симуляція використовує спрощену модель когезії, яка створює характерну тенденцію крапель води стягуватися назад у сфери.
В'язкість гасить відносну швидкість між сусідніми частинками — член сили в'язкості змушує швидкі частинки сповільнювати сусідів і навпаки. Висока в'язкість створює потік, схожий на мед; нульова в'язкість (нев'язка течія) породжує різкі, нереалістичні розриви швидкості. Лапласіан ядра, що використовується для в'язкості — з його додатною другою похідною — гарантує, що сила в'язкості завжди дисипативна, запобігаючи вливанню енергії.
Чому SPH перевершує сіткові методи для вільних поверхонь
Вирішальна перевага SPH для течій із вільною поверхнею — це відсутність необхідності відстежувати межу розділу. У сіткових методах вільну поверхню потрібно явно відстежувати за допомогою таких методів, як VOF (Volume of Fluid) або Level Set. Це додає значну складність і може спричиняти числову дифузію, яка з часом розмиває чіткі межі.
Поверхня в SPH — це просто там, де перебувають частинки. Краплі природно відокремлюються, зливаються та відскакують, оскільки частинки просто слідують за силами. Це робить SPH домінантним методом у симуляції рідини реального часу для ігор та інтерактивних застосувань, а також потужним конкурентом в офлайн-візуальних ефектах — симуляція океану в багатьох сучасних фільмах побудована на SPH або гібридному методі SPH-сітка.
Компроміс полягає в тому, що SPH має труднощі з тонкими шарами рідини та турбулентними течіями низької в'язкості, де сіткові методи проявляють себе найкраще. Реальні промислові симулятори рідини часто використовують гібридні підходи — SPH біля поверхні, де важливе відстеження вільної поверхні, і сіткові методи всередині об'єму, де потрібно точно забезпечувати нестисливість.
Експериментуйте з параметрами рідини
У нашій Симуляції рідини ви можете в реальному часі регулювати кількість частинок, гравітацію та в'язкість. Подивіться, як збільшення в'язкості перетворює воду на густий гель — фізика члена в'язкості стає відчутною.