💳 Термінова новина! Trustee Plus — найкраще рішення для розрахунку криптою 👉
Марія БровінськаУвійти в ІТ
7 листопада 2022, 12:12
2022-11-07
Хто такий C++ розробник і як за допомогою цієї мови створюються GTA, The Witcher, StarCraft, TES
dev.ua продовжує розповідати про професії в IT, щоб допомогти визначитися з тим, яку спеціальність варто обирати кожному початківцю чи світчеру. Сьогодні Станіслав Кутельмах, UE4 (C++) Developer у Pingle Game Studio, розповідає, як це — писати софт для ігор на одній із найпоширеніших мов у геймдеві.
С++ був створений у 1983 році, з його допомогою розробили велику кількість програм. Сьогодні популярність С++ зменшилась, але своєї актуальності він не втратив.
Сфера використання С++ дуже широка: це може бути прикладне ПЗ, операційні системи, системи реального часу (наприклад, медичні прилади), драйвери, сервери, комп’ютерні ігри тощо.
Що робить C++ розробник
Обов’язки С++ розробника, окрім спільних для всіх навичок — як-от написання коду, його дебаг і рев’ю — мають свої нюанси. С++ є проміжною мовою програмування — на ньому можна писати як low-level, так і high-level код.
Low-level дає змогу напряму спілкуватись із hardware, а high-level дає змогу використовувати абстракції. Доступ до hardware дає більшу гнучкість для оптимізації та написання ефективного коду. Проте такий код є складнішим у його написанні. Можна легко зробити баг, який буде важко простежити та пофіксити, тому треба виділяти більше часу на планування завдань.
Особливості використання С++ в геймдеві
У геймплей-девелопменті С++ використовується десятиліттями. Більшість культових ігор, які ви знаєте, наприклад GTA, The Witcher, StarCraft, TES, написані з його допомогою.
Зазвичай гра не розробляється з повного нуля, попередньо вже є мінімальне програмне рішення для цього — ігровий рушій. Він уже містить бібліотеки для розроблення геймплейної логіки, рендеру, взаємодію через мережу тощо. Також працювати з рушієм зручно не тільки програмістам — аніматори легко можуть додавати свої анімації, художники — свої моделі.
Якщо порівнювати використання С++ із геймдевом та іншими нішами, то в ігровій індустрії є певні особливості девелопменту. Щоби розробити новий функціонал для гри (наприклад, додати нового боса, з яким гравець буде битись за скарб), дизайнери спочатку мають придумати його вигляд, характерні особливості, спеціальні здібності. Але не факт, що те, що працює на папері, буде працювати й в ігровому світі.
Тому спочатку створюється ігровий прототип: якесь рішення, створене нашвидкуруч. Його завдання — зрозуміти, чи нова фіча буде працювати, чи буде цікаво грати. І таких прототипів може бути безліч. Цикл «ідея — прототип — висновок» буде виконуватись доти, доки не буде створене щось «іграбельне».
Наприклад, бос має занадто очевидну логіку, його легко вбити. Рішення: варто додати йому ще якісь вміння та покращити АІ. Приклад: механіка збирання трав занадто нудна. Рішення: її треба зробити веселішою. Приклад: розроблена механіка блокування атаки щитом занадто повільна для такої динамічної гри. Рішення: доведеться її вирізати. Такий «цикл» мають не тільки програмісти. Дизайнери, художники, аніматори теж постійно ітерують, щось змінюють. І цю роботу постійно треба з ними синхронізувати.
Наприклад, анімація вичакловування вогняної кулі занадто довга. Треба, щоб аніматори зробили її коротшою — тепер вона занадто коротка, треба створити якісь виразніші візуальні ефекти. Візуальних ефектів немає? Доведеться виділити рендер-програміста, щоб їх написати.
Коли стає зрозуміло, що в грі буде використовуватись, фічу «переписують на чистовик», шліфують і покращують її до тих пір, поки її буде не соромно додати до своєї гри.
Спеціалізації С++ програмістів
Описуючи особливості геймдев С++ програміста, можна виділити декілька спеціалізацій.
Геймплей-програміст. Він відповідає за реалізацію ігрових механік в іграх: стрільба, пересування в шутерах, крафтинг і прокачування в РПГ тощо. Також розробляє штучний інтелект для ігор: «мізки» для внутрішньоігрових персонажів, за допомогою яких персонажі вирішують, що їм робити, куди йти та кого атакувати. Геймплей-програміст більше працює з високорівневим і менше — з низькорівневим кодом.
Програміст ігрового рушія. Він розробляє і підтримує ігровий рушій. Старається зробити код максимально швидким та ефективним. Закладає кодову архітектуру, яку будуть використовувати геймплей-програмісти. Займається підготовкою різноманітних інструментів для розроблення гри: редактор рівнів, редактор анімацій, інструменти для профайлінгу й оптимізації (коли треба зрозуміти, чому в гри низький FPS, і як його підняти).
Рендер-програміст створює «вигляд» гри, тобто створює алгоритми, за допомогою яких модельки персонажів та ігровий світ будуть вимальовуватись на екрані користувача. Працює з такими інструментами, як DirectX, OpenGl, Vulkan.
Навички, потрібні для роботи С++ девелопером
Геймплей-програміст повинен мати таку базу знань:
Знання С++ та вміння працювати з багатопотоковістю.
Знати та вміти використовувати патерни проєктування.
Знання векторної алгебри.
Знання алгоритмів і здатність їх оптимізувати в разі необхідності.
Знання скриптової мови (необов’язково, але часто необхідно)
Потрібно бути знайомим із ринком індустрії, розуміти, як перенести ігрову логіку, яку придумав гейм-дизайнер, на комп’ютерний код.
Програміст ігрового рушія повинен мати таку базу знань:
Усі навички геймплей-програміста
Більш поглиблені знання в написанні кодової архітектури.
Знання платформи, під яку планується розроблення гри (наприклад Windows, Android, iOS, Xbox, PlayStation, Switch): як на цю платформу зібрати гру, певні лімітації платформи, можливі оптимізації під цю платформу, API для взаємодії зі специфічними для платформи речами.
Рендер-програміст також займається ігровим рушієм, але в основному частиною, яка стосується зображення гри, тож він повинен мати такі навички:
Усі навички геймплей-програміста.
Знання платформи, під яку планується розроблення гри, але вже в контексті графіки та відеокарти.
Знання одного з API для роботи з графікою: DirectX, OpenGl, Vulkan
Де вчити С++?
Найперше, що необхідно для того, щоб стати С++ розробником, — це мотивація та бажання. Інформації із С++ — величезна кількість. Курси легко можна знайти на Coursera або Udemy, на Youtube теж є багато інформації. Хороші навички дає розв’язування задач на таких платформах, як LeetCode і CodinGame.
Часто найкращий спосіб вивчити щось нове в програмуванні — це спробувати це написати та «погратись»: щось змінити, щось додати. Не завжди буде все виходити, будуть помилки та баги. Інколи ви не будете розуміти, чому воно не працює, або працює не так, як хочете. Але крок за кроком буде приходити розуміння.
Так отримують власний досвід.
УЧАСТЬ В АЗАРТНИХ ІГРАХ МОЖЕ ВИКЛИКАТИ ІГРОВУ ЗАЛЕЖНІСТЬ. ДОТРИМУЙТЕСЯ ПРАВИЛ (ПРИНЦИПІВ) ВІДПОВІДАЛЬНОЇ ГРИ.
Ліцензія видана ТОВ "СЛОТС Ю.ЕЙ." на провадження діяльності з організації та проведення азартних ігор казино у мережі Інтернет від 15.09.23 (рішення КРАІЛ №245 від 31.08.2023); ТОВ "СЛОТС Ю.ЕЙ." – на провадження діяльності з організації та проведення азартних ігор казино у мережі Інтернет від 26.04.2021 (рішення КРАІЛ №150 від 12.04.2021); ТОВ «СПЕЙСИКС» – на провадження діяльності з організації та проведення азартних ігор казино у мережі Інтернет від 08.02.2021 (рішення КРАІЛ №34 від 02.02.2021); ТОВ «ГЕЙМДЕВ» – на провадження діяльності з організації та проведення азартних ігор казино у мережі Інтернет від 16.02.2021 (рішення № 47 від 10.02.2021).
«Навіть для виробників трун і пам’ятників я писав тексти». Як стати game-тестувальником під час війни: історія колишнього металурга, страховика, копірайтера
34-річний Андрій Зубков під час війни увійшов в IT, докорінно змінивши свою кар'єру і буденне життя. Тепер він QA Engineer у компанії Pingle Game Studio — тестує ігри. А до цього працював на металургійному комбінаті, в страхуванні та навіть копірайтером. Свою історію про вхід в нове життя Андрій розповів dev.ua.
Хто такий Unity Developer: основні задачі, обов’язки та зона відповідальності. Огляд професії від Team Lead Unity у Pingle Game Studio
Продовжуємо цикл матеріалів про ІТ-спеціальності. Кожну описує «типовий представник» — досвідчений фахівець і просто авторитетний колега, та сама людина, яка знає всі таємні куточки своєї професії. Ми сподіваємося, ці матеріали допоможуть школярам, студентам, перекваліфікантам, студентам і всім тим, хто зацікавлений у виборі ІТ-спеціальності. Цикл не тільки допоможе оцінити перспективи, а й дасть можливість краще зрозуміти індустрію і особливості професії зсередини. Обговорюйте і доповнюйте матеріал в коментарях, щоб зробити його ще корисніше.
Про професію Unity Developer розповідає Володимир Мельничук, Team Lead Unity у Pingle Game Studio.
Я iOS разработчик, пишу на Obj-C/Swift, но мне очень нравится C-language група языков. Легкость и простота синтаксиса, работа с указателями, работа с памятью, работа со строками - все оч понятно. В том же Swift обход строки используя String.Index порой вызывает боль. А какая неуклюже выглядит цикл for от len до 0 в Swift 'for i in stride(from: len-1, through: 0, by: -1)' по сравнению с лаконичным C-стилем 'for (int i=len-1; i>=0; i--)'
Я iOS разработчик, пишу на Obj-C/Swift, но мне очень нравится C-language група языков. Легкость и простота синтаксиса, работа с указателями, работа с памятью, работа со строками - все оч понятно. В том же Swift обход строки используя String.Index порой вызывает боль. А какая неуклюже выглядит цикл for от len до 0 в Swift 'for i in stride(from: len-1, through: 0, by: -1)' по сравнению с лаконичным C-стилем 'for (int i=len-1; i>=0; i--)'
А скорость сборки..., все плохо
Проект на Objective-C собирался секунды, lldb "летал", в пока не начали переписывать на Swift...