Высокое часовое искусство

Друзья, посмотрите на эту картинку! Можно подумать, что это обложка какого-то элитного журнала, посвященного высокому часовому искусству (Haute Horlogerie). Но на самом деле это скриншот моей последней разработки, которая по сложности превосходит все мыслимые пределы.

Каждый элемент этих часов — чистая математическая функция, которая в реальном времени рендерится и работает прямо на видеокарте. Такой подход как раз идеально отражает философию ручной сборки сложнейшего механического калибра и показывает уровень цифрового мастерства. Но это только мой первый, экспериментальный калибр. Прямо сейчас я работаю над следующим проектом, который по сложности реализации полностью затмит этот первый.

В принципе, математическая база уже готова: виртуальные часы идут, а их часовая и минутная стрелки представляют собой изящное переплетение тончайших нитей воронёной стали. Но главное украшение здесь принципиально другое — репетир. Да, ребятки, это виртуальные наручные часы с акустическим боем. Мой новый механизм будет не просто показывать время, он сможет отбивать часы и четверти часа (в часовом деле это усложнение называется четвертным репетиром). Вся колесная передача и платина у меня уже отлажены, даже размещены опорные мосты механизма. Осталось только смоделировать в виде сложных математических уравнений финальный узел: сами молоточки и звуковые гонги репетира.

И к этой безумной идее я пришла далеко не просто так. Мой дедушка невероятно круто разбирался в микромеханике — какие только редкие экземпляры ему ни приносили на ремонт. Но когда его собственные главные жизненные часы остановились... после него осталась целая вселенная. Полный набор профессионального часового инструмента и много-много редких механизмов. Некоторые из них он так и не успел собрать, так что они до сих пор лежат в коробках в виде сотен крошечных деталек. Но вы же помните, что я с детства повернута на пазлах? Собрать обычную мозаику на 1200 элементов где-то в возрасте 3–4 лет для меня было делом обычной получасовой разминки.

В общем, я не удержалась и своими руками полностью собрала один из дедушкиных архивных механизмов. Я даже не знаю, чьи это были часы и кто когда-то давно отдал их в ремонт. Но прямо сейчас они тикают у меня на запястье, и они очень, очень необычные. Знаете, первое время мои подруги аж подпрыгивали, когда эти часы внезапно начинали мелодично отбивать четверти. Блин, этот звук... он невероятно нежный, чистый, как какая-то хрустальная мелодия из сна. Именно этот живой прототип я сейчас и воссоздаю в цифровом коде.

Я далеко не сразу нащупала эту форму цифрового искусства. Зато последний день выдался просто невероятным! Я выложила техническую демку своего прошлого проекта на Product Hunt, чтобы мировое IT-сообщество оценило технологии, которыми я владею. Мне важно было понять, туда ли я вообще двигаюсь или нужно срочно корректировать курс. И если вам интересно, я могу показать комментарии, которые мне сейчас туда прилетают. Это фидбек не от рядовых пользователей, а от ведущих мировых разработчиков и тестеров топовых технологических продуктов. Когда я читаю их разборы, у меня по спине бегут мурашки. И теперь я окончательно уверена: я на правильном пути.


Стефания
https://stephaniia-bubnova.web.app/


P.S. Некоторые комментарии с площадки запуска

АРХИВ ЗАПУСКА PRODUCT HUNT — СТЕФАНИЯ БУБНОВА (STEPHANIIA BUBNOVA)

ВОПРОС 1 (КОММЕНТАТОР-ЭКСПЕРТ)

[RU] РУССКАЯ ВЕРСИЯ
Вопрос/Комментарий:
Шейдеры GLSL, написанные вручную без внешних библиотек — это искренне впечатляет. А достижение стабильных 60 FPS на чистом раймаршинге SDF — это как раз то мастерство, о котором большинство разработчиков шейдеров могут только мечтать.

Ответ:
Вау, спасибо за такую высокую оценку! Слышать это от человека, который понимает всю сложность разработки шейдеров, очень много значит для меня. Поддержание стабильных 60 FPS при раймаршинге чистых SDF потребовало агрессивного рефакторинга, отказа от тяжелых операций и ювелирной структуры математики под конвейер GPU. Это был настоящий вызов, но такие комментарии заставляют поверить, что весь этот код-гольфинг и оптимизация того стоили. Спасибо за огромную поддержку!

[EN] ENGLISH VERSION
Question/Comment:
Hand-crafted GLSL with no external libraries is genuinely impressive, and hitting a stable 60 FPS on pure raymarched SDFs is the kind of craft most shader folks only dream about.

Reply:
Wow, thank you for such high praise! Coming from someone who understands the complexity of shader development, this means the world to me. Keeping a stable 60 FPS while raymarching pure SDFs required a lot of aggressive refactoring, sacrificing heavy operations, and structuring the math just right for the GPU pipeline. It was a real challenge, but comments like yours make all that code-golfing and optimization completely worth it. Thanks for the massive support!


ВОПРОС 2 (КОММЕНТАТОР-ПОЛЬЗОВАТЕЛЬ)

[RU] РУССКАЯ ВЕРСИЯ
Вопрос/Комментарий:
Честно думал, что на моем телефоне всё будет жутко лагать, но м о р ф и н г остается плавно-гладким, как масло. Тот факт, что всю эту работу делают просто чистые шейдеры — это уму непостижимо (дико).

