Стриминг

Эта статья находится на начальном уровне проработки, в одной из её версий выборочно используется текст из источника, распространяемого под свободной лицензией
Материал из энциклопедии Руниверсалис

Стриминг (англ. streaming) — в компьютерных играх подгрузка игровых данных, которые «скоро потребуются», прямо по ходу игры. Например: как только игровой персонаж приближается к городу, в фоновом режиме загружаются модели и текстуры города.

Потребность в стриминге

При повышении линейной плотности записи дискового накопителя в n раз (при тех же геометрических размерах, количестве головок и частоте вращения) в те же n раз повысится и скорость чтения; объём же увеличится в n² раз. Другими словами, при увеличении объёма жёсткого диска в 100 раз его скорость повысится всего в 10 раз. Поэтому загрузка игр, антивирусное сканирование, дефрагментация, форматирование и т. д. на современных (2009) компьютерах длится куда дольше, чем на компьютерах 10-летней давности. Хотя в играх эта разница несколько «скрадывалась» сжатием игровых данных, цифры налицо: Warcraft II на мощных компьютерах своего времени загружался за одну-две секунды; Warcraft III на мощных компьютерах своего времени — примерно за полминуты[1].

Излишне долгую загрузку первыми ощутили программисты под приставки PlayStation и PlayStation 2. Когда ПК стали способны обращаться к устройствам ввода-вывода, не потребляя ресурс процессора, стриминг стал широко применяться и на ПК. Одной из первых ПК-игр со стримингом был Diablo II: когда персонаж подходил к воротам уровня, то, что за воротами, было с большой вероятностью загружено.

Помимо решения проблемы долгой загрузки, стриминг позволяет делать огромные уровни, не умещающиеся целиком в памяти. Это важно для телевизионных приставок, у которых памяти, как правило, меньше, чем у ПК своего времени: например, у первой PlayStation было всего 4 мегабайта памяти (включая видеопамять)[2].

Подходы

Программисту приходится решать следующие вопросы.

  • Как загрузить игровые данные таким образом, чтобы пользователь не ощутил замедление.
  • Как не допустить «гонок» между загрузчиком и движком.
  • Что выгружать, что оставлять в памяти, что загружать.
  • Что делать, если нужных данных в памяти не оказалось.
  • Как максимально полно задействовать быстродействие диска.

В каждом из проектов эти вопросы решаются по-своему — в зависимости от соотношения объёмов моделей, текстур, звуков и т. д.

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

Быстродействие диска максимально, если области, с которыми приходится иметь дело за одну транзакцию, находятся рядом. Поэтому важен и порядок расположения данных на диске. Чтобы меньше двигать головку, на DVD-играх часть данных приходится дублировать. Чтобы оптимально расположить информацию на DVD, используют эвристические методы наподобие генетического программирования.

Примечания

  1. Длительная, почти в минуту, загрузка Doom обусловлена неоптимальностью движка, подробнее см. Движок Doom; другие игры, как Quake или Duke Nukem 3D, укладываются в статистику.
  2. PlayStation очень удобен для сравнения с ПК: у более старых приставок есть ПЗУ картриджа, которого работающий с компакт-диска PlayStation, естественно, лишён.

См. также

Ссылки