Блеск и нищета Unreal Engine 4. Ue4 оптимизация


Блеск и нищета Unreal Engine 4

В последние пару месяцев на моём пути то тут, то там всплывает один и тот же вопрос: где нормальные игры на Unreal Engine 4? Вопрос может быть сформулирован по разному, но суть от этого не меняется: многие друзья и знакомые совершенно не понимают, почему высокотехнологичный движок, анонсированный в июне 2012 года (по слухам, партнёрам и лицензиатам Epic начала рассылку прототипов дев-китов за несколько лет до открытой презентации), до сих пор не может похвастаться обилием качественных проектов?

Действительно, если хотя бы мельком просмотреть список вышедших игр на UE4, то вы не найдёте в нём громких имён. Как примеров оглушительного успеха или потрясающей графики, взрывающей мозг.

Ну хорошо, у нас есть уже блевотный копеечный ужастик Daylight, сделавший ставку на генерацию однотипных пыльных коридоров психушки и закономерно утянувший своих создателей на дно. Ещё более отвратительные Haunted House: Cryptic Graves (официально снята с продажи) и Alone in the Dark: Illumination (скоро тоже снимут) - примеры попыток эксплуатации старых серий современной Atari. Унылый и бессмысленный изометрический шутер Hatred, обещавший стать достойным наследником первой Postal и показать настоящую первобытную ярость. Ах да, ещё есть полуторачасовая бродилка The Park - банальнейшее переложение сказки Братьев Гримм про Ганзель и Гретель. И типичная игра по фильму, точнее сериалу - бесхребетная и унылая Gemini: Heroes Reborn.
Вы видите практически всё, что может предложить хоррор Daylight...
Невероятно сложно найти симпатичный скриншот из Haunted House: Cryptic Graves. Вот максимум возможного.
Скриншот из Alone in the Dark: Illumination явно постановочный, но в жизни игра выглядит именно так.
Из всего этого кромешного мрака выделяется разве что минималистичное приключение Kholat, разработанное профессиональными технарями из студии IMGN.PRO. Вот только проект этот очень на любителя. Плюс в самой игре UE4 используется дай бог вполсилы: в некоторых местах большой локации, открытой для исследования, невооружённым глазом видны упрощения геометрии и мутные текстуры. Похоже авторам пришлось искать возможные способы оптимизации. При том, что, повторюсь, в студии работают опытные технические специалисты, хорошо знакомые с движком и подрабатывающие на аутсорсе консультантами.

Стоит, наверное, упомянуть ещё и множество переизданий, вроде той же The Vanishing of Ethan Carter Redux. Но тут важно понимать их специфику: разработчики из студии The Astronauts объяснили необходимость переезда красивейшего приключения на новый движок тем, что Unreal Engine 3 официально не поддерживает PS4. Случись какая проблема и Epic отказалась бы помогать в исправлении багов, ссылаясь на оную.

Kholat - одна из самых красивых игр на UE4, которая работает.
Сложно поверить, но The Park в данный момент тоже одна из самых красивых игр на Unreal Engine 4.

Этим фактом как раз и объясняется "любовь" независимых разработчиков портировать свои игры на UE4. Можно, конечно, при помощи костылей заставить работать на консоли и прежнюю версию, но это потребует куда больше усилий и времени.

Но даже несмотря на всё давление со стороны Epic, попытки "изъять" из оборота Unreal Engine 3 и такие вот "палки в колёса", "четвёрка" по-прежнему не может даже близко приблизиться по популярности к своему предшественнику.

Причины, на мой взгляд, понятны и очевидны: во-первых, у разработчиков до сих пор нет перед глазами примеров правильной реализации; во-вторых, у движка сейчас слишком много конкурентов и главные игроки на рынке нисколько не заинтересованы в лицензировании технологии; в-третьих, обыкновенные технические сложности. А теперь давайте остановимся на каждой подробнее.

Не секрет, что светлое будущее UE3 в своё время обеспечил шутер Gears of War, ставший нынче живой легендой. Презентация на E3 2005, кроме шуток, оставила большинство разработчиков с вывихнутыми от удивления и потрясения челюстями, а многие из них вдруг поняли, что будущее наступило. И в этом самом будущем больше нет места "польским шутерам", "крепким середнячкам" и "убийцам Doom 3". В результате первая GoW стала локомотивом, тащившем на себе большую часть сделок по лицензированию. Хотя основные успехи в плане реализации и оптимизации за собой закрепила Epic Games (Unreal Tournament 3, серия Gears of War, Bulletstorm), что, в общем-то, неудивительно. Но примеров красивых сторонних игр тоже хватает: Bioschock Infinite, Dishonored, Thief.

Thief живое доказательство тезиса, что у Unreal Engine 3 достаточно пороха в пороховницах
Да и Bioschock Infinite

Что мы имеем сейчас?

