Точно так же, как гигантские игры с открытым миром динамически загружают огромные карты, разве мы не можем загружать отдельные карты, меню и практически любой интерфейс или настройки 3D с помощью того же метода динамической загрузки? Без изменения среды кажется, что интерфейсы и различные локации в игре могут загружаться динамически так же, как загружаются массивные карты открытого мира, когда вы проходите через них.
Почему это не сделано? Я вижу так много современных игр, где вам приходится ждать минуту или больше, пока идет загрузка матча / карты / уровня. Я знаю, что задержка связана с подключением пиров, но это не займет больше, чем несколько минут в моем опыте. Какие проблемы существуют с этой концепцией, чтобы помешать ее использованию для устранения времени загрузки, связанного с загрузкой данных карты / уровня / интерфейса?
Ответы:
Ответ - да, это можно сделать, в большинстве случаев, по крайней мере, до некоторой степени.
Причин этого не много:
источник
Если в вашем меню содержится масса ресурсов, эти ресурсы требуют времени для загрузки. Вы также не знаете, в каком порядке люди будут перемещаться по вашему меню. Они могут щелкнуть «Параметры» -> «Назад» -> «Кредиты» или «Кредиты -> Назад» -> начать игру в быстрой последовательности. Так что нет разумной стратегии потоковой передачи.
В игре с открытым миром вы знаете, что игрок не будет двигаться быстрее определенной скорости, поэтому вы знаете, что вам не нужно загружать подробные версии далеких локаций, пока они не приблизятся к ним.
источник
Большим фактором в возможности такого решения является предсказуемость того, что требует загрузки. Если игрок загружает совершенно новые уровни без возможности предугадать, что они выберут, полностью беспроблемное решение просто невозможно. Например, когда игрок может выбрать любой уровень в игре для игры, или если у него есть свобода телепортироваться в совершенно разные области в играх с открытым миром.
Некоторые игры Halo начинают загрузку выбранного уровня в фоновом режиме при настройке многопользовательских игр. Это сокращает время ожидания, когда игроки готовы начать игру, и, вероятно, является наиболее близким к такому решению, когда игрок может свободно выбирать разные уровни с совершенно разными активами.
Конечно, вы сказали «без изменения среды», но я просто хотел привести пример Halo , потому что это то, что я хотел бы увидеть больше.
В рамках непрерывной кампании или когда разработчик имеет большой контроль над местоположением игрока, такое решение, безусловно, жизнеспособно, как вы говорите. Naughty Dog любит покончить со временем загрузки, Jak и Daxter, как известно, не имеют времени загрузки на PS2, а Uncharted игры имеют одно время загрузки в начале.
Однако для многих время загрузки просто не является проблемой, требующей решения . Или это проблема , которая очень мало приоритетов разработчиков, когда всегда есть больше , что может быть сделано между предприятием и дата выпуска .
источник
Время.
Вам нужно время, чтобы сэкономить время. Или вам нужны деньги, чтобы восполнить недостаток времени. В любом случае "Нет времени загрузки!" это функция, которую могут предложить только те, кто может позволить себе роскошь. Это требует очень тщательного планирования, и вам нужно очень хорошо понимать, что вы делаете, и не у всех разработчиков игр есть ресурсы для этого.
источник
В конечном итоге, это ограниченные ресурсы.
Игры с открытым миром и особенно ММО в значительной степени ориентированы на предсказуемость - вы всегда знаете, какие данные вам нужно загружать заранее. Вы можете видеть это в архитектуре миров - в любое время, когда нужно загрузить много ресурсов, у вас есть какой-то способ помешать пользователю увидеть то, что еще не загружено. Наиболее распространенный способ - это ворота и входы, которые блокируют ваш взгляд в следующую область на критические несколько секунд, необходимые для загрузки. Большинство MMO также используют менее детализированные модели и текстуры, что значительно сокращает время загрузки.
Некоторые вещи все еще непредсказуемы, даже при тщательном дизайне. Например, игроки могут носить нестандартные баннеры, которые показываются только после отправки соответствующих данных на ваш компьютер по сети. Конечно, большинство игр пытаются ограничить это, чтобы сделать его более дешевым (например, баннеры Diablo III представляют собой простые композиции, которые легко отправлять как можно меньше байтов данных). Но, в конечном счете, иногда вам просто нужно дождаться получения данных. И вам нужно что- то показывать во время загрузки - во многих играх это может привести к перерыву в погружении, когда вы видите серую модель с низкой детализацией, отображаемую в ожидании загрузки данных.
И со всем этим, загрузка, как это - решенная проблема (TM), но это не облегчает. Это требует больших ресурсов и времени, как для оптимизации ресурсов, так и для их использования для обеспечения беспрепятственного воспроизведения, а также для самого кода - асинхронный код сложен. Это также может означать уменьшение игрового опыта, даже если все идет хорошо - это означает, что вы должны убедиться, что вы не пересекаете пропускную способность вашего наименьшего общего знаменателя, поэтому вам нужно снизить качество моделей и текстур или сделать их менее разнообразны, а геометрия ваших миров строго ограничена. Если вы этого не сделаете, игра будет довольно непригодной для игры - хотя я помню людей, которые играли в игры, для загрузки которых потребовалось 10 минут (или даже больше!), Просто потому, что их компьютер не вполне справлялся с задачей, игра Сам после этого нормально работает. Если бы вместо этого была бесшовная загрузка, игра просто замерзала бы или показывала уродливые текстуры и модели все время, ожидая загрузки данных. Отложенная загрузка не является беспроигрышной, это компромисс, как и большинство вещей в разработке :)
источник
Одной из причин динамической загрузки не всегда является идеальное решение, которое другие ответы на самом деле не рассматривали, я думаю, это также всплывающие окна и другие графические артефакты.
Предсказание, что загружать, а что не загружать, часто терпит неудачу, и это может быть отвлекающим моментом, когда это происходит. Один из худших примеров этого был в Rage by id Software. По крайней мере, в ранних версиях системы мегатекстуры делали так, что даже что-то вроде вращения слишком быстро заставляло появляться огромные количества текстуры и даже геометрические артефакты, прежде чем постепенно исчезать.
Эти проблемы просто не проблема, все предварительно загружено.
Нужно учитывать не то, что загружать, а что выгружать. Когда у вас есть только столько бюджета на место, когда вы загружаете новые вещи, что старые нужно удалить? Насколько вы уверены, что эти активы не будут использоваться в течение следующих нескольких секунд? Это сложные проблемы для решения.
Если каждое игровое состояние достаточно мало, чтобы вписаться в общий системный бюджет, тогда каждое преимущество очевидно, вместо загрузки, вы просто переходите прямо на уровень и все постепенно исчезает во время игры. Но, как показывают основные ответы, время загрузки маленькой игры не будет слишком большим, чтобы о нем волноваться.
Я думаю, что стоит подумать о причинах, по которым системы с динамической загрузкой были созданы изначально, в том, что вы знаете, что некоторые из ваших состояний игрового процесса могут быть слишком большими для обычной системы, и игру такого размера просто невозможно предварительно загрузить полностью.
источник
Одна общая причина заключается в том, что не всегда одинаково легко определить, понадобится ли ресурс в ближайшем будущем.
Так как вы использовали пейджинг ландшафта в качестве примера, я продолжу с этим.
Вполне разумно, если вы находитесь в данной сетке карты, чтобы загрузить все соседние сетки карты в фоновом режиме. Вы знаете, что пользователь может в лучшем случае ввести один из них. Когда они это сделают, вы можете выгрузить те, которые больше не примыкают, и загрузить те, которые сейчас есть. Это вы заметили.
А теперь представьте быстрое путешествие. Нет абсолютно никакого способа предсказать, куда пользователь может пойти. У них есть (обычно) почти вся карта на выбор. Предварительная загрузка всех возможных мест быстрого перемещения заняла бы слишком много памяти (в первую очередь вы могли бы также загрузить всю карту в память) и слишком много времени (при условии, что у вас не была предварительно загружена вся карта). Когда это произойдет? Когда они открывают диалог быстрого перемещения? Проблема станет только в несколько раз хуже!
Вот почему даже в большинстве игр с пейджингом без нагрузки все еще есть экраны загрузки при быстром путешествии. Также, если вы двигаетесь достаточно быстро, вы можете иногда запускать экраны загрузки даже в играх с картами без нагрузки (я помню, что делал это в TES Oblivion).
Теперь представьте, что это применимо к игровым ресурсам в целом, где отношения часто не очевидны. В конечном итоге вам придется либо загрузить все возможные варианты, либо начать гадать, что собирается делать пользователь. Гадание является дорогостоящим (как в разработке, так и в процессоре) и сложным беспорядком для программирования. Конкретные примеры:
Могут быть способы решения некоторых из этих проблем, но это стоит реальных денег, чтобы разобраться. Большинство геймеров допускают разумные экраны загрузки и, во всяком случае, склонны тратить больше на оборудование, чтобы смягчить их. Это рассматривается как аппаратная проблема, а не проблема игры , за исключением случаев, когда она чрезмерно чрезмерна или иным образом нарушает работу (например, загрузка в середине уровней).
И имейте в виду, фоновая загрузка не является бесплатной. Обычно современное использование фоновой загрузки ландшафта и некоторых файлов модели оказывает минимальное влияние, но если вы вдруг догадываетесь о множестве различных ресурсов, особенно если у вас нет надежных метрик и вам нужно выгрузить много ресурсов и загрузить лишние. Вы можете измельчить систему в пыль.
Идея фоновой загрузки состоит в том, чтобы использовать мертвые циклы для лучшего использования, но есть только так много мертвых циклов для использования. То же самое касается памяти - предварительная загрузка может существенно увеличить использование памяти в игре. С помощью экрана загрузки вы можете сбросить существующие ресурсы. Нет такой роскоши с фоновой загрузкой, это означает, что она может удвоить требования к памяти игры только на этот счет.
источник
Это общая проблема, возникающая из-за того, что игры представляют собой программные продукты реального времени, в которых поздняя доставка контента не так полезна, как своевременная доставка (в отличие от жестких в реальном времени, таких как автомобили в компьютерах, где поздняя доставка может быть не лучше, чем вообще не доставлять). Вы должны решить, что загрузить и где.
Иногда поздние поставки особенно плохи. Например, если вам разрешено бегать по миру до того, как все стены будут загружены, вы можете оказаться за стеной, которую вы никогда не могли бы получить, если игра загрузила стены перед тем, как позволить вам двигаться. Не всегда легко определить, когда вы можете избежать «ленивой» загрузки контента и когда вам нужно гарантировать, что контент полностью загружен.
Динамическая загрузка также намного сложнее. Вам постоянно нужно подумать, что делать, если ресурс еще не загружен. Это истощение ресурсов для разработки. Гораздо проще разрабатывать, когда можно полагаться на имеющиеся ресурсы.
Задержки также не всегда приемлемы. Я слышал о случаях в Starcraft, когда вы «разогревали» свою игру, загружая карту, которая имеет побочный эффект кэширования каждой динамически загружаемой модели / изображения. Затем вы выходите и играете в игру как обычно. Для элитных геймеров это минимизировало заикание графического интерфейса, что фактически повлияло на их игровой процесс. Попытка выяснить, какие задержки будут приемлемы для пользователей, а какие нет, будет непростой задачей.
источник