Русский

WebGL-цветы — как сделана анимация живых цветов в приглашении

Цветы в дизайне Floral от Shaqyrtu — это не картинка и не GIF. Они рисуются процедурно в реальном времени, прямо на видеокарте вашего устройства, и растут. Нажмите на экран — появится новый цветок. Объясняем, какая технология стоит за этим.

Коротко: что это значит?

Обычная картинка состоит из готовых пикселей. WebGL-цветок — это код. В каждом кадре видеокарта пересчитывает каждый пиксель цветка по формуле. Поэтому цветок:

  • чёткий в любом размере (как вектор, не размывается),
  • живой — растёт, набирает бутон, раскрывается,
  • реагирует на ваши действия (нажатие = новый цветок).

Технологический стек

1. WebGL + Three.js

WebGL — стандарт, позволяющий использовать видеокарту (GPU) прямо в браузере. Мы управляем им через библиотеку Three.js — она упрощает низкоуровневые детали WebGL.

Сцена простая: одна цельная плоскость на весь экран (fullscreen plane) — «холст», на котором рисуются цветы.

2. GLSL-шейдеры

Вся логика отрисовки — в шейдерах, маленьких программах, работающих на GPU:

  • Вершинный шейдер (flower.vert) — размещает геометрию плоскости.
  • Фрагментный шейдер (flower.frag) — вычисляет цвет каждого пикселя. Цветок «рисуется» именно здесь: лепестки, стебель, цвет — всё математическими функциями.

Естественный, неровный край цветка создаётся шумом Simplex (snoise) — это даёт органичную, «нарисованную от руки» форму. Цвет настраивается в пространстве HSV, поэтому фоновый и акцентный цвета легко менять.

3. Анимация — время и случайность

Каждый цветок описывается несколькими числами:

  • u_point — где на экране растёт цветок,
  • u_time — время, которое ведёт анимацию роста,
  • u_stop_randomizer — случайные значения, делающие каждый цветок уникальным (размер, степень раскрытия, изгиб).

Благодаря этому не бывает двух одинаковых цветов — как в настоящем саду.

4. Связь со скроллом — «закрытие» цветка

При прокрутке страницы вниз цветы плавно закрываются (эффект iris-close). Это управляется параметром wiltAmount: 0 — полностью открыт, 1 — полностью закрыт. Позиция скролла напрямую передаётся в шейдер, и цветок будто «дышит» вместе с прокруткой.

5. Производительность

«Живая» графика может расходовать батарею, поэтому есть несколько защит:

  • Ограничена плотность пикселей — на Retina-экранах нет лишних вычислений.
  • Останавливается вне экрана — если секция с цветами уходит за пределы экрана, анимация и GPU выключаются (pauseWhenOffscreen).
  • Запускается только при появлении — пока секция не достигнута скроллом, WebGL не загружается.
  • Адаптирована под браузер Telegram — высота считается в единицах svh (чтобы избежать сбоев во встроенном браузере).

Почему это важно?

Открывая приглашение, гость видит не статичную бумагу, а живую, отзывчивую страницу — цветы растут, реагируют на нажатие, закрываются при скролле. Это делает приглашение запоминающимся и показывает качество бренда.

Дизайн Floral вдохновлён открытым WebGL-этюдом с цветами от Ksenia K и адаптирован под формат приглашений Shaqyrtu.

Попробуйте дизайн Floral — «посадите» цветы сами и почувствуйте, как они живые.

Онлайн шақыру жасауға дайынсыз ба?

демеуші арқылы 1000 ₸-ден бастап