Закони збереження у симуляціях: що можна порушити?
Справжня фізика зберігає енергію, імпульс і момент імпульсу точно. Симуляції реального часу — майже ніколи. І часто це нормально. Головне — знати, які порушення непомітні, а які зроблять симуляцію очевидно несправжньою.
1. Три закони, що мають значення
У ізольованій класичній системі без зовнішніх сил і моментів зберігаються три величини: повна механічна енергія (кінетична + потенціальна), лінійний імпульс (маса × швидкість, підсумована по всіх тілах) і момент імпульсу (момент інерції × кутова швидкість, підсумований відносно спільної точки). Теорема Нетер пов'язує кожну з них із симетрією фізичного закону — енергію із симетрією зсуву в часі, імпульс із симетрією зсуву в просторі, момент імпульсу із симетрією обертання.
p = Σ mᵢ·vᵢ (лінійний імпульс)
L = Σ Iᵢ·ωᵢ + rᵢ×(mᵢ·vᵢ) (момент імпульсу)
Ідеальна симуляція тримала б усі три постійними кадр за кадром вічно. Жодна симуляція реального часу так не робить — питання лише в тому, скільки дрейфу прийнятно і де він захований.
2. Де симуляції їх «зливають»
Існує три незалежні джерела похибки збереження, і вони накопичуються:
- Інтегратор. Несимплектичні методи (явний Ейлер, RK4) систематично додають або забирають енергію щокроку — див. механізм у статті Верле, Leapfrog та RK4.
- Solver зіткнень. Ітеративні solver'и Гаусса-Зейделя (їх використовує Cannon-es і майже кожен двигун реального часу) лише приблизно задовольняють контактні обмеження, і ця похибка апроксимації додає або забирає імпульс.
- Арифметика з рухомою комою. Кожне додавання 32-бітних floats округлюється; за мільйони кроків у симуляції N-тіл це саме по собі дає вимірний дрейф енергії, незалежно від власного зсуву інтегратора.
3. Енергія: найлегше порушити
Енергія — найкрихкіша з трьох величин, бо демпфування — навмисне чи випадкове — завжди її забирає й ніколи не зберігає. Симуляції тканини та мотузки додають демпфування швидкості спеціально для стабільності; це контрольований «злив» енергії, через який тканина виглядає «важчою» і менш тремтливою, ніж дала б ідеально консервативна модель.
Хаотична система, як подвійний маятник, експоненційно підсилює будь-який дрейф енергії — крихітна несимплектична похибка накопичується у видимо неправильну траєкторію за секунди. Саме тому ця симуляція використовує RK4 з малим фіксованим кроком часу, а не дешевший метод першого порядку.
4. Імпульс: зіткнення та відновлення
Пружне зіткнення двох більярдних куль має точно зберігати і
імпульс, і кінетичну енергію. На практиці двигуни застосовують
імпульс, масштабований коефіцієнтом відновлення
e (1 — ідеально пружне, 0 — ідеально непружне) — і
будь-яке округлення чи брак ітерацій solver'а в цьому обчисленні
проявляється як кулі, що дрейфують трохи швидше чи повільніше за
належне після довгої серії ударів. Симуляція
Більярд тримає відновлення
близько до 1 і збільшує кількість ітерацій solver'а навколо
контактів саме для того, щоб цей дрейф лишався нижче порогу,
помітного людському оку.
5. Момент імпульсу: обертання та гіроскопи
Збереження моменту імпульсу — те, чому обертовий гіроскоп протистоїть перекиданню й натомість прецесує, і це одна з найменш поблажливих величин для чисельної точності, бо вона одночасно пов'язує обертання, тензор інерції та момент сили. Дрібні похибки інтегрування орієнтації (дрейф кватерніона) накопичуються у видимо неправильну швидкість прецесії. Симуляції Гіроскоп і Колесо Максвелла обидві перенормалізують кватерніони щокроку саме для того, щоб зупинити повільне зростання величини представлення обертання через похибку рухомої коми, яке інакше додавало б фантомний момент імпульсу.
6. PBD і XPBD: порушувати навмисно
Position Based Dynamics взагалі не інтегрує сили — вона напряму проєктує позиції частинок на многовиди обмежень (повний алгоритм — у статті Position Based Dynamics: тканина, м'які тіла та обмеження). Ця проєкція не виведена з фізичного закону сили, тож звичайна PBD не має жодної гарантії збереження енергії — вона стабільна, але не фізично точна, і жорсткіші обмеження чи більше ітерацій solver'а тихо додають чисельне демпфування.
XPBD (Extended PBD) виправляє саме це, додаючи параметр піддатливості (compliance) до кожного обмеження, завдяки чому проєкція сходиться до справжнього закону сили зі зростанням кількості субкроків — обмінюючи частину швидкодії PBD на принциповий шлях назад до збереження енергії.
7. Як виявити порушення
Найпростіша діагностика: логувати повну енергію системи (або імпульс) щокадру і будувати графік. Консервативний інтегратор на ізольованій системі дає майже пряму лінію з невеликими коливаннями навколо істинного значення; той, що «зливає», показує монотонний дрейф — зазвичай вниз (демпфування), але іноді вгору, що сигналізує про справжню помилку solver'а, а не навмисне демпфування.
// ...N кроків...
const drift = Math.abs(totalEnergy(bodies) - E0) / E0
8. Коли «читерство» прийнятне
| Контекст | Прийнятний дрейф | Чому |
|---|---|---|
| Гра / інтерактивна іграшка | Високий | Гравець ніколи не бачить сирого числа енергії; стабільність важливіша за точність |
| Тканина, мотузка, м'яке тіло | Середньо-високий | Навмисне демпфування уникає вибуху; вигляд важливіший за точність |
| Орбітальна демо / N-тіла | Низький | Дрейф видимо змінює форму орбіти з часом — обирайте симплектичний інтегратор |
| Науковий / дослідницький код | Майже нульовий | Хибні висновки, якщо збереження не перевірено чисельно |
Побачити збереження в дії
Гравітація N-тіл тримається тисячі орбіт. Спробуйте посунути планету й дивіться за повною енергією.
⭐ Гравітація N-тіл 🌀 Гіроскоп