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

Логотип в векторе: как создать и где скачать

Большая часть логотипов создаётся с помощью векторной графики. Построение лого в векторе осуществляется с помощью кривых линий и узлов. Именно такая технология позволяет сохранять четкость картинки при любом размере. Сделать логотип в векторе на сегодня день самое разумное и выгодное решение.

Особенности векторной графики

Векторный способ создания графики на сегодняшний день считается одним из самых распространённых. Главной его особенностью можно назвать разработку современного дизайна на основе геометрических объектов, включающих точки, кривые, ровные линии и прочие фигуры. Например, лого, созданные на основе растровой графики, состоят из пикселей, а векторной – из точек опоры с проложенными кривыми линиями.

Векторный способ создания графики на сегодняшний день считается одним из самых распространённых. Главной его особенностью можно назвать разработку современного дизайна на основе геометрических объектов, включающих точки, кривые, ровные линии и прочие фигуры. Например, лого, созданные на основе растровой графики, состоят из пикселей, а векторной – из точек опоры с проложенными кривыми линиями.

Так, векторная графика – это совокупность данных, собранных с помощью математических формул. Иными словами — переход математических объектов в графику. Путём сравнения вектора и растра можно увидеть преимущества первого. Вместо пикселей, вектор состоит из точек и линий, соединённых друг с другом. Вместе они создают определённый объект. Изображение формируется вектором проще и быстрее. На сегодняшний день не только Adobe Illustrator и Corel Draw умеют создавать изображение «в кривых». Технические возможности браузерных редакторов уже очень высокие. С их помощью дизайнеру несложно создать логотип в векторном формате.

Векторные логотипы

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

Преимущества векторной графики:

Простота редактирования

Редактирование позволяет разделить объект на несколько мелких частей под названием «примитивы» и внести корректировки, не ухудшая общий вид.

Масштабирование

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

Интегрирование в текст

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

Небольшой объём

И, конечно, величина картинки, созданной вектором незначительна, поскольку объём данных невелик. Для записи файла используются только основные координаты точек.

Создание векторной графики в работе дизайнера — одно из самых важных направлений. С её помощью легко можно создавать качественные и яркие изображения. Такая графика находит применение в создании логотипов, веб-дизайне, полиграфии и рекламе. На основе этих элементов можно разработать фирменный стиль для любой компании.

Создание векторных логотипов: основные способы

Создать самостоятельно

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

Заказать у фрилансера

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

Заказать в дизайн-студии

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

Создать в Turbologo

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

Как создать логотип в векторе с помощью Turbologo

Большое разнообразие шаблонов дизайна и простой интерфейс. Создайте свой уникальный бренд здесь и сейчас.

Турболого — создание логотипа онлайн, бесплатно.
© 2021 «Турболого»

Источник

Что такое векторный формат логотипа и как его создать

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

Благодаря существованию современной технологии можно создать векторный логотип или масштабный баннер. Такая разновидность графики имеет множество особенностей и нюансов, о них и поговорим.

Векторный формат изображений – что это

Векторный формат изображения – это инновационный популярный способ передачи графики без искажений. Главными примитивными объектами такого вида формата считают геометрические объекты, которые состоят из различных линий, фигурок, окружностей, а также точек.

что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

Отличия от растровой графики

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

Это намного облегчает работу веб-дизайнера, так как ему не нужно теперь держать в уме форму синусоид, парабол и гипербол. Все это теперь делает автоматически программа. Поэтому дизайнеру теперь достаточно расставить, где это необходимо, точки и построить кривую.

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

Для того чтобы создать какое-либо изображение, достаточно наметить контур будущей фигуры, используя для этого точку. После чего их можно соединить векторами-линиями. Самыми известными графическими редакторами, которые помогают разработать векторную картинку, являются: Adobe Illustrator, Corel Draw.

К основным плюсам графики в векторе относят:

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

Разновидности форматов

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

На данный момент востребованными являются такие векторные форматы, как:

Как сделать векторный рисунок

Чтобы создать неповторимый векторный рисунок, например, из фото, необходимо:

Каким образом можно перевести лого в векторный формат

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

Для этого в данной программе есть специальные инструменты: “Выделение”, “Инструмент прямоугольной области выделения”, “Инструмент эллиптического выделения”, “Инструмент волшебной палочки”, “Инструмент быстрого выделения”, “Перо”.

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

