Як український студент допоміг оптимізувати ремастер легендарної TES IV: Oblivion
Кар’єра в геймдеві здавалася Остапу Трушу нереалістичною, а вершиною його графічних навичок свого часу був звичайний трикутник на OpenGL. Проте сьогодні Остап — Graphics Programmer у міжнародній компанії Virtuos. За його плечима — запуск власної гри в Steam, розробка рендер-рушія з нуля на Vulkan, виступи на профільних європейських конференціях та графічна оптимізація ремастеру легендарної The Elder Scrolls IV: Oblivion.
Ми поспілкувалися з Остапом про потужну базу УКУ, реальну вартість «зекономлених мілісекунд» на PS5 та про те, чому графічне програмування — це професія типу high risk, high reward, яка вимагає залізної дисципліни й повної самовіддачі.

«Зі знаннями, які УКУ дає за перші два роки навчання, шанси потрапити в індустрію стають набагато більшими». Про навчання, gamedev клуб та розробку на Godot
В
У рейтингу вступників я був десь посередині, обрав напрям «Комп’ютерні Науки», адже на той час це було або КН, або IT & Business Analysis, а мене цікавив саме акцент на програмуванні. Спершу думав, що не пройду, бо рейтинги були динамічними, тож був приємно здивований, коли мені зателефонували й запросили подати документи — вже наступного дня я був студентом УКУ.
Після вступу до УКУ я дізнався, що, крім звичайних курсів, тут дуже розвинена культура студентських клубів. Найбільшими тоді були Linux Club та Gamedev Club — я став частиною обох. До речі, Gamedev Club тоді очолював старшокурсник програми IT&BA Марко Загартовський.
На першому курсі — переважно математичні основи та основи програмування, грубо кажучи, стандартна програма. А от другий курс КН в УКУ вважається найважчим, адже з’являється дуже багато комплексних дисциплін, таких як Теорія Ймовірностей, Алгоритми, та — що сподобалося мені найбільше — курс Принципів Організації Комп’ютера від Олега Фаренюка, який потім переростає в курс архітектури комп’ютера та паралельного й продуктивного програмування на C++. Саме через ці курси я дуже полюбив C++ та low-level програмування — на додачу до своєї любові до геймдеву.
«Обрав Godot, бо його скриптова мова GDScript дуже схожа на Python»
Попри те, що в роки мого бакалаврату УКУ не пропонував спеціалізованих геймдев-курсів (окрім Gamedev Club), перші два курси дають студентам потужну й універсальну базу. Ці знання згодом можна застосувати фактично в будь-якій ІТ-професії, включно з розробкою ігор. Тому після екватора навчання кожен уже сам обирає вектор розвитку. Університет пропонує стажування в галузях машинного навчання, Data Science тощо. У геймдеві ситуація дещо інша, адже в цю індустрію важко увійти: вакансій обмаль, а конкуренція серед кандидатів величезна. Проте скажу з досвіду: з базою УКУ шанси на успіх зростають у рази.
Загалом я вважаю вступ на бакалаврат комп’ютерних наук УКУ найкращим рішенням у своїй кар’єрі. Знайомства, навички, досвід, ком’юніті — усе це настільки круте, що важко передати словами. Навряд чи я отримав би щось подібне в будь-якому іншому виші. Зараз в університеті активно розвивається новий напрям — Robotics, тож щиро раджу всім охочим придивитися до нього ближче.
Якщо в школі я думав, що вчити Godot — це марна трата часу, і взагалі: «ну я ж не зароблятиму цим на життя, звучить нереалістично», то саме завдяки Gamedev Club я повернувся до розробки ігор на першому курсі. Обрав Godot, бо його скриптова мова GDScript дуже схожа на Python (а я на той час знав лише його), та й сам рушій надзвичайно дружній до новачків, особливо для створення 2D-ігор.
Влітку 2021 року, перед другим курсом, я пройшов обидві частини Portal. Вони мене настільки вразили, що я загорівся ідеєю створити щось подібне. Але оскільки я був студентом без досвіду й відчував серйозний брак навичок, замість складного 3D-проєкту спробував реалізувати задум у 2D. Спочатку планував зробити мініплатформер і, можливо, закинути його в Play Store. Проте Марко Загартовський, який на той час очолював Gamedev Club, запропонував угоду: він бере на себе оплату Steam Direct та всю бюрократію, якою я тоді взагалі не цікавився, а з мене — готова гра. Так і народилася The Pest.



