Scum vulkan что это

Vulkan. Руководство разработчика. Настройка окружения

Scum vulkan что это. image loader. Scum vulkan что это фото. Scum vulkan что это-image loader. картинка Scum vulkan что это. картинка image loader

Я переводчик ижевской компании CG Tribe и здесь я буду публиковать перевод руководства к Vulkan API. Ссылка на источник — vulkan-tutorial.com. Это моя вторая публикация, которая посвящена переводу раздела Development Environment.

9. Загрузка моделей

10. Создание мип-карт

FAQ

Политика конфиденциальности

1. Вступление

2. Краткий обзор

3. Настройка окружения

Windows


Если вы занимаетесь разработкой для Windows, то, скорее всего, вы используете Visual Studio. Для полной поддержки С++17 необходимо использовать Visual Studio 2017 или 2019. Шаги, описанные ниже, подходят для VS 2017.

Vulkan SDK

Самым важным компонентом для разработки программ с Vulkan является SDK. Он включает в себя заголовочные файлы, стандартные слои валидации, инструменты отладки и загрузчик функций Vulkan. Загрузчик ищет методы драйвера в рантайме (во время исполнения) так же, как это делает библиотека GLEW для OpenGL.

SDK можно загрузить с сайта LunarG. Для этого используйте кнопки внизу страницы. Вам необязательно создавать аккаунт, однако с ним у вас будет доступ к дополнительной документации.

Scum vulkan что это. image loader. Scum vulkan что это фото. Scum vulkan что это-image loader. картинка Scum vulkan что это. картинка image loader

Scum vulkan что это. image loader. Scum vulkan что это фото. Scum vulkan что это-image loader. картинка Scum vulkan что это. картинка image loader

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

В этой папке есть и другие программы, которые могут оказаться полезными для разработки. Программы glslangValidator.exe и glslc.exe используются для компиляции шейдеров из GLSL в байт-код. Подробно эта тема будет рассмотрена в главе Шейдерные модули. В папке Bin также находятся dll библиотеки загрузчика Vulkan и слоёв валидации, в папке Lib — статические библиотеки, а в папке Include – заголовочные файлы Vulkan. Вы можете изучить и другие файлы, но для руководства они нам не понадобятся.

Как уже было сказано, Vulkan – это API, независимый от платформы, в котором нет инструментов создания окна для отображения результатов рендеринга. Чтобы использовать преимущества кроссплатформенности Vulkan и избежать ужасов Win32, мы будем использовать библиотеку GLFW для создания окна. Есть и другие доступные библиотеки, например, SDL, но GLFW лучше тем, что она абстрагирует не только создание окна, но и некоторые другие платформенно-зависимые функции.

Scum vulkan что это. image loader. Scum vulkan что это фото. Scum vulkan что это-image loader. картинка Scum vulkan что это. картинка image loader

В отличие от DirectX 12, в Vulkan нет библиотеки для операций линейной алгебры, поэтому ее придется скачать отдельно. GLM – это удобная библиотека, разработанная для использования с графическими API, она часто используется с OpenGL.

Библиотека GLM – это header only библиотека. Скачайте последнюю версию и сохраните ее в удобном месте. У вас должна получиться подобная структура каталогов:

Scum vulkan что это. image loader. Scum vulkan что это фото. Scum vulkan что это-image loader. картинка Scum vulkan что это. картинка image loader

Настройка Visual Studio

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

Scum vulkan что это. image loader. Scum vulkan что это фото. Scum vulkan что это-image loader. картинка Scum vulkan что это. картинка image loader

Scum vulkan что это. image loader. Scum vulkan что это фото. Scum vulkan что это-image loader. картинка Scum vulkan что это. картинка image loader

Scum vulkan что это. image loader. Scum vulkan что это фото. Scum vulkan что это-image loader. картинка Scum vulkan что это. картинка image loader

Scum vulkan что это. image loader. Scum vulkan что это фото. Scum vulkan что это-image loader. картинка Scum vulkan что это. картинка image loader

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

Scum vulkan что это. image loader. Scum vulkan что это фото. Scum vulkan что это-image loader. картинка Scum vulkan что это. картинка image loader

Scum vulkan что это. image loader. Scum vulkan что это фото. Scum vulkan что это-image loader. картинка Scum vulkan что это. картинка image loader

Scum vulkan что это. image loader. Scum vulkan что это фото. Scum vulkan что это-image loader. картинка Scum vulkan что это. картинка image loader

Добавьте include директории для Vulkan, GLFW и GLM:

Scum vulkan что это. image loader. Scum vulkan что это фото. Scum vulkan что это-image loader. картинка Scum vulkan что это. картинка image loader

Перейдите в Linker → General → Additional Library Directories и добавьте расположения lib-файлов для Vulkan и GLFW:

Scum vulkan что это. image loader. Scum vulkan что это фото. Scum vulkan что это-image loader. картинка Scum vulkan что это. картинка image loader

Scum vulkan что это. image loader. Scum vulkan что это фото. Scum vulkan что это-image loader. картинка Scum vulkan что это. картинка image loader

Scum vulkan что это. image loader. Scum vulkan что это фото. Scum vulkan что это-image loader. картинка Scum vulkan что это. картинка image loader

