Наш новый проект начался со стремления к автоматизации дизайнерских процессов. К каждому релизу продукта дизайнеру необходимо подготовить большое количество маркетинговых материалов. При этом совершенно недостаточно просто размножить графику на разные носители, нужно иметь возможность внести разумное и эстетически обоснованное разнообразие в каждый экземпляр.
Идея генерировать графику в таких целях не нова, для дизайнера важно иметь глубокий и точный контроль над изображением, чтобы быстро варьировать и разворачивать новые визуальные конфигурации без значительного переписывания генерирующей структуры и бесконечного отлова ошибок на разных стадиях жизненного цикла кода.
![image](https://habrastorage.org/webt/br/x1/t2/brx1t2g835x72kip633rmahcreu.png)
В поиске решения этой проблемы программистское объединилось с дизайнерским, и получился генератор графики, который мы демонстрировали в прошлом году. Генератор был сделан не только для развлечения: мы использовали его для создания сплеш-скринов, баннеров, принтов на футболках и прочей мишуры. Изначальный генератор был способен только на статичные изображения, роль интерфейса контроля играли ноды, подкачанные библиотекой RPD.
В этом году нам остро понадобилась анимация для видеороликов, скринсейверов и интерактивных баннеров. Для анимации на вебе JavaScript, который мы использовали в прошлый раз, показался слишком, что называется, error-prone, и мы выбрали язык Elm, компилирующийся в очень быстрый JS.
Elm — самый простой и дружелюбный функциональный язык из ML-семейства со статической типизацией, что дает возможность писать гарантированно работающий код и описывать структуры типов повышенной сложности. С самого своего создания, Elm нацеливался на веб-графику, и среди пакетов, предлагавшихся в первых версиях языка, был прекрасный elm-collage, а чуть позже появился пакет elm-webgl, предоставляющий пользователю не только минималистичную обертку вокруг WebGL API, но и контроль над типами Uniforms / Attributes / Variables в шейдерах.
code2art.jetbrains.com — здесь вы можете запустить генератор и, обнаружив в себе дизайнерский драйв, пошевелить настройки. Можно обернуть понравившийся кадр в .png или скачать анимацию в виде HTML5-страницы с необходимыми ресурсами.
Мы не несем ответственности за ваше время, проведенное за безостановочным нажатием кнопки «I feel lucky». Если вы любите визуальные «трипы», то это хорошое место, чтобы зависнуть надолго.
Кроме прочего, мы снова позволили себе эксперимент с интерфейсом на чисто функциональном языке и в качестве альтернативы предлагаем вам интерфейс а-ля TRON: code2art.jetbrains.com/#tron
![image](https://habrastorage.org/webt/ht/s6/2h/hts62hvq7ieyqoofokyzevvazza.png)
Более глубокие технические подробности авторы генератора опишут в докладе на конференции f(by) в Минске 26 января.
Исходный код генератора вы можете найти здесь: github.com/JetBrains/elmsfeuer.
Ваша команда JetBrains
The Drive to Develop
Комментарии (18)
Alexneisc
30.12.2018 20:12Я уже несколько лет плачу от съехавшего прогресс-бара
Картинкаadvertka Автор
30.12.2018 01:18Прогресс-бар работает в штатном режиме, как и задумывался. Мы хотели сделать как можно меньше элементов на сплеше, и правый край выбран в качестве естественной границы, до которой он доходит.
KvanTTT
30.12.2018 20:21Классно!
А по каком принципу вы выбираете цвета к каждому продукту?advertka Автор
30.12.2018 01:10+1Каждый продукт имеет три цвета: один базовый, второй дополнительный и третий в качестве «острой специи». Дизайнер подбирает тройки таким образом, чтобы градиенты от одного цвета к другому не проходили через грязные цвета. Какой-то формулы здесь нет, хотя в будущем мы хотим использовать в этом месте нейросеть. Но это не точно.
Valery4
30.12.2018 21:19Elm — это замечательный, на мой взгляд, выбор. Но прямо напрашивается — почему не выбрали Kotlin? Возможно Elm больше соответсвует задаче, но как-то получается не последовательно, с точки зрения компании.
advertka Автор
30.12.2018 00:47У Elm с графикой действительно пока что ситуация лучше, он изначально для неё затачивался. Именно этим и обусловлен выбор. А что касается точки зрения компании, то мы в JetBrains открыты к использованию других языков.
Cerberuser
30.12.2018 21:40То, что в интерфейсе написано "warp in html5" — это фича? А то руки чешутся спросить, на каком физическом принципе гипердрайв смастерили :)
advertka Автор
30.12.2018 01:13Да, всё правильно, это именно warp и blast. Знаете, когда ставили кнопки, это показалось весело :)
Fengol
Просто нет слов! Огромное Вам спасибище! ЯлюблюВас! Желаю всем сотрудникам JB, в новом году, такого же настроения, которое вы подарили мне.
advertka Автор
И вам спасибо :) С наступающими!