Оффтоп Anton Nadtoka
1 002

Игровой движок : Графика

Есть основных 3 вида графики в играх: 2D - в одной плоскости, 2.5D - изометрическая графика и 3D - объемная графика в пространстве. Есть еще другие варианты, но основных их 3.
В закладки

Мы видим изображение на экране, его подготавливает специальное устройство - графический процессор (GPU). Бывают случаи, когда графику просчитывает CPU (центральный процессор) - это называется Software Render, но такой вариант используется редко.

GPU - графический чип (видеокарта), Driver - драйвер конкретного чипа, Graphic API - графическое API

Именно через API программист общается с GPU. Существуют разные API, которые можно использовать. На текущий момент это:

  • OpenGL и его урезанная мобильная версия OpenGL ES, работает на разных платформах
  • DirectX - это графический API созданный для Windows
  • Metal - созданный и продвигаемый Apple для своих ОС, работает только на iOS и OSX
  • Vulkan - созданный Khronos Group как новый API, работает не на всех платформах

Если игра должна работать на нескольких платформах, то необходимо поддерживать несколько графических API. Это увеличивает трудозатраты на разработку движка. К примеру Apple решила отказаться от OpenGL в пользу своей разработки Metal и чтобы игра также работали как и раньше на этой платформе - необходимо использовать Metal. Есть еще вариант, которые используют некоторые компании. На примере игры Cup Head - игра разработана с использованием DirectX, а поддержка других платформ Linux\OSX поддерживается через Wine.

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

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

Каждый треугольник оперирует с координатами XYZ, но если игра 2D - то координата Z обычно 0 и не передается, а все решает порядок отрисовки элементов.

Чтобы не разбираться конкретно с API, можно использовать различные библиотеки, которые абстрагируют от прямых вызовов API. К ним можно отнести: SDL, GLFW, SFML и другие. Можно будет скачать любую из них и попробовать в действии, в интернете достаточно различных уроков и примеров.

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

{ "author_name": "Anton Nadtoka", "author_type": "self", "tags": [], "comments": 12, "likes": 21, "favorites": 36, "is_advertisement": false, "subsite_label": "flood", "id": 21955, "is_wide": false }
{ "id": 21955, "author_id": 52349, "diff_limit": 1000, "urls": {"diff":"\/comments\/21955\/get","add":"\/comments\/21955\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/21955"}, "attach_limit": 2, "max_comment_text_length": 5000 }

12 комментариев 12 комм.

Популярные

По порядку

Написать комментарий...

Maximus Chabanyuk

14

Хорошо пошла статейка, только начала втягивать, как закончилась...😒

Ответить

Бури Бура

2

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

Ответить

Key Don

Бури
1

Неоднократно освещалось на множестве игровых ресурсов, в тч в рекламках нвидии.
Достаточно вбить в гугл.

Ответить

Алексей Круташинский

0

А как же рассказать про движок и их разнообразие и особенности? :)

Ответить

Anton Nadtoka

Алексей
1

Разнообразие движков, которые сейчас в основном используется - можно посчитать на пальцах одной руки. Про конкретный из них можно ознакомится на википедии и других статьях. Кратко списочек я писал ранее, можете посмотреть - это Unity, Unreal Engine и Godot. Остальные по вкусу.

Ответить

Станислав Петров

Anton
1

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

Ответить

Илья Наполов

0

а поддержка других платформ Linux\OSX поддерживается через Wine

Ага, только поддерживается коммьюнити, но почти никогда самими разработчиками

Ответить

Nikolay Seskin

0

Очень хорошо написано, но мало!

Ответить

Коля Мартынов

0

Уж простите, но статья ужасна:
1. Никакой 2.5D графики не существует. Есть тип камеры псевдо-3D (то есть 2D, который косит под 3D). Я бы посмотрел как вы собираетесь работать с 2,5 координатами.
2. Порадовало описание API: Metal, DirectX платформы указал, а OpenGL и Vulkan - ну они есть. *Facepalm*
3. Пример с "Cup Head", в котором "поддержка других платформ Linux\OSX поддерживается через Wine". Правда ни на той, ни на другой платформе игра не выходила, но зачем что-либо проверять.
Про отрисовку текста не знал, как и про библиотеки абстрагирования, но, к сожалению, прочитав первую половину статьи даже не знаю, можно ли верить этой информации.

Ответить

Anton Nadtoka

Коля
0

1. 2.5D графика как термин существует, можете в гугл забить и разобраться. Отрисованные спрайты в изометрии, которые рисуются в одной плоскости как и 2D.
2. OpenGL, Vulkan - кроссплатформенные. OpenGL на iOS\OSX уже будет не доступен через некоторое время. Vulkan доступен не везде и с определенной версии.
3. Если бы я не играл, то не писал бы об этом. На OSX играл на 2-х компьютерах. Может официально в стиме его нет, но если поискать - то можете найти в первой десятке ссылок.
Если хорошо разбираетесь в вопросах геймдева - можете написать пару своих статей.

Ответить

Коля Мартынов

0

Ну, поехали по второму кругу:
1. Из вики: "... techniques used to cause images or scenes to simulate the appearance of being three-dimensional (3D) when in fact they are not, or gameplay in an otherwise three-dimensional video game that is restricted to a two-dimensional plane or has a virtual camera with a fixed angle" То есть это не отдельный "вид графики", а подвид 2D.
2. Я просто не понимаю что за пренебрежение. OpenGL - кроссплатформенный API, который поддерживается Windows, macOS, iOS, Android, Unix-like системах и много где ещё. А вы говорите "работает на разных платформах". Вау, это так много для меня прояснило. То же касается и Vulkan, который к слову считается next generation OpenGL. А что по платформам? "Работает не на всех" Шикарно! Так у нас в списке ни один API не работает на всех платформах, почему же у DirectX и Metal поддерживаемые указаны? Или слишком много букв пришлось бы печатать: Android, iOS, Linux, macOS (неофициально, но всё же), Windows, Nintendo Switch, Tizen.
3. Порта нет! Да, можно запустить с помощью Wine, но это не предусматривается разработчиком и поддержку в случае возникновения проблем вам не окажут. Кстати, в стиме вроде бы есть игры, которые имеют официальный wine-порт. Если бы пример был по одной из них, то претензий у меня не возникло бы.
Я полный ноль в геймдеве, но в компах немного да понимаю (как и Вы, в этом я не сомневаюсь). Просто если кто-то из несведущих в этой теме прочитает статью, то у него может возникнуть путаница в голове из за вот таких ошибок. Уж простите, что докапываюсь к всякой ерунде. Как я понял, Вы занимаетесь разработкой под macOS/Windows и остальные платформы Вам не очень-то интересны. А мне, линуксоиду, просто несколько обидно, что те аспекты статьи, что хоть как-то касаются этой платформы совершенно её игнорируют :)
UPD: ещё и написал не ответом к сообщению, вот дурачок D:

Ответить
0

Прямой эфир

Подписаться на push-уведомления
[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } } ]