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