Введите имена lib-файлов Vulkan и GLFW:

Scum vulkan что это. image loader. Scum vulkan что это фото. Scum vulkan что это-image loader. картинка Scum vulkan что это. картинка image loader

И измените настройки стандарта на C++:

Scum vulkan что это. image loader. Scum vulkan что это фото. Scum vulkan что это-image loader. картинка Scum vulkan что это. картинка image loader

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

Не забудьте выбрать для компиляции 64-битный режим.

Scum vulkan что это. image loader. Scum vulkan что это фото. Scum vulkan что это-image loader. картинка Scum vulkan что это. картинка image loader

Scum vulkan что это. image loader. Scum vulkan что это фото. Scum vulkan что это-image loader. картинка Scum vulkan что это. картинка image loader

Проверьте, чтобы число расширений не равнялось нулю («X extensions supported» в консоли).

Поздравляем, вы готовы к работе с Vulkan!

Linux

Инструкции ниже предназначены для пользователей Ubuntu, но вы можете следовать им, изменив команды apt на подходящие вам команды менеджера пакетов. Вам нужен компилятор с поддержкой С++17 (GCC 7+ или Clang 5+). Вам также понадобится утилита make.

Vulkan Packages

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

Scum vulkan что это. image loader. Scum vulkan что это фото. Scum vulkan что это-image loader. картинка Scum vulkan что это. картинка image loader

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

Как уже было сказано, Vulkan – это API, независимый от платформы, в котором нет инструментов создания окна для отображения результатов рендеринга. Чтобы использовать преимущества кроссплатформенности Vulkan и избежать ужасов X11, мы будем использовать библиотеку GLFW для создания окна. Есть и другие доступные библиотеки, например, SDL, но GLFW лучше тем, что она абстрагирует не только создание окна, но и некоторые другие платформенно-зависимые функции.

Мы будем устанавливать GLFW с помощью следующей команды:

В отличие от DirectX 12, в Vulkan нет библиотеки для операций линейной алгебры, поэтому ее придется скачать отдельно. GLM – это удобная библиотека, разработанная для использования с графическими API, она часто используется с OpenGL.

Библиотека GLM – это header only библиотека. Ее можно установить из пакета libglm-dev :

Компилятор шейдеров

Теперь, когда настройка почти завершена, осталось установить программу для компиляции шейдеров из GLSL в байт-код.

glslc: error: no input files

Мы подробно рассмотрим glslc в главе о шейдерных модулях.

Настройка проекта для makefile

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

Аналогично определите базовые флаги линкера в переменной LDFLAGS :

Флаг -lglfw подключает библиотеку GLFW, -lvulkan — загрузчик Vulkan, а остальные флаги — низкоуровневые библиотеки и зависимости самой GLFW.

Запуск команды make test позволит убедиться, что программа работает успешно. При закрытии пустого окна программа должна завершиться успешным кодом возврата ( 0 ). У вас должен получиться готовый makefile, похожий на приведенный ниже:

MacOS

Инструкции ниже предназначены для тех, кто использует Xcode и менеджер пакетов Homebrew. Имейте в виду, что версия MacOS не должна быть ниже 10.11, а ваше устройство должно поддерживать Metal API.

Vulkan SDK

Самым важным компонентом для разработки программ с Vulkan является SDK. Он включает в себя заголовочные файлы, стандартные слои валидации, инструменты отладки и загрузчик функций Vulkan. Загрузчик ищет методы драйвера в рантайме (во время исполнения) так же, как это делает библиотека GLEW для OpenGL.

SDK можно загрузить с сайта LunarG. Для этого используйте кнопки внизу страницы. Вам необязательно создавать аккаунт, однако с ним у вас будет доступ к дополнительной документации.

Scum vulkan что это. image loader. Scum vulkan что это фото. Scum vulkan что это-image loader. картинка Scum vulkan что это. картинка image loader

Версия SDK для MacOS использует библиотеку MoltenVK. MacOS не имеет прямой поддержки Vulkan, а MoltenVK используется как прослойка для передачи вызовов в Apple Metal. Благодаря этому вы можете воспользоваться преимуществами отладки и производительности Apple Metal.

Как уже было сказано, Vulkan – это API, независимый от платформы, в котором нет инструментов создания окна для отображения результатов рендеринга. Мы будем использовать библиотеку GLFW для создания окна. Есть и другие доступные библиотеки, например, SDL, но GLFW лучше тем, что она абстрагирует не только создание окна, но и некоторые другие платформенно-зависимые функции.

Для установки GLFW на MacOS мы будем использовать менеджер пакетов Homebrew:

В Vulkan нет библиотеки для операций линейной алгебры, поэтому ее придется скачать отдельно. GLM – это удобная библиотека, разработанная для использования с графическими API, она часто используется с OpenGL.

Библиотека GLM – это header only библиотека. Ее можно установить из пакета glm :

Настройка Xcode

Запустите Xcode и создайте новый проект Xcode. В появившемся окне выберите Application > Command Line Tool.

Scum vulkan что это. image loader. Scum vulkan что это фото. Scum vulkan что это-image loader. картинка Scum vulkan что это. картинка image loader

