• Улучшенный ASCII Shader [VFX, Creative Coding, Unity]

• Улучшенный ASCII Shader [VFX, Creative Coding, Unity]

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

Материала подобного толка очень мало, свои заинтересованность можно показать поставив лайк данной статье.

Ascii Shader

Сам эффект работает следующим образом. У нас есть градиент состоящий из символов и нам нужно наложить его на участки изображения в зависимость от яркости участка.

сам градиент
сам градиент

Чтобы это сделать нужно перевести изображение в Grayscale, пикселизировать его и выбрать нужный кусок в зависимости от градиента.

зависимость его от уровня яркости
зависимость его от уровня яркости

Это самая основа, в популярных решениях ее делают интересней добавляя и меняя цвета задника и смиволов, так что пусть будет интересней и здесь.

перевод в <a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FGrayscale&postId=3443506" rel="nofollow noreferrer noopener" target="_blank">grayscale </a>(есть разные варианты но самым популярным считается стандарт Rec. 601) 
перевод в grayscale (есть разные варианты но самым популярным считается стандарт Rec. 601) 
каждый фрагмент пикселизованного изображения заменяется на символ из градиент
каждый фрагмент пикселизованного изображения заменяется на символ из градиент

Добавление цветов, первый это цвет ascii символа наложенного на изображение (alpha отвечает за смешивание цвета изображения)

Шейдер наложения и математику можно посмотреть на github

цвет работает как множитель но интерполируется по альфе
цвет работает как множитель но интерполируется по альфе

Второй параметр - цвет задника, он работает как множитель, но с одним нюансом - alpha отвечает за его появление, таким образом символы могут быть наложены либо просто поверх изображения, либо поверх пикселизации с множителем, ну или на статик фон (за что отвечает параметр solid)

черный цвет как множитель
черный цвет как множитель
код смешивания цветов
код смешивания цветов

Анимированные символы (и глитч)

В старых играх есть такое эффект анимированных спрайтов в виде текста(это трава персоаж, лава и другие вещи) Эффект у нас фулл скрин и хотелось попробовать. Есть на пример такой худ прием по добавлению шума в тенях для того чтобы дать фокус на другие части изображения, идея была реконструировать вот этот самый эффект.

скриншот из наверное самой по��улярной игры с ascii графикой Dwarf Fortress
скриншот из наверное самой по��улярной игры с ascii графикой Dwarf Fortress

Делается оно следующим образом, градиент получает новый слой глубины и значение символа берется из текстуры экранного шума.
Я решил использовать PerlinNoise - е��о можно скейлить, с ним можно играться и по факту можно делать что то плавное или же увеличив его сделать просто рандомное наполнение. (в unity есть встроенный генератор для него Matf.PerlinNoise)

набор символов с глубиной
набор символов с глубиной
пример с семплингом perlin noise на символах окрашенных в теплые цвета

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

игра с параметрами для создания эффекта глитча

Таким образом можно делать эффекты киберпанка, накладывать Digital артифакты в зависимости от яркости участков изображения

настроенный пример с комбинацией эффектов

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

пример цветастой палитры в волшебных цветах
пример цветастой палитры в волшебных цветах

Палитра

Следующее дополнение это палитра в которую можно вкинуть изображение (snapping в палитру делают вещи более ретро выдержанными, можно делать пиксель арт, старое crt или даже 256 цветов виндовс 95 прости госпаде)

палитра windows95 256 цветов
палитра windows95 256 цветов

У палитры есть вес, реализуется она через индексацию Lut таблицы - это 3D квадрат в котором содержатся все цвета на замену, цвета в нем перезаписываются на индексированные и потом берутся от туда в шейдере.

• Улучшенный ASCII Shader [VFX, Creative Coding, Unity]

*применять можно естественно частично смешивая с изначальным цветом изображеия

пример использования палитры

Заключеие

Таким образом играясь с параметрами и комбинируя с другими эффектами можно делать довольно стилевые вещ: такие как глитчи, символьную текстуализацию на подобии cyberpunk/syndicate или же просто транслировать изображение во этакий ретро look.

Демка и примеры:

11
2
1
1
3 комментария