chipsa design studio
sites / interfaces / branding / cgi
Поделиться публикацией в соцсетях
назад ко всем публикациям

Статья

Не создаём, а разрушаем: как мы оптимизировали тонны контента и высекли логотип из камня

Pavel Mazhuga
Не создаём, а разрушаем: как мы оптимизировали тонны контента и высекли логотип из камня
О проекте
3dwebglfrontend
Публикуем последний текст об изменениях нашего сайта — вы уже знаете, какие смыслы мы в него заложили и как работали над дизайном. Остался ещё один аспект — технический. Возможно, не настолько «противоречивый», как остальные, но не менее увлекательный. Сейчас расскажем о чудесах оптимизации и трудностях реализации.
Основные сложности

Несмотря на то, что много идей осталось «на потом», в плане технической реализации проект получился сложным. Но классным и нетипичным — за всё время над ним успели поработать три фронтенд-разработчика, которые проделали титанический труд.

 

Работа проходила на стеках Next.js (React) и React-three-fiber (Three.js). Коротко перечислим основные моменты, с которыми возникли сложности, а после — остановимся подробнее на самых интересных. Итак:

 

  • Большое количество медиаконтента, который сложно сложно оптимизировать.
  • Синхронизация HTML и WebGL (в основном, при скролле).
  • Плавный переход между страницами и при ховер-эффекте.
  • Форма в виде чат-бота, так как в ней необходимо учитывать множество состояний одновременно.
Оптимизация видео

На сайте очень много тяжёлых видео, которые должны загружаться быстро и без лагов. Возникло несколько идей, как это можно сделать — оптимизировать вес файлов, конвертировать их в более современный формат или использовать CDN.

 

Первый пункт понятен: чем меньше вес, тем быстрее грузится файл. С конвертацией сложнее, ведь необходимо выяснить, какие форматы для веба подходят лучше, чем классический .mp4. Для себя мы выстроили такую приоритетную цепочку: .av1 > .hevc > .mp4.

 

Ну, а для CDN требовалось использовать самый близкий к пользователю сервер, который раздаёт статические файлы, так как чем короче путь до сервера, тем быстрее они грузятся.

 

Что сделали

Для оптимизации использовали ffmpeg — своеобразный «швейцарский нож» для работы с видео. Чтобы понять, как он работает, представим некий исходник «input.mp4».

 

Как выглядит команда для генерации HEVC:

ffmpeg -i input.mp4 -c: v libx265 -crf 30 -vf scale=1920:-2 -tag: v hvc1 -movflags faststart output-opt.hevc.mp4

 

Как выглядит команда для генерации AV1:

ffmpeg -i input.mp4-c: v libsvtav1 -crf 40 -movflags faststart -vf scale=1920:-2 output-opt.av1.mp4

 

Как выглядит команда для оптимизации MP4:

ffmpeg -i input.mp4 -c: v libx264 -pix_fmt yuv420p -crf 20 -vf scale=1920:-2 -movflags +faststart output-opt.mp4

 

Это помогло «ужать» файлы без потери качества — результат можете увидеть на нашем сайте. Видео не тормозит. Вообще.

Каменный логотип

После того, как мы перебрали кучу вариантов, из какого материала должна быть сделана наша чипсинка, и остановились на камне, пришло время создать крутую ховер-анимацию, которая отражала бы новую концепцию. При наведении курсора на «цельный» логотип его должна расталкивать некая сила, после чего он снова собирается в единый элемент.

 

Очевидно, что это WebGL, потому что тут нужен интерактив. Удобнее всего просто разбить модель на куски в 3D-софте, после чего поработать с событием pointermove, чтобы рассчитать ту самую «силу».

 

Что сделали

Для реализации использовали библиотеку Three.js с форматом модели GLB, который является стандартом для веба. Анимации появления и исчезновения 3D-дизайнер отрисовал в блендере, а на фронтенде они проигрываются с помощью THREE.AnimationMixer.

 

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

Карточки кейсов

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

 

Что сделали

Снова использовали WebGL — растянули канвас на весь экран, скрыли HTML с нужными изображениями и видео, а на их позицию поставили PlaneGeometry. После чего подогнали размер чётко по размеру HTML-элементов и синхронизировали позиции в 3D-мире с HTML, которые сохранялись бы при скролле.

Что в итоге

Рассказали о самом интересном и сложном, но далеко не обо всём. Это, скорее, иллюстрация работы нашего мышления — как мы подходим к решению задач и что нас это действительно увлекает. Уже говорили, но повторимся: за время работы над сайтом проделан огромный труд — это не только новый опыт, но и прокачка имеющихся навыков. Главное, мы достигли основной цели «чтобы заказчику понравилось», ведь наш новый сайт безумно нравится нам самим.

 

Подписывайтесь на телеграм-канал, где мы выкладываем ещё больше интересного контента и наглядно показываем то, чем занимается наша дизайн-студия.

Следующая публикация
Дорогой дизайн и креативный продукт: как эмоции продают лучше, чем десятки кнопок «Купить сейчас»
Alex Trepachev
10
Привет, поговорим?