Как сделать опрос в ВК в группе или сообществе, на личной странице и в беседе
ВКонтакте можно не только создавать различные посты и рекламные объявления, но и задействовать анкетный формат — опрос, или голосование. Он поможет изучить интересы аудитории и вовлечь подписчиков в дискуссию. В этой статье мы разберемся, как сделать опрос в ВК в группе или сообществе на стене и в обсуждениях, на личной странице, а также в беседе.
- Что такое опрос в ВК
- Типы опросов
- Как сделать и оформить опрос
- Опрос в группе или сообществе
- Опрос в обсуждениях группы или сообщества
- Опрос на личной странице
- Как сделать опрос в ВК с телефона
- Как создать опрос в беседе
- Вовлекающий опрос для подписчиков — советы
Что такое опрос в ВК
Опрос в VK — это формат поста с голосованием, где участник сообщества или ваш подписчик может выбрать вариант ответа, и так выразив свое мнение.
Вы можете использовать опрос, чтобы лучше узнать целевую аудиторию, развлечь ее, провести конкурс или выяснить интересы — и на основе полученных данных создать полезные посты.
Рекомендуем к прочтению! Узнайте, как сделать эффективный пост в ВК.
Типы опросов
Публичные. В этом случае вы видите, кто проголосовал и какой ответ выбрал. Из этой информации можно получить портрет клиента, изучить его интересы и проанализировать проблемы.
Ниже — пример публичного опроса, где компания на основе выбора подписчиков может создавать индивидуальные предложения для каждого из них.
Пример публичного опросаАнонимные. А здесь вы можете наблюдать лишь общую статистику. Например, по опросу получилось, что 47% пользователей заказывают обед через «Яндекс.Еда», а 53% выбирают Delivery Club.
Вот пример анонимного опроса в новостном канале. Благодаря этой информации организация может выбрать рекламодателей и добавлять на сайт соответствующую нативную рекламу — от стоимости билетов в Турцию до инструментов для садоводов.
Рекомендуем к прочтению! Узнайте, как работать ВКонтакте:
- Как оформить группу или сообщество в VK.
- Как создать магазин в ВК.
- Как раскрутить интернет-магазин VKontakte.
- Как создать эффективный пост.
- Как бизнесу развиваться в ВК.
- Как получить галочку в VK.
- Как работать с рассылками ВКонтакте.
Как сделать и оформить опрос
В этом разделе рассмотрим варианты, как можно сделать опрос в группе и на личной странице.
Опрос в группе или сообществе
Перейдите в группу или сообщество, которым вы управляете:
Страница с сообществами, которые находятся под вашим руководствомПосле этого долистайте страницу до раздела «Стена» и выберите новую запись — «Что у вас нового?». В подразделе сообщения нужно нажать «Еще» и выбрать «Опрос».
Пример, как в новом сообщении найти и выбрать раздел «Опрос»Перед вами откроется окно, в котором необходимо заполнить все поля и выбрать соответствующие настройки.
Тема опроса. Здесь нужно задать вопрос или тему для обсуждения.
Варианты ответа. Можно добавить от 1 до 10 вариантов ответа.
Фон. В этом разделе вы выбираете готовый фон или загружаете свою картинку, чтобы визуально выделить опрос и привлечь к нему внимание подписчиков. Размер изображения должен быть не меньше 510х200 пикселей, в формате JPG, GIF или PNG.
Рекомендуем к изучению! Чтобы не запутаться в размерах креатива, загляните в нашу шпаргалку по размерам картинок для соцсетей.
Настройки опроса. А здесь выбирается тип опроса: публичный или анонимный. Также можно позволить пользователям добавлять несколько вариантов ответов, запретить отмену выбора и даже ограничить время голосования.
Время. Опрос можно отправить сразу или поставить на таймер, то есть запланировать его публикацию.
Выбор времени для публикации опросаТематика. Выбирается, чтобы отслеживать темы.
Это необязательный пункт.
Ниже — полная форма настроек опроса:
Окно с настройками опросаКогда заполните поля, нажмите «Опубликовать». Вот так выглядит наш анонимный опрос:
Пример оформления опроса на стене сообществаА ниже пример публичного опроса с вариантами ответов:
Пример публичного опроса с вариантами ответовОпрос можно использовать не только в ВК, но и на сайте. Достаточно скопировать код и вставить его на страницу. А также у ваших подписчиков есть возможность поделиться голосованием с друзьями — в личных сообщениях или на стене.
Пример, на котором видно, как можно скопировать код и вставить его на сайт, а также, как можно поделиться опросом со своими друзьями: на стене или в личном сообщенииТак выглядит код опроса:
Пример кода опроса, который можно вставить на сайтКод нужно вставить в тело страницы. Следуйте инструкции по работе с виджетом опросов, чтобы правильно установить виджет.
Используйте статистику опроса, чтобы изучать пользователей по ответам, полу и возрасту, их местоположению и региону проживания.
К опросу можно добавлять дополнительный контент, например, аудиозапись или картинку и текст, как на скриншоте ниже:
Пример поста с опросом, текстом и изображениемОткройте для себя чат-бота
Выстраивайте автоворонки продаж и отвечайте на вопросы пользователей с помощью чат-бота в Facebook, VK и Telegram.
Опрос в обсуждениях группы или сообщества
Голосование можно проводить не только на стене сообщества или в группе, но и в обсуждениях, где вы задаете общую тему и не отходите от формата.
Для этого зайдите в обсуждения и нажмите «Создать тему»:
Расположение кнопки «Создать тему» в обсуждениях сообществаПеред вами откроется окно оформления с заголовком и описанием темы, а ниже вы сможете найти значок опроса.
Пример, как создать новое обсуждение с опросомНажмите на значок. Откроются параметры голосования: тема опроса, варианты ответа и настройки — выбор нескольких ответов, запрет на отмену голоса, ограничение по времени и закрепление поста на главной странице.
Это наш пример с заполненными параметрами для голосования.
Заполненный опрос для раздела «Обсуждения»А это — опубликованный вариант голосования.
Пример опроса в разделе сообщества — «Обсуждения»Опрос на личной странице
Голосование на личной странице настраивается так же, как и в сообществе. Сделать это можно на странице вашего аккаунта.
На стене выбираете новую запись, нажимаете на раздел «Еще» и создаете опрос.
Пример окна нового сообщения и раздела с опросомФункционал полностью совпадает: тема опроса, варианты ответов, фон, настройки, выбор времени и типа голосования. Вам нужно заполнить все поля и опубликовать пост.
Настройки опроса на личной страницеЭто пример поста с отложенным опросом на личной странице.
Пример отложенного опроса на личной странице в ВКОпросы на личной странице часто проводят лидеры мнений, чтобы пообщаться со своей аудиторией, получить обратную связь о контенте, изучить ЦА или провести розыгрыш.
Как сделать опрос в ВК с телефона
Голосование с телефона создать так же легко, как и с компьютера. Рассмотрим, как создать опрос на личной странице.
Перейдите в свой профиль и начните создавать новую запись. Нажмите на три точки и найдите раздел опроса.
Пример, где показано, как найти раздел опроса в новой записи с мобильного телефонаВ открытом окне вы увидите такой же функционал, как на ПК.
Пример того, как отображаются настройки опроса на мобильном телефонеПосле заполнения основных параметров нажмите на галочку. Откроется окно с опросом, где вы можете добавить дополнительный контент, выбрать тип голосования, время проведения и тематику.
Пример, как можно сделать опрос с мобильного телефонаКак создать опрос в беседе
Запуск голосования в беседе ничем не отличается от последовательности действий, которую мы рассматривали ранее. Только раздел с опросом включается через иконку «скрепка» и здесь нельзя выбрать тип голосования и время его публикации.
Переходите в мессенджер, выбирайте чат и создавайте опрос.
Пример, на котором показано, как включить раздел с опросом в беседеДалее заполняете все параметры, нажимаете кнопку в виде стрелки и публикуете опрос в беседе.
Настройки опроса в беседеНиже — пример опубликованного голосования в беседе.
Пример опубликованного опроса в беседеВовлекающий опрос для подписчиков — советы
Мы рассмотрели несколько способов, как можно создать опрос в ВК, а теперь перейдем к тому, что же нужно добавить в опрос, чтобы повысить вовлеченность подписчиков.
- Задавайте вопросы из своей сферы бизнеса. Например, если у вас парикмахерская, спросите у подписчиков про стрижку, моющие средства и красители.
- Не пишите длинных и сложных вопросов — не путайте свою аудиторию. Вопрос должен быть четким и коротким.
- Придерживайтесь второго правила и для ответов. Пользователь сразу должен понять ваш посыл в опросе.
- Добавляйте дополнительный контент — это поможет подтолкнуть новую публику на изучение вашего поста.

