Перейти к содержанию
RUEN

Magic Hookah: интерактивный кальян на Canvas 2D

Кальян, который реагирует на курсор и палец: шланг тянется за рукой, дым течёт по законам жидкости, а звук синтезируется на лету.

Попробуйте мышью или касанием.

Задача

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

Решение

  • Кальян рисуется процедурно на Canvas 2D в стиле пиксель-арта: ни одного растрового файла, вся картинка строится кодом, поэтому легко меняются цвета, размеры и детали.
  • Шланг моделируется как верёвка по методу Верле (Verlet integration, численное интегрирование без хранения скоростей): конец следует за курсором или пальцем, а остальные звенья подтягиваются с ограничениями по длине.
  • Дым считается решателем Stable Fluids (устойчивое решение уравнений течения жидкости): струя завихряется, растекается и затухает.
  • Угли разогреваются на вдохе, добавлено свечение (bloom, размытое сияние ярких областей), а звук синтезируется через Web Audio без аудиофайлов.

Подробности

  • Управление мышью и касанием через Pointer Events (общий интерфейс браузера для мыши, пальца и пера): один код для компьютера и телефона.
  • Дым считается на грубой сетке Stable Fluids, шланг — верёвка Верле из 16 звеньев. Единственный адаптивный режим — настройка «уменьшить движение» (prefers-reduced-motion).
  • Звук включается только после жеста пользователя, как требуют браузеры.

Технологии

  • Canvas 2D
  • Verlet
  • Stable Fluids
  • Web Audio
  • Pointer Events
  • TypeScript