Как запланировать процесс обучения и разработки?

Процесс разработки игр и обучения/самообучения взаимосвязаны. А если ты — инди, тем более! Главное держать фокус, и быть сконцентрированным. В помощь нам всем приходит планирование, поговорим о нем!

Привет, ребята! Давно я ничего не писал и, честно признаться, раскис. Отковырять себя с дивана и начать интенсивно двигаться вперед, мне помогает (и я уверен и Вам тоже пригодится) — Планирование!

А это значит, что наступило время приключений и я должен познакомить Вас, с 5м правилом Dev-ленда (правило будет скорее советом).

Представляю вам следующее правило:

Правило Dev-ленда №5. Составь road-map!

Что такое roadmap?

Roadmap (с английского, буквально «дорожная карта») — это план выпуска продукта. Чаще всего это новая версия или развитие уже известного продукта, изменений в котором ждут пользователи.

Что в нашем случае «продукт» и почему это так важно? Roadmap позволяет контролировать прогресс, видеть какой путь уже пройден, а какой еще предстоит пройти. И если это хорошо работает с различным ПО, то почему бы не сделать то же самое с твоей игрой или процессом обучения?

Я предлагаю на примере меня, рассмотреть как составить roadmap. Такой «кейс» мне очень легко описать, и я надеюсь он будет кому-то полезен.

От общего к частному

Главное не мельчить и двигаться от общих вещей к частному. Используем принцип, который знают программисты, но применяют с переменным успехом все разработчики — и художники и дизайнеры. Это принцип нисходящего проектирования.

Кстати, у игровых разработчиков тоже есть отличная техника, которая работает похожим образом это LOD’ы. Level of Details. Уровень детализации объекта повышается когда наблюдатель приближается к объекту.

В процессе работы и планировании очень важно не забегать вперед и не хвататься за детали, которые на данном этапе не нужны.

А у художников примерно такой же принцип тоже есть! Они начинают работать от пятна, больших объемов постепенно детализируя, дополняя лайн или пятна (правда ведь?)

Мой кейс

В общем, примерный принцип вы поняли — начну. 2017й удачно складывается, но до конца еще очень много времени, я могу что-то классное успеть прокачать!

Начинаем выстраивать систему с общих компонентов и продвигаемся к детализации только когда все общие компоненты наметили.

Уровень 1. Общие цели

Я хочу профессионально заниматься программированием графики. Это будет моя важнейшая цель. Детализируем, что мне стоит изучить и проработать, чтобы быть готовым выполнять задачи?

Уровень 2. Выделяем детали и шаги к достижению

Это и есть дорожная карта к цели. По идее, если я правильно выделил необходимые элементы, то поочередно завершив их все, я буду у цели.

Необходимая база в профессии

Самые необходимые области знаний в программировании графики

  • Принципы устройства/проектирования игровых движков,
  • Математика,
  • C++,
  • Графические API (сюда включен шейдерный язык и базовые техники вроде Shadowmap, SSAO),
  • Принципы работы hardware: GPU, CPU, кеши и т.д.

Уровень 3. Определяем источники, которые помогут эти области освоить

Книги, видео-курсы, лекции — в общем все, что позволит знания в определенных областях углубить.

Принципы устройства/проектирования игровых движков

Game Engine Architecture 2nd edition. Jason Gregory
Game Engine Architecture 2nd edition. Jason Gregory

Ни раз более опытные коллеги говорили, что единственная книга по этой теме — Game Engine Architecture Джейсона Грегори. Лекций и курсов похоже никаких нет. Буду читать ее и исправлять свой движок.

Математика

Foundations of Game Engine Development, Volume 1: Mathematics
Foundations of Game Engine Development, Volume 1: Mathematics

Планирую читать и прорешивать примеры из книги Game Engine Foundations: Mathematics Эрика Ленгиеля.
Попутно крутейшие видео Essense of Linear Algebra, публиковал их в нашей группе вконтакте: часть 1, часть 2.

А в качестве практических занятий дома, я наконец-таки добью raytracer, сделаю BVH, научусь пересекаться с треугольниками, плоскостями, AABB (сейчас у меня реализовано только самое простое — сфера).

C++ и графические API

Объединяю в один раздел, потому что практиковать нужно будет вместе. Если книги и видео по C++ я смогу смотреть в метро, то DirectX это практика, усваивать как-то теоретически скорее всего невозможно.

С++: Перечитаю Скотта Мейерса про С++11/14 и Александреску, посмотрю какие-то видео. Посмотрю Core guidelines. Разберусь с SIMD, всякими полезными инструкциями выравнивания.
У Александреску устал читать про менеджеры памяти, а оказалось, это необходимая вещь для игрового движка! Будет дополнительная мотивация.

DirectX:
Буду изучать DX11. Поддержку, которого добавлю в свой движок. Хочу сделать поддержку сразу нескольких графических API. Интересно как придется поступить с математикой, glm мне очень нравился с OpenGL. Нужно будет сделать какие-то эффекты/техники, чтобы показать что я представляю как они реализуются. Самые простые это — shadow-mapping и SSAO, bloom. Хочу разобраться как анимации устроены, skinned-mesh’и нужно будет научиться грузить и анимировать.

Принципы работы hardware: GPU, CPU, кеши и т.д.

Имею представление о том, как работает процессор. В университете увлекался reverse-engineering’ом, дружил с OllyDbg, IDA. Starforce не снимал, но какие-то пакеры попроще обходить умел (исключительно в исследовательских целях, конечно же :D)

А вот как CPU дружит с GPU вообще не понимаю. Есть два буфера, которые меняются от кадра к кадру. Эта память она же в GPU? А какая выделена в оперативной памяти? Как все эти ядра работают? Кто/как синхронизирует их работу, вообще не знаю.

Совсем не знаю, что почитать… Порекомендуйте!

P.S.

Писал для себя, но надеюсь кому-то пригодится: как подход, так и те книги и источники, что я здесь описал.

Estimation (Оценка по времени)

После нескольких этапов можно попытаться оценить по времени сколько займет прохождение пути. Сделаю это после самого трудного — математики.

Её очень сложно прогнозировать: зайдет, не зайдет. Я могу долго читать страницу вдоль и поперек и не понимать что происходит. Моя мама в детстве, когда я тупил над школьной математикой говорила: «Смотришь в книгу — видишь фигу».

Ребята, без вашей помощи блогу не обойтись, sharing особенно в Google+ очень нужен! Пошарьте, если Вам понравилась статья.
  • Mr Raven

    В последнее время много постом — классно! :3
    P.S. не подскажете на чём писали сайт? И помог ли он «прорекламировать» себя, в принципе?

    • Привет, постов вроде наоборот — не много 🙂
      Сайт не писал, это бесплатный движок — WordPress, помогла ли реклама — в какой-то очень небольшой степени,- да.

      Один небольшой заказ фрилансерский я получил с сайта. Кажется, если бы я был активным пользователем бирж вроде upwork, было бы эффективнее.
      Зато я познакомился с очень многими классными разработчиками, в основном художниками, которые звали поучаствовать в их проектах, я отказывался (у меня первым делом — самолеты, всмысле программирование графики) но опыт знакомств — классный!

      • Mr Raven

        Спасибо за ответ!) Ну, раньше временами в разы меньше было, а сейчас оживление, что радует)

  • Pingback: Как стать разработчиком игр. Профессия мечты.()