Vulkan и OpenCL скоро объединятся в один API


Unick-soft

Категории

  • В статье описана реализация метода отражения Фонга и анизотропной модели Варда с использованием OpenGL 3. Также приводится пример использования карты с коэфициентами для анизотропной модели. читать.
  • В статье описан метод создания статической библиотеки lib по dll. Вам не нужны исходники dll файла для создания lib-ы. читать.
  • В статье описан метод удалённого управления VLC плеером и использования RC интерфейса. Также приведён пример кода на C#. читать.

OpenGL vs Vulkan

Что такое Vulkan?

Vulkan — это новое API для создания 3D приложений. Его разработало Khronos Group, которая занимается и развитием OpenGL. Большой вклад в создание API вложила компания AMD. Хотя и многие другие компании работали над ним, например Microsoft, Apple, Google, Sony. Это API поддерживают такие создатели «железа» как: NVidia, AMD, Intel, Qualcomm, Imagination Technologies, ARM.

Чем отличается Vulkan от OpenGL

Статья на Википедии выделяет 4 основных отличия:

  1. Никаких глобальных состояний, все состояния привязаны к объектам.
  2. Состояния привязываются к буферу команд, а не к контексту, как в OpenGL.
  3. В OpenGL работа с памятью и синхронизация происходит не явно, в Vulkan разработчик будет иметь возможность контролировать это.
  4. Отсутствие проверки на ошибки в драйвере, для ускорения работы.


Исходя из того, что новое API появилось в наши дни и на протяжении 18 месяцев Khronos Group его разрабатывала в тесном контакте с ведущими IT компаниями мира, можно делать вывод, что это API должно лучше подойти для современных 3D приложений.

Ниже вы можете увидеть схему работы Vulkan:

Будет ли Vulkan на Mac OS X?

После того как спецификация Vulkan была опубликована, найти драйвера для современных видеокарт не составляет труда. Но это только для Windows и Linux. Так как вулкан это только кроссплатформенный API, который не требует особой поддержки со стороны видеокарт, обновив драйвер, вы можете его начать использовать (если конечно ваша видеокарта в списке поддерживаемых).

Для Mac OS X всё намного сложнее. В El Capitan поддержки Vulkan нет, хотелось бы ждать в следующих версиях, однако есть одно «но». Apple в El Capitan добавила поддержку своего API — Metal. Раньше он использовался только для устройств на iOS. Исходя из этого, а также учитывая тот факт, что Apple привыкло контролировать всё, что касается их устройств, можно сделать вывод, что Vulkan может и не появиться на Mac OS X.

Что дальше?

По моему мнению, что ждёт Vulkan во многом зависит от того, насколько активно его начнут использовать разработчики и поддерживать производители видеокарт. Если развитие OpenGL на этом остановится, то для новых приложений выбора не будет и их придётся разрабатывать на Vulkan. Но существуют тысячи приложений на OpenGL, которые никто так сразу не ринется переписывать на Vulkan. Ещё и вопрос с Mac OS X не ясен, так как это очень распространённая система в США. Если для Mac OS X будет Metal, под Windows — DirectX, а под Linux Vulkan, то Vulkan никак не облегчит разработку кроссплатформенных приложений.

Смотрим, насколько API Vulkan производительнее OpenGL

В марте этого года консорциум Khronos Group представил перспективный API Vulkan (раннее кодовое название — Next Generation OpenGL), который должен прийти на смену морально устаревшему OpenGL. Новый API благодаря низкоуровнему доступу к «железу» и более эффективному использованию ЦП должен существенно повысить производительность в использующих его играх. Сегодня у нас появилась возможность посмотреть, как сильно меняется ситуация с производительностью при использовании Vulkan. Соответствующее видео разместила на своём YouTube-канале компания Imagination Technologies.

реклама


В проигрываемой «демке» Gnome Horde был задействован прототип Vulkan, а также OpenGL ES 3.0. Как видим, когда на экране мало объектов, разница в производительности едва заметна, но стоит только «демке» начать отрисовывать колоссальное количество объектов, как производительность «Вулкана» начинает говорить сама за себя. Связана она в том числе и с более равномерной нагрузкой на все четыре доступных процессорных ядра, в то время как OpenGL-версия «демки» с трудом задействует два. Обратите внимание на общую разницу в использовании ресурсов процессора.

Opengl 4.* или vulkan?

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

OpenGL проектировался когда были другие архитектуры железа. Мультипроцессорность была только в теории, и считалась уделом суперкомпьютеров и ненужной для пользовательских ПК.
Можно привести аналогию: OpenGL == C++, Vulkan == асинхронный Assembler + hardware threads. Например, в C++ сейчас довольно много архитектурных косяков, которые пытаются решить новыми стандартами, объявляют какие вещи устаревшими, потому что они концептуально неверны и не подходят под современные реалии.
Но, при этом, вы можете всё то же самое написать на ассемблере, но нужно намного лучше понимать, как работает процессор и ОС, самому писать примитивы синхронизации, и т. п.

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