Источник

Векторная графика и изображения: Что это такое?

что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

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

что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

В интернете можно часто услышать понятие — вектор, многие даже имеют некоторые представления, что это значит. Закроем этот вопрос навсегда и разложим по полочкам значение этого термина в этом материале.

Векторная графика — это изображение, которое строится по указанным координатам, которые были заданы в векторной программе. Это простые геометрические объекты: линии, точки, кривые, круги и т.д. Т.е. векторные изображения формируются из указанных координат — установленных точек, того, какая им дана форма (линии, круги, кривые, квадраты и т.д.), и какие к ним применены различные эффекты: цвета, заливки и т.д.

что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

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

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

что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

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

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

Где и как используется векторная графика

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

Поэтому вектором пользуются: полиграфические фирмы, рекламные агентства, газеты и журналы, печатные издания, архитекторы и многие другие..

Самыми качественными и популярными программами являются:

Достоинства векторной графики — плюсы

1. Небольшой размер несложных изображений. Но, если деталей будет много — их вес соответственно будет сильно расти.

что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

2. Масштабируемость и редактирование без изменения качества в худшую сторону.

3. Один раз создав материал в таком формате — его можно без сильных изменений использовать, где угодно, хоть на огромном баннере, хоть, как маленькую картинку на сайте — качество будет одно и тоже. Т.е. не нужно отрисовывать его заново в отличие от растрового.

4. Легко перевести в растр причем любого разрешения, но из растра в вектор — сложно.

5. Легко научится создавать и работать с графикой такого формата если у вас есть хотя бы базовые знания о том, как нужно чертить.

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

2. Нет автоматического ввода/создания в векторе — у тех же сканеров, фотоаппаратов. Камеры, сканеры и т.д. создают изображения в растровом формате по пикселям.

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

4. Требует хорошего компьютера для отрисовки сложных материалов. Ведь в файле хранятся, только координаты, а отрисовка происходит уже после открытия.

5. Трудоемкий и довольно нелегкий процесс создания качественных изображений.

Чем отличается векторная графика от растровой

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

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

Форматы и программы для векторных изображений

Рассмотрим самые популярные и используемые. В любом случае, если вы будете работать с такими изображениями, придется знать хотя бы парочку программ. Как минимум Adobe Illustrator и CorelDRAW, фанаты, которых готовы сгрызть друг друга доказывая, что тот или иной лучше.CDR — Corel Draw. Тип файла для Корел Дроу.

PDF — это контейнер, как для векторных картинок, так и растровых. Подробнее о том — что такое PDF. Самый популярный формат для создания книг и других печатных материалов.

SVG — популярный формат для размещения в интернете векторных картинок. Они занимают мало места, масштабируемы и отлично подходят для создания иконок на сайтах.

Источник

Отрисовка векторной графики — триангуляция, растеризация, сглаживание и новые варианты развития событий

В далёком 2013м году вышла игра Tiny Thief, которая наделала много шуму в среде мобильной Flash (AIR) разработки из-за отказа от растровой графики в билдах, включая атласы анимации и прочего — всё что было в сборке хранилось в векторном формате прямиком из Flash редактора.
Это позволило использовать огромное количество уникального контента и сохранить размер установочного файла до

70 мегабайт (*.apk-файл из Google Play). Совсем недавно снова возник интерес к теме отрисовки векторной графики на мобильных устройствах (и вообще к теме отрисовки вектора с аппаратной поддержкой), и меня удивило отсутствие информации «начального» уровня по этой теме. Это обзорно-справочная статья по возможным способам отрисовки вектора и уже существующим решениям, а так же о том, как подобные вещи можно сделать самостоятельно.

что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

Основной способ

К отрисовке вектора чаще всего подходят так — берут все фигуры, кривые и прочие вещи, проходятся по ним алгоритмом триангуляции (разделение замкнутых контуров на треугольники), считая разного рода обводки и линии такими же закрашенными объектами, и получают какое-то приближённое представление описанной математической формулой фигуры.

То есть векторный круг, отрисованный таким образом, будет на самом деле многоугольником. Критерием качества в данном случае будет являться количество и размер треугольников, полученных в итоге:

что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

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

Подводные камни

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

Если же посмотреть на скриншот Tiny Thief, то сразу видно, что игра лишена этого недостатка — края объектов красиво сглажены.

