Как поставить динамическую обложку вк: Как сделать динамическую обложку для группы в «ВКонтакте». DyCover – sdelano.media

Содержание

Что такое динамические обложки ВКонтакте и как их создавать

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

Автор: Марина Кондратович, специалист по работе с социальными сетями Ingate

Что такое динамическая обложка и зачем она нужна

Динамическая обложка ВКонтакте — это постоянно обновляемая обложка в сообществе, на которой выводится определённая информация. Меняющиеся элементы на обложке называются виджетами. Они могут показывать погоду, курсы валют, последнего подписчика, лучшего комментатора, именинника — вариантов масса. Всё зависит от конструктора, который используется для создания обложки.

Вот примеры динамических обложек ВК:

Пример динамической обложки

Пример динамической обложки. png

Пример динамической обложки

Пример динамической обложки 2.png

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

Для этого нужно выбрать виджет «Самый активный» и установить его на обложку. В группе Pepper.Ninja так и сделали. На их обложке выводятся пять самых активных участников, один из которых является лидером всей недели.

Пример динамической обложки 3

Пример динамической обложки PEPPER.png

Как сделать динамическую обложку в ВК

Для создания динамических обложек ВК используются различные конструкторы: Dynamic Cover, LetsCover, Boom Cover, VKfiller, Revoc, «Впостер». Мы протестировали три из них, сравнили их функционал и стоимость. Делимся результатами:

Конструкторы для создания динамических обложек

Сравнение конструкторов для создания динамических обложек

А теперь на примере виджета «Самый активный» разберём, как бесплатно сделать динамическую обложку для групп ВК. Делать это будем с помощью конструктора Dynamic Cover. Поехали!

Подключение к сервису и добавление обложки

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

Список групп в Dynamic Cover

Список групп в Dynamic Cover_настройка виджета

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

Панель управления в Dynamic Cover

Панель управления в Dynamic Cover_настройка виджета

Для создания динамической обложки ВК нужно подготовить фон, на котором будут располагаться виджеты. Рекомендуемый размер фона — 1590х400 пикселей.

Если в штате нет дизайнера, можно воспользоваться готовыми шаблонами. Для этого нужно перейти в раздел «Готовые шаблоны». Вот такие варианты обложек предлагает сервис динамических обложек ВК Dynamic Cover для конкурса «Самый активный»:

Варианты обложек для виджета ВКонтакте

Варианты обложек для виджета «Самый активный»

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

Настройка виджета «Самый активный»

Нажми на один из виджетов шаблона, в открывшемся поле перейди в раздел «Конкурсы» и создай новый конкурс.

Создание конкурса для виджета ВКонтакте

Создание конкурса для виджета «Самый активный»

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

Давать баллы за репосты в этом конкурсе мы не рекомендуем, так как это запрещено правилами ВКонтакте. За нарушение этих правил соцсеть может наложить на сообщество штрафные санкции.

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

Настройка конкурса для виджета ВКонтакте

Настройка конкурса для виджета «Самый активный»

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

Дополнительные настройки в виджете ВКонтакте

Дополнительные настройки в виджете «Самый активный»

При настройке конкурсного периода можно выбрать как один из предлагаемых сервисом (месяц, неделя), так и настроить свой — выбрать конкретную дату начала и окончания конкурса. Активность участников будет учитываться именно под теми постами, которые были опубликованы в выбранный период. Затем вернись к настройке обложки и привяжи конкурс к каждому виджету «Самый активный».

Настройка обложки

Вот несколько рекомендаций, которые нужно учитывать при создании динамической обложки:

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

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

Удаление виджета

Как удалить виджет «Самый активный» ВКонтакте

3. При настройке обложки также обрати внимание, чтобы в конструкторе была сетка и предпросмотр. Это поможет определить, как расположить элементы, чтобы они не обрезались со смартфонов. 

Просмотр динамической обложки с десктопа и мобайла

Как динамическая обложка выглядит с десктопа и мобайла.png

После установки и настройки виджетов необходимо сохранить обложку, а затем добавить её в группу ВКонтакте в панели управления.

Настройка периода обновления

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

В конструкторе Dynamic Cover период обновления виджета зависит от его типа. Например, виджет «Погода» будет обновляться раз в 10 минут, «Подписчик» — по событию вступления человека в группу, а «Самый активный» — по мере сбора активностей, т. е. примерно один раз в минуту.

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