Мастер Йода рекомендует:  75 фактов, которые полезно знать перед тем, как выложить сайт

В итоге, я бы ответил так:

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

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

Если хотите писать игры не мирового класса, то учите готовые движки, Unity или Unreal. Они уже поддерживают за вас Vulkan, продумали за вас API и архитектуру.

API Vulkan идет на смену OpenGL


Консорциум Khronos Group опубликовал спецификации межплатформенного низкоуровневого API Vulkan 1.0, который предоставит приложениям прямой доступ к графическому процессору. Новый API поддерживает комплектующие AMD, NVIDIA, Intel, Qualcomm и Imagination Technologies, и первые две компании уже выпустили бета-версии драйверов для Windows.

Ресурс ComputerBase успел оценить эффективность Vulkan, сравнив его с DirectX 11 и OpenGL. Запуск The Talos Principle на компьютере с операционной системой Windows 10, процессором Core i7-4770K (3,5/3,9 ГГц), видеокартами GeForce GTX 980 Ti и Radeon R9 Fury X показал следующие результаты.

Отрыв от OpenGL хорошо заметен, однако на фоне DirectX 11 новый API пока бледнеет. Зато Vulkan поддерживает Linux, SteamOS, Tizen, Android и Windows, и он не требует обязательного использования Windows 10, как тот же DirectX 12.

Vulkan и OpenCL скоро объединятся в один API

Если вы столкнулись с проблемой низкого FPS в DOOM и вам хочется ее исправить, то вы пришли как раз по адресу.
Магическая штука Vulkan API поднимает FPS в среднем на 15-25 кадров (зависит от конфигурации вашего компа), превращая некомфортные 20-30 FPS в совершенно играбельные 50-60.

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

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

Vulkan API — графический интерфес программирования, созданный для отображения 3D и 2D графики на ваших мониторчиках. Проще говоря, эта шняга использует ресурсы вашего компа для построения графики в играх. OpenGL и DirectX из той же оперы.

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

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


Обновите драйвера вашей видеокарты до последней возможной версии. Если не знаете, как это сделать — спросите у Гугла [google.gik-team.com] , потому что инструкции по их обновлению довольно длинные, да и руководство совсем не про это.

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

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

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

Ваша видеокарта не может в Vulkan API. Такое тоже может случиться, но вероятность довольно мала. Если видеокарта подходит под минимальные требования — она точно может работать с Vulkan API. Если нет — откатываем игру к настройкам по умолчанию и мучаемся с OpenGL’ом

Если игра после перехода на Vulkan отказывается запускаться — вот способ перехода обратно на OpenGL:
Первым делом нужно зайти в папку сохранений, она находится по этому пути:
C:\Users\ \Saved Games\id Software\DOOM\base
Далее находим в ней файл DOOMConfig.local и открываем его блокнотом.
Ищем параметр r_renderapi и меняем в его значении 1 на (1 — VulkanAPI, 0 — OpenGL)
Сохраняем файл и закрываем его. Теперь игра должна запуститься.

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

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

Переход с OpenGL на Vulkan ускоряет DOOM на 20%

Поделитесь в соцсетях:

Bethesda выпустила патч для DOOM, добавляющий поддержку api Vulkan в игру.


Теперь в настройках игры можно выбирать какая из технологий (OpenGL или Vulkan) будет использоваться для рендеринга.

Первые тесты показывают, что на видеокартах ATI (в этом конкретном случае — RX 480) производительность игры повышается приблизительно на 20% независимо от разрешения.

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

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

Мастер Йода рекомендует:  SRI International заявила о намерении научить ИИ имитировать человеческую память

Doom: Что же выбрать Vulkan или OpenGL4.5?

Попытался играть на хваленном Vulkan и подумал, что реально железо слабое, на любых настройках просадки при самых маленьких замесах. Попробовал ради интереса на OpenGL4.5 и О ЧУДО — на минимальных с vsync не падает ниже 60, теперь буду повышать постепенно настройки.
В чем же прикол, вроде Vulkan должен тащить?
Ссылки приветствуются.

Win 8.1
Xeon X5650 2.67-2.94 GHz
GTX670 1215MHz
RAM 12 GB (Triple 3x4GB) 1333MHz

Что учить: OpenGL, Direct3D или Vulkan API?

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

Boyare
> Подскажите с чего проще начать изучение 3D?
OpenGL


> Что даёт лучшее представление о том, как вообще устроен 3D ускоритель, и откуда
> у современной графики уши растут.
Vulkan

