game development
December 2, 2019

Мы здесь не для того, чтобы делать игры: о текущем состоянии Unity

by @korovany

Когда я ругаюсь на Unity за то, что они не делают полноценных игр на своем движке, вот что я имею в виду. Полноценные игры — это не технодемки, которые они забросят через месяц, а проекты, которые бы приносили им деньги, имели успех у игроков и поддерживались после релиза. Это проекты, где игровой движок мгновенно обнажает свои недостатки и проблемные места, где движок обкатывается командой в боевых условиях, в которых невозможно не замечать огрехов дизайна и неудобных решений. Только такие проекты помогут движку развиваться в правильном направлении, и только в таком случае разработчики движка и разработчики игр будут понимать друг-друга с полуслова.

Это удалось UE, который с самого начала (UE1) создавался как инструмент для своих игр. Работа над Fortnite принесла UE4 много пользы: начиная от простых оптимизаций под платформы, так как Epic самим выгодно поддерживать большее количество устройств, чтобы больше людей играло в их игры и заносило денег, заканчивая абсолютно новыми фичами вроде разрушений, нового VFX-редактора и частично переписанного рендеринга. И, что важно, многие нововведения были сделаны удобными с самого начала — потому что делали их те, кто пользуется движком для создания продукта, который неплохо кормит компанию.

Я долго не понимал, почему Unity делает все так медленно и некачественно. Но за последние пару лет я нашел ответ.

Почему кучка людей из Amplify сделала визуальный редактор шейдеров, который работает везде (SRP+Legacy), отлично выглядит, кастомизируется и обладает огромным функционалом? В то время как Shader Graph от Unity, спустя почти 2 года после первого релиза (и спустя 8 месяцев production-ready статуса) все еще такое неудобное, глупое и сырое решение.

Маленький опрос на форуме о том, что использовать для визуального программирования шейдеров в августе 2019. Несмотря на всего 23 голоса, распределение сильно склоняется к Amplify.

Вообще, в AssetStore есть масса продуктов, которые сделаны на голову выше и удобнее того, что делает Unity. Не говоря уже о том, что пользователи всегда делали важные фичи за Unity, а Unity игнорировала проблемы годами. Terrain System была устаревшей с 2008 года, пользователи жаловались на нее больше 7 лет и были вынуждены покупать сторонние ассеты, пока Unity не начала наконец-то работу в этой области. То же самое с Nested Prefabs, просто фундаментальной вещью для удобной работы, которую не могли сделать больше 5 лет. Недавно вообще вышел Peek — очень крутой и удобный ассет, который облегчает жизнь разработчикам. Про систему UI я вообще молчу — мало того, что она меняется уже третий раз за последние 5 лет, так только сейчас для нее делают удобный редактор — UI Builder.

Можно ли игнорировать такие базовые вещи, если ты делаешь игры на своем же движке? Конечно же нет. В первый же месяц ты получишь тонну фидбека: «чувак, что за хуйня, почему у нас нет нестинга для префабов? Почему я должен проектировать интерфейс внутри сцены, не имея удобных инструментов?». Твоя команда будет работать над играми и все проблемы инструментов вскроются очень быстро. Все эти неудобства превратятся в лишние часы разработки, в лишние траты, в баги и головную боль. Ты не сможешь их игнорировать годами.

Небольшой тред в твиттере, который поддержали некоторые старички Unity (Alan Zucconi, который написал 2 книги по программированию шейдеров в Unity)

Последний год Unity скорее разочаровывает, чем радует. В сообществе заметна тенденция. Ранее я писал, что ближайшие пару лет будут очень важными для всех, кто работает или собирается работать с Unity. Но многие фичи, которые показывали на Unite в течение пары лет, либо были заброшены (как и многие вещи в Unity до этого), либо оказались плохими, неудобными и неготовыми, как та же SRP (LWRP вышла в production-ready в начале 2019, но она все еще сырая даже сейчас настолько, что в первый день ее использования можно словить несколько багов из коробки. И это не говоря о том, что она работает медленее, чем legacy, на low-end мобилках, что противоречит словам Unity).

Производительность самого редактора также заметно упала: компиляция проектов, импорт ассетов, начало плеймода и даже производительность в рантайме. И деградация производительности продолжается последние 3 года из версии в версию (каждый раз!).

Пример графиков с форума Unity. Одна и та же сцена запускается на разных версиях движка: тестируется время рендеринга каждого кадра в ms.

Единственная отдушина среди всего ужаса — новый технологический стэк. Но Data-oriented подход переусложнен для большей части проектов (не говоря уже о том, что он привязан к экосистеме Unity, и применить его за пределами движка будет нельзя), а Burst и Job System пригодятся только для тяжелых параллельных вычислений (узкий спектр игр про large-scale симуляции, будь то стратегии с сотнями тысяч юнитов). И что самое страшное — эти перспективные технологии могут не прожить и пары лет. Не просто так внутри сообщества Unity-разработчиков есть локальный мем про новые фичи в Unity — «это будет deprecated через пару лет». Старички помнят сколько веб-стеков Unity показала за последние 6 лет — ни один не дожил до сегодняшнего момента, но каждый рекламировался как «быстрое, надежное и производительное решение».