Epic не в лучшей форме и занимается сплошь f2p-проектами (Unreal Tournament, Paragon, Fortnite), поэтому не может собственным примером показать как надо делать. Сторонние студии пока тоже не блещут. Вроде бы заявлено много всего - Dreadnought, Battlefleet Gothic: Armada, Hellblade, Street Fighter V, Shenmue 3, Space Hulk: Deathwing, Dangerous Golf, Styx: Shards of Darkness, Adr1ft, ARK: Survival Evolved, Vampyr, Dead Island 2, Psychonauts 2, Bulletstorm 2, Borderlands 3, The Evil Within 2, Bloodstained: Ritual of the Night, The Solus Project, Dishonored 2, Gears of War 4, Outlast 2 - но до сих пор непонятно, что из этого окажется, собственно, играми, а что технодемками, пробами пера и бесконечными альфа-версиями прямиком из Early Access.

С конкуренцией на рынке технологий всё просто и очевидно. Практически у всех крупных издателей есть свои решения для разработки игр: у EA рабочая лошадка Frostbite, у Activision Blizzard... ну, вы в курсе, у Ubisoft - Dunia Engine для серии Far Cry (вусмерть модифицированный CryEngine из первой части) и Anvil Engine (перелопаченный Unreal Engine 2.5) для всех Assassin's Creed и других игр, а так же, только не смейтесь, Unreal Engine 2.5 для Splinter Cell.

У всех остальных есть Unity, возможности которого мы имели счастье лицезреть в хорроре Layers of Fear, и тот самый Unreal Engine 3 (точнее, версия 3.5), который показал все свои возможности в Thief.

Да, Layers of Fear в самом деле может похвастаться таким уровнем детализации. Unity 5
Tom Clancy’s Splinter Cell: Blacklist работает на дряхлом Unreal Engine 2.5 и в графическом плане чувствует себя хорошо!

В сложившейся ситуации UE4 нужен либо независимым игроделам, на дух не переносящим Unity и готовым терпеть отсутствие любой технической поддержки в обмен на "бесплатность", либо студиям, имеющим ресурсы. чтобы позволить себе экспериментировать с формой и содержанием.

Но есть ещё надежда на лучшее: Square Enix выпустит ремейк Final Fantasy VII, а Capcom, по слухам, лицензировала технологию для неанонсированных проектов.

И наконец самая благодатная тема - техническая сторона.

Несмотря на то, что демонстрация Unreal Engine 4 была запущена на единственной видеокарте NVidia GeForce GTX680 (важно понимать, что в консолях нет и этого), в Epic скромно умолчали о грядущих проблемах с оптимизацией. Более того, авторы технологии утверждали обратное: движок должен куда лучше работать с многоядерными процессорами, быстрее "общаться" с железом и хорошо масштабироваться под различные конфигурации. Но в результате получилось как получилось: системы, спокойно воспроизводящие все прелести UE3, с трудом переваривают UE4, зачастую выдавая слайдшоу.

И ладно бы, можно списать на крики хейтеров. Но и разработчики Daylight, и Hatred столкнулись с проблемами производительности в момент релиза. Не говоря уже про говноделов, соорудивших упоминавшиеся выше Haunted House: Cryptic Graves и Alone in the Dark: Illumination. Более-менее выделялась на этом фоне Kholat: релизный билд работал куда быстрее и стабильнее, нежели пыхтящая-тарахтящая ревью-версия.

Но не бывает дыма без огня.

Есть, конечно, подозрение, что UE4 жизненно необходим SSD для нормального функционирования - иначе не было бы всех этих разговоров про медленный стриминг текстур и долгие загрузки.

Делать какие-либо однозначные выводы, конечно, пока рано. Сначала надо дождаться выхода как минимум десятка заявленных проектов, а потом уже начинать разбирать по полочкам их графическую составляющую и производительность. Но главную проблему отрицать бессмысленно: Unreal Engine 4 вчистую проигрывает по популярности Unreal Engine 3. И не факт, что в будущем ситуация заметно выправится.

www.vgblogs.ru

Кейс: оптимизация Unreal-игры для встроенных графических решений

Почему важно оптимизировать PC-игры под интегрированные графические решения и как заставить на них выдавать 60 кадров в секунду Unreal-проект, — в блоге движка рассказали инди-разработчики из High Horse Entertainment.

С помощью очень простого и неожиданного решения у Джея Маттиса (Jay Mattis) и Тимоти Раппа (Timothy Rapp), ранее работавшими над сериями таких игр, как Call of Duty и Guitar Hero и являющимися единственными сотрудниками High Horse Entertainment, получилось запустить свой проект, разработанный на Unreal 4, на Intel HD 4000. Казалось бы, ничего сложного, но это при разрешении 1280×720 и стабильном фреймрейте в 60 кадров.

Зачем разработчики вообще взялись за оптимизацию под интегрированное решение? Причин две.

Во-первых, значительная конкуренция на рынке. “Если никто не играет, никто не может найти себе соперника. По этой причине для нас очень важно поддерживать максимальное число конфигураций”, — пишут Джей и Тимоти

