История одного эффекта
Часть 1. Реверс-инжиниринг, интриги, расследования
Несколько недель назад я увидел классную подборку логотипов от Martin Naumann и подумал а что если сделать такое на WebGL и оживить? Выглядит не сложно, будто выдавленный вперёд логотип, отражающий окружение. Задача сводится к построить текстуру с расстоянием до контура (называется это SDF), по SDF определить высоту пикселя, посчитать направление отражения и взять какой-то хитрый градиент собственно для окружения. Ну что же, поехали! За пару вечеров справлюсь (ага, конечно :)
Для начала я сделал кружок прямо в шейдере, поигрался с градиентами и почти сразу получил неплохой результат (видео 2). Градиент вычислялся из двух кольцевых градиентов с линейной интерполяцией между ними в зависимости от высоты нормали, по сути цилиндр. Вдохновившись, я решил повторить эффект на букве D. У неё есть и углы и скруглённая часть, то что нужно для теста. Чтобы сильно не заморачиваться в качестве SDF я использовал outer glow в ФШ, градиент теперь строился в зависимости от положения курсора для интерактивности (видео 3). Ага, тоже прикольно, но как-то уже не то. Ну что же, начало положено, завтра продолжу – решил я и ушёл спать.
На следующий день я подумал что было бы неплохо взять всё же сразу какую-то надпись и работать с ней, например, название своей студии :) Дело в том, что до этого для определения горизонтальной составляющей нормали я брал вектор из центра экрана, но это работало бы только с кругом или с близкими к нему формами. А я же хочу впоследствии масштабировать эффект на угодно. Решение простое — для каждого пикселя текстуры с символом находим ближайший пиксель его контура и в rg каналах храним направление от него, в b — расстояние.
Довольно быстро накатал генератор таких картинок (4), отдельно внешнее поле, отдельно внутреннее. Заблюрил rg каналы в фш, чтобы не было видно совсем уж ступенек, быстренько адаптировал шейдер и вуаля, картинка 5 готова :D Отсутствие активации - это мой ответ Биллу Гейтсу за чипирование 5g ковида.
Гейтс Гейтсом, а результат по меньшей мере выглядит странно и нужно с этим что-то делать. Сейчас, в ретроспективе, очевидно, что с добавлением фич я мелкими шажками уходил в сторону от решения, но в процессе реализации одной фичи мне было сложно понять где я косячу с второй. Пришлось взять паузу, чтобы помедитировать на исходные логотипы.
После вечера раздумий, я переделал градиент ближе к начальному и решил брать какую-то нелинейную функцию от расстояния, чтобы получить собственно ту самую красоту на краях символов. Для того чтобы иметь возможность поиграть с этими функциями я и не генерировал карту нормалей изначально. Считать нормали в шейдере стало резко сложнее, но благо нормаль это перпендикуляр к касательной функции, а касательная функции это её производная. Производные за нас отлично считает WolframAlpha (особенно когда пробуешь взять что-то типа производной expSustainedImpulse). Получилось как-то так:
В общем, спустя неделю экспериментов я сдался. И написал автору эффекта :) Он не хотел делиться своими секретами, но его наводок оказалось достаточно чтобы на следующий же день получить классный результат. О том, как это у меня получилось я напишу позже, а вы пока попробуйте догадаться как это в итоге устроено 😉
#my #tutorial
Часть 1. Реверс-инжиниринг, интриги, расследования
Несколько недель назад я увидел классную подборку логотипов от Martin Naumann и подумал а что если сделать такое на WebGL и оживить? Выглядит не сложно, будто выдавленный вперёд логотип, отражающий окружение. Задача сводится к построить текстуру с расстоянием до контура (называется это SDF), по SDF определить высоту пикселя, посчитать направление отражения и взять какой-то хитрый градиент собственно для окружения. Ну что же, поехали! За пару вечеров справлюсь (ага, конечно :)
Для начала я сделал кружок прямо в шейдере, поигрался с градиентами и почти сразу получил неплохой результат (видео 2). Градиент вычислялся из двух кольцевых градиентов с линейной интерполяцией между ними в зависимости от высоты нормали, по сути цилиндр. Вдохновившись, я решил повторить эффект на букве D. У неё есть и углы и скруглённая часть, то что нужно для теста. Чтобы сильно не заморачиваться в качестве SDF я использовал outer glow в ФШ, градиент теперь строился в зависимости от положения курсора для интерактивности (видео 3). Ага, тоже прикольно, но как-то уже не то. Ну что же, начало положено, завтра продолжу – решил я и ушёл спать.
На следующий день я подумал что было бы неплохо взять всё же сразу какую-то надпись и работать с ней, например, название своей студии :) Дело в том, что до этого для определения горизонтальной составляющей нормали я брал вектор из центра экрана, но это работало бы только с кругом или с близкими к нему формами. А я же хочу впоследствии масштабировать эффект на угодно. Решение простое — для каждого пикселя текстуры с символом находим ближайший пиксель его контура и в rg каналах храним направление от него, в b — расстояние.
Довольно быстро накатал генератор таких картинок (4), отдельно внешнее поле, отдельно внутреннее. Заблюрил rg каналы в фш, чтобы не было видно совсем уж ступенек, быстренько адаптировал шейдер и вуаля, картинка 5 готова :D Отсутствие активации - это мой ответ Биллу Гейтсу за чипирование 5g ковида.
Гейтс Гейтсом, а результат по меньшей мере выглядит странно и нужно с этим что-то делать. Сейчас, в ретроспективе, очевидно, что с добавлением фич я мелкими шажками уходил в сторону от решения, но в процессе реализации одной фичи мне было сложно понять где я косячу с второй. Пришлось взять паузу, чтобы помедитировать на исходные логотипы.
После вечера раздумий, я переделал градиент ближе к начальному и решил брать какую-то нелинейную функцию от расстояния, чтобы получить собственно ту самую красоту на краях символов. Для того чтобы иметь возможность поиграть с этими функциями я и не генерировал карту нормалей изначально. Считать нормали в шейдере стало резко сложнее, но благо нормаль это перпендикуляр к касательной функции, а касательная функции это её производная. Производные за нас отлично считает WolframAlpha (особенно когда пробуешь взять что-то типа производной expSustainedImpulse). Получилось как-то так:
float slope = 1. - pow(1. - dist, 8.);
float slopeDerivative = 8. * pow(1. - dist, 7.);
if (slopeDerivative > 0.) {
normal = normalize(vec3(direction, 1. / slopeDerivative));
}
И вот мы уже на картинке 6, а до красоты ещё ооочень далеко. Проделывая кучу экспериментов с формой спусков у букв, цилиндрическими и куполообразными градиентами, с использованием источников света вместо градиентов (получив кстати в процессе тот самый баг), я отдалялся от исходной картинки всё дальше и дальше. Лучшим что у меня получилось была картинка 7 (наверное потому что на ней почти ничего нет 😄), но если включить окружение получалась картинка 8. И дело было даже не столько в корявости поля направлений или градиентов, сколько в некорректности моих решений на уровне идеи.В общем, спустя неделю экспериментов я сдался. И написал автору эффекта :) Он не хотел делиться своими секретами, но его наводок оказалось достаточно чтобы на следующий же день получить классный результат. О том, как это у меня получилось я напишу позже, а вы пока попробуйте догадаться как это в итоге устроено 😉
#my #tutorial
This media is not supported in your browser
VIEW IN TELEGRAM
Поставил себе десяток редакторов видео чтобы быстро обрезать видео, ни в одном это не удобно, в большинстве нельзя без плясок сделать нестандартное разрешение на выходе.
В итоге оказалось на 777й странице выдачи гугла есть онлайн тулза которая делает именно и только то что мне нужно — https://online-video-cutter.com/
Ох уж это SEO...
На видео пример интерполяции между скелетными анимациями, одна из AnimationMixer, вторая из положения курсора. Мой великолепный костыль для mav.farm
#tool #my
В итоге оказалось на 777й странице выдачи гугла есть онлайн тулза которая делает именно и только то что мне нужно — https://online-video-cutter.com/
Ох уж это SEO...
На видео пример интерполяции между скелетными анимациями, одна из AnimationMixer, вторая из положения курсора. Мой великолепный костыль для mav.farm
#tool #my
Media is too big
VIEW IN TELEGRAM
Как красиво делать списки с картинками
Технически ничего сверхъестественного, почти всё это — комбинации displacements, анаглифы, вершинные анимации. Хорошо видно как важно делать отзывчивые изинги и подмешивать к анимации реакцию на положение курсора / пальца.
https://jesperlandberg.dev/
https://www.kirkwhayman.com/work
https://kentatoshikura.com/
https://garden-eight.com/work/
https://nahelmoussi.com/
https://www.cher-ami.tv/en
#reference
Технически ничего сверхъестественного, почти всё это — комбинации displacements, анаглифы, вершинные анимации. Хорошо видно как важно делать отзывчивые изинги и подмешивать к анимации реакцию на положение курсора / пальца.
https://jesperlandberg.dev/
https://www.kirkwhayman.com/work
https://kentatoshikura.com/
https://garden-eight.com/work/
https://nahelmoussi.com/
https://www.cher-ami.tv/en
#reference
This media is not supported in your browser
VIEW IN TELEGRAM
Старое доброе ультранасилие
Оказалось, симуляция жидкостей не так хороша для смешивания жидкостей, но переделывать я это конечно же не буду. В целом комбинация этих решений открывает просто огромный простор для творчества, идей для реализации масса :) Где бы найти время для того чтобы причесать и повыкладывать все демки...
Кто знает, если выложить это в инсту и твиттер меня не забанят за музыку под копирайтом? Кстати, у меня есть инстаграм и твиттер :)
#my
Оказалось, симуляция жидкостей не так хороша для смешивания жидкостей, но переделывать я это конечно же не буду. В целом комбинация этих решений открывает просто огромный простор для творчества, идей для реализации масса :) Где бы найти время для того чтобы причесать и повыкладывать все демки...
Кто знает, если выложить это в инсту и твиттер меня не забанят за музыку под копирайтом? Кстати, у меня есть инстаграм и твиттер :)
#my
Media is too big
VIEW IN TELEGRAM
Слава из GeexArts поделился со мной переосмыслением идей с mav.farm
https://www.midwam.com/en
Очень крутая пост обработка, размытия, анаглифы, моушн блюр, классная галерея, отражения, звук и всё это укладывается в цельную концепцию. Арабская версия ещё и радует непривычными буковками. Кайф короче
Жаль SpectorJS его почему-то не берёт, так бы поковырялся в нём поглубже
#reference
https://www.midwam.com/en
Очень крутая пост обработка, размытия, анаглифы, моушн блюр, классная галерея, отражения, звук и всё это укладывается в цельную концепцию. Арабская версия ещё и радует непривычными буковками. Кайф короче
Жаль SpectorJS его почему-то не берёт, так бы поковырялся в нём поглубже
#reference
Эпический веб продакшн.
Estee Lauder | The ANRcade
Визуал просто без комментариев, хорошая работа со звуком, даже игровые механики продуманы в мелочах. Уфф
#reference
Estee Lauder | The ANRcade
Визуал просто без комментариев, хорошая работа со звуком, даже игровые механики продуманы в мелочах. Уфф
#reference
Юра Артюх выпустил очень крутое видео как из модельки в блендере сделать 3D web конфигуратор всего в 81 строку кода. Must see!
И вроде я когда-то давно решил для себя не использовать r3f, это оверхед, а всё и так тормозит, но. Когда видишь этот dev experience, эту скорость разработки и эту лаконичность результата, соблазн очень велик. Как долго я бы пилил это на чистой трёхе или OGL? То то же.
И да, из описания репы:
Is it slower than raw threejs?
No. Rendering performance is up to threejs and the GPU. Components participate in the renderloop outside of React, without any additional overhead. React is otherwise very efficient in building and managing component-trees, it could potentially outperform manual/imperative apps at scale.
Такие вот дела. А видео стоит внимания 😉
#tutorial
И вроде я когда-то давно решил для себя не использовать r3f, это оверхед, а всё и так тормозит, но. Когда видишь этот dev experience, эту скорость разработки и эту лаконичность результата, соблазн очень велик. Как долго я бы пилил это на чистой трёхе или OGL? То то же.
И да, из описания репы:
Is it slower than raw threejs?
No. Rendering performance is up to threejs and the GPU. Components participate in the renderloop outside of React, without any additional overhead. React is otherwise very efficient in building and managing component-trees, it could potentially outperform manual/imperative apps at scale.
Такие вот дела. А видео стоит внимания 😉
#tutorial
YouTube
3D model configurator with React Three Fiber and gltfjsx
Huge thanks to Poimandres team and Paul Henschel, who made this video possible. Im just showing result of their work!
Demo: https://codesandbox.io/s/floating-shoe-forked-qxjoj
Repo with code by Paul: https://github.com/drcmda/floating-shoe
All repos are…
Demo: https://codesandbox.io/s/floating-shoe-forked-qxjoj
Repo with code by Paul: https://github.com/drcmda/floating-shoe
All repos are…
Год начался прекрасно 😊 Налюбовавшись вдоволь лучшей симуляцией морской поверхности и жизни под ней, я вернулся в симуляцию снега и мороза, а значит пора симулировать рабочие процессы. Эх
Чтобы знать в какую сторону работать полезно разбираться в бизнес стороне вопросов. Так что рекомендую свежайшее интервью с основательницей WeAR Studio:
https://youtu.be/7lpCIhUSRHk
Для меня было интересно в контексте WebAR, у них это самые дешёвые проекты в сравнении с VR решениями под всякие окулусы и мобильными приложениями на Unity. Думаю это связано с техническими ограничениями, сделать большой проект дополненной реальности в вебе не очень реально) Они продают такие проекты по 10к$.
Говорит маржа её бизнеса составляет 300%, а это очень, очень много. При этом есть стабильный поток проектов и они ставят их в очередь. Упоминает ещё интересный момент про слив брендами маркетинговых бюджетов в конце года, когда маркетологам надо потратить деньги и они готовы пускаться в авантюры. И ещё много всего другого. Думаю чтобы делать такую же маржу стоит посмотреть :)
На этом ютуб канале есть так же интервью с основателем Vintage, но лично по мне качество их работ сильно просело после того как они решили выстроить бизнес-процессы, так что для меня они не ориентир. Но с точки зрения бизнеса тоже интересно 😉
#business
Чтобы знать в какую сторону работать полезно разбираться в бизнес стороне вопросов. Так что рекомендую свежайшее интервью с основательницей WeAR Studio:
https://youtu.be/7lpCIhUSRHk
Для меня было интересно в контексте WebAR, у них это самые дешёвые проекты в сравнении с VR решениями под всякие окулусы и мобильными приложениями на Unity. Думаю это связано с техническими ограничениями, сделать большой проект дополненной реальности в вебе не очень реально) Они продают такие проекты по 10к$.
Говорит маржа её бизнеса составляет 300%, а это очень, очень много. При этом есть стабильный поток проектов и они ставят их в очередь. Упоминает ещё интересный момент про слив брендами маркетинговых бюджетов в конце года, когда маркетологам надо потратить деньги и они готовы пускаться в авантюры. И ещё много всего другого. Думаю чтобы делать такую же маржу стоит посмотреть :)
На этом ютуб канале есть так же интервью с основателем Vintage, но лично по мне качество их работ сильно просело после того как они решили выстроить бизнес-процессы, так что для меня они не ориентир. Но с точки зрения бизнеса тоже интересно 😉
#business
YouTube
Разработка в дополненной и виртуальной реальности: нишевый бизнес с нуля до мировых брендов-клиентов
Дарья Федько – основатель компании WeAR Studio, которая разрабатывает мобильные приложения и решения с использованием виртуальной и дополненной реальности.
В интервью обсудили кто, где и зачем использует AR/VR технологии, и как на этом можно заработать.…
В интервью обсудили кто, где и зачем использует AR/VR технологии, и как на этом можно заработать.…
Очень крутая техника объёмного рендеринга
https://habr.com/ru/post/500914/
Для оптимизации автор использует мои любимые ray-surface instersectors где это возможно, дым приходится реймарчить. В статье также описан процесс полировки результата, а это самый сок :)
И там же есть шейдертой. Если поставить PERFORMANCE_MODE 1, оно даже летает на полном экране, ценой появления незначительных артефактов. Собственно в прикреплённых видео показаны оба режима 😉
Если кто-то знает крутых математиков умеющих интегрировать SDF c fBM по прямой — пишите, создадим крутую технологию 😊 В теории можно будет избавиться от реймарчинга и получить высокую производительность.
Мечты, мечты...
#reference #article
https://habr.com/ru/post/500914/
Для оптимизации автор использует мои любимые ray-surface instersectors где это возможно, дым приходится реймарчить. В статье также описан процесс полировки результата, а это самый сок :)
И там же есть шейдертой. Если поставить PERFORMANCE_MODE 1, оно даже летает на полном экране, ценой появления незначительных артефактов. Собственно в прикреплённых видео показаны оба режима 😉
Если кто-то знает крутых математиков умеющих интегрировать SDF c fBM по прямой — пишите, создадим крутую технологию 😊 В теории можно будет избавиться от реймарчинга и получить высокую производительность.
Мечты, мечты...
#reference #article
This media is not supported in your browser
VIEW IN TELEGRAM
Скорее всего это сделано в Cinema4D, но кодом геометрию повторить вроде должно быть просто. Взять тор с треугольным сечением, разъединить где-то, повернуть один конец на 120 градусов и получим вот такую поверхность Мёбиуса. Можно реймарчингом, можно из треугольников. Ну а градиенты уже отдельно думать :)
#inspiration by pak
#inspiration by pak
This media is not supported in your browser
VIEW IN TELEGRAM
Если кто вдруг не знает, Юра Артюх сделал курс Слияние миров WebGL и HTML
In this course you will learn how to apply some stunning WebGL effects to the images you already have on your webpage. We will start from a beautiful but static HTML template. And spice it up with Three.js and WebGL.
До конца недели стоит 25€ вместо 100
Ссылочка
utm поставил чисто поржать с рекламщиков авардс, они не догадываются что у них есть такая кампания
In this course you will learn how to apply some stunning WebGL effects to the images you already have on your webpage. We will start from a beautiful but static HTML template. And spice it up with Three.js and WebGL.
До конца недели стоит 25€ вместо 100
Ссылочка
utm поставил чисто поржать с рекламщиков авардс, они не догадываются что у них есть такая кампания
Media is too big
VIEW IN TELEGRAM
В отличие от вчерашнего, сегодняшнее вдохновение гораздо сложнее повторить кодом. Хотя у меня есть вариант, да и симуляцию ткани я на днях написал (снова), адаптировать её под это будет непросто.
Ну а тем кто решится это повторить на старте поможет этот пример на threejs, нужно добавить туда трение, реакцию опоры и прилипание вместо ветра и сбалансировать это всё чтобы не КРОВЬ КИШКИ РАСПИ*****ИЛО (извиняюсь, накипело). Ну и лично мне метод Стёрмера — Верле не очень заходит, я наверное неправильно его готовлю, поэтому рекомендую тот код полностью переписать (ну или обратить внимание на раздел особенности в википедии).
И кстати у меня всё больше вопросов как эти модные градиентики делаются, есть какие-то общепринятые практики или их нужно каждый раз заново переизобретать? Варианты в графических редакторах тоже подходят. Пишите в комменты :)
Кстати, на днях выкачу свою новую ткань в онлайн, в этот раз можно будет поиграться 😉
#inspiration by mbsjq
Ну а тем кто решится это повторить на старте поможет этот пример на threejs, нужно добавить туда трение, реакцию опоры и прилипание вместо ветра и сбалансировать это всё чтобы не КРОВЬ КИШКИ РАСПИ*****ИЛО (извиняюсь, накипело). Ну и лично мне метод Стёрмера — Верле не очень заходит, я наверное неправильно его готовлю, поэтому рекомендую тот код полностью переписать (ну или обратить внимание на раздел особенности в википедии).
И кстати у меня всё больше вопросов как эти модные градиентики делаются, есть какие-то общепринятые практики или их нужно каждый раз заново переизобретать? Варианты в графических редакторах тоже подходят. Пишите в комменты :)
Кстати, на днях выкачу свою новую ткань в онлайн, в этот раз можно будет поиграться 😉
#inspiration by mbsjq
Кому маловато постов о сайтах, а я про них в последнее время ничего не пишу — рекомендую подписаться на канал Валеры. Валера постоянно следит за дизайн движухой и всегда в курсе новых крутых решений. Он регулярно (в отличие от меня) собирает референсы у себя на канале, название которого иронично обманчиво:
Бездарные ссылки
А ещё он человек хороший 😉 Несколько раз давал мне идеи что такого визуально крутого сделать и очень помог мне пиаром на заре истории этого канала, когда я искал способы продвижения прекрасного в массы. Обнял)
Бездарные ссылки
А ещё он человек хороший 😉 Несколько раз давал мне идеи что такого визуально крутого сделать и очень помог мне пиаром на заре истории этого канала, когда я искал способы продвижения прекрасного в массы. Обнял)
Forwarded from karpik.realtime
Брейкдаун дизайна красивенького сайта с трёхмеркой https://solutions.centogene.com/
https://jesper-vos.medium.com/centogene-solutions-c2e5ada41eaf
https://jesper-vos.medium.com/centogene-solutions-c2e5ada41eaf
This media is not supported in your browser
VIEW IN TELEGRAM
На днях, когда пересматривал подборку списков, заметил что у Kenta Toshikura обновился сайт. Очень крутая задумка, крутое исполнение 💪
Сам когда-то хотел подобное сделать. Было очень интересно сравнить мысленную визуализацию концепции и её чужое воплощение, хотя может быть это лишь когнитивные искажения. Но теперь уже не узнать
Ну и само собой он получил SOTD & Dev award. Как и предыдущая версия этого же сайта :)
#reference
Сам когда-то хотел подобное сделать. Было очень интересно сравнить мысленную визуализацию концепции и её чужое воплощение, хотя может быть это лишь когнитивные искажения. Но теперь уже не узнать
Ну и само собой он получил SOTD & Dev award. Как и предыдущая версия этого же сайта :)
#reference
Fun fact. Если скормить рендереру MSDF текста неправильный конфиг, выходит непонятно что но красивенько :) Пользы правда от этого ноль 🤷♂️
Ну и раз речь зашла о рисовании текста в WebGL — предлагаю почитать статью Techniques for Rendering Text with WebGL. Внутри 5 техник вывода текста с примерами и описанием их достоинств и недостатков. Хотя выбор в основном сводится либо к первому методу, либо к последнему.
После прочтения предыдущей статьи можно дополнительно ознакомиться с Kinetic Typography with Three.js. Теперь у вас будет возможность вдохнуть жизнь в любую, даже самую загрустившую надпись 😉
Ну а дальше огромный простор для творчества, достаточно поискать на ютубе kinetic typography. Пусть даже это всё вроде и вышло из трендов, знания и умения — сила :)
#tutorial
Ну и раз речь зашла о рисовании текста в WebGL — предлагаю почитать статью Techniques for Rendering Text with WebGL. Внутри 5 техник вывода текста с примерами и описанием их достоинств и недостатков. Хотя выбор в основном сводится либо к первому методу, либо к последнему.
После прочтения предыдущей статьи можно дополнительно ознакомиться с Kinetic Typography with Three.js. Теперь у вас будет возможность вдохнуть жизнь в любую, даже самую загрустившую надпись 😉
Ну а дальше огромный простор для творчества, достаточно поискать на ютубе kinetic typography. Пусть даже это всё вроде и вышло из трендов, знания и умения — сила :)
#tutorial
Creative Coder
Скорее всего это сделано в Cinema4D, но кодом геометрию повторить вроде должно быть просто. Взять тор с треугольным сечением, разъединить где-то, повернуть один конец на 120 градусов и получим вот такую поверхность Мёбиуса. Можно реймарчингом, можно из треугольников.…
This media is not supported in your browser
VIEW IN TELEGRAM
Это видео было настолько вдохновляющее, что Иван не выдержал и реализовал это реймарчингом. Потом не выдержал уже я и попробовал себя в реймарчинге тоже :) Для первого раза вроде получилось неплохо, оказывается это тормозит меньше чем я думал, но всё же сильнее чем хотелось бы. В любом случае, меня можно поздравить с лишением реймарчинговой девственности :D
CineShader, Shadertoy
Большое спасибо Ивану и Павлу за помощь в реализации 🤝
Кстати, Иван — основатель генклуба, сообщества про генеративный арт. Там собралось много крутых ребят, которые постоянно обмениваются своими наработками и знаниями. Рекомендую к ним присоединиться :)
#my
CineShader, Shadertoy
Большое спасибо Ивану и Павлу за помощь в реализации 🤝
Кстати, Иван — основатель генклуба, сообщества про генеративный арт. Там собралось много крутых ребят, которые постоянно обмениваются своими наработками и знаниями. Рекомендую к ним присоединиться :)
#my