В конструкторах LetsCover и «Впостер» можно настроить период обновления обложки. Но минимальный период обновления также равен одной минуте.

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

Активация конкурса для виджета «Самый активный»

Активация конкурса для виджета «Самый активный» ВКонтакте

Настройка чат-бота для виджета «Самый активный»

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

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

Настройка чат-бота

Настройка команды бота для виджета «Самый активный» ВКонтакте»

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

Итоговый вариант динамической обложки

Итоговый вариант динамической обложки.png

Марина Кондратович

специалист по работе с социальными сетями Ingate

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

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

ЧИТАЙ ТАКЖЕ

Как разлить воду в соцсетях: кейс по продвижению «Сенежской»

Как не превратиться в маркетингового хайпожора

Календарь инфоповодов. Июль 2019

как сделать в конструкторе бесплатно

Делаем вашу страницу интересной и стимулируем подписчиков почаще заглядывать к вам на страницу или на сайт за покупками

Свежие публикации регулярно

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

Подпишись на рассылку и получи книгу в подарок!

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

  • Принцип работы

    • Скрипты динамической обложки ВК

    • Онлайн-сервисы

  • Зачем нужна динамическая обложка

  • Популярные виджеты

    • Подписчик

    • Таймер

    • Погода

    • Курсы валют

    • Текст по ссылке

  • Пример создания динамической обложки в ВК

Принцип работы

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

Скрипты динамической обложки ВК

Этот вариант подходит разве что для программистов. Нужно через API сделать специальный модуль. С помощью Access Token получить доступ к данным и подставить необходимые значения в макет шапки сайта. Для простых задач есть готовые универсальные решения. Но создать что-то оригинальное можно лишь самостоятельно прописывая необходимый программный код.

Готовое приложение устанавливается на сервер. Это может быть сторонний хостинг или собственный компьютер. В первом случае приходится платить абонентскую плату хостеру. В последнем – держать ПК постоянно включенным. Иначе «оживленное» изображение становится статичным.

Онлайн-сервисы

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

Простыми и надежными показали себя площадки LetsCover и DyCover. Для работы с одним пабликом они предоставляют базовый инструментарий безвозмездно. При этом за символическую плату можно воспользоваться полным функционалом.

Зачем нужна динамическая обложка

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

  1. Лояльность подписчиков. Полезный модуль в шапке страницы информирует посетителя о скидках, акциях, новостях, наличии товара и т. д. Это решает проблему существующих клиентов и приводит новых.
  2. Увеличение конверсии. Плагин складских остатков и тикающий таймер провоцируют посетителей на быструю покупку.
  3. Сокращение рекламного бюджета. Люди активнее лайкают и делают репосты. Это увеличивает органический прирост и экономит средства на продвижение.

Популярные виджеты

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

  • время;
  • активность участников;
  • фоновые изображения;
  • статистика CRM;
  • данные RSS канала и т.д.

Рассмотрим распространенные модули.

Подписчик

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

Таймер

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

Погода

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

Курсы валют

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

Текст по ссылке

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

Пример создания динамической обложки в ВК

Рассмотрим оформление сообщества с использованием сервиса DyCover.

На сайте нет классической регистрации. Нажав кнопку «Войти», внутреннее приложение запрашивает разрешение на доступ к профилю в Вконтакте.

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

Если вы только создали группу, и она не отображается на сервисе, кликните «Обновить список». Так все изменения вступят в силу.

Подтверждаем действие:

Последовательно выполняем следующие шаги:

  1. Кликаем «Создать новую».
  2. Выбираем «Пустой шаблон».
  3. Вводим название проекта.
  4. Подтверждаем его.

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

В предыдущей статье мы детально разбирали требования к изображениям: ориентацию, отступы, «слепые зоны» и т.д. Напомню, рекомендуемый размер 1590 х 400 px.

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

А сейчас разберемся с тем, как сделать динамическую обложку Вконтакте «подвижной». Из панели управления добавляем нужные нам виджеты. Для примера используем «Самый активный» и и «Последний подписчик». Так мы приветствуем новичка. При этом ставим ему в пример пользователя, который отличился. Не лишним оказывается и вознаграждение за активность!

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

Каждый модуль имеет гибкие интуитивно понятные настройки. Поэтому не будем заострять на них внимание. Изменить любой из использованных блоков можно кликнув по нему в области визуального предпросмотра или в разделе «Слои».

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

Не забываем сохранять изменения, нажимая соответствующую кнопку!

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

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

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

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