Scum vulkan что это. image loader. Scum vulkan что это фото. Scum vulkan что это-image loader. картинка Scum vulkan что это. картинка image loader

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

Xcode покажет некоторые ошибки, например, библиотеки, которые не были найдены. Необходимо настроить проект так, чтобы устранить эти ошибки. Выберите ваш проект в панели Project Navigator. Откройте вкладку Build Settings и выполните следующее:

Scum vulkan что это. image loader. Scum vulkan что это фото. Scum vulkan что это-image loader. картинка Scum vulkan что это. картинка image loader

(На скриншоте на каждый параметр приходится по одному пути. Но, если следовать этому мануалу, вы получите по два пути на параметр. — Прим. пер.)

Конфигурация Xcode должна иметь следующий вид:

Scum vulkan что это. image loader. Scum vulkan что это фото. Scum vulkan что это-image loader. картинка Scum vulkan что это. картинка image loader

Осталось настроить несколько переменных среды. В панели инструментов Xcode перейдите в Product > Scheme > Edit Scheme. и во вкладке Arguments добавьте две переменные среды:

• VK_ICD_FILENAMES = vulkansdk/macOS/share/vulkan/icd.d/MoltenVK_icd.json
• VK_LAYER_PATH = vulkansdk/macOS/share/vulkan/explicit_layer.d

У вас должно получиться следующее:

Scum vulkan что это. image loader. Scum vulkan что это фото. Scum vulkan что это-image loader. картинка Scum vulkan что это. картинка image loader

Итак, настройка завершена! После запуска проекта (не забудьте установить конфигурацию сборки Debug или Release) вы увидите следующее:

Scum vulkan что это. image loader. Scum vulkan что это фото. Scum vulkan что это-image loader. картинка Scum vulkan что это. картинка image loader

Число расширений должно быть больше нуля («X extensions supported» в консоли). Остальные логи берутся из библиотек. Вы можете получать разные сообщения в зависимости от вашей конфигурации.

Поздравляем! Теперь вы готовы к реальной работе с Vulkan.

Источник

Scum vulkan что это

Scum vulkan что это. 4 star large. Scum vulkan что это фото. Scum vulkan что это-4 star large. картинка Scum vulkan что это. картинка 4 star large

В этом руководстве будет описан простой и быстрый способ повышения FPS в DOOM и других играх, поддерживающих Vulkan API.

Scum vulkan что это. ico dialogue close. Scum vulkan что это фото. Scum vulkan что это-ico dialogue close. картинка Scum vulkan что это. картинка ico dialogue close

12,216уникальных посетителей
133добавили в избранное

Scum vulkan что это. filterselect blue. Scum vulkan что это фото. Scum vulkan что это-filterselect blue. картинка Scum vulkan что это. картинка filterselect blue

Scum vulkan что это. filterselect blue. Scum vulkan что это фото. Scum vulkan что это-filterselect blue. картинка Scum vulkan что это. картинка filterselect blue

Scum vulkan что это. filterselect blue. Scum vulkan что это фото. Scum vulkan что это-filterselect blue. картинка Scum vulkan что это. картинка filterselect blue

Scum vulkan что это. filterselect blue. Scum vulkan что это фото. Scum vulkan что это-filterselect blue. картинка Scum vulkan что это. картинка filterselect blue

Scum vulkan что это. filterselect blue. Scum vulkan что это фото. Scum vulkan что это-filterselect blue. картинка Scum vulkan что это. картинка filterselect blue

Игра не запускается после включения Vulcan API, что делать?

Scum vulkan что это. filterselect blue. Scum vulkan что это фото. Scum vulkan что это-filterselect blue. картинка Scum vulkan что это. картинка filterselect blue

ВНИМАНИЕ! ПРЕЖДЕ ЧЕМ ВЫПОЛНЯТЬ ДЕЙСТВИЯ, ОПИСАННЫЕ В РУКОВОДСТВЕ, НЕОБХОДИМО УБЕДИТЬСЯ, ЧТО ВАШ КОМПЬЮТЕР СООТВЕТСТВУЕТ ХОТЯ БЫ МИНИМАЛЬНЫМ СИСТЕМНЫМ ТРЕБОВАНИЯМ!

Что это вообще за зверь и как ему удается так ощутимо повысить производительность?

Почему он дает такой прирост к FPS? Я, конечно, могу начать вам рассказывать о супер-пупер технологиях, использующихся в нем, но для простоты просто скажу, что он использует компьютерное железно намного эффективнее, чем его предшественник OpenGL.

Все очень просто, начнем с первого шага:

Запускаем сам DOOM. Заходим в Параметры>Расширенные и в пункте «Графический API» выбираем «Vulkan API» вместо «OpenGL». Перезапускаем игру.

Заходим в игру и радуемся повышению производительности!

Повышение производительности очень сильно зависит от характеристик вашего компа. На моей конфигурации прирост составил аж 30 FPS, у кого-то может оказаться намного меньше, а кто-то вообще не почувствует разницы. Да и вообще, глупо ожидать от тостера хотя бы 30 FPS с Vulkan’ом, если он на минималках едва 10 выдает. Игра не запускается после включения Vulcan API, что делать?