что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

Field study

Все описанные ниже вещи я проверял с помощью Adreno Profiler, NVIDIA PerfHUD ES и Unity (проверка работоспособности предложенных вариантов решения).

Вот что покажет Adreno Profiler если включить режим цветной сетки:

что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

То есть отрисовка тем самым методом триангуляции. Вершины при этом красятся напрямую, без текстур (параметр color у вершин).

Вот что находится в альфа буфере (очевидно у Adreno GPU есть такое понятие как «альфа-буфер»):

что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

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

Суть сглаживания более или менее ясна — при триангуляции добавляем тонкий набор треугольников вдоль края объекта.

Сколько бы я ни пробовал приближать картинку — не смог разглядеть эти хитрые тонкие треугольники. Но, к счастью, Adreno Profiler, в отличие от PerfHUD, позволяет экспортировать геометрию в текстовом виде.

Сборка по кускам

Написав простой парсер, получилось восстановить исходный меш в Unity. Но меня ждала странная картина:

что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

Рамочки без сглаживания. В режиме просмотра сетки тоже не видно заполняющих треугольников:

что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

Долго не мог понять в чём дело. Оказалось, что заполняющие треугольники вывернуты в другую сторону. Это становится видно, если посмотреть на логотип с другой стороны:

что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе
что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

Также заметно, что между элементами логотипа присутствуют пустые линии, которые заполнены градиентами (градиент сделан с помощью закрашивания вершин в соответствующие цвета), и при этом нет сглаживания.

что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

Если убрать backface culling в шейдере, то получим то, что хотели получить в итоге:
что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

Но возникает интересная особенность — если приближать этот объект к камере, то сглаживание становится слишком заметным и выглядит как размытие:
что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

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

Практически все объекты на экране отрисовываются таким же образом. Исключение составляет задний фон, который рендерится один раз в текстуру.

Статистика

Достаточно интересно посмотреть сводную информацию об отрисовке персонажей, в среднем каждый герой (стражник, повар) в триангулированном виде составляет около 3-4 тысяч треугольников. Это примерно как хорошего качества лоу-поли 3Д модель. Сетка настолько плотная, что кажется что объект отрисован текстурой:

что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

Логотип занимает почти 9 тысяч треугольников. Общее количество draw calls в среднем около сотни (было бы намного больше, если бы задний фон не рисовался в виде текстуры), но ФПС стабильно максимальный даже на стареньком ZTE V811 (Билайн смарт 2).

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

С ног на голову

Если выставить ограничение на количество цветов векторного изображения, то можно пойти по совершенно другому пути. Допустим, что у нас есть простая векторная одноцветная иконка:

что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

Её можно «сжать» почти без потери качества с помощью Signed Distance Field. Суть заключается в том, что мы храним не саму текстуру, а информацию о расстоянии пикселей до границы иконки. Значение на границе обычно считается равным 0.5. Всё что больше считается «внутри» иконки. Всё что меньше — «снаружи». По факту неважно в какую сторону перевешивается граница — иногда можно сделать меньше 0.5 внутри и больше 0.5 снаружи. Для наглядности (чёрные иконки на белом фоне) я покажу именно такой вариант.

что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

Размазанный таким образом игральный кубик выглядит вот так:

что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

Отличие от обычного размытия заключается в том, что находя минимальное расстояние между текущим пикселем и границей, у нас в любом случае получится расчёт расстояния по нормали (минимальное расстояние от точки до прямой всегда определяется перпендикуляром). То есть градиенты на текстуре описывают направление нормали к ближайшей границе.

что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

В интернете и, в частности, на хабре достаточно много статей про SDF, я приведу их в конце статьи.

что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

На картинке хорошо видно различие в качестве между обычной текстурой и двумя вариантами SDF. При увеличении обычной картинки становятся явно видны размытости. Увеличивая же SDF текстуру, мы в любом случае получим резкие границы. Причём даже уменьшив размер текстуры в два раза, наличие артефактов остаётся почти незаметным (про увеличение качества сырой SDF текстуры можно написать отдельную статью). Артефакты, в отличие от обычной текстуры, проявляются в виде сглаженной лесенки на скошенных краях иконки. Это обусловлено тем, что пиксели идут ровно по горизонтали и вертикали, и при уменьшении размера изображения также уменьшается точность аппроксимации косой прямой с помощью двух перпендикулярных (напомню что мы аппроксимируем вектор нормали к границе).