> Помогите советом как быстрее и качественнее всё это дело усвоить
Советую DirectX11

Boyare
> Подскажите с чего проще начать изучение 3D?
DX9

> Что даёт лучшее представление о том, как вообще устроен 3D ускоритель, и откуда
> у современной графики уши растут.
DX12

> Помогите советом как быстрее и качественнее всё это дело усвоить
DX11

-Eugene-
> > Подскажите с чего проще начать изучение 3D?
> OpenGL

Некоторые советуют написать софтрендер, чтобы понимать откуда у графики уши.

laMer007
какой цвет — такой и АПИ 🙂

Boyare
> Подскажите с чего проще начать изучение 3D?


  • webproger
  • Пользователь

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

innuendo
> С математики

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

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

Люди делятся на тех кто хочет что-то изучать и на тех, кто изучает.

Boyare
> Подскажите с чего проще начать изучение 3D?
DX9, OpenGL 1.x.

Boyare
> Что даёт лучшее представление о том, как вообще устроен 3D ускоритель
Vulkan, DX12, CUDA.


Boyare
> и откуда у современной графики уши растут
Чтобы разобраться с современной графикой, нужны основы, которые существовали уже много десятков лет: рисование линий, треугольников, преобразования координат, буфер глубины, наложение текстур. В OpenGL 1.x это уже есть, бери и пользуйся. Ну и куча других фич фиксированного функционала, которые устарели и которые надо руками в шейдерах делать.

С шейдерами стало возможным на каждую вершину и на каждый пиксель запускать программу, вычисляющую координаты и цвет. С ними преобразование координат и другие фичи надо уже писать самому. Но буфер глубины и растеризация треугольников продолжают выполняться аппаратно вне шейдеров.
Если хочется реализовать базовые фичи типа растеризации, буфера глубины и т.п. самому, то тут только писать софтрендер без всяких GL\DX. Но в наше время практического смысла кроме понимания это не несёт — софтрендер на CPU слишком медленный.

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

В общем вся суть современной графики в том, что надо писать шейдеры и почти всё зависит от них. Если ты умеешь это делать, то практически можно делать это на любом графическом API. Только языки шейдеров разных API немного отличаются.
Основные различия между GAPI — это, как ты будешь создавать шейдеры и передавать данные в них — текстуры, буферы, константы (uniform) и собственно, сами вершины модели, которую нужно рисовать. Вот в Vulkan и DX12 эта часть сделана очень замороченно. Для создания текстуры, буфера или любого другого ресурса. Надо понасоздавать всяких пулов, выделять отдельно память, говорить, что вот этот кусок памяти у меня текстура такого-то формата и размера, а тот кусок — буфер. И в итоге из-за всей этой бюрократии в примере для рисования треугольника в Vulkan получилось 930 строк кода. Зато узнаешь об устройстве видеокарты лучше, и если всё это грамотно делать, то можно отрисовывать очень много объектов в десятки раз быстрее, чем в OpenGL. И всё предсказуемо: как сам напишешь, так и будет.
А в OpenGL драйвер может скрытно проводить некоторые манипуляции с памятью и приводить к побочным эффектам. Крупные движкописатели предпочли бы управлять ресурсами как в Vulkan вместо того, чтобы бороться с разными драйверами. Но новичку взять и сразу врубиться в Vulkan, мне кажется, нереально.

Я считаю, золотая середина для новичка, который не хочет сильно отставать от прогресса — это начать с DX11\OpenGL 3.x или выше. Это будет непросто, но реально, если найти хорошие уроки.

Boyare
> Помогите советом как быстрее и качественнее всё это дело усвоить, кто из вас
> через эти тернии уже прошёл.
Ну Vulkan ещё никто пока толком не знает. В соседней теме только научились квадрат выводить.
Я знаю OpenGL 4.5. Начинал с первой версии, потому что в электронном виде была по нему книжка на русском, а про версию 3.x ещё особо не было слышно. Шейдеры в этой книжке были, но в самом конце. В итоге, я изучил там много всего лишнего, то что потом пришлось забыть с переходом на шейдеры. Но зато вошёл в программирование графики легко и безболезненно. Я сразу же начал делать свой движок за стартовую точку взяв пример из книги, и потом пришлось совершить усилие, чтобы перевести его на шейдеры.

Мастер Йода рекомендует:  Какой сайт для проверки скорости интернета вам подходит

Boyare
> В перспективе хочу писать свои движок
Я уже 6 лет пишу свой движок и посвящаю ему всё своё свободное время. За это время в процессе хорошо изучился C++ и OpenGL. Но это 6 лет свободного времени и наверное ещё столько же меня ждёт. Ты готов посвятить этому столько свободного времени?