Для предприятий

ИНФОРМАЦИЯ В РЕАЛЬНОМ ВРЕМЕНИ, ЧТОБЫ ОПЕРЕДИТЬ КОНКУРЕНЦИЮ

 

ЗАПРОСИТЬ ДЕМО

ИНФОРМАЦИЯ В РЕАЛЬНОМ ВРЕМЕНИ, ЧТОБЫ ОПЕРЕДИТЬ КОНКУРЕНЦИЮ

 

R

МАСШТАБИРУЕМЫЕ НАБОРЫ ДАННЫХ

ПОДПИСКИ НА НАБОР ДАННЫХ

ВК ПОДКЛЮЧИТЬ ПРОКСИ СЕТЬ

МАСШТАБИРУЕМЫЕ НАБОРЫ ДАННЫХ

ПОДПИСКИ НА НАБОР ДАННЫХ

ВК ПОДКЛЮЧИТЬ ПРОКСИ СЕТЬ

 

МАСШТАБИРУЕМЫЕ СБОРНИКИ ДАННЫХ

 

РЕЗУЛЬТАТЫ ДАННЫХ ДЛЯ ЗНАЧИТЕЛЬНЫХ ИНСАЙТОВ мониторинг отдельных тем.

СКАЧАТЬ ТЕХНИЧЕСКИЕ ДАННЫЕ

 

РЕЗУЛЬТАТЫ ДАННЫХ ДЛЯ

ЗНАЧИТЕЛЬНЫЕ ИНСАЙТЫ

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

СКАЧАТЬ ЛИСТ ТЕХНИЧЕСКИХ ДАННЫХ

 

ПОДПИСКА НА НАБОР ДАННЫХ

Наша библиотека коллекций данных по генерированию сигналов охватывает широкий спектр отраслей и содержит богатую историческую информацию.

 

VK CONNECT PROXY NETWORK

БЕЗОПАСНОЕ НЕПРЕРЫВНОЕ ПОДКЛЮЧЕНИЕ К ОБЩЕСТВЕННЫМ ДАННЫМ

VK Connect — это глобальная прокси-сеть Vertical Knowledge, созданная для удовлетворения потребности в динамическом сборе данных для масштабируемого, безопасного, соответствующего требованиям и бесперебойного подключения к общедоступным данным. Он поддерживает миллионы звонков в день для клиентов из разных вертикалей и языков и работает на всех основных мировых рынках.

VK Connect может поддерживать множество интернет-протоколов для решения любых задач веб-серфинга или сбора данных. Благодаря настраиваемому развертыванию VK Connect может управлять сетями использования с серверами, расположенными почти в каждом регионе с доступом в Интернет.

Подробнее

 

 

БЕЗОПАСНОЕ, НЕПРЕРЫВНОЕ ПОДКЛЮЧЕНИЕ К ОБЩЕСТВЕННЫМ ДАННЫМ общедоступные данные. Он поддерживает миллионы звонков в день для клиентов из разных вертикалей и языков и работает на всех основных мировых рынках.

VK Connect может поддерживать множество интернет-протоколов для решения любых задач веб-серфинга или сбора данных. Благодаря настраиваемому развертыванию VK Connect может управлять сетями использования с серверами, расположенными почти в каждом регионе с доступом в Интернет.

Узнать больше

 

ГОТОВЫ НАЧАТЬ?

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

ЗАПРОСИТЬ ДЕМО

Блог Khronos — The Khronos Group Inc

Введение

Khronos представила новое расширение под названием VK_EXT_graphics_pipeline_library, которое позволяет компилировать шейдеры намного раньше, чем во время полного создания объекта состояния конвейера (PSO). Используя это расширение, я смог избежать многих причин зависаний кадров из-за позднего создания PSO во время отрисовки в средстве визуализации Source 2 Vulkan. Спецификация расширения была выпущена сегодня, и вскоре последует поддержка SDK, вы можете отслеживать статус выпуска на https://github.com/KhronosGroup/Vulkan-Docs/issues/1808.

Движок Source 2 в значительной степени был разработан на основе модели Direct3D11, в которой шейдеры создаются независимо, а объекты состояния предоставляются во время отрисовки. Таким образом, существует значительное количество информации, которую наш движок не знает в то время, когда шейдеры предоставляются нашей абстракции рендеринга: спаривание шейдеров на разных этапах, форматы вершин, форматы кадрового буфера, состояние глубины/стенсила, информация об области просмотра, состояние MSAA. , и ряд других. Это означает, что мы откладываем создание PSO до времени отрисовки, что может привести к задержкам, особенно при холодном кеше конвейера.

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