Шейдер для отрисовки будет самую малость сложнее, чем простое чтение текстуры. В экспериментах я попробовал много разных вариантов, в т.ч. и вариант из статьи [2], в общем виде это выглядит примерно так:

Стоит отметить, что в данном случае RBG канал текстуры выбрасывается и в расчётах не участвует (к этому мы ещё потом вернёмся). Настраивать _Smoothing можно либо вручную под текущий размер текстуры на экране (но тогда будет та же проблема при увеличении, что и была в случае с отрисовкой через меши), либо использовать cg функцию fwidth, которая примерно оценивает размер текущего фрагмента относительно экрана и «подстраивает» сглаживание под относительный размер иконки на экране.

Поскольку основным ограничением метода SDF является необходимость «бинарности» (одноцветность) исходного символа, наиболее часто его применяют при отрисовке текста — настраивая и видоизменяя варианты обработки одной и той же SDF текстуры, можно создавать обводку, тень, размытие и т.д. [1]. Менее популярным способом использования SDF является отрисовка одноцветных иконок (как в случае с изображением игральной кости), но по большей части это просто частный случай текстового символа.
Ещё одним минусом подобного подхода является потеря резких граней и углов:

что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

Слева — оригинальная текстура. Справа — SDF уменьшенного размера

И ещё пример с текстом из статьи [3]:
что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

Решение проблем по мере поступления

Есть примеры реализации подобного алгоритма, сохраняющего острые углы [4][5]:
что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторечто такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

Краткая суть алгоритма заключается в следующем:

«сырой» SDF скругляет углы из-за того, что чем дальше от него пиксели, тем сильнее он скругляется. Происходит это из-за того, что к углу нельзя провести перпендикуляр (производная функции в этой точке не существует) — много пикселей будут считать расстояние по радиусу окружности, центром которой как раз и является угол. Этого можно избежать, если отследить все углы символа, проверив разрывы плавно идущей кривой. А затем, используя таблицу истинности, определить, должен ли быть закрашен квадрант угла или нет. То есть углы обычно закрашиваются пересечёнными SDF картами, записанными в разные каналы, а конечное значение пикселя считается по медиане векторов из трёх каналов.

Разумеется я не могу вместить всю статью на 90 страниц в один абзац, поэтому советую посмотреть её полностью [5].

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

Меньше каналов — больше точности

В твиттере есть товарищ, который всеми правдами и неправдами делает что-то подобное, но с одним каналом:

что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

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

Также у этого товарища есть шейдер, который в реальном времени считает distance field для кривой безье на GPU, но там требуются десктопные вычислительные мощности даже для одной кривой (которая задаётся параметрически и формула её лежит «прямо в шейдере»). Если покрутить настройки и код, то можно посмотреть само поле расстояний без закрашивания и модуляции:

что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

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

Возвращаемся к истокам

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

Если кратко, то суть в следующем:

Разделяем символ на ячейки, для каждой ячейки делаем карту пересечений кривых с лучами, пущенными под разными углами и пересекающими эту ячейку. Смотрим количество пересечений и расстояние, на которых возникли эти пересечения. Данные о кривых хранятся в виде скомканной текстуры, в которой заданы координаты кривых безье. Одна кривая безье — это 3 или 4 параметра в зависимости от степени этой кривой. Выше 4го параметра кривые обычно не берут. Шейдер занимается тем, что в зависимости от текущей отрисовываемой ячейки и параметров текстуры, присутствующих на этой ячейке, считывает необходимые пиксели из референсной текстуры и использует их для восстановления аналитического вида кривой на GPU.

Не всё так радужно.

Минусом подобных подходов является использование относительно большого количества операций чтения текстуры. Я как-то имел дело с реалтаймовым рендерингом теней с tap blur размытием на мобильных устройствах, и любые Dependent Texture Reads (DTS — я не нашёл общепринятого аналога на русском) существенно ухудшали производительность. Если очень грубо — DTS возникают, когда координаты чтения текстуры становятся известны только во fragment shader, то есть непосредственно при отрисовке пикселя. Обычно высокая скорость чтения текстуры во fragment shader обуславливается тем, что конкретная интерполированная текстурная координата пикселя становится известна сразу после работы vertex shader, то есть видеокарта заранее читает нужный пиксель текстуры и отдаёт значение пикселя «бесплатно». Алгоритмы, поведение и степень трудозатрат определяется в первую очередь железом, на котором выполняются эти шейдеры. В OpenGL ES 3.0+ вроде как по большей части решается проблема производительности DTS, но на данный момент около половины мобильных устройств работает на OpenGL ES 2.0, поэтому пока надеяться на хорошее железо не стоит.
что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе(источник от 6 февраля 2017)

