Вот уже почти 2 года я наяривал этот треклятый анриал, пытаясь создать оптимизированный открытый мир. И знаете что? Стоковый Unreal Engine вообще не рассчитан на так называемый Open World, который они с таким усердием продвигают последние годы. И сейчас я вам расскажу почему.
Я изобретаю лучшее средство для освобождения себя от реального мира. Советуем моды, модпаки, приколы из Римворлда и тд.
Вообще ничего не ждал от вышедшего демо по предстоящей игре, но попробовав и пройдя её, загорелся интерес и вишлист пополнился.
Мои надежды растворились, как слёзы во время дождя. Сиквел - буквально технический и духовный клон оригинала, со всеми вытекающими.
И о чудо: игра замечательно воспроизводится на консолях и не требует для таких красот видеокарт уровня 4080. Речь о предстоящей Kingdom Come Deliverance 2.
Привет, DTF.
Я главный (и единственный) разработчик средневековой RPG-Strategy игры Mainland, аналога Mount and Blade, но с кооперативом.
Кстати, демо будет доступно уже в феврале
Последние 5 лет я занимаюсь разработкой в Unreal Engine в свободное время.
За это время у меня сложилось очень хорошее отношение к этому движку и сейчас я вам объясню, почем…
Кратко рассказываю, что это за игра такая. И правда ли, что она настолько крутая, как о ней говорят.
Решил коротко рассказать про некоторые хитрые штуковины, которые используются при разработке игр. Штуки эти общеупотребимы, поэтому используются почти во всех играх. И если вы далеки от разработки игр, то некоторые штуки, думаю, вам будет интересно узнать.
Небольшая заметка с перечислением и примерами механик которых не хватает в приключениях, реализация оных, как правило, не очень сложна - но их просто не делают.
Кошачий дао-панк, готический трансгуманизм, королевство в футляре, зверинец в бездонном колодце.
Unreal Engine - это не волшебный движок с кнопкой "Сделать збс", опенворлды на анриле имеют кучу проблем, ряд из которых остался со времен четверки.
1. HLOD в целом запекатеся нормально, но может выжрать тонну памяти и ресурсов (в зависимости от чанка). Если проект крупный, то этим вообще занимается отдельная выделенная машина, которая пересобирает дальние лоды. После чего на финальном этапе разработке игры их еще и ручками лучше перерисовать.
2. World Partition все еще имеет ряд болячек с World Composition, о котором я писал когда-то статейку + о ряде болячек рассказывают на выступлениях, посмотри последний Unreal Fest, в том числе от CDPR. Как это лечится? Берется движок и переписывается стриминг, регистрация экторов или вообще отказ от экторов для статики и т.д.
3. Да, не надо делать сложной логики на констракшене и BeginPlay особенно у того, что стримится, пачка экторов появляется одновременно и бьет по производительности. Нужно следить за тем, что делаешь.
4. Да, работа в редакторе и в билде разнится. Потому финальную производительность нужно смотреть только в билде, и билды нужны регулярные.
5. Да, систему сохранений надо писать самому, ровно как и разбираться с возможностью перемещать объекты между чанками и чтоб это сохранялось и т.д. На эту тему тоже когда-то рассказывал, как подобное делать.
6. Про люмены и наниты, они жрущие, причем как для разработчика так и для игрока, нужно собирать сцену с учетом таргет железа и следить за тем, что загружено единовременно, что и как влияет на производительность.
В общем внезапно да, если собираешь что-то более менее сложное, с движком нужно работать. Если нет возможности менять исходники, значит следить за ограничениями и стараться не делать чего-то, что за эти ограничения вылезает (не пихать кучу логики на спаун, следить за тем что стримится и когда, за распределением ресурсов, количестве экторов в радиусе стриминга и т.д.)
Короче, "библиотечные методы" анрила - это буквально технодемки, которые в проекте лучше не использовать.
Все что выкладывают эпики (демка матрицы, лира и прочее) это технодемки и точно не является примером того как стоит делать.
А вот про "библиотечные методы", надо просто понимать их плюсы и минусы, разбираться в них, чтобы решать что использовать, а то нет и как это использовать.
UE - это инструмент, да еще и универсальный от медиапродакшена до мобилок (хотя с последним уже не особо для слабых дейвайсов). С инструментом надо уметь работать и учитывать его особенности, плюсы и недостатки. А просто так из коробки под все случаи жизни в нем нет.
С инструментом надо уметь работать и учитывать его особенности, плюсы и недостатки. А просто так из коробки под все случаи жизни в нем нет.Тут буквально примеры "ложки с дыркой".
- Система загрузки? Да, но она застряла в эпохе HalfLife1.
- Система проверки телепорта? Да, но она заточена только для пустого/прогруженного пространства.
- Система спавна статик объектов? Да, но мы сэкономили целую 1 булевую переменную/индексную таблицу и при спавне пересчитываем коллизии, вместо наивного добавления из индекса.
Это бувкально "вот тебе ложка" - "но в ней дырка!" - "С инструментом надо уметь работать и учитывать его особенности, плюсы и недостатки.".
"вот тебе ложка" - "но в ней дырка!" - В остальных ложках тоже дырка, в некоторых не одна. Не варите жидкий суп. Сделайте свою ложку. Или:
"С инструментом надо уметь работать и учитывать его особенности, плюсы и недостатки."
А можно на заводе будут сразу делать нормальную ложку, а не как с УАЗ Буханкой?
"Да, но она застряла в эпохе HalfLife1" - ну нет, в HL1 блокирующая загрузка, никакой асинхронной подгрузки ресурсов
"Система проверки телепорта?" что это такое? такого нет, движок не знает за тебя что нужно прогрузить что нет, хочешь дождаться окончания стриминга при телепорте, такой функционал есть из коробки, автор его просто не нашел
Приключений хватает конечно, но и писать с нуля не приходится все.
"Да, но она застряла в эпохе HalfLife1" - ну нет, в HL1 блокирующая загрузка, никакой асинхронной подгрузки ресурсовПеречитай статью.
"Система проверки телепорта?" что это такое? такого нет, движок не знает за тебя что нужно прогрузить что нет, хочешь дождаться окончания стриминга при телепорте, такой функционал есть из коробки, автор его просто не нашел движок не знает за тебя что нужно прогрузитьЗнает. Если я ТПшкаюсь в непрогруженную область, нужно проверить условия её прогрузки. От контроллера открытого мира (!)ожидается, что он из коробки будет за этим поглядывать, хотябы в "общем случае" прогрузки.
автор его просто не нашелЗначит эффективно его нет, если человек ищущий как решить проблему не может найти решение. Либо мануал - говно (единственный хороший который я видел - был у PHP. У Юнити всё разделено на "визуальную" и "кодерскую" части, которые ещё надо вместе свести, а про примеры с MSDN я вообще молчу, например: "List.ToString()" - адский код, где ToString() используется 2 раза и ни слова о том сколько мусора он генерирует.
"Перечитай статью" - то что у автора не получилось справиться с задачей не показатель вообще =)
"Если я ТПшкаюсь в непрогруженную область, нужно проверить условия её прогрузки." - движок же не знает, нужно тебе проверить условия ее подгрузки или нет, движок универсальный под любые игры, а может у меня в игре летающий персонаж и мне не важно что загрузилось абсолютно все, может у меня в игре есть постпроцесс, который имитирует эффект и не паузит игру, а фоном я хочу прогрузить все асинхронно и т.д. Для явной прогрузки всего есть функция - дождаться пока закончится стриминг, которую автор не нашел.
Да, документация у эпиков говно это факт, надо либо учиться гуглить (а гуглится довольно просто), либо погружаться в исходники. И да, это тоже необходимый навык - читать исходники движка, если делаешь что-то более-менее серьезное.
Пойми, я не говорю что движок идеален, я на него ругаюсь каждый день уже лет 10 как, но при всем при этом я не могу сказать что в нем прям ничего не работает. Просто да, порог входа высокий, документация говно, а ряд фичей в сыром виде. Если это не устраивает, то нужно брать другой движок.
Да, работа в редакторе и в билде разнится. Потому финальную производительность нужно смотреть только в билде, и билды нужны регулярные.
фига се у них конкурсы интересные
А мне и не нужна кнопка "Сделать збс", мне нужно чтобы инструмент работал так, как его продвигают. У меня он так не работает, и еще куча народа на форумах сталкиваются с тем же.
Как это лечится? Берется движок и переписывается стриминг, регистрация экторов или вообще отказ от экторов для статики и т.д.Так я и написал:
Стоковый Unreal Engine вообще не рассчитан на так называемый Open World
Короче надо работать. И походу за это денюшку разрабы и получают. Особенно хорошие, которые умеют делать игры с нормальным фпс.
Здравствуйте! "На эту тему тоже когда-то рассказывал, как подобное делать" - это где то в открытом доступе? Если у вас есть свой канал, можете дать на него ссылку?