Як навчатися та прокачувати навички рендер-програмістам. Досвід фахівців Zibra AI, Elsewhere Entertainment і Pingle
Рубрика «як навчатися та прокачувати навички» продовжується, і це вже девʼятий матеріал. У двох попередніх ми поспілкувалися з розробниками на Unity та Unreal Engine, а сьогодні мова піде про рендер-програмістів. Своїм досвідом поділилися четверо фахівців професії Render Programmer, які працюють у Zibra AI, Elsewhere Entertainment, Pingle Studio та 4A Games.
Вони розповіли, як опановували професію та вдосконалювали свої навички протягом карʼєри. Окреслили основні проблеми, з якими стикаються рендер-програмісти, поділилися списком корисної літератури та дали поради новачкам. А ще — виклали свої думки про необхідність знання 3D-математики та прокачування в цьому напрямку.
Вхід у професію Render Programmer
У всіх наших спікерів є спільна риса — ранній інтерес до графічного програмування. Переважно він прокидався в університеті, коли й необхідно визначатися з подальшою професією. Деякі з фахівців бачили у цьому напрямку перспективу, тому почали його глибше вивчати. Іншим було просто цікаво дізнаватися більше інформації про роботу з компʼютерною графікою.
Далі йшло активне вивчення гайдів, посібників і «перші спроби намалювати трикутник», як описав це Олександр Кошло, Principal Rendering Engineer в Elsewhere Entertainment. Спеціалісти одразу намагалися набувати практичних навичок. Для цього найчастіше використовувався OpenGL.
«Мої перші кроки в навчанні на професію Render Programmer розпочались ще в школі. Саме тоді я зацікавився IT-індустрією і мріяв створювати власні ігри. На другому курсі університету я отримав завдання написати курсову роботу. Трохи пофантазувавши, вирішив створити невеличку гру на чистому C++ з використанням OpenGL. З цього моменту я почав глибше занурюватися у світ рендерингу та графічного програмування. Тоді й зрозумів, що це справді те, чим мені цікаво займатися», — Владислав Ремінський, Render Programmer у Pingle Studio.
«Моїм першим кроком став курс „Комп’ютерна графіка“ в університеті, де ми на дуже базовому рівні вивчали графіку за допомогою OpenGL. Але мені ця тема сподобалася, і я вирішив продовжити її вивчати», — Роман Дурда, Junior Render Programmer у 4A Games.
А от Олександр Пучка, VP of Technology в Zibra AI, який має 18 років досвіду в геймдеві, не радить починати з OpenGL. Спеціаліст рекомендує одразу вивчати DirectX 11 — значно сучасніший API з підтримкою всіх необхідних фіч. Якщо опанувати його, то далі буде простіше перейти на Vulkan чи DirectX 12. При цьому шлях Олександра у професію починався доволі нестандартно.
«Ще у 2007 році, коли NVDIA анонсувала CUDA, я почав цікавитися обчисленнями на GPU, бо вважав це цікавим і перспективним напрямком. Мені загалом завжди подобалися 3D-ігри. Я захоплювався їхньою фізичною та математичною складністю. А мої перші кроки в цьому напрямку якраз збіглися з початком вивчення C/C++. Під час написання дипломної роботи в університеті я використовував саме CUDA.
Якщо розглянути практичний розвиток, то я вивчав CUDA reference manual, CUDA programming guide та активно експериментував з CUDA samples. Найголовніше тут зрозуміти програмну модель, тобто що таке багатопотокове виконання в контексті Massive Parallel Computing. Ця парадигма дуже сильно відрізняється від класичної багатопотоковості. Відомі нам концепти погано поєднуються з програмуванням на GPU», — розповів Олександр.
Примітка. CUDA — це програмно-апаратна платформа паралельних обчислень. Її ціль — дати змогу розвʼязувати різноманітні задачі за допомогою обчислень на GPU.
Як рендер-програмісти покращували навички протягом карʼєри
Спікери сукупно відзначили пʼять шляхів, які допоможуть розвивати свої вміння на посаді Render Programmer. Більшість з них перегукуються зі способами прокачування в інших геймдевних професіях. Різниця полягає лиш у деякій специфіці. Нижче ми зібрали весь перелік порад від фахівців на основі їхнього досвіду.
- Практика на роботі. Один з очевидних варіантів розвитку — отримати посаду нижчого рівня в компанії, щоб одразу працювати над комерційним проєктом. Тоді буде можливість безпосередньо заглиблюватися в код і вивчати нові аспекти професії.
- Поглиблення знань у конкретних напрямках. Фахівці відзначили, що у вільний час постійно читали літературу, переглядали гайди та посібники на YouTube. Вони вивчали роботу алгоритмів освітлення, тіней, трасування променів, normal mapping, post processing тощо.
- Складні задачі. Для зростання навичок необхідно виходити із зони комфорту. Як зазначали всі спікери, час від часу варто братися за роботу вище свого рівня. Щоб її виконати, знадобиться докласти багато зусиль та опанувати нові знання. Але саме завдяки цьому вдається отримати важливий практичний досвід.
- Створення власного рушія. Пет-проєкт такого формату вимагає заглиблення в різні аспекти рендерингу і графічного програмування. У процесі розробки також можна тестувати різноманітні технології та нововведення, щоб потім краще розуміти їхню практичну суть. А ще — це реальний досвід та великий плюс для портфоліо.
- Комунікація. На роботі завжди є спеціалісти, які краще розуміються в певних питаннях. Спілкування з ними допоможе знайти дієві рішення та перейняти корисні практики.
«На мій погляд, найкраще покращення навичок — це пет-проєкти та складні задачі на роботі. Для перших необхідна дуже сильна мотивація, якої часто не вистачає, особливо якщо доводиться працювати понаднормово. Тому бажано хоч іноді брати складніші таски та намагатися їх виконати на робочому проєкті.
Варто ще знайти для себе канали інформації, де люди діляться цікавими імплементаціями алгоритмів, аналізами заліза, мікробенчмаркінгом тощо. Це дозволить заглибитися в обчислювальну архітектуру та зрозуміти, чому щось працює так, а не інакше. Особливість програмування на GPU полягає в тому, що швидкодія імплементації першочергово залежить від адаптації під програмну модель і залізо. Навіть якщо ваша програма написана алгоритмічно найшвидшим способом, цього може бути замало», — Олександр Пучка, VP of Technology в Zibra AI.
Корисні джерела для покращення навичок
Література
- Game Engine Architecture, Джейсон Грегорі;
- Real-Time Rendering, Ерік Хейнс;
- Physically Based Rendering: From Theory to Implementation, Метт Фарр, Венцель Якоб та Грег Хамфріс;
- Computer Architecture: A Quantitative Approach, Джон Хеннесі, Девід Паттерсон.
«Серед книг я вважаю є дві „біблійні“: Real-Time Rendering та Physically Based Rendering. Перша — це широкий вхідний матеріал у комп’ютерну графіку зі сторони real-time, а друга сфокусована на глибшій симуляції освітлення, коли ми не обмежені 16 мілісекундами. Може здатися, що Physically Based Rendering не потрібна, але вона допомагає у розумінні різноманітних феноменів світла», — Олександр Кошло, Principal Rendering Engineer в Elsewhere Entertainment.
«Щодо технік і алгоритмів рендерингу, часто можна знайти багато корисних статей, ресурсів і книг, присвячених конкретним методам. Техніки зазвичай описуються окремо, тому важливо шукати інформацію за конкретними методами, а не брати до уваги збірники всіх сучасних підходів», — Владислав Ремінський, Render Programmer у Pingle Studio.
Ресурси
- LearnOpenGL — основи рендерингу та базові принципи роботи з графічними API;
- RasterTek — гайд з вивчення DirectX 11;
- Доповіді з конференцій GDC та SIGGRAPH;
- YouTube-канал The Cherno;
- Shadertoy — для експериментів з шейдерами;
- Блог Ініго Кілеза з гайдами, статтями та прикладами шейдерів.
- Офіційна документація API.
Щодо курсів, то фахівці радять заглянути на Udemy та Coursera. Там є багато базових занять, які можуть стати в пригоді рендер-програмістам. А ще Олександр Пучка та Олександр Кошло рекомендують зробити свої соцмережі джерелом інформації. Тобто підписатися до досвідчених Render Programmers в Х та BlueSky, а також долучитися до профільних серверів в Discord. Особливо варто звернути увагу на спільноти, де серед учасників є фахівці Microsoft, AMD або NVIDIA. До них можна звернутися за порадою, якщо виникли проблеми з виконанням певної задачі.
Наскільки важливо рендер-програмістам розширювати знання 3D-математики
- Олександр (Zibra AI)
- Владислав(Pingle)
- Роман (4A Games)
- Олександр (Elsewhere)
«Це дуже залежить від того, чи будете ви взагалі мати справу з математикою і шейдерами на позиції рендер-програміста. Останні графічні API, такі як Vulkan та DirectX 12, дуже складні й фактично вимагають написання графічного драйвера, який відповідатиме за менеджмент пам’яті, багатопотоковості, шейдерів та інших ресурсів.
Зараз є два напрямки в професії Render Programmer. Перший і класичний — це написання шейдерів та створення різних графічних ефектів. А другий — забезпечення взаємодії між рушієм і графічним API. Причому наявність готового рушія, як от Unreal Engine, не спрощує ситуацію. Він виступає лиш фреймворком, який вимагає коригування під конкретну гру. Якщо подивитися на серію останніх релізів на UE, то стане зрозуміло, що всі ці проєкти потребують ручного допилювання продуктивності. Тому якщо ви саме хочете займатися крутими ефектами, вам в пригоді точно стане сайт Shadertoy для експериментів. А ще обовʼязково додайте в закладки iquilezles», — Олександр Пучка, VP of Technology в Zibra AI.
«Для рендер-програмістів не обов’язково бути експертом у просторовій математиці, проте знання основ є необхідними. Покращення математичних навичок важливе для кар’єрного зростання. Поступово фахівець отримуватиме все складніші завдання, а вимоги до його знань зростатимуть.
Що ж до способів вдосконалення цих навичок, то тут багато залежить від конкретної людини. Мені було цікаво поєднувати теоретичні знання з практикою, працюючи над ігровим рушієм. Наприклад, коли вивчаєш матриці, можна спробувати реалізувати трансформацію об’єкта за допомогою них. Такий підхід дозволяє одночасно вивчати математику, візуально спостерігати за результатами та покращувати навички роботи безпосередньо в рендерингу», — Владислав Ремінський, Render Programmer у Pingle Studio.
«Рендер-програмування — це одна з небагатьох сфер в програмуванні, де дійсно потрібно мати досить непогані знання з математики. Дуже добре, якщо під час навчання в університеті ви проходили курс лінійної алгебри. Всі ті абстрактні поняття з матрицями та процесами Грама-Шмідта набувають сенсу, коли працюєш з 3D-графікою. Насправді рекомендована література, зазначена вище, вже містить основні знання з математики для початку роботи з графікою.
На мій погляд, головне — це зрозуміти, як перетворювати одну систему координат в іншу та як працюють матриці переміщення, повороту, масштабування й перспективної проєкції. Плюс знати базові поняття на кшталт синуса, косинуса, скалярного і векторного добутку. Цього має вистачити в 90% задач», — Роман Дурда, Junior Render Programmer у 4A Games.
«Рекомендовані вище книги допоможуть з вивченням математики 🙂. Проте її корисність краще визначати самостійно. У різних областях потрібен різний обсяг знань. Я б рекомендував намагатися якомога глибше зрозуміти математику навколо вашої поточної задачі, щоб уникнути неочевидних помилок», — Олександр Кошло, Principal Rendering Engineer в Elsewhere Entertainment.
Як рендер-програмістам перейти з джуніора до мідла та вище
Порадами щодо карʼєрного зростання поділився Владислав Ремінський, Render Programmer у Pingle Studio. Він виділив пʼять напрямків, в яких потрібно розвиватися фахівцям для переходу на вищі рівні професії. Більшість з них підходять і для інших спеціалізацій у геймдеві. Однак фахівець також відзначив аспекти, які стосуються специфіки роботи рендер-програмістів.
Співпраця в команді та комунікація. Чим вища фахова градація у спеціаліста, тим більша відповідальність. А нагляд за його роботою навпаки пропорційно зменшується.
Самостійне планування задач. Junior-програмісти зазвичай виконують точкові таски, тоді як Middle та вище мають вміти чітко визначати пріоритети в роботі, оцінювати складність та час на завершення будь-яких завдань, а ще вчасно звітувати про прогрес. Вони також повинні правильно оцінювати ризики та планувати розв’язання проблем ще до того, як вони виникнуть.
Менторство і допомога молодшим колегам. Фахівцям рівня Middle та Senior нерідко доводиться стежити за Junior-розробниками й наставляти їх. Потрібно бути готовим перевіряти код, пояснювати важкі аспекти роботи, допомагати з розв’язанням технічних проблем тощо. Вміння чітко та доступно пояснювати складні концепції дуже важливе у цьому процесі.
Технічна компонента. На рівні Middle та вище рендер-програміст повинен впроваджувати рішення, які впливають на загальну архітектуру проєкту. Необхідно правильно обирати конкретний підхід та технологію. А це вимагає глибокого розуміння як короткострокових, так і довгострокових наслідків кожного рішення. Важливо враховувати не лише технічні аспекти, але й вимоги до продуктивності, оптимізації та масштабованості.
Гнучкість та адаптація до змін. В умовах швидкого розвитку технологій важливо бути готовим пристосовуватися, опановувати нові інструменти та підходи. Необхідно готуватися, що доведеться постійно навчатися. Наприклад, розбиратися в нюансах свіжих версій графічних API. А ще важливо стежити за трендами, як от розвитком трасування променів та застосуванням машинного навчання в графіці. Гнучкість і бажання вдосконалювати власні навички — це одна з ключових умов для переходу на вищі рівні професії.
«Перехід з Junior до Middle для рендер-програмістів нічим принципово не відрізняється від інших спеціалізацій. Основна різниця — необхідність мати ґрунтовні знання графічних API. Далі йдуть вміння самостійно виконувати задачі, планувати реалізацію фіч та прораховувати їхню вартість. З погляду знань, все залежить від проєкту, і єдиного рецепта тут немає», — Олександр Пучка, VP of Technology в Zibra AI.
Головні проблеми, з якими стикаються рендер-програмісти
Баланс між продуктивністю та якістю. Це глобальна проблема для фахівців на будь-якому проєкті, і від неї відштовхуються всі інші. Бюджет рендерингу, який гарантує необхідну плавність картинки, — 16 мілісекунд або менше. Тому фахівці завжди шукають, де їх можна зекономити в коді та контенті. І робити це необхідно без шкоди загальній якості.
«У компʼютерній графіці є купа нерозв’язаних проблем, особливо при бюджеті в 16 мілісекунд. Тому часто буває важко знайти баланс між візуальними недоліками, продуктивністю рішень і часом, витраченим на роботу», — Олександр Кошло, Principal Rendering Engineer в Elsewhere Entertainment.
Пошук багів. Далеко не завжди рендер-програмісти можуть поставити брейкпойнт в певному місці, щоб знайти помилку. Іноді доводиться сильно адаптувати код і створювати штучний приклад, який дозволяє відтворити проблему. А це вимагає чимало зусиль та додаткового часу.
Широке різноманіття заліза. Ця проблема перегукується з пошуком багів. Проєкт повинен якомога краще працювати на всіх можливих комбінаціях апаратного забезпечення. Однак їхня кількість сягає десятків тисяч. І якщо щось гарно працює на відеокартах з архітектурою Turing від NVIDIA, то на попередньому поколінні або графічних процесорах від AMD вже можуть виникнути помилки. Щоб уникнути цієї проблеми, компанія повинна налагодити складний пайплайн тестування, в який будуть залучені рендер-програмісти та QA-фахівці. Інакше фінальний досвід гри у користувачів сильно відрізнятиметься, залежно від «заліза».
Складність тестування. Необхідність активно залучати QA-спеціалістів обумовлена обмеженими можливостями автоматизації. Юніт-тести можуть покрити лише невелику частину всього обсягу роботи рендер-програмістів. Тому потрібно одразу думати, де можуть виникнути «вузькі місця».
«Апдейти ОС, драйверів та випуск нового заліза лиш додають плутанини у цей хаос. Та насправді процес розвʼязання проблем хоч і важкий, але доволі цікавий. Він часто нагадує детективне розслідування, бо доступу до райнтайм-виконання у вас може й не бути. Тому потрібно мислити дуже креативно й залучати колег до мозкових штурмів, коли потрібна допомога», — Олександр Пучка, VP of Technology в Zibra AI.
Нюанси в пайплайнах Render Programmers
- Розуміння API. Важливо ознайомитися з архітектурою хоча б двох-трьох API, щоб мати загальне уявлення про роботу GPU, а не обмежуватися знанням одного API. Особливо корисно вивчити принаймні одне низькорівневе рішення, як от Vulkan або DirectX 12.
- Графічний пайплайн. Необхідно приділити увагу всім його стадіям та структурі. Чітке розуміння кожного етапу рендерингу дозволить приймати оптимальні рішення для досягнення найкращої продуктивності та візуальної якості.
- Звʼязок CPU та GPU. Важливо приділяти увагу правильній синхронізації між процесором та графічним процесором. В разі неправильного налаштування це може суттєво знизити продуктивність, тому потрібно ознайомитися з техніками низькорівневої синхронізації.
- Сучасні методики рендерингу. Рекомендується вивчити підходи на кшталт Forward+, Deferred Rendering, SSAO та інші. Ці техніки широко застосовуються в багатьох реальних проєктах.
- Розвиток навичок налагодження. Потрібно вміти застосовувати такі інструменти як RenderDoc, NVIDIA Nsight, Intel GPA та Vulkan Profiler.
- Знання апаратної частини. Для діагностики проблем і максимально ефективної оптимізації рендер-програмісту важливо знати, як працює «залізо» на низькому рівні.
Поради новачкам, які тільки починають свій шлях як рендер-програмісти
Олександр Пучка, VP of Technology в Zibra AI