Ідея The Pest — це 2D puzzle-platformer, де ти вибираєшся з ретельно охоронюваного комплексу, використовуючи певні механіки. Загалом, доволі стандартно для інді-ігор. Реліз планувався на березень
Найскладнішою частиною став левел-дизайн: я мав створити з нуля 27 пазл-рівнів і три так званих «бос-рівні», де кожен рівень складався з
Гра досі доступна безкоштовно в Steam, але я її вже не підтримую. Вигорання від створення The Pest надовго відбило в мене бажання займатися власними ігровими проєктами з нуля. Ну і оскільки це мій перший млинець, гра вийшла доволі звичайною.
У мене є ютуб канал, який я вже на кілька років закинув (хоча, можливо, скоро повернуся), останнє відео там було випущено 3 роки тому — якраз мінідевблог по The Pest:
Тож не дивно, що приблизно в той самий час разом із хорошим другом та однокурсником Олексієм Гоєвим ми зголосилися викладати ігрову розробку на Godot в APPS Summer Camp. Цей кемп триває кілька днів, і учасникам пропонують скорочені версії справжніх курсів УКУ: веброзробку, embedded, машинне навчання, основи програмування тощо.
Здебільшого учасники за цей час створюють невеликий готовий продукт. Наші ж студенти всього за два дні мали можливість опанувати базовий функціонал рушія та розробити власну гру.
«Знаючи про індустрію лише те, як намалювати трикутник, я вирішив ризикнути». Інтернатура у Dragons Lake, написання власних графічних рушіїв і початок роботи у Virtuos
Якось наприкінці другого курсу мій друг Богдан Рубан скинув мені скриншот трикутника, який він намалював на OpenGL у вільний час. У світі комп’ютерної графіки це такий собі «Hello World». Мене це надзвичайно зацікавило, адже я завжди хотів зрозуміти, як саме створюється візуальна частина в ігрових рушіях з нуля.
Я попрактикувався й відтворив свій перший трикутник. І хоч процес мене захопив і дуже хотілося продовжувати — справу довелося закинути. Настав час шукати роботу, а цей напрям тоді видавався надто нереалістичним для старту кар’єри.
Трикутник на OpenGL in question
І от через пів року з’явилася можливість податися на стажування в Dragon’s Lake на позицію рендер-розробника. Це був буквально шанс опанувати комп’ютерну графіку, яку я свого часу закинув, бо старт у цій сфері здавався нереалістичним. Тож, знаючи про індустрію лише те, як намалювати трикутник, я вирішив ризикнути. Інтерв’ю було складним через величезну конкуренцію, але мені вдалося потрапити до вісімки тих, кого відібрали на програму.
У Dragon’s Lake нас готували як Junior Render Developers протягом шести місяців на full-time основі. Ми мали лекції та багато практики, і за цей час збудували власні графічні рушії на DirectX 11. Нам вдалося реалізувати такі фічі, як PBR, HDR, decals, shadow mapping, CPU/GPU particles with collisions, IBL та sphere lights. На цьому етапі вже можна впевнено сказати: я не міг уявити себе в жодній іншій сфері IT чи геймдеву. Працювати з графікою мені надзвичайно сподобалося.
Одразу після стажування я потрапив у Virtuos (Warsaw) на позицію junior рендер-програміста. Дуже ціную цей досвід, адже мав можливість попрацювати в міжнародній команді графічних програмістів із величезним бекграундом — мені справді було в кого вчитися.
Ми переважно займалися графічною оптимізацією та створенням нових графічних фіч для різних AAA-проєктів на Unreal Engine 5 і пропрієтарних рушіях. Один із таких проєктів, що вже вийшов, — The Elder Scrolls IV: Oblivion Remastered, де наша команда відповідала за графічну оптимізацію. Всі інші тайтли поки що під NDA.
«Я почав розробку власного рендер-рушія Shift як проєкту для захисту бакалаврського диплома»
Також крутою можливістю, яку надала нам команда Virtuos, є виступи на профільних конференціях із технологіями, які ми розробили. Що особливо тішить — статус не має значення, junior ти чи senior: якщо створив цікаву технологію і нею зацікавилися організатори події, компанія всіляко заохочує тебе до виступу.
Паралельно я почав розробку власного рендер-рушія Shift як проєкту для захисту бакалаврського диплома в УКУ. Хотів створити щось, що максимально розвинуло б мене як рендер-розробника, тому вирішив писати з нуля на Vulkan. Це сучасне низькорівневе графічне API, яке є одним із головних стандартів індустрії, тож володіння ним — надзвичайно корисна навичка.
Проте опанувати Vulkan складно: next-gen інтерфейси суттєво відрізняються за рівнем комплексності від OpenGL чи навіть DirectX 11, адже більшість контролю над роботою з відеокартою перекладається безпосередньо на рендер-програміста.
Мій тогочасний лід Данило Руденко погодився стати моїм керівником, за що я йому дуже вдячний. Проєкт виявився успішним, і я захистив Shift як дипломну роботу. Після випуску вирішив, що рушій стане моїм sandbox для практики та навчання, тому почав переписувати його на API-agnostic інтерфейс. Це означає, що система зможе працювати як із Vulkan, так і з DirectX 12 (коли я його опаную) чи потенційно з Metal.
Через магістратуру та інші обставини це масштабне переписування досі триває. Хоч сам інтерфейс уже готовий, він поки підтримує лише Vulkan, а чимало функціоналу (як-от завантаження 3D-моделей, текстур та шейдерів) ще належить переосмислити під нову архітектуру. Цього літа, після завершення навчання, планую нарешті фіналізувати цей процес.
Загалом проєкт ще на надто ранній стадії, щоб думати про монетизацію. Я використовую його для практики та заповнення прогалин у знаннях. Ну і, звісно, як частину портфоліо, бо хороший власний рушій — це величезний плюс у резюме рендер-девелопера.
Github Shift: https://github.com/Adeon18/Shift
«Нам вдалося заощадити в середньому одну мілісекунду на кадр, що у світі графіки є дуже хорошим результатом». Про оптимізацію ігор та презентацію своїх технологій на конференціях
Unreal Engine 5 VSM Time Slicing — це оптимізація, яку розробили ми з Ігорем Павловським (також випускником стажування в Dragon’s Lake) під менторством Петра Сікачева для одного з AAA-проєктів Virtous.
Суть технології полягає в наступному: оновлення VSM-тіней в UE5 відбувається щокадру за наявності активного циклу дня, адже сонце постійно рухається. Можна квантизувати рух сонця, але тоді тіні будуть «стрибати». Ми розробили технологію, яка оновлює тіні лише на певних рівнях clipmap, а не по всій карті одразу. Це дозволяє уникати оновлення тіней щокадру там, де гравець не помітить низької частоти оновлень — наприклад, для тіней дуже далеко від камери. Цією оптимізацією нам вдалося заощадити в середньому одну мілісекунду на кадр, що у світі графіки є дуже хорошим результатом.
Виступ на Digital Dragons 2024 став для нас із Ігорем першим виступом на великій конференції. Все пройшло успішно: ми отримали позитивний фідбек, а аудиторія була дуже активною і мала багато цікавих питань та ідей. На жаль, я не зміг бути присутнім особисто, адже івент проходив у Польщі, тож не відчув атмосферу спільноти на повну. Виступ записувався, і його можна переглянути тут:
Наступним для нас із Ігорем був онлайн-виступ на Develop Brighton 2024 — також чудова можливість, і фідбек був позитивним. Запису цього виступу, на жаль, немає.
Згодом я мав нагоду повернутися на Digital Dragons 2025 як спікер — цього разу вже сам, з темою «Shadow Mask Bilateral Upscaling Optimization in Unreal Engine 5». Цю оптимізацію я створив протягом двох місяців для одного з проєктів. Так, це знову тіні, але тепер — від локальних джерел світла.
Суть у тому, що система даунскейлила рендеринг shadow mask в UE5, щоб потім апскейлити її за допомогою білатерального фільтра. Це допомогло оптимізувати Shadow Map Ray Tracing (SMRT), адже він працював на вдвічі меншій роздільній здатності. Така оптимізація заощадила до двох мілісекунд на кадр на PS5 у певних сценах без помітної втрати якості зображення — і це дуже солідний результат. На цій конференції я також виступав онлайн, але все одно отримав чудовий відгук від слухачів.
Загалом мені дуже сподобалося ділитися досвідом на таких заходах. Круто, що Virtuos дали мені таку можливість на самому початку моєї кар’єри.
«Тут можна створювати неймовірні речі, але й вхідний поріг надзвичайно високий навіть для junior-позиції». Погляд на можливості в ніші та маневрування між роботою й навчанням
Навчання в магістратурі, особисті проєкти та віднедавна викладання в університеті — на додачу до full-time роботи — це дуже багато дедлайнів. Переважна більшість часу після роботи та на вихідних іде саме на них. Проте, оскільки я роблю те, що мені подобається, це дозволяє тримати певний баланс між обов’язками, відпочинком і хобі — хоча в більшості випадків цей баланс схиляється на 100% у бік роботи.
Варто сказати, що попри величезне навантаження з дедлайнами, не можна забувати про ментальне та фізичне здоров’я: робити регулярні перерви й розминки під час роботи, мати комфортне робоче місце та виділяти достатньо часу на відпочинок. Я трохи нехтував цим, і протягом останнього року почав відвідувати фізичну реабілітацію, щоб підтримувати себе у хорошій фізичній формі — адже я хочу займатися графікою та програмуванням ще багато років :)
«Щодо графічного програмування — це професія типу high risk, high reward»
Загалом я б сказав, що провів у геймдев-індустрії ще недостатньо часу, щоб робити глобальні висновки. Але попри все, виглядає так, що зараз в українському геймдеві є і перспективи, і проєкти. Часто бачу вакансії на роль ігрового розробника, та й іноді з’являються запити на графічних програмістів.
Щодо графічного програмування — це професія типу high risk, high reward. Тут можна створювати неймовірні речі, але й вхідний поріг надзвичайно високий навіть для junior-позиції. Потрібно мати навички Junior C++ Developer і додатково знати теорію графіки на солідному рівні: вміти писати базові шейдери та розуміти архітектуру ігрових рушіїв. Цієї теорії тут значно більше, ніж в інших напрямах, не кажучи вже про обсяг практики.
Якщо ви дійсно прагнете стати графічним програмістом — можливості є. Просто треба бути готовим вкласти чимало зусиль, щоб отримати свій шанс в індустрії. На щастя, зараз є безліч доступних ресурсів для навчання: профільні конференції (як-от Graphics Programming Conference) публікують записи виступів у відкритому доступі, існують круті автори контенту (content creators), що спеціалізуються на графіці, а також купа безкоштовних статей. Тому всім, хто хоче обрати цей шлях, щиро раджу активно користуватися цими знаннями.
5 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарівДля мене навіть освітлення по Фонгу вже магія
Класна стаття, дякую
офігеть, чудова стаття. Дуже цікаво як саме робити такі штуки
Красно вам дякую, що читаєте =)
Чудова стаття! 😊