Чтобы избавиться от экранов загрузки применяется стриминг – загрузка ресурсов на фоне. Статья рассматривает преимущества и проблемы этой технологии, стратегии загрузки, реализацию в современных «движках», а также вопросы эффективного стриминга с DVD.
2. Что такое стриминг?
- загрузка ресурсов на фоне к тому моменту, когда они
понадобятся
3. Зачем нужен стриминг?
- большие детализированные игровые миры, все ресурсы
которых не помещаются в оперативную память - в памяти
находится только «активный» контент
- непрерывный геймплей – отсутствие экранов загрузки
- сокращение времени начальной загрузки (New game)
- преодоление технических ограничений консолей
- преодоление проблем медленных устройств хранения
(DVD, сетевое соединение)
4. Что можно стримить?
- текстуры
- звуки, музыка
- модели
- уровни
- анимация
- collision mesh
- видео
- и т.д.
5. Что включает в себя
поддержка стриминга?
- возможность загружать ресурсы на фоне
- ориентацию «движка» на асинхронную работу с ресурсами
- стратегию предварительной загрузки
- стратегию выгрузки ресурсов при недостатке памяти
7. Огромный мир – игрок может
идти в любую сторону
-разделение на зоны
- в данный момент в
памяти находится
«активная» зона и ее
ближайшие соседи
Пример: GTAIII, Oblivion,
Gothic, Operation “Flashpoint”
8. Уникальные и shared ресусы
Стратегия 1. Все ресурсы одной зоны – уникальны.
- приводит к дублированию одинаковых ресурсов в памяти
и на DVD
- увеличивается размер зоны в памяти
- увеличивается размер игры на диске
- увеличивается объем данных зоны
+ более эффективное чтение с DVD
Данные зоны 1 Текстура А Текстура Б Текстура В
Данные зоны 2 Текстура А Текстура Г Текстура Д
9. Уникальные и shared ресурсы
Стратегия 2. Некоторые типы ресурсов – общие (shared).
Shared ресурсы загружаются при загрузке следующей зоны
(если еще не загружены). Зона увеличивает refCount ресурса.
Текстура А
Данные зоны 1
Текстура Б
Текстура В
Данные зоны 2 Текстура Г
Текстура Д
+ позволяет сэкономить память
+ уменьшается объем загружаемых данных зоны
- приводит к фрагментации памяти
- недетерминированный порядок чтения (много DVD Seek)
10. Уникальные и shared ресурсы
Стратегия 3. Некоторые ресурсы – общие (shared).
Независимый кеш. Shared ресурсы загружаются по
надобности.
Кэш текстур
Текстура А
Данные зоны 1
Текстура Б
Текстура В
Данные зоны 2 Текстура Г
Текстура Д
+ позволяет больше сэкономить память
+ больше уменьшается объем загружаемых данных зоны
дальше
11. Уникальные и shared ресурсы
Стратегия 3 (продолжение)
- приводит к фрагментации памяти
- недетерминированный порядок чтения (много DVD Seek)
- сложная логика взаимодействия кешей:
Для загрузки зоны 2 недостаточно Кеш ресурсов А
памяти. Какой из кешей должен
освободить память? Кеш ресурсов Б
Кеш ресурсов В
- невозможно сформировать
Данные зоны 1
четкие требования к объему
арта
12. Класс Streamable resource
- состояние: не загружен, загружен, загружается в данный
момент
- метод StartBackgroundLoad()
- метод Unload()
- поле: приоритет
---------------------------- для общих ресурсов ----------------------
- поле refCount
----------------- для общих независимых ресурсов ---------------
- поле: lastUsedOnFrame - «последний раз использовался на
кадре»
13. Эффективное чтение на фоне
- hardware thread для чтения данных(99% времени
блокирован I/O операцией)
- hardware thread для распаковки, создания и
инициализации ресурсов)
- финализация ресурсов в основном thread между кадрами
кадр N кадр N+1
Loading thread
Init thread
Main thread
14. Стратегии предварительной
загрузки ресурсов зоны
- при приближении к зоне – по расстоянию
- по видимости
- по тригерам, установленным дизайнерами вручную
Для независимых кешей:
- на основе статистики
- различные эвристики
15. Пока ресурс не загрузился
-используется dummy-ресурс (например, уменьшенная
версия текстуры)
- dummy-ресурс должен быть в памяти всегда
- или объект просто не отображается
- для некоторых типов ресурсов невожножно создать
dummy-ресурс: звуки, collision mesh. Эти ресурсы должны
быть в памяти всегда
- возможное решение: хранить в памяти упакованную
версию такого ресурса, распаковывать при необходимости
16. Dummy-ресурсы
- текстура – уменьшенная версия, 32x32 DXT1 = ~700 байт
(на самом деле больше из-за layout)
- модель – спрайт/нижний LOD/не отображается
- звук – моно, низкий битрейт/упакованный/НЕТ
- уровень – НЕТ
- музыка – не проигрывается
- анимация – НЕТ
- collision mesh – НЕТ
- если ресурс понадобился, а его нет в памяти – возникает
провал FPS
- если сложно/невозможно реализовать стратегию
предварительной загрузки для данного типа ресурса –
нельзя использовать загрузку по надобности.
17. Фрагментация памяти
- актуально для XBOX,PS2,PS3,Nintendo DS, Wii
- Windows, XBOX 360 – не актуально (виртуальная память,
нет фрагментации физической памяти)
Решения:
- зона – линейный блок, in-place construction
- разделение памяти на зоны для разных типов ресурсов,
custom allocators
- сборка мусора (возможна только при использовании ref-
pointers)
18. Насколько большой может
быть зона?
-все «активные» зоны и их общие ресурсы должны
помещаться в оперативную память
-если зоны загружаются в слоты, объем зоны лимитируется
размером слота
- скорость движения игрока: зоны должны успевать
загружаться
19. Насколько большой может
быть зона?
- сегмент дороги – 0.5 км
- скорость машины – 100км/час
- следующий сегмент уже должен
быть в памяти, когда до него 0.1 км
- есть примерно 14,5 сек
- скорость чтения с диска – 6Мб/сек
- размер зоны – 87МБ MAX
20. Физические характеристики
HDD/DVD/Blue Ray
XBOX 360 DL-
PC DVD PS3 Blu-Ray
SATA HDD DVD
12x 2x CLV
12x CAV
Reading speed, Mb/s 30-60Mb/s 8-16Mb/s 8-16Mb/s 9Mb/s
Full stroke seek - 176 170-230ms 350-400ms
1/3 stroke seek
7-20ms 115 110-150ms 50-100ms
(random seek)
Layer change - ? 75ms -
Spin Up - 2800 2000ms ???
http://forum.beyond3d.com/showthread.php?t=37751
21. Загрузка с DVD - пример
- средняя скорость – 12 Mb/s
- seek 120ms = 12*0.12 = 1.44 Mb/s потеряно
- seek+layer change (200ms) = 2.4MB/s потеряно
- Spin up – 2sek = 24Mb/s потеряно
- 3 seek на чтение 0.5 MB:
скорость: 7.68Mb/s
22. Оптимизация чтения с DVD
- основная задача при чтении с DVD/Blue Ray –
минимизация количества Seek
- компрессия ресурсов
- групповые файлы (DVD сектор – 2Кб)
- кеширование на HDD
23. Минимизация количества Seek
-все ресурсы зоны – один линейный блок(Файлы),
дубликаты ресурсов в разных блоках - максимально
эффективное чтение
-расположить зависимые файлы близко друг к другу
-«перетасовка» очереди загрузки для минимизации длины
Seek
- групповые файлы – не нужно seek на каталог, файлы
расположены вплотную
24. Компрессия
- текстуры – DXT/JPEG/ etc.
- звуки – mp3, ogg
- все остальное - ZLIB, LZW etc
Пример.
Чтение:12 Mb/s, Распаковка: 30Mb/s, Compression rate: 0.6
Скорость чтения: 14.3Mb/s
При параллельной распаковке: 20Mb/s
25. Xenus 2 . Стратегия загрузки
При приближении к зоне:
- загружается геометрия уровня, collision mesh, свойста
объектов
По надобности: текстуры, модели, звуки, музыка
Эвристики: зависимость ресурсов (автомобить +
взорванный автомобиль), модель уружия – модель гильз
и т.д.
Некоторые ресурсы всегда в памяти
(шейдеры, строки, описания объектов, диалоги, текстуры
HUD)
26. Минимизация Seek
- групповые файлы (100Mb - 2GB)
- минимизация расстояний между зависимыми файлами:
- группировка файлов по типам(текстуры, модели, уровни)
- генерация графа со связями между файлами (текстура-текстура
(в пределах модели), модель-модель(в пределах зоны), модель-
модель (зависимые модели), звук-звук (в пределах зоны) и т.д.
- чем сильнее связь, тем ближе должны быть файлы
- oценочная функция: S = E (k*distance(f1,f2))^2
27. Минимизация оценочной функции
- ~5000 узлов в графе
- генетический алгоритм
- вставка дубликатов для оптимизации
- 2-24 часа на один групповой файл
- решение может быть сохранено в отдельный файл, и
использовано много раз для построения
оптимизированных групповых файлов
28. Вопросы?
Highly Detailed Continuous Worlds: Streaming Game Resources From Slow
Media
http://www.gamasutra.com/features/gdcarchive/2003/Denman_Stu.ppt
Streaming for Next Generation Games
http://www.gamasutra.com/view/feature/1769/streaming_for_next_generation_game
s.php?print=1
It’s Still Loading?
http://www.drizzle.com/~scottb/gdc/its-still-loading.ppt
PS3 Oblivion Seeing Double To Counteract Blu-Ray
http://www.gamesetwatch.com/2007/01/ps3_oblivion_seeing_double_to.php
Blog debate: PS3 to load games slower than the Xbox 360
http://www.joystiq.com/2006/09/04/ps3-to-load-games-slower-than-the-xbox-360/2