Вы не обновили драйвера, либо скачали не ту их версию. Перекачиваем более новую/стабильную версию.

Как откатить игру обратно до OpenGL, если ничего не работает?

Огромное спасибо пользователю arikuto за найденную инструкцию!

Не забудьте оценить руководство или оставить свою критику/пожелания!

2. Краткий обзор

Vulkan. Руководство разработчика. Краткий обзор

Scum vulkan что это. . Scum vulkan что это фото. Scum vulkan что это-. картинка Scum vulkan что это. картинка

Я работаю техническим переводчиком ижевской IT-компании CG Tribe, которая предложила мне внести свой вклад в сообщество и начать публиковать переводы интересных статей и руководств.

9. Загрузка моделей

10. Создание мип-карт

2. Краткий обзор

Предпосылки возникновения Vulkan

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

По мере развития архитектуры видеокарт в ней стало появляться все больше программируемых функций. Все новые функции необходимо было каким-то образом объединить с существующими API. Это привело к неидеальным абстракциям и множеству гипотез со стороны графического драйвера о том, как воплотить замысел программиста в современных графических архитектурах. Поэтому для повышения производительности в играх выпускается большое количество обновлений драйверов. Из-за сложности таких драйверов среди поставщиков часто возникают расхождения, например, в синтаксисе, принятом для шейдеров. Помимо этого, в последнее десятилетие также наблюдался приток мобильных устройств с мощным графическим оборудованием. Архитектуры этих мобильных GPU могут сильно отличаться в зависимости от требований по размерам и энергопотреблению. Одним из таких примеров является тайловый рендеринг, который может дать большую производительность за счет лучшего контроля над функционалом. Еще одним ограничением, связанным с возрастом API, является ограниченная поддержка многопоточности, что может привести к появлению узкого места со стороны ЦП.

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

Как нарисовать треугольник?

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

Шаг 1 — Экземпляр (instance) и физические устройства

Работа с Vulkan начинается с настройки Vulkan API через VkInstance (экземпляр). Экземпляр создается с помощью описания вашей программы и всех расширений, которые вы хотите использовать. После создания экземпляра вы можете запросить, какое оборудование поддерживает Vulkan, и выбрать один или несколько VkPhysicalDevices для выполнения операций. Вы можете сделать запрос по таким параметрам, как размер VRAM и возможности устройств, чтобы выбрать желаемые устройства, если вы предпочитаете использовать специализированные видеокарты.

Шаг 2 — Логическое устройство и семейства очередей

После того, как вы выберете подходящее hardware устройство для использования, вам необходимо создать VkDevice (логическое устройство), где вы более подробно опишете, какие возможности (VkPhysicalDeviceFeatures) будете использовать, например, рендеринг в несколько viewport-ов (multi viewport rendering) и 64-битные числа с плавающей точкой. Вам также необходимо установить, какие семейства очередей вы бы хотели использовать. Многие операции, совершаемые с помощью Vulkan, например, команды рисования и операции в памяти, выполняются асинхронно после отправки в VkQueue. Очереди выделяются из семейства очередей, где каждое семейство поддерживает определенный набор операций. Например, для операций с графикой, вычислительных операций и передачи данных памяти могут существовать отдельные семейства очередей. Кроме того их доступность может использоваться в качестве ключевого параметра при выборе физического устройства. Некоторые устройства с поддержкой Vulkan не предлагают никаких графических возможностей, однако, все современные видеокарты с поддержкой Vulkan, как правило, поддерживают все необходимые нам операции с очередями.

Шаг 3 — Window surface и цепочки показа (swap chain)

Если вас интересует не только внеэкранный рендеринг, вам необходимо создать окно для отображения отрендеренных изображений. Окна можно создать с помощью API исходной платформы или библиотек, таких как GLFW и SDL. В руководстве мы будем использовать GLFW, подробнее о которой мы расскажем в следующей главе.

Цепочка показа — это набор целей рендеринга. Ее задача — обеспечивать, чтобы изображение, которое рендерится в текущий момент, отличалось от отображаемого на экране. Это позволяет отслеживать, чтобы отображались только готовые изображения. Каждый раз, когда нам нужно создать кадр, мы должны сделать запрос, чтобы цепочка показа предоставила нам изображение для рендеринга. После того, как кадр создан, изображение возвращается в цепочку показа, чтобы в какой-то момент отобразиться на экране. Количество целей рендеринга и условий для отображения готовых изображений на экране зависит от текущего режима. Среди таких режимов можно выделить двойную буферизацию (vsync) и тройную буферизацию. Мы рассмотрим их в главе, посвященной созданию цепочки показа.

Некоторые платформы позволяют рендерить непосредственно на экран через расширения VK_KHR_display и VK_KHR_display_swapchain без взаимодействия с каким-либо менеджером окон. Это позволяет создать surface, которая представляет собой весь экран и может использоваться, например, для реализации вашего собственного менеджера окон.

Шаг 4 — Image views и фреймбуферы