Boyare
Если ты планируешь 3д графику только для ПК Windows, то Directx 11 хватит за глаза. Просто и ясно.
Если планируешь Linux\Android\Ubunta\ то бери Юнити.
Потому что долго пилить будешь свой 3д движок. На это может уйти 3 и более лет.
А так взял Юнити(в ней обещают подержку Vulkan API) и готово 🙂

  • Boyare

  • Пользователь

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

Начну с конца и скажу, что не планирую делать «движок-убийцу Крайэнджин». Мне просто хочется сделать инди уровня Might and Magic 6-7-8, но, чтобы HD и чтобы управление не через попу, как в оригинале. Желание сделал это не на Юнити или UE4, а на чем-то своем, ламповом, для души чтобы. Да и действительно интересно понять, что там внутри чёрного ящика.

Думаю, как и вы, начать с OpenGL, кстати, что лучше под него учить — glsl или Cg? Мне этого APIдля таких задач, думаю, хватит с лихвой.

У меня еще такой вопрос: Если я изучу OpenGL мне с него проще будет в будущем на вулкан перейти, чем с DX, или без разницы?

Vulkan vs OpenGL ES на Andro >

Один из ведущих мировых производителей мобильных ГПУ, Imagination Technologies (ее PowerVR используются во всех последних чипсетах Apple, которые отличаются завидной стабильностью в производительности), продемонстрировала возможности интерфейса программирования Vulkan. Напомним, что он был анонсирован год назад, а полгода назад разработавший его консорциум Khronos объявил о поддержке Vulkan мобильными устройствами. Вчера стало известно о планируемом включении поддержки Vulkan в будущие версии Android, но на самом деле, при помощи специальных драйверов, разработанные под этот API приложения могут работать и на нынешней прошивке.

В качестве испытательного полигона выступила телеприставка Nexus Player. Она как раз работает под управлением Android и оснащена процессором Intel Atom со встроенным ГПУ PowerVR G6430 (такой же в процессоре Apple A7 у iPhone 5S).

Как мы уже рассказывали, главным достоинством низкоуровнего API Vulkan является прямой доступ к аппаратным ресурсам процессора и, как следствие, возможность распределения нагрузки ЦПУ между несколько его ядрами и увеличения скорости обработки ими вызовов отрисовки. До сих пор преимущество такого подхода демонстрировались на настольных системах (см. результаты бенчмарков Star Swarm и 3DMark API Overhead) — давайте посмотрим на возможности мобильной версии Vulkan. Слева вы видите рендеринг в режиме реального времени специализированного бенчмарка Gnome Horde, написанного с использованием API Vulkan, а справа — с использованием OpenGL ES 3.0:

Как видите, по мере увеличения объектов в сцене (и соответственно вызовов отрисовки, выполняемых ЦПУ), возможности 4-ядерного Intel Atom раскрываются в полной мере — благодаря Vulkan он вполне успешно справляется с отрисовкой 400 тысяч маленьких гномов и других объектов за одну секунду (13,500 вызовов отрисовки в одном кадре, на скорости 30 к/с).

Напомним, что в свое время низкоуровневую API Metal для своей мобильной операционной системы iOS (а позднее и для десктопной Mac OS X) представила Apple, тогда как Microsoft готовится к релизу мобильной версии Windows 10 (с поддержкой низкоуровнего API DirectX 12). Таким образом, все три основные мобильные платформы, Android, iOS и Windows, почти одновременно вступают в соперничество между поддерживаемыми ими низкоуровневыми API, позволяющими добиться более реалистичной графики в мобильных приложениях.

Насколько значительным будет прогресс непосредственно в играх предсказать сложно: пока результаты комплексных графических тестов (как десктопных, которые мы упоминали выше, так и мобильного GFXBench 3.0 Metal) существенно уступают специализированным. В конечном счете все будет зависеть от того, как много объектов (например, в виде разлетающихся при взрыве осколков) задействовано в игровой сцене. Можно предположить, что наиболее ощутимой разница будет в стратегиях вроде Total War: Attila, где на полях сражений самостоятельно (но под вашим чутким руководством) сражаются тысячи воинов.

ARM демонстрирует превосходство Vulkan над OpenGL ES

Низкоуровневый интерфейс Vulkan постепенно набирает популярность среди разработчиков программного обеспечения и игр. Начинают появляться первые игры с использованием этой технологии как на компьютерах, так и на мобильных устройствах, а в Android 7.0 Nougat компания Google и вовсе реализовала её поддержку на системном уровне. Недавно разработчики графического движка Unity рассказали, что на устройствах под управлением Android игры с поддержкой Vulkan API в среднем показывают на 35% большую частоту кадров, чем в случае с OpenGL ES 3.1. Теперь компания ARM, которая является разработчиком ядер практически для всех мобильных процессоров, опубликовала видео, в котором демонстрирует превосходство Vulkan над OpenGL ES.

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

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