Чанкинг / кеширование больших уровней в одиночной игре

8

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

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

Является ли лучшей идеей сделать уровни достаточно сложными, но также и достаточно оптимизированными, чтобы всегда быть постоянными в памяти, но реализовать микро / макро-точки перехода, которые позволяют прыгать в абсолютно отдаленную точку (то есть на совершенно новый уровень), таким образом, забывая о согласованности мира и иллюзии меняющегося мира. Кроме того, это позволило бы нам следовать слегка линейной истории в, казалось бы, нелинейном мире. Было бы возможно просто применить новое состояние к существующему состоянию «дальнего» уровня, если мы хотим вернуть игрока к нему.

user802232
источник

Ответы:

6

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

Сначала давайте поговорим о споре, поскольку в ее галактической фазе вы можете легко увидеть, как все это работает:

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

В забвении дело обстоит немного иначе, хотя основная идея та же. когда вы гуляете по дикой местности, игра постоянно загружает и выгружает участки. Если вы пытались сыграть в забвение на PS3, этот процесс вызвал незначительные задержки в переходной области (или, по крайней мере, я слышал, что они это сделали). Есть также некоторые области, которые полностью останавливают игру, и вы видите загрузочный экран, как при входе в пещеры, в которых вы живете. Используя этот метод, они легко уменьшили сложность и использование памяти в городах. просто подумайте, сколько домов в городе и сколько памяти они будут использовать, если захотят их загрузить. Также обратите внимание, что если они хотят использовать одну и ту же систему загрузки и выгрузки, когда вы приближаетесь к домам, им нужна почти вся пропускная способность жесткого диска, и это может повредить жесткий диск.

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

Ali1S232
источник