Всём привет! Меня зовут Дядиченко Григорий, и я CTO Foxsys. В разработке я порядка 8 лет, а занимаюсь игровой или AR/VR разработкой последние лет 6. Сразу скажу, что в данной статье нет простого ответа “этот игровой движок лучше”, и она не претендует на объективность. Я лишь расскажу мнение с точки зрения технического директора и человека за плечами которого порядка 40 коммерческих проектов. Если вам интересно — добро пожаловать под кат.
Как выбираются технологии для проекта?
Любой специалист высокого уровня знает, что не существует “лучшего языка программирования”, “лучшего фреймворка” и так далее. Но есть технологии, которые лучше всего под конкретику проекта. Вообще для каждого конкретного проекта в плане выбора технологий я бы порекомендовал дать это сделать экспертам, то есть техническим директорам. Потому что выбор технологии под конкретный проект требует очень широкой экспертизы и знание огромного количества контекста. В целом ошибка в выборе технологической базы чаще всего не смертельна и ведёт просто к дополнительным издержкам на реализацию проекта, но тем не менее.
В целом в выборе технологий со своей точки зрения я руководствуюсь двумя основными подходами: технологический и бизнесовый.
Под технологическим я подразумеваю какая технология лучше всего подходит под проект. Допустим на ней есть необходимые библиотеки, большая часть необходимого функционала готова из коробки, что технологически реализуемо и так далее.
Бизнес-часть принятия решения составляет из себя ответы на вопросы: “Насколько просто найти специалистов на рынке на данной технологии?”, “Какую технологию дороже поддерживать?”, “Какой экспертизой на данный момент обладает команда?” + возможности партнёрства и прочие бизнес-причины.
Продумав все вопросы выбор обычно сводится к достаточно небольшому списку технологий, подходов к разработке и фреймворков. То есть не существует ответа на вопрос “Какой игровой движок лучше?”, так как всё зависит от задачи и множества сопутствующих факторов.
Какой движок лучше выбрать новичку?
Конечно, с моим бекграундом в 6 лет Unity разработке можно было бы предположить, что выбор уже решён и что тут дальше читать то. Но мой ответ вас, возможно, удивит. На данный момент я считаю, что, если вы совсем новичок, ещё не погрузились ни в один движок и только начинаете свой путь лучшим выбором будет Unreal Engine. И пока сообщество не начало обвинять меня в предательстве я объясню свою точку зрения.
Я считаю, что эти движки в большинстве задач связанных с 3д графикой по сути идентичны. Чуть ниже я подробнее распишу почему. Мой выбор на данный момент связан не столько с технологическими причинами, сколько с работой компаний со своими комьюнити. И на данный момент я вижу в разы больше интересных программ, активностей, образовательных мероприятий и прочего со стороны Epic Games. На Unity, конечно, сидит почти весь мобильный геймдев, в 3 раза больше вакансий чем на UE и так далее. Но думаю, это со временем изменится. Да и 134 (на момент написания статьи) открытых позиций это немало. Современная разработка устроена так, что в целом вы можете учить что угодно, что вам больше нравится, и вы всегда найдёте себе работу. Поэтому это мнение на тему новичков, так как если вы выбрали для себя Unity — это отличный выбор. 6 лет работаю на Unity и горя не знаю. А вот для совсем новичков я вижу просто больше образовательных возможностей и интересного со стороны эпиков. Но всё может измениться.
С точки же зрения опытного разработчика в определённый момент конкретные технологии, фреймворки и языки — это вопрос вашего удобства. Перескочить на другую технологию для сеньора можно где-то за полгода, если он глубоко знает фундаментальные основы Computer Science. И смысла перепрофилироваться я тоже не вижу, потому что потребность в Unity специалистах большая, и движок отлично справляется со своими задачами.
На Unreal Engine лучше графика?
Небольшая оговорка. Всё что будет ниже не относится к новой технологии рендера, хотя пока по отзывам от знакомых UE разработчиков она работает не так красиво и хорошо, как хотелось бы.
Это чистой воды миф совершенно непонятно откуда взявшийся. В 3д графика движка настолько хороша, насколько хорош его свет и Post Processing. И с точки зрения что не особо напрягаясь и где можно накрутить, они для меня практически идентичны. Вот собственно наилучшее сравнение, которое я находил.
Графика — это вопрос пряморукости людей, которые подготавливают контент и рендер программистов. Давайте возьмём за правило то, что вы конечно можете быть универсалом, но в игровой разработке программисты, отвечающие за графику, за игровую логику, за ИИ и так далее - это разные программисты. Компьютерная графика — это весьма глубокая область, как и скажем программирование ИИ, и если вы хотите стать гуру - вам нужно понимать, что такое графический конвейер, как вообще работает реалтайм рендер и так далее. На этот счёт могу порекомендовать книги Real-Time Rendering Tomas Akenine-Möller и серию GPU Gems.
Так вот, если вы понимаете, как пишутся оптимальные шейдеры, из чего вообще складываются графические эффекты и т. п. - вам в среднем плевать какой у вас в руках движок. Исключением являются технологии. Скажем вроде как (тут меня могут поправить UE разработчики) у Unreal Engine всё лучше с поддержкой технологий Nvidia. Тот же DLSS вроде появится 2021.2, хотя в UE его вроде уже можно использовать. Но скажем из Nvidia GameWorks есть поддержка Nvidia Flex и так далее. В общем это уже совсем тонкие нюансы, зависящие от контекста вашего проекта. В среднем по рендеру движки если не идентичны, то очень похожи. А в паре с бесплатными плагинами каждый различается по-своему в тонких нюансах.
Что же лучше для проекта?
Всё всегда зависит от специалистов и бюджетов. И если мы берём среднебюджетный проект (коих сейчас большинство), то я вообще не вижу разницы между движками. Если мы берём аутсорс которым я занимаюсь, то вообще без разницы. В те бюджеты, которыми обладает средний проект у вас не будет даже возможности добраться до багов движков, до проблем с невозможностью что-то сделать, да и вы не будете этим заниматься. Любой эксперт при имеющемся бюджете знает, как сделать проект на технологии Х в этот бюджет качественно.
Единственное, хотя я немного не в контексте движка UE, но я бы его не стал бы брать для 2D проектов в принципе. Так как последние время Unity выпускает много крутых инструментов для 2D разработки. Поэтому мне кажется, что пока в этой области UE рассматривать нет особого смысла. Есть конечно менее популярные движки для этой задачи типа Defold или же Game Maker, но их я бы не стал брать по бизнес-причинам. Потому что я не уверен, что не столкнусь с проблемой того, что мне неоткуда будет расширять команду, так как специалистов на них днём с огнём не сыщешь.
И оба движка я бы в целом не рассматривал бы для web проектов. Если в UE я просто не знаю, что с поддержкой веба (может её там и нет) То с Unity прикол в двух основных проблемах. Первая, что там до сих пор нет поддержки мобильных браузеров. Да, на топовых телефонах оно даже как-то работает, но это очень рискованная затея брать технологию, которая официально не поддерживается для продакшен решения. А второе и самое главное — это время загрузки. Основной прикол веба в быстрой доставке контента до пользователей (помимо того, что там нет ограничений и правил сторов). Поэтому время загрузки Unity убивает эту фишку напрочь. Для веб проектов я чаще всего беру pixi.js, three.js, playcanvas и react. Что в этом списке забыл реакт? Это длинная история для другой статьи, если кому-то это интересно.
Собственно, по этим же причинам я для себя пока не вижу смысла переходить с Unity. За 40 коммерческих проектов разного масштаба я ни разу не упирался в стену, чтобы что-то было нереально сделать на Unity и реально на Unreal Engine. Плюс для меня, как для бывшего С++ разработчика (невысокого уровня) основным минусом UE является С++. C# как язык в разы приятнее. Кто знает undefined behavior и сложные утечки памяти, тот поймёт.
Опять-таки, если вы разбираетесь в компиляции, исполняемых средах и прочем, вы знаете, что на самом деле к любому движку можно прикрутить почти любой язык (а точнее его подмножество) Но это странно брать движок и писать для него библиотеки на языке не поддерживаемом этим движком. И тут мы переходим к последнему и самому спорному.
Открытые исходники — это хорошо?
Нет, нет и ещё раз нет. И в этом я довольно категоричен. Даже беря в работу Unreal Engine, я рассматриваю его как чёрный ящик. Потому что фреймворк берётся в работу не для того, чтобы поддерживать свою версию этого фреймворка. Наличие такой возможности для компаний, которые могут заниматься подобной деятельностью есть и в Unity, но вы никогда не хотите этим заниматься. И причин этого целая масса. Начиная от ада с конфликтами версий в случае необходимости переезда на новую версию. Движок берётся не для того, чтобы исправлять его баги. Безусловно важной является не открытость исходников, а возможность надстройки своей системы поверх движка. И этой возможностью обладают и юнити, и анреал. Открытость к расширению и закрытость к модификации так сказать. Потому что в этом случае обновляться можно спокойнее, хотя обновление — это всегда важный шаг в отношениях с любой технологией, и делать это надо крайне осторожно.
Подводя некий итог
Каждому движку своя задача, каждый обладает кучей нюансов, множеством плюсов и минусов. Но ни про один игровой движок нельзя сказать, что он лучше или хуже. Если вы знаете какие-то узкие нюансы, в которых выигрывает конкретная технология - пишите в комментариях. Я всё же в первую очередь эксперт в Unity, и могу какие-то мелочи не учитывать, а это важно в подборе конкретной технологии под проект. Ну и спасибо за внимание.