Второе предостережение заключается в том, что если вы разрабатываете новый движок для Vulkan, вам действительно следует подумать, является ли хорошей идеей иметь большое количество перестановок шейдеров. Некоторые игры, такие как DOOM 2016/DOOM Eternal, сохранили очень небольшое количество PSO. Подробное описание этого пространства проектирования выходит за рамки этого поста в блоге, но я настоятельно рекомендую прочитать эту серию блогов из двух частей, в которой объясняется, почему многие движки имеют большое количество перестановок шейдеров (что является одной из основных причин многих задержек при компиляции во время отрисовки). ): Проблема перестановки шейдеров: как мы к этому пришли?

Учитывая все вышесказанное, Khronos слышал от многих разработчиков (включая нас), что в некоторых сценариях просто невозможно заранее знать все состояние PSO. Частично это привело к созданию нескольких новых расширений (ядро в Vulkan 1.3), которые позволяют сделать гораздо больше динамических состояний PSO. VK_EXT_graphics_pipeline_library делает еще один шаг вперед, позволяя полностью свести шейдеры к машинным инструкциям задолго до начала отрисовки. Благодаря этому расширению движки в стиле Direct3D11, такие как наш, могут обеспечить сравнимые (или даже лучшие!) возможности с компиляцией шейдеров по сравнению с Direct3D11. В следующих разделах я представлю обзор VK_EXT_graphics_pipeline_library и подробно опишу процесс интеграции расширения в движок Source 2.

Обзор библиотеки графических конвейеров

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

  • Входной интерфейс вершины
  • Шейдеры перед растеризацией
  • Фрагментный шейдер
  • Интерфейс вывода фрагментов

Интерфейс ввода вершин содержит информацию, которая обычно предоставляется объекту состояния полного конвейера с помощью VkPipelineVertexInputStateCreateInfo и VkPipelineInputAssemblyStateCreateInfo. Для нашего движка эта информация неизвестна до момента отрисовки, поэтому конвейер для этого этапа по-прежнему хэшируется и создается во время отрисовки. Однако этот этап не имеет шейдерного кода и поэтому драйвер может его быстро создать, да и этих объектов тоже довольно мало.

Шейдеры перед растеризацией содержат этапы вершинного, мозаичного и геометрического шейдера вместе с состоянием, связанным с VkPipelineViewportStateCreateInfo, VkPipelineRasterizationStateCreateInfo, VkPipelineTessellationStateCreateInfo и VkRenderPass (или динамической отрисовкой). Это может звучать как больше информации, чем ваш движок мог бы знать во время создания шейдера, это определенно было для нас. Однако ключевой момент заключается в том, что при объединении конвейерных библиотек с расширениями динамического состояния единственной информацией, которая действительно необходима для создания шейдера до растеризации, является код SPIR-V и схема конвейера. Это обсуждается более подробно ниже.

Этап фрагментного шейдера содержит фрагментный шейдер вместе с состоянием в VkPipelineDepthStencilStateCreateInfo и VkRenderPass (или динамическом рендеринге — хотя в этом случае требуется только viewMask). Как и на этапе предварительной растеризации, в сочетании с динамическим рендерингом вы можете создать конвейер фрагментного шейдера, используя только SPIR-V и макет конвейера. Это позволяет драйверу выполнять тяжелую работу по снижению аппаратных инструкций для предварительной растеризации и фрагментных шейдеров с очень небольшим количеством информации.

Наконец, есть интерфейс вывода фрагментов, который содержит VkPipelineColorBlendStateCreateInfo, VkPipelineMultisampleStateCreateInfo и VkRenderPass (или динамического рендеринга). Как и в случае интерфейса ввода вершин, на этом этапе требуется информация, которую мы не знаем до момента отрисовки, поэтому это состояние также хешируется, и конвейер интерфейса вывода фрагментов создается во время отрисовки. Ожидается, что он будет создан очень быстро, а также будет относительно небольшим по количеству.

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

Ранняя компиляция шейдеров с конвейерными библиотеками