Они знают, что порядка 40% компьютеров, на которых играют, используют встроенные графические решения от Intel. На перенасыщенном рынке игнорирование столь солидной доли пользователей может дорого обойтись студии.

Disc JamВо-вторых, разрабатываемый ими фритуплейный проект Disc Jam рассчитан на игру при 60 кадрах в секунду. Это критично для достижения победы в самой игре, представляющей собой PvP по метанию дисков.

Что же сделали в High Horse Entertainment?

Изначально они тестили производительность Unreal Engine 4.12.5 “из коробки” на имеющимся примере “Шутер”. На машине с процессором Intel® Core™ i7-4720 и графикой Intel® HD Graphics 4600 демка на максимальных параметрах показывала порядка 20 кадров в секунду, а на минимальных — около 40 кадров в секунду.

Большинство команд это могло устроить, но Джею и Тимоти было принципиально важно, чтобы игра выдавала даже на минимальных установках 60 кадров. При этом они понимали, что имеющийся рендер вряд ли им это позволит осуществить.

Но у Unreal Engine 4 есть особенность — Mobile Preview, которая позволяет визуализировать игру на десктопе, используя мобильный рендер. Демка “Шутер” в рамках Mobile Preview стала выдавать порядка 100 кадров в секунду.

Epic Quality Settings — ~20fps Low Quality Settings: ~40fps OpenGL ES 3.1 + AEP Mobile Preview: ~100fps

Непосредственно Disc Jam после проведенной оптимизации стал показывать желаемые 60 кадров на интегрированной графике при разрешении 1280×720 точек.

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

Disc Jam* High-End Renderer and Lighting Disc Jam Low-End Renderer and Lighting

При запуске же игр из Steam сами пользователи после релиза игры смогут выбрать, какую версию игры они хотят запускать: полноценную или для слабых машин.

Disc Jam пока еще не вышла, но уже сейчас, согласно SteamSpy, у игры, находящейся в закрытой пре-альфе, около 80 тысяч пользователей.

Источник: Unreal Engine Blog

app2top.ru

мифы и реальность / Блог компании Mail.Ru Group / Хабр

Широко распространено мнение, что Unreal Engine 4 — слишком «тяжелая» технология для мобильных игр. В то же время число проектов, выпущенных на этом движке в мобильных сторах, растёт с каждым днём.

Почему все больше разработчиков выбирают для своих проектов UE4? С какими сложностями вы можете столкнуться при работе над игрой для мобильных устройств? Какие подходы и пайплайны стоит использовать, а чего следует избегать? Наш опыт студии Pushkin приоткроет завесу тайны над этими и другими вопросами.

Данная статья является является текстовой версией доклада, прочитанного 9 февраля 2017 года на мероприятии Unreal Engine Meetup в Mail.Ru Group. Несмотря на дату публикации исходного материала, представленная информация является не только тем самым наступившим «сегодняшним днём» и содержит в себе актуальные цифры, но и подтверждает прогнозы, высказанные автором на самом мероприятии.

Миф первый: Unreal Engine никто не использует

Последние четыре года я занимаюсь мобильными играми. И постоянно сталкиваюсь с мифами о разработке на Unreal 4, циркулирующими в мировом сообществе. Один из таких мифов гласит: «На этом движке очень мало игр, с ним сложно работать. Давайте возьмем Unity, на нём десятки и сотни тысяч различных игр». Когда-то именно так всё и было. Но сегодня это уже не соответствует действительности. Вот наиболее яркие свежие мобильные игры, сделанные на UE4:

Этот миф развенчать очень легко. Монстры индустрии начинают активно использовать Unreal. Примеров гораздо больше, их уже десятки. Недавно вышедшие игры начали разрабатывать год-полтора назад. Так что сегодня мы наблюдаем результат начала активного использования Unreal Engine в мобильном сегменте.

С чем это связано? Unreal Engine 3 имел очень много ограничений. Во-первых, требовалась полная лицензия, которая стоила определенные деньги. Бесплатный UDK позволял собирать приложения только для iOS. Нельзя было вносить множество изменений, разработчики пользовались только скриптовым языком и никак не могли модифицировать движок.

После того, как Unreal Engine стал доступен всем и каждому, с полным исходным кодом, с поддержкой сообщества и разработчиков, начали создаваться и мобильные игры на этом движке. Большинство разработчиков игр всё равно начинают со своих инди-наработок, постепенно становясь специалистами, которые потом в больших компаниях могут реализовывать крупные проекты. Но если у вас нет доступных инструментов и технологий, то вы просто не сможете этому научиться.

2017-й можно назвать годом больших релизов в мобильном сегменте на Unreal Engine 4. Можете набрать в Google «Unreal Engine mobile», и увидите десятки игр, начиная от инди и заканчивая крупнейшими тайтлами.

Миф второй: низкая производительность

