Я думаю, что современные игры должны были избавиться от загрузочных экранов.
Я предполагаю, что настоящая причина того, что у нас все еще есть экраны загрузки, заключается в том, что большинство игр предназначено для работы на оборудовании Xbox 360. Как таковые они будут ограничены в количестве оперативной памяти, в которую они могут загружать вещи, и в сколько потоков они могут выполнять. Если у вас недостаточно оперативной памяти, вам нужно будет удалить много памяти из памяти, а затем перезагрузить ее с диска. Также проще загрузить все сразу.
Есть также моменты, когда такие вещи, как жесткий диск может остановиться. Что происходит, если пользователь запускает антивирус в фоновом режиме. Если ваш материал не загружается заранее, вам может потребоваться приостановить игру, пока она ожидает загрузки этого меша или спонтанно появляются вещи.
Такие игры, как Skyrim, могут предоставить вам широкий открытый мир, по которому вы можете бегать столько, сколько захотите, но как только вы открываете дверь, чтобы загрузить относительно небольшое подземелье, вы застреваете с загрузочным экраном.
Единственная причина, по которой я мог видеть экран загрузки подземелья, заключается в том, что они используют какое-то сверхтяжелое предварительно запеченное освещение, используемое для внутренних сцен, которое, если оно достаточно велико для загрузки (сделано из 1 гигантской сетки или имеет подробные световые карты), или нуждается в некоторых вычислениях, которые необходимо выполнить во время выполнения. Я полагаю, что подземелья Скайрима просто построены из модульных сеток, а не из одной гигантской сетки (по крайней мере, я думаю, что Обливион где).
Нет никакой реальной причины загружать больше, чем то, что вы можете увидеть при входе на уровень. Точно так же, как игры не рендерит то, что вы можете видеть, вы можете отбирать то, что вам действительно нужно, чтобы быть загруженным сразу. Вы также можете засунуть много пустышек. Затем вы можете использовать многопоточность для асинхронной загрузки объектов в окружающие области, их сеток, текстур и т. Д., Когда игрок перемещается по среде.
Как бы я угробил загрузочные экраны следующим образом:
Загрузите основные свойства игрового мира. Глобальные скрипты.
Загрузите позицию игрока.
Загрузите узел gridcell / BSP этой позиции.
Загрузите только ограничительные рамки объектов в этой ячейке.
Выясните, что на самом деле будет отображаться (тесты на ограничивающих прямоугольниках, возможно, тесты на рендеринг окклюзии)
Загрузите сетки материала, который представлен.
Загрузите материалы, текстуры сеток.
Выполните больше тестов, чтобы увидеть, видны ли еще регионы и нужно ли их загружать (т. Е. Запросить визуализацию всей ячейки сетки как гигантского куба).
Как только все видимое будет загружено, начните рендеринг.
Загрузите оставшиеся вещи в ячейки и загрузите больше материала по мере необходимости. Загрузите соседние регионы и сделайте некоторый базовый прогноз на движения игроков, чтобы выбрать, какие регионы должны быть загружены первыми. Продолжайте, пока память не заполнится.
Есть и другие вещи, которые необходимо учитывать. Например, некоторые вещи должны быть загружены, даже если они не видны. Например, враг, стоящий позади игрока за пределами региона, должен быть активным, чтобы он мог бежать к игроку и атаковать его. Возможно, материал для проверки окклюзии необязателен, так как вы сразу захотите загрузить что-нибудь рядом, чтобы оно было там, когда игрок двигается, и это становится видимым, но он может сбрить секунду, чтобы перейти прямо к рендеру (но если время так близко, то вы Вероятно, возникнут проблемы с появлением материала).
Если возможно, эти шаги должны быть начаты до того, как они потребуются, в фоновом режиме. Например, если вы находитесь в главном меню игры, оно должно начать предварительно загружать начальную область загрузки после того, как вы выбрали «Новая игра» (или как только появится меню) и последнее сохранение для продолжения. Другие сохранения могут предварительно загружаться, когда вы наводите на них мышь. Когда вы приближаетесь к двери подземелья, она должна начать загружаться на следующий уровень (хотя, если вы можете сделать это, вам не нужны специальные двери подземелья, поскольку они действительно только вызывают экран загрузки). Загрузка в фоновом режиме во время воспроизведения видео. Таким образом, вам даже не понадобится короткий начальный экран загрузки.
Вы можете пропустить многое из этого, если не возражаете против появления вещей. Что-то вроде Second Life просто оставляет вас с появлением материала, так как его извлекают из Интернета, вы ничего не можете с этим поделать. Кредо Убийцы имеет тот эффект, когда вещи врезаются в сцену, так что вы можете иметь дело с вещами по художественным соображениям.