Какова логика «загрузки» сцен в играх?


8

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

До сих пор я инстанцирую / создаю объекты во время выполнения, и у меня не возникает задержек или подобных проблем. Так для чего используются сцены «Загрузка» в других играх? Есть ли какая-то функциональность или конкретизация конкретных объектов для следующего раунда или этапа? Если да, зачем они мне, если я не задерживаюсь?


6
Ресурсы, необходимые для других игр, могут быть намного выше, чем ваши собственные. Поэтому сцены загрузки необходимы для маскировки периода загрузки этих ресурсов (возможно, с медленного жесткого диска).
замедленная

2
Какие "все игры" вы имеете в виду? Во многих играх вообще нет экранов загрузки.
Никол Болас

Ответы:


10

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


1

Экран загрузки также можно использовать как «вырезанную сцену» (http://en.wikipedia.org/wiki/Cutscene), чтобы дать пользователю возможность перевести дух, узнать больше об истории и особенностях игры или попытаться продать им платную версию / покупку в приложении


1

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

Я предполагаю, что настоящая причина того, что у нас все еще есть экраны загрузки, заключается в том, что большинство игр предназначено для работы на оборудовании Xbox 360. Как таковые они будут ограничены в количестве оперативной памяти, в которую они могут загружать вещи, и в сколько потоков они могут выполнять. Если у вас недостаточно оперативной памяти, вам нужно будет удалить много памяти из памяти, а затем перезагрузить ее с диска. Также проще загрузить все сразу.

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

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

Единственная причина, по которой я мог видеть экран загрузки подземелья, заключается в том, что они используют какое-то сверхтяжелое предварительно запеченное освещение, используемое для внутренних сцен, которое, если оно достаточно велико для загрузки (сделано из 1 гигантской сетки или имеет подробные световые карты), или нуждается в некоторых вычислениях, которые необходимо выполнить во время выполнения. Я полагаю, что подземелья Скайрима просто построены из модульных сеток, а не из одной гигантской сетки (по крайней мере, я думаю, что Обливион где).

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

Как бы я угробил загрузочные экраны следующим образом:

  1. Загрузите основные свойства игрового мира. Глобальные скрипты.

  2. Загрузите позицию игрока.

  3. Загрузите узел gridcell / BSP этой позиции.

  4. Загрузите только ограничительные рамки объектов в этой ячейке.

  5. Выясните, что на самом деле будет отображаться (тесты на ограничивающих прямоугольниках, возможно, тесты на рендеринг окклюзии)

  6. Загрузите сетки материала, который представлен.

  7. Загрузите материалы, текстуры сеток.

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

  9. Как только все видимое будет загружено, начните рендеринг.

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

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

Если возможно, эти шаги должны быть начаты до того, как они потребуются, в фоновом режиме. Например, если вы находитесь в главном меню игры, оно должно начать предварительно загружать начальную область загрузки после того, как вы выбрали «Новая игра» (или как только появится меню) и последнее сохранение для продолжения. Другие сохранения могут предварительно загружаться, когда вы наводите на них мышь. Когда вы приближаетесь к двери подземелья, она должна начать загружаться на следующий уровень (хотя, если вы можете сделать это, вам не нужны специальные двери подземелья, поскольку они действительно только вызывают экран загрузки). Загрузка в фоновом режиме во время воспроизведения видео. Таким образом, вам даже не понадобится короткий начальный экран загрузки.

Вы можете пропустить многое из этого, если не возражаете против появления вещей. Что-то вроде Second Life просто оставляет вас с появлением материала, так как его извлекают из Интернета, вы ничего не можете с этим поделать. Кредо Убийцы имеет тот эффект, когда вещи врезаются в сцену, так что вы можете иметь дело с вещами по художественным соображениям.


2
К сожалению, это нереально для многих игр. В одной области может быть достаточно текстур, чтобы едва уместиться в видеопамять GPU среднего уровня, поэтому вы не можете предварительно загрузить как начальную область, так и последнюю область сохранения (и что насчет других сохранений, которые пользователь может выбрать?). Даже с потоковыми непрерывными мирами, как в Skyrim, что происходит с порталами или скриптами, которые просто телепортируют игрока в другую область? При 8 ГБ сжатых данных - большая часть которых является текстурными данными - даже современные высококлассные игровые ПК не могут предварительно загрузить все.
Шон Миддледич

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

0

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

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

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

Вопросы, касающиеся Unity, можно задать и на форуме Unity ответы . Эти пользователи более ориентированы на Unity, а не на общие вопросы по игровым движкам.


Этот ответ, кажется, не отвечает на вопрос: не «как мне загрузить уровни?», А «почему игрок видит« Загрузка ... »?»
Кевин Рид

@KevinReid Ах да, вы, вероятно, правы в этом. Я не уловил вопросительные знаки, наверное.
Marnix

0

Сцена 3D-графики требует времени для настройки, и ее поддержание может вывести компьютер за его пределы. Содержание требует обширной памяти. Видимое содержание требует длительного времени. И когда наблюдатель уменьшает масштаб и смотрит на горизонт, очень много всего содержимого может стать видимым. (Когда-нибудь замечали, как некоторые игры работают лучше, если вы не уменьшаете масштаб слишком сильно? Когда-нибудь замечали, как некоторые игры не позволяют уменьшать масштаб слишком далеко или смотреть на горизонт?)

Решение состоит в том, чтобы настроить отдельные сцены с ограниченным содержанием. Теперь игра работает нормально, пока наблюдатель не покинет одну сцену за другой. В этот момент старая сцена отбрасывается, и создается новая сцена, которая занимает время (и экран загрузки, чтобы не дать пользователю скучать). 3D-движки обычно стараются выполнить как можно больше работы во время настройки, чтобы сделать графику как можно более плавной позже.

Я видел игры, которые, кажется, позволяют быстрое, свободное движение и масштабирование по всему миру. Там, наверное, много гениальности, много кропотливого программирования и мастерства; они не просто скачали бесплатное графическое программное обеспечение.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.