Чтобы рисовать в изображение (image), полученное из цепочки показа, мы должны обернуть его в VkImageView и VkFramebuffer. Image view ссылается на определенную часть используемого изображения, а фреймбуфер ссылается на image views, которые используются как буферы цвета, глубины и шаблонов (stencil). Поскольку в цепочке показа может быть множество разных изображений, мы заранее создадим image view и фреймбуфер для каждого из них и выберем необходимое изображение во время рисования.

Шаг 5 — Проходы рендера

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

Шаг 6 — Графический конвейер (pipeline)

Графический конвейер в Vulkan настраивается с помощью создания объекта VkPipeline. Он описывает конфигурируемое состояние видеокарты, например, размер viewport или операцию буфера глубины, а также программируемое состояние, используя объекты VkShaderModule. Объекты VkShaderModule создаются из байтового кода шейдера. Драйверу также необходимо указать, какие цели рендеринга будут использоваться в конвейере. Мы задаем их, ссылаясь на проход рендера.

Одна из наиболее отличительных особенностей Vulkan по сравнению с существующими API-интерфейсами заключается в том, что почти все системные настройки графического конвейера должны задаваться заранее. Это значит, что если вы хотите переключиться на другой шейдер или немного изменить vertex layout, вам необходимо полностью пересоздать графический конвейер. Поэтому вам придется заранее создать множество объектов VkPipeline для всех комбинаций, необходимых для операций рендеринга. Только некоторые базовые настройки, такие как размер viewport и цвет очистки, могут быть изменены динамически. Все состояния должны быть описаны явно. Так, например, не существует смешивания цветов (color blend state) по умолчанию.

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

Шаг 7 — Пул команд и буферы команд

Шаг 8 — Основной цикл

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

Подведем краткий итог. Для отрисовки первого треугольника нам необходимо:

Концепты API

В заключение к текущей главе будет приведен краткий обзор того, как структурируются Vulkan API на более низком уровне.

Стандарт оформления кода

Scum vulkan что это. al. Scum vulkan что это фото. Scum vulkan что это-al. картинка Scum vulkan что это. картинка al

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

Поскольку операции в Vulkan расписываются очень подробно, и слои валидации достаточно обширные, вам будет намного проще установить причину черного экрана по сравнению с OpenGL и Direct3D.

Остался всего один шаг, прежде чем мы начнем писать код, и это — настройка рабочей среды.

Vulkan-tutorial. Урок 1.1 — Вступление

Scum vulkan что это. calrjr3ezjhsaczng3blj6c4c2q. Scum vulkan что это фото. Scum vulkan что это-calrjr3ezjhsaczng3blj6c4c2q. картинка Scum vulkan что это. картинка calrjr3ezjhsaczng3blj6c4c2q

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

Автор оригинала дал свое согласие на перевод. Также, когда я доперевожу все статьи и у меня будет время отформатировать их для github, он добавит русский перевод на свой сайт.

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

Часть 1. Вступление

Часть 2. Первый треугольник

Часть 3. Vertex buffer

Часть 4. Uniform Buffer

Часть 6. Буфер глубины
Часть 7. 3D Модели
Часть 8. Mipmaps
Часть 9. Multisampling

Описание

В этих уроках вы научитесь основам Vulkan API. Vulkan это новый API созданный компанией Khronos group (создатели OpenGL), он предоставляет улучшенную абстракцию для программирования графики на современных видеокартах. Новый интерфейс поможет лучше описать как ваше приложение будет работать с графическим процессором, что потенциально может увеличить производительность и уменьшить неожиданные ситуации, связанные с поведением драйвера по сравнению с существующими API, такими как OpenGL и Direct3D. Идеи, лежащие в основе Vulkan, аналогичны идеям Direct3D 12 и Metal, но Vulkan имеет одно неоспоримое преимущество — полную кросс-платформенность, что позволяет разрабатывать приложение одновременно под Linux, Windows и Android.

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

Вывод — Vulkan не для всех. Он создан для программистов, которым нужно больше производительности, несмотря на более сложный и кропотливый процесс написания приложения. Если вы заинтересованы разработкой игр больше, чем программированием компьютерной графики, то вы можете и дальше использовать OpenGL или DirectX, в любом случае они по-прежнему поддерживаются и не будут вытеснены Vulkan(ом) в ближайшее время. Как альтернативу, можно использовать какой-то игровой движок (Unreal Engine, Unity и тд.), который будет использовать Vulkan, но предоставит вам свою высокоуровневую абстракцию над базовым API.

Теперь давайте рассмотрим что вам надо для изучения Vulkan:

В этой серии уроков от вас не требуется знания OpenGL или DirectX, но предполагается, что вы знакомы с основами 3D графики. Например, тут не будет объясняться математика, лежащая в основе перспективной проекции. Для понимания основ компьютерной графики рекомендую прочесть эту книгу. Другие хорошие ресурсы по графике:

Мы будем использовать С++, но вы также можете писать и на чистом С. Если будете использовать С, вам придется использовать другую библиотеку для линейной алгебры, так же самостоятельно структурировать код, так как мы будем использовать классы для структурирования кода и RAII для управления временем жизни ресурсов. Также существует альтернативная версия руководства для разработчиков на Rust.

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

