Стриминг
Стриминг (англ. streaming) — в компьютерных играх подгрузка игровых данных, которые «скоро потребуются», прямо по ходу игры. Например: как только игровой персонаж приближается к городу, в фоновом режиме загружаются модели и текстуры города.
Потребность в стриминге
При повышении линейной плотности записи дискового накопителя в n раз (при тех же геометрических размерах, количестве головок и частоте вращения) в те же n раз повысится и скорость чтения; объём же увеличится в n² раз. Другими словами, при увеличении объёма жёсткого диска в 100 раз его скорость повысится всего в 10 раз. Поэтому загрузка игр, антивирусное сканирование, дефрагментация, форматирование и т. д. на современных (2009) компьютерах длится куда дольше, чем на компьютерах 10-летней давности. Хотя в играх эта разница несколько «скрадывалась» сжатием игровых данных, цифры налицо: Warcraft II на мощных компьютерах своего времени загружался за одну-две секунды; Warcraft III на мощных компьютерах своего времени — примерно за полминуты[1].
Излишне долгую загрузку первыми ощутили программисты под приставки PlayStation и PlayStation 2. Когда ПК стали способны обращаться к устройствам ввода-вывода, не потребляя ресурс процессора, стриминг стал широко применяться и на ПК. Одной из первых ПК-игр со стримингом был Diablo II: когда персонаж подходил к воротам уровня, то, что за воротами, было с большой вероятностью загружено.
Помимо решения проблемы долгой загрузки, стриминг позволяет делать огромные уровни, не умещающиеся целиком в памяти. Это важно для телевизионных приставок, у которых памяти, как правило, меньше, чем у ПК своего времени: например, у первой PlayStation было всего 4 мегабайта памяти (включая видеопамять)[2].
Подходы
Программисту приходится решать следующие вопросы.
- Как загрузить игровые данные таким образом, чтобы пользователь не ощутил замедление.
- Как не допустить «гонок» между загрузчиком и движком.
- Что выгружать, что оставлять в памяти, что загружать.
- Что делать, если нужных данных в памяти не оказалось.
- Как максимально полно задействовать быстродействие диска.
В каждом из проектов эти вопросы решаются по-своему — в зависимости от соотношения объёмов моделей, текстур, звуков и т. д.
Обычно поступают так. Наиболее низкий уровень детализации графики никогда не выгружается и служит «аварийным» решением, когда соответствующая модель или текстура внезапно потребовалась. Для того, чтобы не было «гонок», после каждого кадра загрузчик синхронизируется с движком, помечая уже загруженные части игры как «доступные». Остаётся только разработать некоторую метрику, которая определяет, насколько скоро текстура или модель будет нужна. Здесь уже шаблонов нет: например, в автосимуляторе трассу можно разбить на некоторое количество секторов и подгружать ближайшие к машине игрока; в шутере — на квадраты. Если игрок приближается к сектору, в котором спрятан гранатомёт, надо полагать, что потребуется не только модель гранатомёта, лежащего на уровне, но и модель того же гранатомёта в руках игрока, модель летящей гранаты, звуки стрельбы гранатомёта и эффекты взрыва.
Быстродействие диска максимально, если области, с которыми приходится иметь дело за одну транзакцию, находятся рядом. Поэтому важен и порядок расположения данных на диске. Чтобы меньше двигать головку, на DVD-играх часть данных приходится дублировать. Чтобы оптимально расположить информацию на DVD, используют эвристические методы наподобие генетического программирования.
Примечания
- Длительная, почти в минуту, загрузка Doom обусловлена неоптимальностью движка, подробнее см. Движок Doom; другие игры, как Quake или Duke Nukem 3D, укладываются в статистику.
- PlayStation очень удобен для сравнения с ПК: у более старых приставок есть ПЗУ картриджа, которого работающий с компакт-диска PlayStation, естественно, лишён.
Ссылки
- Роман Лут. Стриминг и эффективное чтение с DVD (недоступная ссылка) 4. DTF.ru (6 августа 2008). Дата обращения: 22 марта 2011. Архивировано 22 ноября 2010 года.
- Fredrik Lönn. Streaming for Next Generation Games (англ.) 3. Gamasutra (30 ноября 2006). Дата обращения: 22 марта 2011. Архивировано 29 марта 2012 года.