Девлог #18 — 250 симуляцій: уроки створення найбільшої WebGL-бібліотеки фізики

Два роки. 250 симуляцій. 73 категорії. Дві мови. Жодного фреймворку. Ось чого ми навчилися — що спрацювало блискуче, що ми зробили б інакше, і 10 найскладніших симуляцій, які ми випустили.

250
симуляцій онлайн
73
категорії
EN + UK
мови
~2 роки
у розробці

Як ми до цього дійшли

Проєкт почався як одна-єдина симуляція — маятник — створена за вихідні за допомогою Three.js. Питання «а що, якщо додати ще одну?» привело до десяти, потім до п'ятдесяти, потім до сотні. Стрибок від 100 до 250 був свідомим кроком: структурованим просуванням у кожну основну наукову область, керованим контент-планом, а не окремими спалахами натхнення.

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

Що спрацювало

Що ми зробили б інакше

10 найскладніших симуляцій, які ми створили

#1
Розв'язання нестисливих рівнянь Нав'є-Стокса зі зв'язком тиску та швидкості (алгоритм SIMPLE) у нерегулярній сітці судини. Збіжність рівняння Пуассона для тиску вдалося стабілізувати лише з другої спроби.
#2
Метод джерела-зображення для ранніх відбиттів + статистичний хвіст реверберації. Коректна обробка порядку дзеркальних відбиттів у непрямокутному залі потребувала рекурсивного попереднього проходу трасування променів.
#3
Збирання розрідженої глобальної матриці жорсткості та розв'язання її в реальному часі методом Гаусса — водночас синхронізуючи WebGL-рендерер з обчисленими деформаціями. Розташування даних у пам'яті було критично важливим.
#4
Поєднання керування формацією на основі консенсусу з розподіленим уникненням зіткнень для 60 агентів вимагало дворівневого контролера: повільного планувальника формації та швидкого реактивного шару уникнення перешкод.
#5
Динаміка на основі позицій з ітеративним розв'язанням обмежень — кількість ітерацій розв'язувача безпосередньо визначає компроміс між візуальною якістю та частотою кадрів. Досягнення плавності на мобільних пристроях зайняло понад 40 годин налаштування.
#6
Реалізація ping-pong фреймбуферів у WebGL1 без розширень для float-текстур вимагала кодування хімічних концентрацій у байтові канали RGBA та ретельного управління точністю.
#7
Система звичайних диференціальних рівнянь Ходжкіна-Хакслі є жорсткою — стала часу натрієвого каналу в 100 разів коротша за загальну тривалість потенціалу дії. Потрібен був RK4 з адаптивним кроком, щоб уникнути чисельної нестабільності.
#8
Реалізація 2D-методу вихрових панелей — розв'язання N лінійних рівнянь для інтенсивностей вихорів панелей — а потім коректна візуалізація ліній течії зажадала трьох повних переписувань розв'язувача матриці.
#9
Рендеринг 100 000 екземплярів атомів із кольоровим кодуванням енергетичного стану за допомогою InstancedMesh, тоді як крок Монте-Карло змінює матриці екземплярів щокадру. Синхронізація буферів виявилася непростою.
#10
Модель нейронної маси Вілсона-Коуена з таламокортикальним зв'язком. Відтворення добре відомих спектральних піків дельта/тета/альфа потребувало ретельного калібрування параметрів відносно опублікованих спектральних даних ЕЕГ.

Що далі: шлях до 300

🔬 Наномасштаб і біофізика
Молекулярна динаміка, енергетичні ландшафти згортання білків, механіка ДНК — фізика в діапазоні 1–100 нм, що поєднує хімію та біологію.
🌐 Мережева наука
Безмасштабні мережі, перколяція, поширення епідемій на графах, візуалізація PageRank — математика, що лежить в основі інтернету та соціальних мереж.
🎓 Керовані уроки
Структуровані навчальні послідовності, що пов'язують 3–5 симуляцій з пояснювальним текстом — перетворюючи окремі симуляції на цілісну програму навчання.
📥 Завантажувані дані
Експорт стану симуляції у форматі CSV / JSON для використання у студентських проєктах і дослідницьких демонстраціях. Уже прототиповано для симуляцій маятника та більярду.

Дякуємо всім, хто користувався сайтом, ділився ним і надсилав відгуки. 250-та симуляція була створена завдяки листу від вчителя фізики, який попросив демонстрацію фігур Хладні для свого класу. Продовжуйте надсилати пропозиції — саме так бібліотека і зростає.