Статья опубликована в рамках: Научного журнала «Студенческий» № 1(171)
Рубрика журнала: Технические науки
Секция: Технологии
Скачать книгу(-и): скачать журнал часть 1, скачать журнал часть 2, скачать журнал часть 3, скачать журнал часть 4, скачать журнал часть 5, скачать журнал часть 6, скачать журнал часть 7, скачать журнал часть 8
СРАВНЕНИЕ ГРАФИЧЕСКИХ API: DIRECTX, VULKAN, OPENGL
АННОТАЦИЯ
На 2022 год в мире существует более 30 моделей видеокарт серии RTX от Nvidea. У каждой своя архитектура, свой процессор внутри, количество памяти. Для того, чтобы разработчикам не пришлось прописывать поведение взаимодействия между программным обеспечением видеокарты и приложением, были придуманы графические API. Они значительно упрощают жизнь не только программистам, но и конечным пользователям. Тема данной статьи – анализ современных графических интерфейсов, а именно DirectX, OpenGL и Vulkan.
ABSTRACT
For 2021, there are more than 30 models of Nvidea RTX series graphics cards in the world. Each has its own architecture, its own processor inside, the amount of memory. To prevent developers from having to write the interaction behavior between the video card software and the application, graphics APIs were invented. They greatly simplify life not only for programmers, but also for end users. The topic of this article is an analysis of modern graphical interfaces, namely DirectX, OpenGL and Vulkan.
Ключевые слова: технологии, видеокарты, графический интерфейс, API, DirectX, Vulkan, OpenGL, графика.
Keywords: technologies, video cards, graphical interface, API, DirectX, Vulkan, OpenGL, graphics.
API, или Application Programming Interface – программное обеспечение для связи между компьютерами или компьютерными программами. На русский аббревиатуру можно перевести как интерфейс программирования приложения, что в дальнейшем тексте будет сокращено до интерфейса.
В широком понимании API – набор инструкций и функций в виде интерфейса для создания коммуникации между приложениями. Без API возникает необходимость вручную прописывать логику отправления и получения запросов на сайте в случае с интерфейсами для сетевых программ.
Графический API позволяет настроить поведение видеокарты. Без них программистам бы пришлось прописывать поведение приложения для каждой видеокарты. Но благодаря графическим интерфейсам процессор внутри видеокарты может понять, как он должен отрисовать кадр или его часть. В настоящее время эта технология позволяет применять несколько графических процессоров для разбиения экрана на части, повышая максимальное разрешение.
Одним из первых API был DirectX от компании Microsoft. DirectX представляет собой набор программ: Direct3D, DirectDraw, DirectMusic, DirectPlay, DirectSound и другие. Название серии разделяется на две смысловые части: direct переводится как «прямой, непосредственный», поясняя, что графический интерфейс дает прямой доступ к программе, а X можно заменить на название любого продукта из серии. XBOX от Microsoft использует DirectX и заимствует «X» для демонстрирования связи.
На данный момент существует DirectX 12. Существует много версий DirectX и даже 12 серия подразделяется на различные версии в зависимости от серии видеокарт: для видеокарт GeForce 3000 Series существует уровень поддержки Direct3D 12_2, а для GeForce 2000 – только 12_1.
Говоря о версиях, важно отметить, что новая версия графического интерфейса не способна оптимизировать приложение лучше, если оно не было настроено специально под соответствующую версию. Графические интерфейсы дают разработчикам инструментарий, который дает им возможность использовать новые технологии или внедрять улучшенную шейдерную модель.
Шейдер – программа, которая используется в трехмерной графике для определения окончательных параметров объекта или изображения, может включать в себя описание поглощения или рассеяния света, наложения текстуры, отражения и преломления, затенения, смещения поверхности и множества других параметров. Шейдеры бывают вершинными, геометрическими, пиксельными. Углубляться мы в них не будем, но можно упомянуть, что для написания шейдеров используются особые языки программирования, и для DirectX есть свой – HLSL (High-Level Shader Language).
С появлением DirectX 12 разработчикам стали доступны возможности, из которых можно выделить улучшение мультипоточности и внедрение технологии Raytracing. Последняя позволяет обрабатывать преломления лучей и отражения внутри видеокарты, что позволяет увидеть более реалистичные изображения.
OpenGL, или Открытая Графическая Библиотека – мультиплатформенный API. В отличие от DirectX, созданного исключительно под продукты Microsoft, OpenGL распространяется на Linux, macOS и том же Windows. То есть, если разработчик хочет оптимизировать игру более, чем на одну платформу, то он может использовать этот API.
OpenGL имеет открытый исходный код, который можно найти на GitHub. Написан на языках программирования C и OpenGL Shading Language. Последний имеет преимущество перед другими шейдерными языками – переносимость между платформами.
У OpenGL есть ряд особенностей. Так как заголовочные файлы остались на уровне первой версии, то авторы могут накладывать свои собственные библиотеки, а также привязывать разные языки программирования для удобства. Среди списка официальных языков, которые можно привязать, можно отметить Fortran 90, Java, Python, Ada, C#, C++, Pascal.
OpenGL вышел раньше, чем DirectX, являясь при этом универсальным, поэтому в эпоху зарождения домашнего гейминга, создать универсальный интерфейс не было простой задачей. Тем не менее, OpenGL был достойным конкурентом для DirectX, получил 4 крупных обновления и улучшался на протяжении всего этапа существования, научившись в последней итерации переносить процесс тессаляции с центрального процессора на графический. Тессаляция добавляет геометрическому объекту полигоны, делая его более объемным и детализированным.
На смену OpenGL в 2016 году пришел Vulkan. Изначально имевший название «OpenGL next generation», этот API является масштабной доработкой своего предшественника. Vulkan имеет ряд особенностей, таких как возможность писать шейдеры на других языках, кроме GLSL (OpenGL Shading Language) или кроссплатформенность.
В этот раз Khronos Group смогли оптимизировать API для работы с большинством существующих систем. Сюда входят привычные Linux, macOS, Windows, а также Android и IOS. Новыми стали такие системы, как Raspberry PI, Tizen (облачная платформа Stadia от Google) и Fuchsia (операционная система от Google), Nintendo Switch и vxWorks.
Для Vulkan существует множество языков обертки. Это промежуточные слои между программой и API. Служит для упрощения работы. Например, одна из библиотек обертки для Vulkan существует для написания приложения с нуля – Anvil. Или MoltenVK – поможет в работе с платформами Apple.
Разработчики сами выбирают, с каким интерфейсом будут работать во время создания приложения. Для игры «Doom Eternal» IdSoftware выбрали графический интерфейс Vulkan, оптимизировав его таким образом, что отдельным энтузиастам удалось добиться показателя более, чем в тысячу кадров в секунду (FPS).
Современные игровые движки вроде Unreal Engine и Unity позволяют сменить графический интерфейс во время процесса рендеринга, чтобы программисты могли оценить, как работает игра с отдельным инструментом.
На рисунке 1 представлен график сравнения работы видеокарты GeForce RTX 2070 Super в режиме совместимости с различными графическими интерфейсами в программе 3DMARK в тесте создания объектов (Draw Calls).
Рисунок 1. Сравнение графических интерфейсов в тесте «Draw Calls»
По графику видно, что в режиме мультипоточности DX 11 выдает вдвое больше баллов, но при этом уступает почти в восемь раз DirectX 12, потому что современные API лучше работают с множеством процессоров.
Одним из показательных примеров развития графических интерфейсов может служить игра «Dota 2». Игра поддерживает множество API, которые пользователь может менять во время игрового процесса. Рекомендуемым является DirectX 11, но также доступны Vulkan, OpenGL и DirectX 9.
Из всех представленных худшие показатели у DirectX 9: сильнее нагружает процессор, хотя одно из требований для графического интерфейса – перераспределение ресурсов с целью нагрузки видеокарты и освобождения центрального процессора. При таком подходе процессор сильнее греется и быстрее приходит в негодность. OpenGL проигрывает новым API в FPS и слабее всех нагружает видеокарту. При этом процессор также работает слабее, но это отражается на быстродействии приложения. DirectX 11 и Vulkan работают почти одинаково хорошо, и различия можно найти не критические.
В итоге развитие технологий приводит к универсальности. Современные графические интерфейсы работают примерно на одном уровне, в независимости от приложения, а качество работы теперь зависит лишь от оптимизации и технических характеристик компьютера. При сравнении современных API можно прийти к выводу, что DirectX 12 и Vulkan находятся на одном уровне и позволяют испытать одинаковый пользовательский опыт. Различия в работе с приложениями зависит от разработчиков, поэтому иногда пользователи могут испытывать проблемы в играх, вроде «багов» или «фризов». Исправлением таких ошибок является работа с кодом приложения и оптимизация его под графический интерфейс в рамках которого производится работа.
Список литературы:
- Vulkan API. [Электронный ресурс] — URL: https://www.vulkan.org/
- List of DirectX 12 games. [Электронный ресурс] – URL: pcgamingwiki.com
- DirectX. [Электронный ресурс] – URL: https://microsoft.fandom.com/ru/wiki/DirectX
- Что такое API. [Электронный ресурс] – URL: https://habr.com/ru/post/464261/
Оставить комментарий