Как такое может происходить, почему такое вообще происходит? Ведь есть QA, есть отчеты производительности у ночных сборок (по крайней мере я хочу верить). Но всю работу за QA делают люди на форумах, а новые релизы скорее выглядят как набор каких-то сырых фич для того, чтобы показать материал инвесторам.

Много маркетинга, мало дела

Так уж получилось, что каждая презентация на Unite нацелена на то, чтобы создать как можно больше ажиотажа вокруг будущего движка. Но, как я сказал выше, фактическое будущее очень сильно отличается от того, что показывают на презентациях.

На это есть объективные причины: вы в курсе, кто CEO Unity Technologies с конца 2014 года? Бывший CEO Electronic Arts. Но самое страшное даже не в том, где он работал, а в том, что он говорит. В этом году он заявил:

Мы здесь не для того, чтобы делать игры, у нас нет интересов создавать что-то, что будет соперничать с вашим хобби или бизнесом...мы здесь для того, чтобы делать платформу для вас, разработчиков, и только для вас.

Буквально сказал, что они не собираются делать игры, потому что это, по их мнению, помеха для нас, разработчиков. Абсурдность и идиотизм этих слов (и наезд на UE4 с Fortnite между строк), я думаю, понимает любой.

Показывает, сколько из анонсированных фич не доживут до релиза

И это не самое страшное. Страшнее вот что — это интервью 2018 года, где он же говорит о том, что в будущем, как ему кажется, основным клиентом и источником прибыли для Unity будет не игровой разработчик, а фильммейкеры, архитекторы и дизайнеры автомобилей. А мы, игровые разработчики, будем меньшинством.

Конечно, в работе на разные области индустрии нет ничего плохого: UE4 тоже так делает, и его используют для кино, автомобилей и даже в эфирах прогноза погоды. Нет ничего страшного до тех пор, пока вы не жертвуете ничем другим. Unity может жертвовать — большая часть прибыли идет с мобильных проектов (более 50% мобильных игр сделаны на Unity). Epic — нет, потому что Epic делает игры на своей технологии, и поэтому на этой технологии делается масса AAA-тайтлов.

UE4 использовался для визуализации наводнения

Более того, Unity планирует выходить на IPO в начале 2020 года. Поэтому им важно концентрироваться на маркетинговых презентациях, показывая тонны крутых на бумаге фич, которые либо не доживают до релиза, либо оказываются в плохом состоянии и в скором времени забрасываются.

Что делать?

Unity, как компания, не умирает, она меняет вектор развития. Но от этого сильно страдает движок. Это все еще чудесный инструмент для инди-разработчиков и энтузиастов-экспериментаторов. C#, как язык скриптинга, является просто огромным козырем в рукаве у Unity (и если Epic добавят поддержку C# в UE4, у Unity будут большие проблемы. Предположу, что у них есть какое-то соглашение по этому поводу, хотя и звучит это как теория заговора).

Unity в свое время действительно демократизировал разработку игр. Люди получили инструменты, позволившие им реализовать свои идеи, не беспокоясь о высоком пороге вхождения. Но действительно ли сейчас Unity демократизирует игровую разработку? В данный момент у Epic это получается заметно лучше: бесплатные раздачи ассетов каждый месяц, покупка Quixel, крупные обновления движка. Да и многие инди-разработчики для новых проектов переходят с Unity на UE4. А это говорит о многом.

Если вы планируете делать что-то помимо мобильных игр, технодемок и research-проектов — самое время (а я говорил это еще в начале года) начинать смотреть в сторону других технологий и инструментов. Есть вероятность, что в ближайшие годы вам придется серьезно подумать о переходе с Unity.

Я очень люблю Unity, а поэтому мне страшно наблюдать за тем, что происходит с движком в последние годы. Несмотря на большое движение в сторону развития Unity (в том числе глобальное переписывание ядра на HPC#), все еще заметен разрыв между Unity Tech и нами, разработчиками. Если UT не начнут практиковать так называемый dogfood, то этот разрыв никогда не сократится. Ну и маркетингового буллщита на презентациях хотелось бы поменьше (потому что сейчас его ну уж слишком много).

Лично я даю Unity последний год. К концу 2020 должен завершиться цикл перехода на DOTS, а новые инструменты (SRP, VFX, ShaderGraph) войдут в третий год своей жизни и дозреют. Если этого не произойдет — то я буду готов к безболезненному переходу на новые инструменты.

Специально для канала @korovany