Джентльменский набор программиста 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. Если интерес к подобного рода публикациям на ресурсе есть, попробую писать мини-статьи или заметки чаще.

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

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

Ответить

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

Ответить

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

Ответить

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

Ответить

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

Ответить

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

Ответить