«Unreal Engine медленный. С ним невозможно работать, я создал простую сцену, у меня всё тормозит, невозможно с этим играть, давайте возьмем Unity, можно сделать миллионы треугольников». Если вы хотите отображать просто миллионы треугольников, которые ничего не делают, то, наверное, стоит взять Unity. Если мы говорим о реальной производственной задаче, о смоделированных персонажах, ландшафте, сцене, эффектах — то мы начинаем рассматривать уже не синтетические, а реальные тесты.

Скриншоты некоторых наших внутренних разработок:

В сценах может быть более 30 персонажей со своей скелетной анимацией, все отображаются одновременно. Большой уровень состоит из нескольких кусочков, он загружается по мере передвижения игрока от локации к локации. Во время подгрузок все эти юниты ходят локально на клиентских устройствах, для них просчитываются маршруты. Ради интереса, попробуйте на РС поместить в сцену 30 персонажей класса character и запустить их. Даже для мощного компьютера это будет непросто.

Также у нас много эффектов, огонь, магия, взрывы. По нашим тестам было более 30 кадров на iPhone 5S. Сегодня этот телефон можно рассматривать как минимальную платформу. О каких тормозах речь?

Речь всегда о том, как вы работаете с движком. Если сделать каждого персонажа по 10-15 тыс. полигонов, то если их будет больше двух в сцене, то это убьёт любой мобильник. Так что производительность движка — это вопрос проектирования игры, а не возможностей самой технологии.

Второй пример:

Большущая карта, одновременно отображается более 15 единиц техники. У каждого танка катки движутся с соблюдением физики, правильно реагируют на неровности почвы. Это не болванчики с неподвижными гусеницами, которые радостно ездят по плоскому полю. У нас глубоко просчитывается физика и механика. Каждая из этих единиц техники — отдельный пользователь, играющий по сети. Представьте количество траффика, который надо обрабатывать каждую секунду, и мы всё ещё говорим о мобильных устройствах.

На карте более 2500 динамических объектов. Их можно разрушить, подвигать, с ними можно как-то взаимодействовать. Это не просто заранее подготовленная сцена, которая рендерится определенными батчами. Каждый из таких объектов занимает свой draw call, память, имеет свой жизненный цикл.

Статических объектов — около 500.

Поверхность земли покрыта травой — foliage в терминологии движка. В сцене может быть около 5000 экземпляров травяных кустиков. Самая частая жалоба на foliage в Unreal Engine: «Я наставил много травы — у меня всё тормозит». Причём на десктопах. А у нас на том же движке 5000 экземпляров — и ничего не тормозит. Что я делаю не так и причём здесь движок?

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

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

iOS 9/10 (Metal 1.1)

Минимальные целевые устройства — iPad Air, iPad Mini retina (второй и выше), iPhone 6 и iPhone 5S. «Минимальность» определяется размером оперативной памяти. Рассматривать более старые устройства нет никакого смысла. Вся техника Apple, которая не поддерживает Metal, не является вашим целевым рынком. Более того, вы можете спокойно выпускать в App Store приложения, которые требуют iOS 9 или 64-битную систему, и тогда автоматически получаете эти устройства в качестве минимально необходимых. Это уже поддерживается на уровне платформы, и далеко не первый день. Не стоит пытаться оптимизировать игры под совсем древние устройства.

Более того, если вы начали разрабатывать игру сегодня, то стоит забыть уже и про эти устройства. Через год их почти не будет. Например, iPhone 5S попал в список просто по традиции, по факту стоит рассматривать iPhone 6 как минимальное устройство. Целевые гаджеты завтрашнего дня:

iOS 10 (Metal 1.2+)

Чем они отличаются от предыдущего поколения? Процессор не особенно важен, главное — оперативная память. Это бутылочное горлышко мобильной разработки. Все уже привыкли работать с неограниченной памятью на десктопах. Но когда вы делаете мобильную игру, то должны помнить, что у геймера может не быть 2-3 Гб доступной памяти.

Я специально не привожу примеры Android-устройств, там есть свои подводные камни. В частности, для Unreal не важно, сколько у вас ядер. Важно, какое из них наиболее быстрое. Поэтому все эти «айфоны», включая семерку, у которой два ядра, работают, как ни странно, быстрее. Хотя у Android есть свои преимущества.

Миф третий: высокие системные требования

В группе официального сообщества каждую неделю по два-три раза поднимается тема: «Для работы в Unreal Engine нужен очень мощный компьютер». На эту тему пишутся мануалы, на форуме Epic Games постоянно создаются темы: «у меня есть столько-то денег, подскажите, что купить?» или «сколько надо десятков тысяч долларов, чтобы я мог работать?».

Рабочая конфигурация компьютера у меня выглядит вот так, там куча всего нашпиговано.

Моя вторая рабочая конфигурация выглядит вот так — это коробочка с интегрированной видеокартой, по-моему, Intel 3000.

На ней спокойно можно создавать мобильные игры. Даже некоторые десктопные проекты тянет. Но всё, что связано с обсчётом на CPU, занимает довольно много времени. В частности, если будете обсчитывать освещение или шейдеры.