Scum vulkan что это. lorw4tnljoowfmn7f1azlgvapdo. Scum vulkan что это фото. Scum vulkan что это-lorw4tnljoowfmn7f1azlgvapdo. картинка Scum vulkan что это. картинка lorw4tnljoowfmn7f1azlgvapdo

E-Book

Также вы можете скачать это руководство в формате электронной книги (нет русского):

Структура уроков

Для начала мы разберемся с тем, как работает Vulkan, и по шагам разберем, что нам нужно для отрисовки нашего первого треугольника на экране. Мы будем продвигаться маленькими шажочками, смысл которых поначалу будет вам не очень понятен, но потом вы поймете их роль когда увидите картину в целом. Следующим шагом будет настройка среды разработки Vulkan SDK, GLM для линейной алгебры и GLFW для создания окна. В уроках будет показано, как настроить все под Windows + Visual Studio и Ubuntu Linux + GCC.

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

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

Как упоминалось ранее, Vulkan API достаточно низкоуровневый с множеством настроек, что даёт вам максимальный контроль работы графического конвейера. Это вынуждает нас повторно выполнять большое количество шагов по многу раз. Чтобы этого избежать, мы будем стараться выносить такой функционал в отдельные вспомогательные функции.

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

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

На сайте с оригиналом статьи есть раздел комментариев под основным блоком.

Vulkan — это все еще новый API и best practices еще не сформировались. В случае, если у вас появились какие-то советы, отзывы об учебнике или самом сайте, не стесняйтесь и оставляйте ваши запросы или исправления (можно пулл-реквесты на GitHub). Также можно следить за обновлениями руководства в репозитории.

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

Как правило, рисование треугольника в программировании графики, это как написание «Hello world!» при изучении языка.

Если вы столкнетесь с какими-либо проблемами, следуя руководству, сначала проверьте FAQ, чтобы увидеть, есть ли там ваша проблема и ее решение. Если решение так и не было найдено, не стесняйтесь обращаться за помощью в разделе комментариев в главе.

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

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

Огромное спасибо за исправление моих ошибок и опечаток:
maxzhurkin
Mingun
Также всем остальным и модераторам хабра 🙂

Vulkan. Руководство разработчика. Настройка окружения

Scum vulkan что это. . Scum vulkan что это фото. Scum vulkan что это-. картинка Scum vulkan что это. картинка

9. Загрузка моделей

10. Создание мип-карт

3. Настройка окружения

Windows

Если вы занимаетесь разработкой для Windows, то, скорее всего, вы используете Visual Studio. Для полной поддержки С++17 необходимо использовать Visual Studio 2017 или 2019. Шаги, описанные ниже, подходят для VS 2017.

Vulkan SDK

Самым важным компонентом для разработки программ с Vulkan является SDK. Он включает в себя заголовочные файлы, стандартные слои валидации, инструменты отладки и загрузчик функций Vulkan. Загрузчик ищет методы драйвера в рантайме (во время исполнения) так же, как это делает библиотека GLEW для OpenGL.

SDK можно загрузить с сайта LunarG. Для этого используйте кнопки внизу страницы. Вам необязательно создавать аккаунт, однако с ним у вас будет доступ к дополнительной документации.

Scum vulkan что это. gief nznnrhx zkfm1tpzt6gr8. Scum vulkan что это фото. Scum vulkan что это-gief nznnrhx zkfm1tpzt6gr8. картинка Scum vulkan что это. картинка gief nznnrhx zkfm1tpzt6gr8

Scum vulkan что это. ueuthg2ci7ao6cmgbebkageticw. Scum vulkan что это фото. Scum vulkan что это-ueuthg2ci7ao6cmgbebkageticw. картинка Scum vulkan что это. картинка ueuthg2ci7ao6cmgbebkageticw

В этой папке есть и другие программы, которые могут оказаться полезными для разработки. Программы glslangValidator.exe и glslc.exe используются для компиляции шейдеров из GLSL в байт-код. Подробно эта тема будет рассмотрена в главе Шейдерные модули. В папке Bin также находятся dll библиотеки загрузчика Vulkan и слоёв валидации, в папке Lib — статические библиотеки, а в папке Include – заголовочные файлы Vulkan. Вы можете изучить и другие файлы, но для руководства они нам не понадобятся.

Как уже было сказано, Vulkan – это API, независимый от платформы, в котором нет инструментов создания окна для отображения результатов рендеринга. Чтобы использовать преимущества кроссплатформенности Vulkan и избежать ужасов Win32, мы будем использовать библиотеку GLFW для создания окна. Есть и другие доступные библиотеки, например, SDL, но GLFW лучше тем, что она абстрагирует не только создание окна, но и некоторые другие платформенно-зависимые функции.

Scum vulkan что это. ww6sclzhzphejwwifmrnjypanrc. Scum vulkan что это фото. Scum vulkan что это-ww6sclzhzphejwwifmrnjypanrc. картинка Scum vulkan что это. картинка ww6sclzhzphejwwifmrnjypanrc

В отличие от DirectX 12, в Vulkan нет библиотеки для операций линейной алгебры, поэтому ее придется скачать отдельно. GLM – это удобная библиотека, разработанная для использования с графическими API, она часто используется с OpenGL.