В нашем движке шейдеры предоставляются нашему уровню абстракции рендеринга во время загрузки наших материалов (что происходит во время запуска или экранов загрузки). В Direct3D11 это напрямую приводит к вызову методов IDirect3D11Device::Create*Shader. В Vulkan, до VK_EXT_graphics_pipeline_library, единственное, что мы могли сделать в то время, это vkCreateShaderModule. Это передает SPIR-V драйверу, но на самом деле не запускает какую-либо значительную компиляцию шейдера, поскольку драйвер Vulkan должен сделать это во время создания PSO, когда известны все этапы шейдера, макеты наборов дескрипторов и требуемое состояние.

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

Динамическое состояние

Хотя использование VK_EXT_graphics_pipeline_library не требует, чтобы приложения использовали динамическое состояние, на практике для нашего движка они неразрывно связаны друг с другом. Без использования динамического состояния мы не смогли бы создавать конвейерные библиотеки для этапов предварительной растеризации и фрагментного шейдера во время загрузки материала. Сразу отмечу, что мы создаем пайплайны предрастеризации только для вершинных шейдеров и не заморачиваемся с шейдерами тесселяции и геометрии. У нас не так много случаев, когда мы используем геометрические шейдеры и шейдеры тесселяции, поэтому для целей остальной части этой статьи этап предварительной растеризации для нас относится только к вершинным шейдерам. Если конвейер использует шейдеры тесселяции или геометрии, мы возвращаемся к полному созданию PSO.

Конкретные расширения динамического состояния, которые нам требуются в нашем движке, чтобы иметь возможность использовать VK_EXT_graphics_pipeline_library, следующие:

  • VK_EXT_extended_dynamic_state
  • ВК_EXT_extended_dynamic_state2
  • ВК_ХР_динамический_рендеринг

К счастью, все эти три расширения являются частью Vulkan 1.3, поэтому можно ожидать, что они будут поддерживаться везде, где поддерживается VK_EXT_graphics_pipeline_library.

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

Динамическое состояние этапа перед растеризацией

Состояние Динамическое состояние
VkPipelineViewportStateCreateInfo VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT
VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT
VkPipelineRasterizationStateCreateInfo VK_DYNAMIC_STATE_DEPTH_BIAS
VK_DYNAMIC_STATE_CULL_MODE_EXT
VK_DYNAMIC_STATE_FRONT_FACE_EXT
VkRenderPass Динамический (VK_NULL_HANDLE) с VK_KHR_dynamic_rendering

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

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

Состояние Динамическое состояние
VkPipelineDepthStencilStateCreateInfo VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK
VK_DYNAMIC_STATE_STENCIL_WRITE_MASK
VK_DYNAMIC_STATE_STENCIL_REFERENCE
VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT
VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT
VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT
VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT
VK_DYNAMIC_STATE_STENCIL_OP_EXT
VK_DYNAMIC_STATE_DEPTH_BOUNDS
VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT
VkRenderPass Динамический (VK_NULL_HANDLE) с VK_KHR_dynamic_rendering

Схема конвейера

С учетом динамических состояний, использованных в предыдущем разделе, единственная дополнительная информация, которая нам нужна для создания библиотек конвейера вершинных/фрагментных шейдеров, — это макет конвейера. На первый взгляд может показаться, что это довольно простая информация для сбора. Из отражения шейдера мы знаем, какие дескрипторы используются в шейдере, поэтому мы должны знать макеты наборов дескрипторов для каждого этапа. Это было бы очень просто, если бы вершинный и фрагментный шейдеры создавались вместе в паре, но это работает иначе (и я не представляю, сколько движков на базе Direct3D11 работает). Хотя оба наших шейдера содержатся в одном и том же файле, до момента отрисовки не известно, какая пара вершинных/фрагментных шейдеров будет использоваться вместе. Например, в проходе только по глубине вершинный шейдер A связан с фрагментным шейдером A (т. е. который извлекает текстуру для выполнения альфа-теста). В прямом проходе вершинный шейдер A будет соединен с фрагментным шейдером B, который выполняет полное прямое освещение. И на самом деле есть много других сценариев, где точная комбинация не известна до момента розыгрыша.

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

Один из простых способов справиться с этим — использовать разные наборы дескрипторов для каждого этапа шейдера. Вы просто предоставляете схему конвейера, содержащую наборы дескрипторов для каждого этапа, для каждой библиотеки. Наше ядро, однако, этого не делает. Причина, по которой мы этого не делаем, частично связана с производительностью (чтобы мы могли выделить/обновить/связать один набор дескрипторов для динамических ресурсов в VS/FS вместо двух) и частично из-за того, что некоторые реализации Vulkan все еще имеют очень маленькую общее количество поддерживаемых наборов дескрипторов (в частности, некоторые мобильные графические процессоры имеют ограничение в 4).

