Мене самостійно навчають на C ++, не маючи офіційної освіти, і протягом останніх 15 років я навчився як OpenGL 1.0, так і через Modern OpenGL та DirectX 9c, 10 і 11. Я не потрапив у DirectX 12 і хотів спробуй мою руку на Вулкан. Я виконав лише кілька основних навчальних посібників, щоб намалювати простий трикутник або простий прядильний куб з Вулканом. Як і в DirectX 11 і OpenGL 3.3+, я написав повністю працюючі двигуни для 3D-ігор і навіть використовував їх для створення простих ігор.
Я б сказав, що це залежить від загального середовища людини, яка навчається. Якщо ви просто вступаєте в програмування 3D-графіки, я б сказав для початківців перейти на OpenGL або DirectX 11, оскільки там є багато навчальних посібників, ресурсів, прикладів і вже працюючих додатків. Навчання 3D-графіки - це аж ніяк не легкий предмет.
Якщо ми абстрагуємось від аспекту програмування цього і просто зосередимось на уявленні про те, які методи використовуються, що передбачають різні рівні математики, що ведуть до наборів даних, структур даних та алгоритмів; є багато, що ви повинні знати і розуміти спочатку, перш ніж ви зможете навіть спробувати створити 3D-ігровий движок або ефективно використовувати існуючий.
Тепер, якщо ви вже розумієте всю математику та теорію, що стоїть за нею, і у вас є досвід програмування, ви можете використовувати вже наявні API, бібліотеки та додатки, такі як Unity або Unreal Engine, і просто написати вихідний код і сценарії, необхідні для того, щоб ваша програма працювала .
Отже, з мого власного розуміння і того, як я бачу, це саме це, якщо ви шукаєте побудувати швидку гру саме заради побудови гри; продовжуйте роботу з уже наявними рамковими роботами, які б зробили ваш час виготовлення значно меншим. З іншого боку, якщо ви хочете зрозуміти внутрішню роботу того, як розробляються ігрові двигуни / фізика двигуни / анімаційні двигуни та симулятори, і хочете створити їх самостійно, то тут ви маєте вибір між вибором свого API, такого як DirectX, OpenGL або Vulkan. Одним із визначальних факторів тут також будуть ваші існуючі знання з програмування. Що я маю на увазі під цим, якщо ви нічого не знаєте про багатопотокові, синхронні проти асинхронні дзвінки, огорожі пам'яті, перегони даних, семафори та паралелізм (паралельне програмування),
Я згадую це, тому що якщо ви не знаєте, як правильно керувати пам’яттю разом із потоками та часом доступу; Вулкан укусить тебе в дупу! Де OpenGL та DirectX будуть тримати вашу руку весь час, споживаючи набагато більше процесорної потужності.
Тепер, якщо ваш рівень знань з програмування пристойний, і у вас є наступні математичні фони, які передбачають усі рівні алгебри, геометрії, тригонометрії, булевої алгебри, ймовірності, статистики, вектор - алгебра на основі матриці, обчислення I, II, .... Інфінті (лол). Векторне обчислення, лінійна алгебра, системи лінійних рівнянь, аналітична геометрія з векторним обчисленням множинних змінних обчислень, теорія чисел і множин, набори даних і структури, обчислювальний аналіз, обчислювальний та алгоритмічний дизайн. Тоді ви можете зрозуміти, що потрібно, щоб зробити фактичний ігровий двигун, і це без будь-якої прикладної математики чи будь-яких рівнянь фізики, які вам знадобляться. Коли у вас є цей досвід і достатній досвід програмування, особливо управління пам'яттю та арифметикою вказівника, ви можете приступити до створення свого Game Engine.
Тому справа в тому, що ви повинні зрозуміти всі аспекти того, що потрібно зробити для створення ігрового двигуна, щоб зробити розширене графічне програмування. Якщо ви робите лише двовимірну графіку, то життя не надто складно, оскільки ви можете зробити це в Python без жодного з вищезгаданих API! Але якщо ви хочете бути серйозними та спроектувати повноцінний Power House Game Engine, який є надійним з багатьма наборами функцій, то вибір тут буде або C, або C ++, і використовувати OpenGL, Direct X або Vulkan. Будь-яка з них була б просто чудово. Тепер, якщо ви будуєте Двигун від Scratch і шукаєте найефективніший двигун із найменшою витратою ресурсів, тоді ви хочете обрати Вулкан. Але якщо ви йдете цим маршрутом, ви повинні хоча б знати все, що я згадував вище, і деякі!
Отже, як бачите, Вулкан не дуже орієнтований на початківців програмістів у цій галузі. Ви повинні мати широкі знання з усієї математики, парадигм програмування, усіх різних типів наборів даних та алгоритмів, включаючи різьблення, синхронізацію пам'яті, паралельне програмування. І навіть тоді це просто для того, щоб програма завантажила на екран простий 2D трикутник. Що можна зробити приблизно в 100 рядках коду в OpenGL або 250 рядків коду в DirectX, це майже 1000 рядків коду у Вулкані!
Vulkan залишає все, що вам належить, як ви відповідаєте за всі аспекти того, як ви використовуєте Vulkan у вашій програмі. Немає руки, вона не перешкоджає вам, це дозволить вам застрелити себе в ногу або дозволить повісити себе, купуючи рекурсивну петлю!
Тепер це не означає, що початківці або ті, хто є новим у цій галузі, не повинні вивчати Вулкан, але те, що я б запропонував для них, це таке: спочатку вивчіть достатньо OpenGL та або DirectX, щоб змочити ноги, щоб побачити, як базовий додаток побудований просто для створення простого трикутника або прядильного куба. Ознайомтеся з їх API та їх повторюваними моделями їх структур. Дізнавшись про те, що ви можете навчитися Вулкану на паралельній стороні, тоді таким чином ви можете бачити, як кожен з трьох виконує одне і те ж завдання, але знаєте, як вони це роблять по-різному, то ви також можете порівняти результати між різними API та з там ви зможете зробити вибір, який вам більше до вподоби. Цей метод також надасть вам інший інструмент у вікні інструментів, і ви навіть можете написати свою заявку на підтримку всіх 3 та мати "
Зрештою, все залежить від того, хто саме обирає маршрут, яким він хоче спуститися, і звідти їхній успіх визначатиметься відданістю, постійним навчанням, наполегливою роботою, спробами та помилками, а головне - їх невдачами. Якщо ви не зазнаєте невдач, то ви не маєте успіху! Ви успішні, лише якщо не змогли, знайшли свою помилку (помилки), виправили їх, продовжили роботу і повернулися назад і зробили це заново!