Ответ:
Большое спасибо! Оптимизация была одной из самых сложных задач. Раймаршинг на мобильных устройствах может сильно нагружать систему, поэтому я потратила много времени на тонкую настройку кода и упрощение математики SDF, чтобы всё работало идеально гладко даже на смартфонах. Рада, что вы оценили подход с чистыми шейдерами!

[EN] ENGLISH VERSION
Question/Comment:
Honestly thought this would chug on my phone but the m o r p h i n g stays buttery smooth. The fact that it is just raw shaders doing all that work is kind of wild.

Reply:
Thank you so much! Optimization was one of the biggest challenges here. Raymarching on mobile can be heavy, so I spent a lot of time fine-tuning the code and simplifying the SDF mathematics to ensure it stays buttery smooth even on smartphones. Glad you appreciated the raw shader approach!


ВОПРОС 3 (КОММЕНТАТОР-РАЗРАБОТЧИК)

[RU] РУССКАЯ ВЕРСИЯ
Вопрос/Комментарий:
Как вы справляетесь с производительностью на слабых мобильных устройствах, когда сложность SDF резко возрастает во время промежуточных фаз м о р ф и н г а? Интересно, встроен ли в пайплайн шейдеров какой-то резервный путь (fallback) или стратегия LOD (уровней детализации)?

Ответ:
Это блестящий вопрос! Промежуточные фазы м о р ф и н г а действительно являются самыми критическими моментами, поскольку функции гладкого минимума (smin) или смешивание сложных SDF могут легко удвоить математическую сложность и привести к просадке производительности раймаршинга.

Чтобы справиться с этим на слабых мобильных устройствах без использования полноценного динамического пайплайна резервных путей (так как это один чистый шейдер), я внедрила несколько строгих стратегий оптимизации:

1. Ограниченные зоны м о р ф и н г а: Тяжелые математические расчеты смешивания срабатывают только внутри строгого пространственного ограничивающего объема (bounding volume). Лучи, которые проходят мимо этой зоны, полностью пропускают сложную логику м о р ф и н г а.
2. Ограничение шагов по дистанции (Fake LOD): Хотя здесь нет полигональной сетки для замены, я использую стратегию шагов на основе расстояния. Когда камера отдаляется, значение epsilon (точность попадания на поверхность) динамически увеличивается, а максимальное количество шагов луча (step count) уменьшается. Это работает как LOD на уровне шейдера.
3. Оптимизированный расчет нормалей: Расчет нормалей через конечные разности чрезвычайно прожорлив во время м о р ф и н г а. Я оптимизировала его, повторно используя выборки поля расстояний из основного цикла маршинга, где это возможно, что сократило ненужные вызовы функции SDF прямо в фазе перехода.

Спасибо за такой профессиональный вопрос!

[EN] ENGLISH VERSION
Question/Comment:
How are you handling performance on lower-end mobile devices when the SDF complexity ramps up during those mid-m o r p h transitions? Curious if there's a fallback path or LOD strategy built into the shader pipeline.

Reply:
That’s a brilliant question! Mid-m o r p h transitions are indeed the most critical parts because smooth minimum functions (smin) or mixing complex SDFs can easily double the math complexity and cause raymarching to drag down performance.

To handle this on lower-end mobile devices without a true dynamic fallback pipeline (since it's a single raw shader), I implemented a few strict optimization strategies:

1. Bounded M o r p h i n g Areas: The intense blending mathematics only trigger within a strict spatial bounding volume. Rays that miss the bounding area skip the complex morphing logic entirely.
2. Distance-Based Step Throttling (Fake LOD): While there's no mesh to swap, I use a distance-based step strategy. As the camera moves further away, the epsilon (surface tolerance) increases dynamically, and the maximum raymarching step count drops. This acts as a shader-level LOD.
3. Optimized Normal Calculations: Normal estimation via finite differences is extremely heavy during m o r p h s. I optimized it by reusing distance field samples from the marching loop where possible, cutting down unnecessary SDF evaluations right at the transition phase.

Thanks for asking such a tech-savvy question!


ВОПРОС 4 (КОММЕНТАТОР-ЦЕНИТЕЛЬ)

[RU] РУССКАЯ ВЕРСИЯ
Вопрос/Комментарий:
Работает плавно на моем телефоне, чего я никак не ожидал от раймаршинга, а то, как одна форма перетекает в другую, искренне завораживает.

Ответ:
Большое спасибо! Слышать, что всё плавно работает на вашем телефоне, очень важно для меня, так как адаптация раймаршинга под мобильные устройства потребовала немало работы по оптимизации. Я супер рада, что вам понравились переходы м о р ф и н г а — сделать их органичными и завораживающими как раз и было главной целью. Ценю вашу поддержку!

[EN] ENGLISH VERSION
Question/Comment:
Runs smooth on my phone which i did not expect from raymarching, and the way one shape flows into another is genuinely mesmerizing

Reply:
Thank you so much! Hearing that it runs smooth on your phone means a lot, as making raymarching mobile-friendly took quite a bit of optimization work. I’m super glad you enjoyed the m o r p h i n g transitions — keeping them organic and mesmerizing was exactly the goal. Appreciate the support!


Рецензии