- Чтобы опрос не потерялся на странице сообщества — закрепите пост, чтобы он отображался в начале страницы даже после появления более свежих публикаций.
- Общайтесь с аудиторией на ее языке.
- Делайте ограниченные по времени голосования, тем самым вы замотивируете людей ответить быстрее.
- Добавляйте к опросам изображения, которые помогут аудитории лучше понять, о чем ваш пост.
- Люди охотнее отвечают на анонимные опросы — учтите это.
- Привлекайте пользователей за счет виджета опросов на вашем сайте — копируйте код голосования и добавляйте на страницу.
- Просите подписчиков делиться опросами с друзьями.
Создавайте опросы, проводите исследования и собирайте обратную связь. А чтобы настроить рассылку с уникальными предложениями и опросами для подписчиков, регистрируйтесь в нашем сервисе SendPulse и подключайте чат-бота в ВК.
Как сделать динамическую обложку Вконтакте? Как сделать живую обложку для группы в ВК?
Мы с Вами уже затрагивали вопрос оформления сообществ.
В одном из руководств научились делать статическую обложку для группы Вконтакте.
Но уже достаточно давно применяется более продвинутый вариант — динамическая обложка. Это такой же графический файл, используемый в качестве основы. Но с добавлением интерактивных элементов. О создании такого варианта и пойдет речь.
Содержание
- Что такое динамическая обложка
- Как делают живые обложки?
- Делаем обложку для группы Вконтакте, используя бесплатный тариф сервиса dycover
- Пора опубликовать готовый макет
- Видео гид. Как создать и опубликовать динамическую обложку в группе в ВК?
Что такое динамическая обложка
Это графический вариант оформления сообщества Вконтакте. Изображение, отображающееся в верхней части окна группы, содержащее в себя динамические элементы.
Пример живой обложкиОбратите внимание на картинку выше. Здесь отображаются страницы подписчиков. Эти блоки автоматически обновляются — когда в группу присоединяется новый участник, его страница автоматически начинает показываться на обложке, в блоке «Новые подписчики«.
Ниже представлены наиболее часто используемые блоки.
- Рейтинги пользователей. Самые активные, вновь вступившие, последний оставивший комментарий.
- Актуальная информация. Дата, время, различные курсы, таймеры.
- Данные со сторонних сайтов. Если у Вас есть ресурс в сети, и определенные навыки программирования, можно выводить нужные данные на обложке.
Как делают живые обложки?
Основных способов всего три.
- Заказывают у специалистов.
- Самостоятельно программируют, имея нужные навыки.
- Собирают вручную, с помощью специальных сервисов.
Первые два варианта нам не особо интересны. Купить что-то, имея средства, может каждый. А тема программирования — не по нашей части.
Поэтому я хочу Вам показать, как делают динамические обложки с помощью специализированных сервисов.
Делаем обложку для группы Вконтакте, используя бесплатный тариф сервиса dycover
В сети достаточно много инструментов для этой цели.
Но DyCover лидирует среди них. Думаю, это достигается за счет того, что там удобный интерфейс и есть бесплатный тариф.
Итак, идем туда по ссылке:
https://dycover.ru/
Действовать будет с самого начала. На главной странице сайта нажмите «Войти«. Затем подтвердите доступ, нажав на следующей странице кнопку «Разрешить«.
После этого Вы перейдете в свой личный кабинет, где будет загружен список ваших сообществ. Как Вы понимаете, здесь только группы, в которых Вы являетесь создателем или администратором. Это объясняется тем, что устанавливать обложку может только руководитель (читаем как его назначить).
Давайте начнем. Найдите в списке нужное сообщество, и нажмите на него.
Выбираем нужную группуМы перейдем к странице управления этой группой. Первым делом ее нужно привязать к сервису. Для этого нажмем на кнопку «Подключить«. Затем снова подтверждаем разрешение.
Теперь можно переходить к самому интересному.
Нажимаем в меню «Создать новую обложку«.
Мы попадаем в интерактивный редактор. Первым делом нужно загрузить фоновый рисунок. Подготовьте его любым удобным способом. Затем нажимаем на кнопку «Загрузка фонов«. У нас появляется блок «Новый фон«. В нем ссылка «Загрузить фон«. Нажимаем и выбираем нужный файл.
Загружаем фон для обложкиФон будет добавлен в наш макет.
Дальше начинается самое интересное — мы будем добавлять интерактивные блоки. Это ведь именно то, ради чего была затеяна это инструкция!
Большинство элементов добавляется через меню «Добавить виджет«. Нажимаем туда и видим список доступных блоков.
Доступные для вставки блокиКак Вы понимаете, вся задача сводится к добавлению нужных блоков, и их тонкой настройки.
Давайте будем считать, что нам нужно вывести трех последних подписчиков сообщества, и текущее время.
Мы наводим курсор на виджет «Подписчик«, и в появившемся меню выбираем вариант «Последний подписчик«.
Достаточно щелкнуть по этому пункту, и блок будет вставлен. Передвиньте его на нужное место, и добавьте еще два таких блока.
Осталось добавить блок со временем. Вы уже знаете, как это делать. Раздел «Добавить виджет«, там блок «Дата и время«.
Все наши блоки добавлены!
Вы должны понимать, что для каждого элемента доступны настройки. Достаточно выделить нужный блок в правом меню, и Вы сразу увидите вкладки с настройками.
Доступные настройки для динамических блоковТаким образом, мы не ограничены простым добавлением интерактивного элемента. Их можно гибко редактировать, подстраивая под наши задачи.
Давайте попробуем проверить, работает ли наш макет. Нажмите на кнопку «Предпросмотр«.
Предпросмотр обложкиКак видите, на макете начинают отображаться данные. В нашем случае, последние подписчики и дата.
Обратите внимание, что при просмотре сообщества через мобильный телефон, боковые части обложки обрезаются.
Учитывайте этот момент, когда формируете расположение блоков. Их нужно располагать ближе к центру.
Пора опубликовать готовый макет
Как я и говорил, в сервисе есть бесплатный тариф. Выбранные нами блоки доступны совершенно бесплатно. Мы их добавили, разместили и настроили. Можно публиковать!
Нажимаем на кнопку «Сохранить обложку«, даем ей имя и сохраняем изменения.
Сохраняем макетПолучаем уведомление о том, что наш макет нужно применить к сообществу. Возвращаемся в панель управления, в раздел управления выбранной группой. Здесь в блоке «Выберите обложку«, нужно выбрать нам подготовленный вариант. Затем нажать «Применить обложку«.
Активируем обложкуИдем в группу и проверяем результат.
Динамическая обложка в нашей группеЧтобы убедиться, что наши блоки действительно «живые«, я сейчас подпишусь на группу с другой страницы. И сразу проверим результат.
Проверяем работоспособностьКак видите, все работает! Правда, мы немного напутали в настройках блоков — нужно было устанавливать в каждом из них разные номера для подписчиков.
В первом — последний участник, во втором предпоследний, и так далее.
Но, несмотря на это, мы научились создавать живые обложки для групп. Теперь можете использовать эти навыки.
Видео гид. Как создать и опубликовать динамическую обложку в группе в ВК?
Блог Khronos — The Khronos Group Inc
Введение
Khronos представила новое расширение под названием VK_EXT_graphics_pipeline_library, которое позволяет компилировать шейдеры намного раньше, чем при полном времени создания Pipeline State Object (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 на четыре отдельных этапа конвейера вместо одного монолитного конвейера:
- Vertex Input Interface
- Шейдеры перед растеризацией
- Фрагментный шейдер
- Интерфейс вывода фрагментов
Интерфейс ввода вершин содержит информацию, которая обычно предоставляется объекту состояния полного конвейера с помощью VkPipelineVertexInputStateCreateInfo и VkPipelineInputAssemblyStateCreateInfo. Для нашего движка эта информация неизвестна до момента отрисовки, поэтому конвейер для этого этапа по-прежнему хэшируется и создается во время отрисовки. Однако этот этап не имеет шейдерного кода и поэтому драйвер может его быстро создать, да и этих объектов тоже довольно мало.
Шейдеры перед растеризацией содержат этапы вершинного, мозаичного и геометрического шейдера вместе с состоянием, связанным с VkPipelineViewportStateCreateInfo, VkPipelineRasterizationStateCreateInfo, VkPipelineTessellationStateCreateInfo и VkRenderPass (или динамической отрисовкой). Это может звучать как больше информации, чем ваш движок мог бы знать во время создания шейдера, это определенно было для нас. Однако ключевой момент заключается в том, что при объединении конвейерных библиотек с расширениями динамического состояния единственной информацией, которая действительно необходима для создания шейдера до растеризации, является код 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 не требует, чтобы приложения использовали динамическое состояние, на практике для нашего движка они неразрывно связаны друг с другом. Без использования динамического состояния мы не смогли бы создавать конвейерные библиотеки для этапов предварительной растеризации и фрагментного шейдера во время загрузки материала. Сразу отмечу, что мы создаем пайплайны предрастеризации только для вершинных шейдеров и не заморачиваемся с шейдерами тесселяции и геометрии. У нас не так много случаев, когда мы используем геометрические шейдеры и шейдеры тесселяции, поэтому для целей остальной части этой статьи этап предварительной растеризации для нас относится только к вершинным шейдерам.
Конкретные расширения динамического состояния, которые нам нужны в нашем движке, чтобы иметь возможность использовать VK_EXT_graphics_pipeline_library, следующие:
- VK_EXT_extended_dynamic_state
- ВК_EXT_extended_dynamic_state2
- ВК_ХР_динамический_рендеринг
К счастью, все эти три расширения являются частью Vulkan 1.3, поэтому можно ожидать, что они будут поддерживаться везде, где поддерживается VK_EXT_graphics_pipeline_library.
Для вершинного шейдера (конвейерная библиотека перед растеризацией) информация в следующей таблице должна быть динамической, чтобы мы могли немедленно создать конвейерную библиотеку. То есть мы не знаем область просмотра, смещение глубины, режим отбраковки, цели рендеринга (или форматы) в то время, когда нам предоставляется вершинный шейдер, поэтому, сделав все это состояние динамическим, мы можем создать конвейерную библиотеку до растеризации.
Динамическое состояние этапа перед растеризацией
| Состояние | Динамическое состояние |
|---|---|
| VkPipelineViewportStateCreateInfo | VK_DYNAMIC_STATE_VIEWPORT_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, которой требуется полный макет конвейера, когда мы создаем этап предварительной растеризации или фрагментного шейдера.
Один из простых способов справиться с этим — использовать разные наборы дескрипторов для каждого этапа шейдера. Вы просто предоставляете схему конвейера, содержащую наборы дескрипторов для каждого этапа, для каждой библиотеки. Наше ядро, однако, этого не делает. Причина, по которой мы этого не делаем, частично связана с производительностью (чтобы мы могли выделить/обновить/связать один набор дескрипторов для динамических ресурсов в 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 позволяет избежать задержек во время отрисовки за счет более ранней компиляции шейдеров. Хотя это связано с рядом компромиссов, мы считаем, что для некоторых движков, ограниченных существующим контентом / дизайном, это будет чрезвычайно полезно для уменьшения основной причины заминок конвейера. Сочетание библиотек графического конвейера и динамического состояния обеспечивает повышенную гибкость, позволяющую движкам избежать задержки компиляции шейдера до времени отрисовки.
Хотя по-прежнему рекомендуется стремиться к дизайну, который заранее создает полные PSO, для приложений, которые не могут этого сделать, это расширение будет очень полезным.
Спасибо
Спасибо всем участникам Khronos, которые участвовали в создании этого расширения, особенно Крису Гловеру из Google за его руководство. Я также хотел бы особо поблагодарить Тобиаса Гектора из AMD за защиту этого расширения и Пирса Даниэля из NVIDIA за раннюю поддержку драйверов. Спасибо Baldur Karlsson за раннюю поддержку RenderDoc для помощи в разработке и Nathaniel Cesario @ LunarG за поддержку проверки. Также спасибо Mike Blumenkrantz @ Valve за раннюю поддержку в lavapipe.
Часто задаваемые вопросы ВКонтакте — Vancouver Vineyard Church
Добро пожаловать! Мы так рады, что вы здесь.
Когда вы войдете в церковь, подойдите к стойке регистрации Vineyard Kids Check-in, и церковный доброволец подключит вас к нашей системе. Затем мы объясним некоторую полезную информацию о регистрации заезда/отъезда, некоторые основные правила безопасности и проведем краткую экскурсию по детским комнатам. Затем вы получите защитную бирку, которая соответствует именной бирке вашего ребенка. Это будет использоваться для пейджинга и во время проверки. Комната для малышей открывается в 10:00, а классы от подготовительного до пятого классов открываются в 10:30 после богослужения . После окончания богослужения волонтеры ВКонтакте сопроводят учеников от Pre-K до 5-го класса в их комнаты.Vineyard Kids открыт для детей в возрасте от 1 года до 5 класса
Если у вашего ребенка есть особые потребности, пожалуйста, свяжитесь с офисом церкви, чтобы поговорить с сотрудником Vineyard Kids перед посещением в воскресенье утром, чтобы мы могли работать вместе, чтобы подготовить вас и вашего ребенка к успеху.

Дети от младенцев до 5-х классов в Vineyard Kids размещаются в классах в соответствии с их возрастом или классом.
Сейчас мы разделяем детей на 4 комнаты: Малыши, Pre-K, K|2 и 3|5.
Комната для малышей доступна для детей в возрасте от 1 года до 3 лет, pre-K — для детей в возрасте от 3 до 4 лет, K|2 — для детей от детского сада до 2-го класса и 3|5 — для детей с 3-го по 5-й класс.
В Vineyard Kids все дети от Pre-K до 5-го класса вместе переходят в свои новые классы один раз в год. Это означает, что когда у вашего ребенка будет день рождения, он останется в том же классе, который посещает в настоящее время. Мы организуем наши классы таким образом, потому что мы высоко ценим отношения, которые ваш ребенок устанавливает с лидерами и друзьями в своем классе. В конце года мы проведем выпускной для детей, которые будут менять классы.

После того, как дети зарегистрированы и родители/опекуны получили бирку безопасности, малыши могут быть сопровождены в комнату для малышей и доставлены родителями или опекунами в 10:00. Дети от Pre-K до 5-го класса присоединяются к взрослым во время богослужения до 10:30. Когда богослужение заканчивается, детей выпускают к своим лидерам в задней части святилища и проводят в их комнаты.
После окончания службы родители/опекуны вручают свою бирку безопасности руководителю ВКонтакте у дверей класса своего ребенка. Лидер ВКонтакте сопоставит соответствующий код бирки безопасности с именной биркой ребенка и вернет ребенка его родителю.
Мы используем учебную программу Tru .

Tru — это изменяющая жизнь, духовно формирующая, увлекательная программа для родителей и детей.
Tru помогает лидерам, детям и семьям вести жизнь, полную преобразований. Речь идет об открытии Божьего искупительного повествования и о том, как Святой Дух поведет верующих всех возрастов на их пути к большему познанию Его.
Мы стремимся создать безопасную и здоровую среду для наших детей. Мы просим детей со следующими симптомами оставаться дома с родителем или опекуном, чтобы отдохнуть и выздороветь. У детей не должно быть симптомов простуды или гриппа в течение как минимум 24 часов.
Постоянный кашель или чихание, не связанный с аллергией
Проявление признаков или заразных состояний здоровья, таких как вши, круп, ветряная оспа или COVID.
Безопасность — основная ценность Vineyard Kids.
У нас есть многочисленные политики безопасности, чтобы обеспечить физическую и эмоциональную безопасность детей. У нас всегда есть как минимум 2 лидера в каждой комнате с детьми, и все наши лидеры прошли стороннюю проверку биографических данных. У нас также есть система пейджинга на случай, если нам когда-нибудь понадобится быстро связаться с родителем или опекуном ребенка.Мы стремимся к тому, чтобы дети чувствовали себя в безопасности. Мы хотим, чтобы наши дети чувствовали себя в безопасности, чтобы задавать вопросы, открываться другим, отвечать Святому Духу и быть самими собой.
Поскольку наша учебная программа адаптируется в каждом классе, чтобы наилучшим образом соответствовать возрастной группе, которую мы преподаем, мы рекомендуем детям посещать службу в закрепленном за ними классе. Однако, если ребенку неудобно ходить одному, он может пойти на службу с другом или членом семьи; мы просто просим, чтобы оба ребенка посещали службу младшей возрастной группы.
Это позволяет обоим детям полностью понять и участвовать в преподаваемом уроке.Да! Каждую неделю мы отправляем по электронной почте всем нашим родителям документ под названием «Еженедельник дома». Этот документ предназначен для того, чтобы помочь вашим детям подготовиться к предстоящему уроку и повторить предыдущий урок, который они усвоили в воскресенье. Есть также веселые и полезные занятия для всей семьи, которые помогут укрепить духовное развитие вашего ребенка.
Мы предлагаем закуски для детей в возрасте от 1 года до 5 класса. Мы предоставляем такие варианты, как Goldfish, Cheerios и Pirates Booty. Если у вашего ребенка аллергия или он не может получать предоставленные закуски, сообщите нам об этом при регистрации заезда, чтобы мы могли добавить пометку на бирку с именем вашего ребенка.
Вы также можете взять с собой упакованный перекус для вашего ребенка.Воскресное семейное богослужение – это церковный ритм, который мы практикуем в 5-е воскресенье месяца. В воскресенье семейного поклонения мы закрываем Vineyard Kids и приглашаем наших детей принять участие во взрослом служении. Детские комнаты и комнаты для малышей открыты для родителей, если их детям нужно пошевелиться.
Мы ценим эту практику, потому что она дает нашим волонтерам ВКонтакте передышку, а также дает нам возможность участвовать в жизни церкви вместе с нашими детьми. Построение отношений с доверенными взрослыми в обществе является жизненно важной частью духовного развития ребенка, и это дает нам возможность излиться на детей нашей церкви. Это также помогает нам поддерживать церковную культуру, в которой детям всегда рады, и мы приветствуем их присутствие.