Библиотека GLM – это header only библиотека. Скачайте последнюю версию и сохраните ее в удобном месте. У вас должна получиться подобная структура каталогов:

Scum vulkan что это. kqpjr9kf2rz74j9fnjjhiussyhq. Scum vulkan что это фото. Scum vulkan что это-kqpjr9kf2rz74j9fnjjhiussyhq. картинка Scum vulkan что это. картинка kqpjr9kf2rz74j9fnjjhiussyhq

Настройка Visual Studio

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

Scum vulkan что это. xnkux9qjrtt7o3vat0hbsu uymm. Scum vulkan что это фото. Scum vulkan что это-xnkux9qjrtt7o3vat0hbsu uymm. картинка Scum vulkan что это. картинка xnkux9qjrtt7o3vat0hbsu uymm

Scum vulkan что это. . Scum vulkan что это фото. Scum vulkan что это-. картинка Scum vulkan что это. картинка

Scum vulkan что это. 6niwfq. Scum vulkan что это фото. Scum vulkan что это-6niwfq. картинка Scum vulkan что это. картинка 6niwfq

Scum vulkan что это. . Scum vulkan что это фото. Scum vulkan что это-. картинка Scum vulkan что это. картинка

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

Scum vulkan что это. . Scum vulkan что это фото. Scum vulkan что это-. картинка Scum vulkan что это. картинка

Scum vulkan что это. trey0kgafh6nmeyl nu gtrfidc. Scum vulkan что это фото. Scum vulkan что это-trey0kgafh6nmeyl nu gtrfidc. картинка Scum vulkan что это. картинка trey0kgafh6nmeyl nu gtrfidc

Scum vulkan что это. . Scum vulkan что это фото. Scum vulkan что это-. картинка Scum vulkan что это. картинка

Добавьте include директории для Vulkan, GLFW и GLM:

Перейдите в Linker → General → Additional Library Directories и добавьте расположения lib-файлов для Vulkan и GLFW:

Scum vulkan что это. eppluk7srkedepelkopbcrnbtce. Scum vulkan что это фото. Scum vulkan что это-eppluk7srkedepelkopbcrnbtce. картинка Scum vulkan что это. картинка eppluk7srkedepelkopbcrnbtce

Scum vulkan что это. w0pf0kx1y07paart0yz4rk qiiy. Scum vulkan что это фото. Scum vulkan что это-w0pf0kx1y07paart0yz4rk qiiy. картинка Scum vulkan что это. картинка w0pf0kx1y07paart0yz4rk qiiy

Scum vulkan что это. hfntnkytptci7geoiph7z8srhwa. Scum vulkan что это фото. Scum vulkan что это-hfntnkytptci7geoiph7z8srhwa. картинка Scum vulkan что это. картинка hfntnkytptci7geoiph7z8srhwa

Введите имена lib-файлов Vulkan и GLFW:

Scum vulkan что это. . Scum vulkan что это фото. Scum vulkan что это-. картинка Scum vulkan что это. картинка

И измените настройки стандарта на C++:

Scum vulkan что это. qjwifwutaqy2lfqls2dvv5u oio. Scum vulkan что это фото. Scum vulkan что это-qjwifwutaqy2lfqls2dvv5u oio. картинка Scum vulkan что это. картинка qjwifwutaqy2lfqls2dvv5u oio

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

Не забудьте выбрать для компиляции 64-битный режим.

Scum vulkan что это. jqprev4hv rvcnqwlyd7mrqqycc. Scum vulkan что это фото. Scum vulkan что это-jqprev4hv rvcnqwlyd7mrqqycc. картинка Scum vulkan что это. картинка jqprev4hv rvcnqwlyd7mrqqycc

Scum vulkan что это. r2ynmi7. Scum vulkan что это фото. Scum vulkan что это-r2ynmi7. картинка Scum vulkan что это. картинка r2ynmi7

Проверьте, чтобы число расширений не равнялось нулю («X extensions supported» в консоли).

Поздравляем, вы готовы к работе с Vulkan!

Linux

Инструкции ниже предназначены для пользователей Ubuntu, но вы можете следовать им, изменив команды apt на подходящие вам команды менеджера пакетов. Вам нужен компилятор с поддержкой С++17 (GCC 7+ или Clang 5+). Вам также понадобится утилита make.

Vulkan Packages

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

Scum vulkan что это. zfkcj0o33wz50mfqe6drncwzw g. Scum vulkan что это фото. Scum vulkan что это-zfkcj0o33wz50mfqe6drncwzw g. картинка Scum vulkan что это. картинка zfkcj0o33wz50mfqe6drncwzw g

Как уже было сказано, Vulkan – это API, независимый от платформы, в котором нет инструментов создания окна для отображения результатов рендеринга. Чтобы использовать преимущества кроссплатформенности Vulkan и избежать ужасов X11, мы будем использовать библиотеку GLFW для создания окна. Есть и другие доступные библиотеки, например, SDL, но GLFW лучше тем, что она абстрагирует не только создание окна, но и некоторые другие платформенно-зависимые функции.

Мы будем устанавливать GLFW с помощью следующей команды:

