
Данный вопросник является дополнением и логическим завершением темы "джентльменского набора", поднятой ранее. Разработка игр — весьма комплексная индустрия, с очень широкими набором технологий и подходов, при этом базис у всех этих вещей на самом деле общий. Этот список создан в первую очередь для тех, кто хочет быть программистом Unreal Engine, а также позволяет оценить свой уровень тем, кто уже считает себя продвинутым программером под анрил.
В своей статье я стараюсь затрагивать такие проявления используемой технологии, изучение или исследование которых дает не просто инструкцию "делай так", а формирует рациональные подходы к разработке.
В прошлых сериях
4ертовы хипстеры. Никакой пользы от них
Дисклеймер
Данный список вопросов ни в коем случае не тест и не экзамен! Все перечисленные в цитатах термины — это целый комплекс навыков, принципов и технологий. Некоторые вопросы попросту не предполагают единственно верного ответа, но очерчивают поле для дискуссии и поиска всех граней.
Основы архитектуры движка
Можно ли использовать
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)
Эта статья завершает мини-цикл такого формата — подготовка материала для публикации в виде самостоятельной статьи занимает слишком много времени, многие вещи из которых устаревают либо изменяются по мере написания. Формат следующих публикаций будет переработан и систематизирован несколько иначе.
При этом конечно же два опросника не покрывают все области знания о движке целиком, однако я постарался коснуться тех вещей которые считаю основными.
Как и всегда, призываю к активному обсуждению, комментариям и критике! =)