Но если вы разрабатываете под мобильные устройства, когда вы знаете, что хотите сделать и не экспериментируете с гигантскими шейдерами, этого хватит. Поэтому никаких заоблачных требований к компьютеру нет и не было. Напротив, требования постепенно снижаются.

Конечно, если вы разрабатываете проекты виртуальной реальности, или создаёте ААА-проект с кучей графики, то вам потребуется мощное железо. Но не для мобилок.

Миф четвёртый: Unreal тормознее, чем Unity

Миф возник во времена UDK. Созданные на нём проекты уступали аналогичным на Unity. Я сам с этим сталкивался. Это было обусловлено ограничениями самого UDK, и каждый раз приходилось доказывать, что ты не верблюд.

По каким параметрам можно сравнить производительность движков?

Они близки, но Unreal выигрывает чаще, если речь идёт о большом количестве одинаковых объектов, потому что он очень хорошо умеет их инстансить. Если мы говорим про разные объекты, то разница в 1-2 кадра.

Поэтому выбирайте инструмент в зависимости от проекта.

Игра на Unity весит гораздо меньше, чем на Unreal

Если вы делаете маленькую игру, это будет так. Если мы соберём пустой проект, то на Unreal он будет весить 70-80 Мб, а на Unity 10 Мб. Но из чего состоит размер билда? В первую очередь из ассетов, которые присутствуют в игре. Если в игре 80 различных персонажей, у которых по 20 видов мечей и 10 карт, то размер билда на любом из движков будет исчисляться гигабайтами. Какая разница, бинарник какого размера лежит рядышком? Да, на Unity 10-15 Мб, а на Unreal 60 Мб. Но при гигабайтных ассетах это не имеет значения. А если вы делаете маленькие казуальные игры, либо игры с 2D-графикой, то Unreal вам не нужен.

У обоих движков свои особенности. У Unity можно всё отрезать и оставить 2D-графику. Unreal Engine вообще не является 2D-графическим движком. Он рассчитан на 3D-игры с хорошим качеством графики. Да, поддержка 2D имеется, но как дополнительный бонус. Повторюсь: выбирайте инструмент в зависимости от проекта. Размер билда не критичен, если вы делаете 3D-игру. Опять же, разница в 200 Мб не имеет значения: это уже больше 100 допустимых на Google Play, чтобы загружать по 3G.

Длительность итерации

Как долго билдится проект на Unreal? Всё зависит от того, как вы работаете с ассетом. В целом, длительность итерации в несколько раз больше, чем на Unity. Однако в Unreal Engine есть прекрасный режим предпросмотра для мобильных устройств. Чем он хорош? В отличие от многих других решений, в том числе от Unity, он выдает на десктопе идентичную картинку с Android и iOS. С точно такими же настройками, цветами и качеством, как это будет на мобильных устройствах.

Если вы берете топовое мобильное устройство, то картинки будут идентичными. Это огромное преимущество. Можно проходить итерации гораздо быстрее. Вам не надо каждый раз собирать игру на устройстве, чтобы посмотреть, как она будет выглядеть. Играбельность — другой вопрос, это может потребовать времени. Но как она будет выглядеть, работать с графикой — это можно узнать на десктопе за считанные секунды. В выходящей скоро 15 версии добавили превью и для Metal: можно оценить возможности, которых нет в OpenGL 2.0.

Расширяемость и модернизация движка

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

Проблемы мобильной разработки: Slate и процессор

В Unreal Engine интерфейс реализуется с использованием технологии Slate. Она глубоко встроена в движок, её нельзя просто выключить в какой-то момент. Slate обрабатывает устройства ввода, в том числе через операционную систему. У неё есть свои проблемы. Она оптимизирована в первую очередь для работы на настольных устройствах. Во вторую очередь — для мобильных.

Не используйте Slate для HUD — интерфейса, в котором происходят основные действия игры, где критична производительность. Допустим, 10 солдат с одной стороны сражаются с 10 солдатами с другой. Всё должно летать. В этот момент не стоит использовать Slate. Лучше переключиться на Canvas — ручной способ. Дедовский метод, который существует десятилетиями, но он работает быстрее с точки зрения потребления CPU.

Грубая оптимизация на уровне движка — это тоже оптимизация. Если вы уже доросли до оптимизации, то не надо этого бояться — берите и правьте движок. Обычно такие вмешательства носят ситуативный характер и зависят от проекта. Например, мы брали связанный со Slate код и прокидывали туда свои связи. Хотя ни одного экрана со Slate не отображалось, но по умолчанию всё равно выполнялось очень много обработки. Тогда мы просто отключили её. Правда, если есть хоть один виджет, то обработка присутствует. А если виджетов нет, то вызывается очень простая функция, которая ничего не делает. Это криво, это не универсально, но работает. Когда вы делаете проект для пользователей, он в первую очередь должен отлично работать, а не быть универсальным решением.

Проблемы мобильной разработки: оперативная память

Это касается любого 3D-приложения — нужно больше памяти. Как быть?