Щоб бути гарним спеціалістом, потрібно в першу чергу по-справжньому цікавитися та горіти своєю професією. Я бачив багато людей, які дуже хотіли стати рендер-програмістами, але не мали достатньо мотивації. В результаті вони йшли опановувати інші спеціальності. З плюсів — попит на нашу професію лиш зростатиме, й не тільки завдяки графіці. Свою роль зіграє і штучний інтелект, як важкий на обчислення софт. Для забезпечення максимальної швидкості роботи ШІ будуть так чи інакше застосовуватися GPU.
Фізичні обчислення, графіка, проєктування, ШІ — все це потребує залучення кваліфікованих рендер-програмістів, тому ваші професійні навички ніколи не будуть зайвими. Ви зможете легко перемкнутися з графіки на будь-що інше завдяки розумінню, як працювати з GPU. Але якщо вам хочеться швидко опанувати спеціалізацію та рубати капусту, боюся, рендер-програмування не ваш шлях.
Олександр Кошло, Principal Rendering Engineer в Elsewhere Entertainment

У своїй робочій практиці я часто бачу, як люди намагаються вирахувати, чи спрацює те або інше рішення. В результаті вони витрачають купу часу на планування. Звісно, ідеї варто пропускати через «smoke check», особливо якщо поруч є досвідченіші колеги. Але я також рекомендую просто писати код. Якщо є два потенційних розвʼязання проблеми, то варто спробувати обидва. Невдалі рішення лиш покращують розуміння проблеми. Спочатку викидати код може бути неприємно, але у довгостроковій перспективі це призведе до меншого стресу. Звісно, потрібно щоб команда розуміла користь від цього процесу. Бажаю вам потрапити саме в таку🙂.
Владислав Ремінський, Render Programmer у Pingle Studio

1. Не бійтеся пробувати нові та складні підходи. З часом нерідко приходить розуміння, що конкретна задача не настільки складна, як здавалося спочатку.
2. Завжди використовуйте профайлери та графічні дебагери. Навіть якщо ваш код, на перший погляд, працює, ці інструменти дозволяють знайти приховані проблеми та оптимізувати продуктивність на всіх етапах рендерингу.
3. Не зупиняйтеся на досягнутому. Постійно розвивайте свої навички та розширюйте знання, оскільки геймдев швидко змінюється. Успіх тут залежить від здатності адаптуватися до нових технологій та підходів.
4. Розвивайте навички командної роботи. Ефективна взаємодія з колегами полегшує виконання цілей, допомагає швидше вирішувати складні завдання та досягати високих результатів.
Немає коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів