Джентльменский набор программиста UE4, ч. 3

Джентльменский набор программиста UE4, ч. 3

Данный вопросник является дополнением и логическим завершением темы «джентльменского набора», поднятой ранее. Разработка игр — весьма комплексная индустрия, с очень широкими набором технологий и подходов, при этом базис у всех этих вещей на самом деле общий. Этот список создан в первую очередь для тех, кто хочет быть программистом Unreal Engine, а также позволяет оценить свой уровень тем, кто уже считает себя продвинутым программером под анрил.

В своей статье я стараюсь затрагивать такие проявления используемой технологии, изучение или исследование которых дает не просто инструкцию «делай так», а формирует рациональные подходы к разработке.

В прошлых сериях

4ертовы хипстеры. Никакой пользы от них

комментарии на youtube

Дисклеймер

Данный список вопросов ни в коем случае не тест и не экзамен! Все перечисленные в цитатах термины — это целый комплекс навыков, принципов и технологий. Некоторые вопросы попросту не предполагают единственно верного ответа, но очерчивают поле для дискуссии и поиска всех граней.

Основы архитектуры движка

  • Можно ли использовать STL? Зачем в Unreal Engine свой набор контейнеров? Зачем движку нужны свои «умные указатели», если есть UPROPERTY?
  • Как узнать потребление памяти на момент Х и структуру (содержимое) этой памяти? Каким образом можно проверить целостность памяти и найти утечки? Как работает Garbage Collector и какие у него боттлнеки?
  • Каким образом можно загрузить что-либо (текстуру, блюпринт, эктор, карту) асинхронно, и какие ограничения на этот процесс есть у движка? К чему приведет вызов функции синхронной загрузки ассета или его части в общем процессе асинхронной загрузки?
  • Многопоточный ли анриал? Как устроен основной цикл кадра/обновления мира? Какие способы проводить асинхронные вычисления есть на движке, и какие у них особенности?
  • Почему UPROPERTY — это пустой макрос? Как происходит процесс сборки бинарников проекта? Что такое unity build, зачем он нужен и какие плюсы/минусы у него есть?
  • Что такое SlateApplication и какую роль играет в основном loop’е движка? Какой путь проходит событие ввода от нажатия клавиши до PlayerInput?

Blueprints

  • Как технически работают блюпринты на уровне виртуальной машины? Как устроен EventGraph и что такое FFrame? Как происходит вызов функций из БП в нативный код и обратно?
  • Как устроены латентные функции?
  • (Advanced) Как можно реализовать wildcard in/out параметры и как работают CustomThunk функции?

AI

  • Что такое Behaviour Tree? Какие отличия от классического «книжного» BT? Какие есть альтернативы? Как технически (или архитектурно) устроены BT?
  • Как выбрать — писать ИИ на BT, или просто запрограммировать логику в блюпринтах или в коде? Либо предпочесть другие (какие?) варианты?
  • Каким образом реализуются независимые ветки логики ИИ на BT? (Пример: танк едет и наводится/стреляет одновременно) А если их три или четыре?
  • Какие еще модели построения искусственного интеллекта часто используются в геймдеве, в чем их плюсы и минусы?
  • Какие алгоритмы pathfinding’а и навигации используются на движке? Каким образом происходит ведение персонажа по маршруту?

Rendering

Означенная глубина погружения не предполагает, что вы — рендер-программист. Скорее это взгляд со стороны техарта и «интересующегося» программиста на одни из самых высокоуровневых вопросов.

  • Что такое draw call? Какие есть способы батчинга? Инстансинг vs батчинг?
  • В чем разница между Forward и Deferred рендерингом? (Advanced) А сколько вообще основных архитектур на текущий момент? Чем принципиально отличается рендеринг на мобилках/консолях от десктопного?
  • В чем отличия рендеринга непрозрачных объектов от прозрачных? Что за зверь Masked? (Advanced) А чем такой подход опасен на мобилках?
  • Чем отличается Shader от Material?
  • Какие типы шейдеров существуют и в чем назначение каждого? Как это используется в движке и отражено в материалах?
  • Зачем нужны mipmaps? В чем сила power of two текстур?
  • Что такое texture compression, как оно работает и используется?
  • В чем сила indirect sampling? Что означает это на практике в контексте анрила?
  • Как устроен цикл рендеринга на движке? Что такое RHI и <Smth>Proxy?
  • Как работают Particle Systems? Где происходит расчет частиц, в каких случаях?

Animation

  • В чем отличия рендеринга skeletal mesh от static mesh? Какие основные параметры и метрики у скелеталки? Какие техники оптимизации скелетной анимации используются на движке? (Advanced) По каким причинам Nanite не работает для скелетной анимации?
  • Какие методы наследования и композиции в Animation Blueprint возможны для использования? Плюсы и минусы каждого из них?
  • Какие способы анимации вообще могут быть? Какая информация и каким образом хранится в каждом случае?

Прочее

Пара дополнительных полезных вопросов вне категорий.

  • Что влияет на размер финального билда? Каким образом можно исследовать этот вопрос?
  • Git, Perforce, Subversion, PlasticSCM и другие — что лучше для работы с Unreal Engine и почему? Какие проблемы могут быть?

Кода (3)

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

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

Как и всегда, призываю к активному обсуждению, комментариям и критике! =)

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

Продолжать?
Пиши еще! (Да)
Мы вас не ждали, а вы приперлись! (Нет)
Хлебушек (нейтралитет хранящий)
4040
6 комментариев

Отличная статья) Но увы Большенство не поймет) было -бы здорово что под спойлер ответы были вписаны, и люди смогли проверить свои знания)

6
Ответить

О, какие авторы на моем любимом сайте! Скоро dtf снова будет торт

1
Ответить

Комментарий недоступен

1
Ответить

Ну сейчас эксперты нам всё пояснят! 

Ответить

Комментарий недоступен

Ответить

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

Ответить