Начну с самого простого — разрешения и количества текстур. Если у вас огромное количество разных текстур, и все они большого разрешения, то это может выглядеть круто. Но вы делаете игру под мобильные устройства, так что нужно соблюдать баланс. Делайте атласы, какие-то текстуры используйте многократно. Организуйте свою работу так, чтобы использовать их по минимуму. К примеру, на огромной карте на полкилометра мы используем всего пять текстурных атласов, color и нормали. То есть всего 10 текстур покрывают огромнейшую карту со статическими объектами. А благодаря мастерству художника вы не найдете двух одинаковых мест на этой карте.

Используйте текстурные атласы. Сейчас есть две открытые технологии — VaTexAtlas и Paper2D (требуется весь модуль Paper2D). Если вы не используете какие-то возможности последнего, не работаете с 2D-графикой, то проще его отключать ради уменьшения билда. Paper2D сжирает примерно 40 Мб.

Мало кто знает, что сами модели съедают очень много памяти. Сегодня в мобильных играх используют персонажей и окружение с большим количеством полигонов. И всё это активно потребляет память.

Аккуратно используйте Merge Actors. Эта функциональность очень помогает оптимизировать draw call: стоят вдали 20 домиков, вы их объединили и получили одну модель, скажем, на 10 тыс. полигонов. Эти 10 тыс. вертексов загружаются в память и висят там. Поэтому очень легко заоптимизировать карту с точки зрения draw call, и получить огромное потребление памяти. Важен баланс, не забывайте.

И первое по важности: контролируйте количество шейдерных пермутаций. Что такое material instance? Набор параметров, который применяется в материале. То есть используется материал, уже находящийся в памяти, и в нём меняются параметры. После их применения эта же область памяти отправляется дальше на отрисовку. С точки зрения памяти всё было бы хорошо. У вас есть базовый материал, допустим, после компиляции весит 10 Мб; у вас есть 20 material instance, каждый для своего персонажа, они весят по 5-10 Кб, в памяти они занимают столько же. Допустим, вы использовали master material, в котором применены переключатели. Они позволяют иметь один большой материал на все случаи жизни, но здесь надо быть очень аккуратным. Если вы включаете какой-то switch, любой параметр типа boolean, который заставляет иначе работать поток выполнения компиляции материала, то после упаковки этот material instance становится материалом. Не просто набором параметров, но и набором шейдерных инструкций. Допустим, вы создали материал для правой и левой руки. Правая рука рисуется золотом, левая — серебром. Материал один, в руках переключатели. И при этом для каждого персонажа сделан свой material instance, и в каждом стоит галочка — это для левой руки, это для правой. Добро пожаловать в мир шейдеров: у вас сразу же потребляется 200 Мб памяти, только потому, что вы забыли про эту ситуацию.

Лучше всего создать два material instance уже от базового материала, и в каждом поставить эту галочку. А потом у этих material instance менять только числовые параметры. Такой подход сокращает потребление памяти и места на диске, потому что шейдеры загружаются в память целиком. Если очень много всего сгенерируется, то билд может разростись до 1,5 Гб, хотя у вас всего один уровень. Я сам с этим сталкивался: однажды игровая карта с несколькими персонажами заняла больше 1 Гб. На Apple больше 1 Гб, на Android — 300 Мб.

Проблемы мобильной разработки: потребление CPU

На iOS-устройствах обязательно используйте Metal, выжимайте из него всё. На Android вас спасёт такая вещь, как Vulkan. На обеих платформах есть и OpenGL 3, но под Android потребление процессора будет выше.

Переносите свои вычисления на GPU, ведь графический чип чаще всего простаивает. В первую очередь — визуальные эффекты. У них есть часть, которая рендерится, и часть, которая генерирует и обрабатывает. Меньше частиц — больше их визуализации. И не забывайте про баланс.

Не обрабатывайте то, что не видит игрок. В движке не всегда есть оптимизации для мобильных устройств. Если ваш персонаж стоит где-то за спиной игрока, не надо проигрывать у него анимацию, не надо отслеживать его перемещения, движения костей. Достаточно смотреть, где находится его капсула. Отключите ему всё, в том числе физику. Более того, если он у вас за спиной, обсчитывайте его раз в 10 тиков, например.

Отсекайте лишнее. Во многих играх не нужны способности, заложенные в Character. Это достаточно «жирный» класс, в котором много логики, рассчитанной на шутеры, на десктопные игры с огромным числом возможностей, где можно бегать по потолку, прыгать, прокладывать маршруты, двигаться по физике. Чаще всего мы говорим о персонаже, который идет из точки А в точку Б. Напишите свой movement controller, сделайте steering behavior. Это задача для ученика старшей школы, есть куча технологий. Если вам нужно только движение — лишь его и используйте, не надо тащить за собой всё остальное. Это тоже одна из вещей, которая пугает тех, кто приходит с Unity.

Физика — это не просто. Любые физические вычисления работают в определенном потоке. Если у вас 300 различных кубиков бегает по сцене — у вас будет низкий FPS. Шаг второй — ограничьте их по группам, и так далее.

И одно из самых важных решений — Blueprint Nativization. Это огромный прорыв в оптимизации движка. Если сами по себе blueprint'ы в 10–30 раз медленнее исходного кода. Задача нативизации blueprint'ов очень обширна, не получится просто включить галочку в настройках. Это тема отдельного разговора. Но для начала хотя бы начните пользоваться нативизацией, это уже даст ускорение скорости работы blueprint'ов на порядок.

Проблемы мобильной разработки: рендеринг

Самое простое, о чём уже говорили: используйте вертексную развертку вместо пиксельной. Считайте ваши UV на нодах как Custom UV. Никаких модификаций UV на пиксельном канале. Можно легко делать океаны: 200 с чем-то инструкций, и отлично играет на всех проектах.

Если вы всё это перенесете в пиксельные шейдеры — у вас будут проблемы. Если вы будете считать UV scale, допустим: scale земли близко с одним масштабом, scale ландшафта с другим — дальше расплывается. Сделаете это на пиксельном шейдере — и сразу же получите проблему. На вертексном тоже, но не факт, что игрок это заметит. Потому что при виде от первого лица этот переход можно скрыть лесенкой. Игры — это мастерство фейка. Никогда не пытайтесь получить чистые шейдеры, чистую картинку в каждом пикселе. Используйте сильные стороны, скрывайте слабые.

Контролируйте количество отрисовки, draw calls, заранее просчитывайте видимость. Для этого нужно знать свою сцену, настроить группы объектов.

Чем меньше skeletal mesh и анимации, тем быстрее это всё считается. Опять же, есть оптимизации по расстоянию, которые пропускают кадры, их надо использовать. Мы написали свою, ещё более грубую отсечку, но для мобильных игр это оправдано. Кого интересует персонаж в 15 пикселей? То, что у него пропущено три кадра анимации и отрисовка раз в секунду — это надо ещё постараться заметить. Когда у вас жаркие бои, то какая разница, сколько кадров в секунду анимации у этой ёлочки, 1 или 30?

VFX можно убить эффектами, контролируйте этот момент.

Прототипируй!

Главный мой совет в мобильной разработке — в первую очередь делайте прототипы.

Если хотите сделать игру с сотней персонажей, создайте хотя бы синтетический тест. Не делайте их уникальными. Возьмите одну модель и сделайте сто экземпляров. Однажды у нас была адская работа: сделали сто разных персонажей. Они выглядели одинаково, но формально, а главное, с точки зрения памяти и рендеринга, были разными. 20 классов и 100 персонажей. Мы потестировали и поняли — не работает. Пришлось сокращать и оптимизировать.

Прокладка маршрута и движения: взяли 10 character — тормозят. Переписали движение, посмотрели, не тормозит — отлично. Физику тоже проверяйте на прототипах. Вас устраивает, как это работает? Вас устраивает производительность? Не надо делать графику, расписывать лор, не надо всё программировать. Выделите критичные части и прототипируйте их.

Какое будущее у мобильной разработки?

Сегодня iOS, благодаря развитию Metal, является более предпочтительной платформой для нагруженных 3D-игр. Эта технология сильно оптимизирует нагрузку на процессор. Там не получается какой-то огромной выгоды в кадрах, в основном снижает потребление энергии. Кстати, при прочих равных Unreal Engine нагружает процессор меньше, чем Unity. Это за счет того, что на многих устройствах вычисления переносятся на более энергоэффективный GPU.

Будущее мобильной разработки — это Vulkan. Я всё жду, когда он появится на iOS. На Android он практически обеспечивает возможности десктопной графики. Чего только стоит screenspace reflexion в реальном времени.

Vulkan работает быстрее, ещё более оптимизирован, даёт больше возможностей, позволяет реализовать на мобильных устройствах картинку на уровне больших компьютеров. К примеру, последние полтора года художники меня чуть ли ни каждый день спрашивают: давайте добавим динамический ambient occlusion. Сегодня эта задача не решается в мобильном сегменте. Надеюсь, что с приходом таких технологий, с приходом нового железа мы сможем себе позволить, в том числе, и ambient occlusion.

ПОСЛЕСЛОВИЕ

В силу времени, прошедшего с момента составления данного текста, некоторые вещи из "планируемых" успели стать "реализованными". Так, Lineage 2: Revolution вышла в мир, а Unreal Engine 4.18 привнёс функционал дескопного рендеринга на iOS (очень круто!). Тем не менее, описанные подходы не теряют своей актуальности.

The future is now.

habr.com

Unreal Engine 4 • » Настройки проекта

Редактор Project Settings даёт доступ к настройкам конфигурации, которые задают информациию о вашем проекте, а также определяют то, как ведет себя движок при запуске проекта.Некоторые из этих настроек относятся непосредственно к игре, а другие носят более общий характер касаемо движка или платформы на который вы работаете.