В отличие от DirectX 12, в Vulkan нет библиотеки для операций линейной алгебры, поэтому ее придется скачать отдельно. GLM – это удобная библиотека, разработанная для использования с графическими API, она часто используется с OpenGL.

Библиотека GLM – это header only библиотека. Ее можно установить из пакета libglm-dev :

Компилятор шейдеров

Теперь, когда настройка почти завершена, осталось установить программу для компиляции шейдеров из GLSL в байт-код.

glslc: error: no input files

Мы подробно рассмотрим glslc в главе о шейдерных модулях.

Настройка проекта для makefile

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

Аналогично определите базовые флаги линкера в переменной LDFLAGS :

Запуск команды make test позволит убедиться, что программа работает успешно. При закрытии пустого окна программа должна завершиться успешным кодом возврата ( 0 ). У вас должен получиться готовый makefile, похожий на приведенный ниже:

MacOS

Инструкции ниже предназначены для тех, кто использует Xcode и менеджер пакетов Homebrew. Имейте в виду, что версия MacOS не должна быть ниже 10.11, а ваше устройство должно поддерживать Metal API.

Vulkan SDK

Самым важным компонентом для разработки программ с Vulkan является SDK. Он включает в себя заголовочные файлы, стандартные слои валидации, инструменты отладки и загрузчик функций Vulkan. Загрузчик ищет методы драйвера в рантайме (во время исполнения) так же, как это делает библиотека GLEW для OpenGL.

SDK можно загрузить с сайта LunarG. Для этого используйте кнопки внизу страницы. Вам необязательно создавать аккаунт, однако с ним у вас будет доступ к дополнительной документации.

Scum vulkan что это. gief nznnrhx zkfm1tpzt6gr8. Scum vulkan что это фото. Scum vulkan что это-gief nznnrhx zkfm1tpzt6gr8. картинка Scum vulkan что это. картинка gief nznnrhx zkfm1tpzt6gr8

Версия SDK для MacOS использует библиотеку MoltenVK. MacOS не имеет прямой поддержки Vulkan, а MoltenVK используется как прослойка для передачи вызовов в Apple Metal. Благодаря этому вы можете воспользоваться преимуществами отладки и производительности Apple Metal.

Scum vulkan что это. h4joznda2ouqvft499z9c7hjazk. Scum vulkan что это фото. Scum vulkan что это-h4joznda2ouqvft499z9c7hjazk. картинка Scum vulkan что это. картинка h4joznda2ouqvft499z9c7hjazk

Как уже было сказано, Vulkan – это API, независимый от платформы, в котором нет инструментов создания окна для отображения результатов рендеринга. Мы будем использовать библиотеку GLFW для создания окна. Есть и другие доступные библиотеки, например, SDL, но GLFW лучше тем, что она абстрагирует не только создание окна, но и некоторые другие платформенно-зависимые функции.

Для установки GLFW на MacOS мы будем использовать менеджер пакетов Homebrew:

В Vulkan нет библиотеки для операций линейной алгебры, поэтому ее придется скачать отдельно. GLM – это удобная библиотека, разработанная для использования с графическими API, она часто используется с OpenGL.

Библиотека GLM – это header only библиотека. Ее можно установить из пакета glm :

Настройка Xcode

Запустите Xcode и создайте новый проект Xcode. В появившемся окне выберите Application > Command Line Tool.

Scum vulkan что это. . Scum vulkan что это фото. Scum vulkan что это-. картинка Scum vulkan что это. картинка

Scum vulkan что это. d74zea5vtuxgjjmsdcz 7bhgbgw. Scum vulkan что это фото. Scum vulkan что это-d74zea5vtuxgjjmsdcz 7bhgbgw. картинка Scum vulkan что это. картинка d74zea5vtuxgjjmsdcz 7bhgbgw

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

Xcode покажет некоторые ошибки, например, библиотеки, которые не были найдены. Необходимо настроить проект так, чтобы устранить эти ошибки. Выберите ваш проект в панели Project Navigator. Откройте вкладку Build Settings и выполните следующее:

(На скриншоте на каждый параметр приходится по одному пути. Но, если следовать этому мануалу, вы получите по два пути на параметр. — Прим. пер.)

Конфигурация Xcode должна иметь следующий вид:

Scum vulkan что это. fzhlsiowhrmq. Scum vulkan что это фото. Scum vulkan что это-fzhlsiowhrmq. картинка Scum vulkan что это. картинка fzhlsiowhrmq

Осталось настроить несколько переменных среды. В панели инструментов Xcode перейдите в Product > Scheme > Edit Scheme. и во вкладке Arguments добавьте две переменные среды:

• VK_ICD_FILENAMES = vulkansdk/macOS/share/vulkan/icd.d/MoltenVK_icd.json
• VK_LAYER_PATH = vulkansdk/macOS/share/vulkan/explicit_layer.d

У вас должно получиться следующее:

Scum vulkan что это. . Scum vulkan что это фото. Scum vulkan что это-. картинка Scum vulkan что это. картинка

Итак, настройка завершена! После запуска проекта (не забудьте установить конфигурацию сборки Debug или Release) вы увидите следующее:

Источник

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

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