Наборы дескрипторов разделов нашего движка примерно следующие:

  • Набор дескрипторов 0 — динамические ресурсы не привязаны до времени отрисовки для всех этапов
  • Набор дескрипторов 1 — статические дескрипторы вершинного шейдера
  • Набор дескрипторов 2 — статические дескрипторы фрагментного шейдера
  • Набор дескрипторов 3 — дескрипторы без привязки (общие для всех этапов)

Таким образом, для библиотек графических конвейеров мы создаем макеты конвейеров следующим образом:

  • Набор дескрипторов 0 — «убер-набор», который содержит все возможные потребляемые динамически связанные ресурсы, которые могут совместно использоваться в VS/FS
  • Набор дескрипторов 1 — предоставляется только библиотеке предварительной растеризации (вершинному шейдеру), если она используется
  • Набор дескрипторов 2 — предоставляется только для библиотеки фрагментных шейдеров, если она используется
  • Набор дескрипторов 3 — предоставляется для обоих этапов, если используется

Другими словами, библиотека вершинных шейдеров создается с конвейерной компоновкой, содержащей наборы дескрипторов 0, 1 и 3. Библиотека фрагментных шейдеров создается с конвейерной компоновкой, содержащей наборы дескрипторов 0, 2 и 3. Мы знаем, что наборы 1, 2 и 3 будут иметь идентичные макеты на всех используемых этапах, и мы также гарантировали это для набора дескрипторов 0, сделав его «убер-набором», содержащим все возможные потребляемые ресурсы.

И последнее замечание: схема конвейера должна также содержать неизменяемые сэмплеры и константы push. Для нас push-константа является общим ресурсом для разных стадий, поэтому у нас есть информация, чтобы применить ее к обеим стадиям шейдера при создании макетов для каждой стадии (она уже не может различаться между стадиями из-за того, как мы ее используем). Точно так же неизменяемое состояние сэмплера известно заранее, поэтому мы можем включить его в макет конвейера.

Интерфейс ввода вершин и интерфейс вывода фрагментов

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

Окончательный связанный конвейер

Когда все четыре этапа готовы, мы можем создать окончательную библиотеку связанного конвейера непосредственно перед рисованием с использованием нового материала. Есть некоторые решения, которые необходимо принять при создании окончательного связанного конвейера, которые потенциально обменивают быстрое время соединения на ЦП на снижение производительности графического процессора. То есть, если вы создали отдельные библиотеки конвейеров с помощью VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT, вы можете выбрать, хотите ли вы, чтобы драйвер создавал окончательный связанный конвейер с межэтапной оптимизацией. Ожидается, что выполнение кросс-стадийной оптимизации увеличит время ЦП за счет повышения производительности графического процессора.

Наша цель — добиться отсутствия задержек во время отрисовки, поэтому мы изначально создаем наши связанные библиотеки без набора VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT. Ожидается, что без установки этого бита создание связанной конвейерной библиотеки в драйвере будет происходить очень быстро. Это будет особенно быстро в реализациях, которые устанавливают VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT.graphicsPipelineLibraryFastLinking (что верно, по крайней мере, для всех поставщиков настольных компьютеров — NVIDIA, AMD и Intel). Ожидается, что даже в тех реализациях, которые не задают GraphicsPipelineLibraryFastLinking, связывание библиотеки конвейера будет значительно быстрее, чем полное соединение PSO.

После создания конвейерной библиотеки с быстрым связыванием без оптимизации мы запускаем компиляцию конвейерной библиотеки с VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT в фоновом потоке и подкачиваем ее, когда она будет готова. Таким образом, мы избегаем заминок при первом создании конвейерной библиотеки, но можем восстановить полную производительность графического процессора, как только у нас будет время выполнить кросс-стадийную оптимизацию в фоновом режиме. Этот выбор полностью зависит от приложения: некоторые приложения, менее чувствительные к заиканиям, могут всегда создавать конвейерную библиотеку, связанную с несколькими этапами. Они по-прежнему должны ожидать значительного улучшения ЦП по сравнению с созданием полного PSO, поскольку большая часть компиляции будет перемещена раньше.

Заключение

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

This entry was posted in Популярное