Все эти настройки хранятся по умолчанию в конфигурационном файде Engine.ini), и могут быть вручную отредактированы там при желании.Редактор Project Settings имеет простой и интуитивно понятный пользовательский интерфейс.

Accessing Project Settings

Редактор Project Settings может быть открыт из меню Edit :

Categories and Sections

Редактор Project Settings разделён на различные категории и секции по соответствующим опциям.Категории отображаются как заголовки, а каждая секция как гиперссылка, открывающая опцию этой секции в редакторе.

Controls

При просмотре параметров в пределах конкретного раздела, следующие элементы управления доступны в верхней части диалогового окна:

Кнопка Описание
Экспорт значений настроек во внешний конфигурационный файл (.ini), который в последствии может быть загружен обратно.
Загрузка параметров хранящихся в конфигурационном файле (.ini), заменяя текущие значения.

Project Category

Содержит опции, которые описывают, как ведет себя проект.

Название Описание
Description Позволяет задать информацию о вашем проекте, такую как : название проекта, версия, название компании, авторские права и др. В онсновном это надо информации о проекте, и не влияет на то, как проект работает или седёт себя
Maps & Modes Содержит параметры для указания, какие карты и режимы загружаются по умолчанию и как они загружаются. Есть также настройки для экрана локального мультиплеера.
Movies Позволяет вам устанавливать запуск фильмов и некоторые настройки того, как они должны работать.
Packaging Содержит параметры используемые для упаковки вашей игры, такие как — настройка расположения контента, локализации, сборки конфигураций и др.
Supported Platforms Указание целевой платформы проекта.
Target Hardware Даёт вам выбрать, как ваш проект должен быть оптимизирован, основываясь на целевом железе (Пк или мобилка)

Engine Category

Содержит опции для конкретных систем и параметров движка.

Название Описание
AI System Содержит базовые опции для систем ИИ.
Animation Содержит параметры для анимаций используемых в редакторе.
Audio Содержит опции для настроек дефолтного уровня качества звука и последующего его повышения.
Collision Даёт вам возможность установить и настроить различные настройки колизии
Console Даёт вам установить ваши собственные внутриигровые консольные команды.
Cooker Содержит различные опции запаковки; такие как качество сжатия текстур.
Crowd Manager Содержит набор настраиваемых параметров для управления ИИ толпы
Garbage Collection Настройка того, как Garbage Collection будет рабоать в вашей игре.
General Settings Содержит опции, используемые движком и редактором при инициализаии и запуске, такие как дефолтные шрифты, базовые классы, материалы, частота кадров и тд.
Input Даёт вам настроить действия и осевые привязки (привязки кнопок и другие привязки) для вашей игры.

Привязки кнопок для игры, а не для редактора.

Navigation Mesh Содержит опции для конфигурации того, как навигационные меши будут сгенерированны и отображены.
Navigation System Даёт вам сконфигурировать навигационную систему.
Network Содержит опци для сетевой работы.
Physics Содержит дефолтные опции физики в вашей игре.Это также даёт вам настроить ваш собственный тип поверхности для ваших физических материалов и указать насколько точен будет расчёт физики.
Rendering Содержит дефолтные настройки для множества опций рендера.Тут также много опций по настройке дефолтных пост процессов,текстур,освещения, и тд.
Streaming Даёт вам сконфигурировать различные опции стриминга для стриминга пакетов, ввода-вывода, и стриминга уровней.
Tutorials Даёт вам установить какие обучения будут доступны в этом проекте.
User Interface Содержит настройки контролирующие Slate и UMG, такие как масштабирование DPI, курсор, и Render Focus Rule.

Editor Category

Содержит опции того, как редактор должен выглядеть и чувствовать себя на уровне проекта.

Название Описание
2D Содержит опции конфигурации того, как редеактор 2D уровней должен работать.
Appearance Содержит опции внешнего вида редактора.Есть настройки для изменения того, как единицы измерения будут отображатся в проекте; к примеру, дюймы/сантиметры, цельсий/фаренгейт.
Paper2D — Import Даёт вам установить то, как 2D спрайты должны быть обработаны когда импортируются.
Sequencer Настройки плагина Sequencer.

Platforms Category

Настройки различных платформ и их SDK.

Название Описание
Android Настройки для запуска на платформе Android.
Android SDK Место установки Android SDK.

Данная настройка применяется ко всем проектам.

HTML5 Настройки для запуска на платформе HTML5.

Данная настройка применяется ко всем проектам.

HTML5 SDK Даёт вам выбрать путь к SDK и устройствам.

Данная настройка применяется ко всем проектам.

iOS Настройки для запуска на платформе IOS.
Windows Настройки для запуска на платформе Windows.

Plugins Category

Содержит настройки выбранного плагина.

Название Описание
Paper2D Содержит настройки Paper2D плагина.
Slate Remote Содержит настройки Slate Remote Server.
UDP Messaging Конфигурация настроек для UDP Messaging плагина.

uengine.ru


Prostoy-Site | Все права защищены © 2018 | Карта сайта