Стоит отметить, что запатентованный Microsoft подход позволяет, используя 4 канала, кодировать цвет пикселей, находящихся в ячейке. И именно отрисовкой цветных векторных изображений я заинтересовался изначально.

Как жить дальше

У описанных выше методов есть следующие недостатки:

Поэтому у меня возникло желание предложить немного другой способ отрисовки разноцветной векторной графики, основанный на всё том же принципе SDF.

Вторая жизнь для SDF

SDF стал синонимом одноцветной отрисовки символов текста. Но если представить векторную картинку в виде набора одноцветных слоёв, то с помощью той же SDF текстуры, можно отрисовать векторную картинку любой сложности и цветности. То есть мы просто разделяем начальную картинку на набор одноцветных слоёв.

Пример — ящик из популярного набора от Kenney, разрезанный на слои, выглядит так:

что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

Это внешний вид SVG файла. Можно заметить, что слои не перекрывают друг друга, а «стыкуются» между собой. При просмотре подобных векторных изображений через Inkscape становятся явно видны артефакты, присущие подобной стыковке этих слоёв:

что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

Присутствие артефактов зависит от способа создания векторной графики, но пока возьмём именно этот вариант.

К действиям

Для каждого слоя сделаем свою SDF текстуру и выставим слои друг поверх друга в том же порядке, в котором они идут в SVG файле.

что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

Слева направо — SVG Importer с включённым antialiasing, «слоёный» SDF, увеличенная начальная текстура. SVG Importer не смог нормально распарсить SVG из Inkscape, но суть не в этом.

Если сильно приблизить оба объекта, то различия выглядят примерно так:

что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

Основным недостатком этого метода по сравнению со всеми другими является существенный ovedraw. Чтобы нарисовать эту коробку требуется 4 полноразмерных слоя, помещённых друг на друга, плюс небольшой квад для пятого слоя (маленькая чёрточка). В худшем случае overdraw будет прямопропорционален количеству слоёв векторной картинки. Чем выше разрешение устройства, тем медленнее будет работать рендеринг.

Но в отличие от большинства пакетов по парсингу SVG файлов в меши, заранее подготовленные текстуры занимают существенно меньше места. Scaleform в этом плане пошли дальше — они генерили все меши на лету при загрузке сцены, не забивая архив приложения заранее созданными файлами. Для сравнения, начальный размер коробки составляет 4 Кб текста, то есть заранее собранный со сглаживанием меш векторной картинки занимает в 11 раз больше места, чем сырой текст, описывающий эту векторную фигуру.

Варианты — тысячи их

Я также наткнулся на другой способ конвертации цветного изображения в SDF вид. [6] Суть заключается в использовании bit planes (бит-карт) изображения для цветов. Бит-карты раскладывают яркости цвета по битам.

То есть берутся по порядку биты яркости и кладутся в отдельную бинарную текстуру. Всего на один канал изображения нужно 8 текстур. То есть 24 текстуры на цветное изображение без прозрачности.

Если пойти дальше и представить каждую такую двоичную текстуру как 8ми битную SDF текстуру, то получается что для полноценного представления начального изображения потребуется 24 восьмибитных текстуры (а не 24 однобитных, которые получаются сразу после разложения на бит-карты).

Процесс восстановления начального цветного изображения из обработанных с помощью SDF бит-карт выглядит следующим образом:

Хотя алгоритм этот достаточно хитрый, на деле качество оставляет желать лучшего:

что такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторечто такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторечто такое отрисовка в векторе. Смотреть фото что такое отрисовка в векторе. Смотреть картинку что такое отрисовка в векторе. Картинка про что такое отрисовка в векторе. Фото что такое отрисовка в векторе

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

Итоги

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

Статья уже получилась очень большой, и мне пришлось существенно обрезать контент. Из того, что не рассказал:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *