В 2004 году, ещё в университете, я написал на Delphi 7 и OpenGL виртуальную физическую лабораторию для занятий. Скажи мне тогда, что из неё вырастут и программа для трассировки света у чёрной дыры, и бильярд, который сам рассудит партию в «восьмёрку», я бы первым делом попросил показать код. Исходники той самой лаборатории до сих пор можно открыть: https://github.com/makarov-mm/MakarovPhysics
Сейчас я живу в Мюнхене и самостоятельно разрабатываю Makarov Suites. Три приложения для Windows уже вышли в Steam — Physics, Math и Astronomy. Ещё три находятся в разработке — Engineering, Earth и Games. Я записал все шесть прямо с экрана приложений и собрал в короткий трейлер.
Makarov Physics Suite. Откуда в ряду маятников берётся волна
В последнем кадре ролика вдоль ряда цветных грузиков бежит волна. Попробуйте проследить за одним грузиком. Он всё время качается в одной плоскости. У соседнего маятника чуть другая длина, поэтому на каждый взмах уходит чуть другое время. Понемногу маятники расходятся по фазе, и, если смотреть на весь ряд, становится видна волна.
До маятников в кадре появляются токамак в разрезе, движущиеся шатуны паровоза и гранулы во вращающемся барабане. Именно с барабана я бы предложил начать в самой программе. Дайте ему набрать обороты, а потом включите обратный ход. Привод уже тянет в другую сторону, а гранулы ещё движутся по инерции. В Physics Suite 200 экспериментов, и даже с этим переключателем можно провозиться какое-то время. https://store.steampowered.com/app/4861360/
Makarov Math Suite. Почему важен порядок двух поворотов
Поверните верхнюю грань кубика Рубика, затем правую. Верните кубик в исходное состояние и выполните те же повороты в обратном порядке. Достаточно следить за одной наклейкой на угловом кубике, чтобы заметить, как изменился результат. Так в Math Suite я начинаю разговор о перестановках.
За кубиком в ролике идут сгиб листа бумаги и зацепленные окружности расслоения Хопфа. В последней сцене многогранник разворачивается на плоскости. Интересно остановить его на полпути и угадать, какие рёбра встретятся, когда он сложится обратно. Мне нравится, когда в программе можно сначала высказать догадку, а затем проверить её, двигая сам объект. На этом построены многие из 160 математических экспериментов. https://store.steampowered.com/app/5204230/
Makarov Astronomy Suite. Что светится над тенью чёрной дыры
В первом кадре прямо над тенью чёрной дыры видна яркая дуга. Это тоже изображение аккреционного диска. Свет с его дальней стороны огибает чёрную дыру и попадает в камеру. Чтобы нарисовать эту дугу, мой фрагментный шейдер прослеживает ход луча в гравитационном поле и находит место, где луч встречается с диском.
Следом сближаются две галактики. Я окрасил частицы по тому, какому из двух дисков они принадлежали в начале. Если следить за одним цветом, видно, как при сближении часть вещества вытягивается в приливной хвост. В двух последних сценах раскрывается космический телескоп с составным зеркалом, а две нейтронные звезды движутся по спирали навстречу друг другу. Это четыре из 120 модулей Astronomy Suite. https://store.steampowered.com/app/5447230/
Makarov Engineering Suite. Как конвертоплан удерживает высоту
В начале ролика конвертоплан переводит винты из положения для висения в положение для горизонтального полёта. Пока винты наклоняются, крыло постепенно принимает на себя вес машины. В инженерной мастерской можно изменить время этого перехода и посмотреть, что произойдёт с высотой.
Затем в кадре появляются упаковочная линия и тросовый робот, а в конце — планетарная передача. Проследите за одним сателлитом. Он крутится на своей оси и одновременно обходит центральную шестерню. Теперь попробуйте зафиксировать водило, на котором сидят оси сателлитов, и освободить наружное кольцо. Получится ли заранее угадать, в какую сторону пойдёт выходной вал? Все эти механизмы уже работают в сборке, которую я разрабатываю. https://makarovphysics.com/engineering/
Makarov Earth Suite. Куда возвращается воздух при морском бризе
Сначала видна вся Земля и заряженные частицы, вызывающие полярное сияние. Во втором кадре остаётся небольшой участок берега. Проследите за метками, которые движутся с моря на сушу у самой поверхности, а потом поднимите взгляд. Наверху виден обратный поток. В программе можно прогнать целые сутки и сравнить момент, когда суша становится холоднее воды, с моментом, когда меняется направление ветра.
В третьей сцене я показываю берег в разрезе. Так видно сбоку, как цунами подходит к мелководью. В последней сцене камера смотрит сверху на тропический циклон. При разработке Earth Suite я много работал именно с ракурсами. Сверху хорошо видна закрутка шторма, а для опыта с цунами важно одновременно видеть волну и профиль дна. https://makarovphysics.com/earth/
Makarov Games Suite. Что происходит между двумя ходами
Ролик начинается с разбоя в бильярдной «восьмёрке». Игрок уже отвёл кий, а столкновения шаров ещё долго определяют исход удара. Следующий кадр — шахматы. Пока компьютер обдумывает ответ, все фигуры могут несколько секунд стоять совершенно неподвижно. Эти две игры поставили передо мной разные задачи даже в такой простой на вид вещи, как отрисовка стола.
За шахматами идут кёрлинг и реверси. Games Suite — самый молодой проект в семействе, в сборке для разработки уже можно сыграть в 24 прототипа. Геометрию доски и неподвижных фигур я храню в буфере и использую повторно. Когда в реверси переворачивается фишка, её движение отрисовывается отдельно. Так настольная игра повлияла на устройство движка, который когда-то начинался с демонстраций по физике.
Что у шести приложений общего
Версии для Windows я пишу на C# и .NET и использую собственный рендерер на OpenGL. У каждого приложения есть манифест со списком модулей, которые оно загружает. Например, один и тот же луноход входит в Astronomy и Engineering. Когда я дорабатываю подвеску, мне достаточно проверить одну реализацию, и изменение появляется в обеих программах.
Для тех, кому интереснее сразу посмотреть исходники, у меня есть и более компактный проект — симуляция ткани. Одну и ту же модель я реализовал на C# с OpenGL и на Swift с Metal, так что две версии можно читать параллельно. https://github.com/makarov-mm/cloth-simulation · https://github.com/makarov-mm
Английская версия статьи на DEV: https://dev.to/makarov_mm/how-my-delphi-physics-lab-grew-into-makarov-suites-498o

