28
Стриминг и эффективное чтение с DVD диска Роман Лут, ведущий программист Deep Shadows

Стриминг и эффективное чтение с DVD диска

Embed Size (px)

DESCRIPTION

Чтобы избавиться от экранов загрузки применяется стриминг – загрузка ресурсов на фоне. Статья рассматривает преимущества и проблемы этой технологии, стратегии загрузки, реализацию в современных «движках», а также вопросы эффективного стриминга с DVD.

Citation preview

Page 1: Стриминг и эффективное чтение с DVD диска

Стриминг и эффективное чтение с DVD диска

Роман Лут,ведущий программистDeep Shadows

Page 2: Стриминг и эффективное чтение с DVD диска

Что такое стриминг?- загрузка ресурсов на фоне к тому моменту, когда они понадобятся

Page 3: Стриминг и эффективное чтение с DVD диска

Зачем нужен стриминг?- большие детализированные игровые миры, все ресурсы которых не помещаются в оперативную память - в памяти находится только «активный» контент

- непрерывный геймплей – отсутствие экранов загрузки

- сокращение времени начальной загрузки (New game)

- преодоление технических ограничений консолей

- преодоление проблем медленных устройств хранения (DVD, сетевое соединение)

Page 4: Стриминг и эффективное чтение с DVD диска

Что можно стримить?- текстуры- звуки, музыка- модели- уровни- анимация- collision mesh- видео- и т.д.

Page 5: Стриминг и эффективное чтение с DVD диска

Что включает в себя поддержка стриминга?

- возможность загружать ресурсы на фоне

- ориентацию «движка» на асинхронную работу с ресурсами

- стратегию предварительной загрузки

- стратегию выгрузки ресурсов при недостатке памяти

Page 6: Стриминг и эффективное чтение с DVD диска

Классический (линейный) стриминг- гоночный симулятор

Текущая зона

DVD

Следующая зона

Предыду-щая зона

Page 7: Стриминг и эффективное чтение с DVD диска

Огромный мир – игрок может идти в любую сторону-разделение на зоны

- в данный момент впамяти находится«активная» зона и ееближайшие соседи

Пример: GTAIII, Oblivion,Gothic, Operation “Flashpoint”

Page 8: Стриминг и эффективное чтение с DVD диска

Уникальные и shared ресусыСтратегия 1. Все ресурсы одной зоны – уникальны.- приводит к дублированию одинаковых ресурсов в памяти и на DVD- увеличивается размер зоны в памяти- увеличивается размер игры на диске- увеличивается объем данных зоны+ более эффективное чтение с DVD

Данные зоны 1 Текстура А Текстура Б Текстура В

Данные зоны 2 Текстура А Текстура Г Текстура Д

Page 9: Стриминг и эффективное чтение с DVD диска

Уникальные и shared ресурсыСтратегия 2. Некоторые типы ресурсов – общие (shared). Shared ресурсы загружаются при загрузке следующей зоны (если еще не загружены). Зона увеличивает refCount ресурса.

+ позволяет сэкономить память+ уменьшается объем загружаемых данных зоны- приводит к фрагментации памяти- недетерминированный порядок чтения (много DVD Seek)

Данные зоны 1Текстура А

Текстура Б

Текстура В

Данные зоны 2 Текстура Г

Текстура Д

Page 10: Стриминг и эффективное чтение с DVD диска

Уникальные и shared ресурсыСтратегия 3. Некоторые ресурсы – общие (shared). Независимый кеш. Shared ресурсы загружаются по надобности.

+ позволяет больше сэкономить память+ больше уменьшается объем загружаемых данных зоны

дальше

Данные зоны 1Текстура А

Текстура Б

Текстура В

Данные зоны 2 Текстура Г

Текстура Д

Кэш текстур

Page 11: Стриминг и эффективное чтение с DVD диска

Уникальные и shared ресурсыСтратегия 3 (продолжение)- приводит к фрагментации памяти- недетерминированный порядок чтения (много DVD Seek)

- сложная логика взаимодействия кешей:

Данные зоны 1

Кеш ресурсов А

Кеш ресурсов Б

Кеш ресурсов В

Для загрузки зоны 2 недостаточно памяти. Какой из кешей должен освободить память?

- невозможно сформировать четкие требования к объему арта

Page 12: Стриминг и эффективное чтение с DVD диска

Класс Streamable resource- состояние: не загружен, загружен, загружается в данный момент- метод StartBackgroundLoad()- метод Unload()- поле: приоритет---------------------------- для общих ресурсов ----------------------- поле refCount----------------- для общих независимых ресурсов ---------------- поле: lastUsedOnFrame - «последний раз использовался на кадре»

Page 13: Стриминг и эффективное чтение с DVD диска

Эффективное чтение на фоне- hardware thread для чтения данных(99% времени блокирован I/O операцией)- hardware thread для распаковки, создания и инициализации ресурсов)- финализация ресурсов в основном thread между кадрами

Loading thread

Init thread

Main thread

кадр N кадр N+1

Page 14: Стриминг и эффективное чтение с DVD диска

Стратегии предварительной загрузки ресурсов зоны- при приближении к зоне – по расстоянию- по видимости- по тригерам, установленным дизайнерами вручную

Для независимых кешей:- на основе статистики- различные эвристики

Page 15: Стриминг и эффективное чтение с DVD диска

Пока ресурс не загрузился-используется dummy-ресурс (например, уменьшенная версия текстуры)- dummy-ресурс должен быть в памяти всегда

- или объект просто не отображается

- для некоторых типов ресурсов невожножно создать dummy-ресурс: звуки, collision mesh. Эти ресурсы должны быть в памяти всегда

- возможное решение: хранить в памяти упакованную версию такого ресурса, распаковывать при необходимости

Page 16: Стриминг и эффективное чтение с DVD диска

Dummy-ресурсы- текстура – уменьшенная версия, 32x32 DXT1 = ~700 байт (на самом деле больше из-за layout)- модель – спрайт/нижний LOD/не отображается- звук – моно, низкий битрейт/упакованный/НЕТ- уровень – НЕТ- музыка – не проигрывается- анимация – НЕТ- collision mesh – НЕТ- если ресурс понадобился, а его нет в памяти – возникает провал FPS- если сложно/невозможно реализовать стратегию предварительной загрузки для данного типа ресурса – нельзя использовать загрузку по надобности.

Page 17: Стриминг и эффективное чтение с DVD диска

Фрагментация памяти

- актуально для XBOX,PS2,PS3,Nintendo DS, Wii- Windows, XBOX 360 – не актуально (виртуальная память, нет фрагментации физической памяти) Решения:- зона – линейный блок, in-place construction- разделение памяти на зоны для разных типов ресурсов, custom allocators- сборка мусора (возможна только при использовании ref-pointers)

Page 18: Стриминг и эффективное чтение с DVD диска

Насколько большой может быть зона?-все «активные» зоны и их общие ресурсы должны помещаться в оперативную память

-если зоны загружаются в слоты, объем зоны лимитируется размером слота

- скорость движения игрока: зоны должны успевать загружаться

Page 19: Стриминг и эффективное чтение с DVD диска

Насколько большой может быть зона?- сегмент дороги – 0.5 км- скорость машины – 100км/час

- следующий сегмент уже должен быть в памяти, когда до него 0.1 км

- есть примерно 14,5 сек

- скорость чтения с диска – 6Мб/сек

- размер зоны – 87МБ MAX

Page 20: Стриминг и эффективное чтение с DVD диска

Физические характеристики

HDD/DVD/Blue RaySATA HDD PC DVD

12xXBOX 360 DL-

DVD12x CAV

PS3 Blu-Ray2x CLV

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(random seek) 7-20ms 115 110-150ms 50-100ms

Layer change - ? 75ms -

Spin Up - 2800 2000ms ???

http://forum.beyond3d.com/showthread.php?t=37751

Page 21: Стриминг и эффективное чтение с DVD диска

Загрузка с 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

Page 22: Стриминг и эффективное чтение с DVD диска

Оптимизация чтения с DVD- основная задача при чтении с DVD/Blue Ray – минимизация количества Seek

- компрессия ресурсов

- групповые файлы (DVD сектор – 2Кб)

- кеширование на HDD

Page 23: Стриминг и эффективное чтение с DVD диска

Минимизация количества Seek-все ресурсы зоны – один линейный блок(Файлы), дубликаты ресурсов в разных блоках - максимально эффективное чтение

-расположить зависимые файлы близко друг к другу

-«перетасовка» очереди загрузки для минимизации длины Seek

- групповые файлы – не нужно seek на каталог, файлы расположены вплотную

Page 24: Стриминг и эффективное чтение с DVD диска

Компрессия- текстуры – DXT/JPEG/ etc.

- звуки – mp3, ogg

- все остальное - ZLIB, LZW etc

Пример.Чтение:12 Mb/s, Распаковка: 30Mb/s, Compression rate: 0.6 Скорость чтения: 14.3Mb/s При параллельной распаковке: 20Mb/s

Page 25: Стриминг и эффективное чтение с DVD диска

Xenus 2 . Стратегия загрузкиПри приближении к зоне:- загружается геометрия уровня, collision mesh, свойста объектов По надобности: текстуры, модели, звуки, музыка Эвристики: зависимость ресурсов (автомобить + взорванный автомобиль), модель уружия – модель гильз и т.д. Некоторые ресурсы всегда в памяти (шейдеры, строки, описания объектов, диалоги, текстуры HUD)

Page 26: Стриминг и эффективное чтение с DVD диска

Минимизация Seek- групповые файлы (100Mb - 2GB)

- минимизация расстояний между зависимыми файлами:

- группировка файлов по типам(текстуры, модели, уровни)

- генерация графа со связями между файлами (текстура-текстура (в пределах модели), модель-модель(в пределах зоны), модель-модель (зависимые модели), звук-звук (в пределах зоны) и т.д.

- чем сильнее связь, тем ближе должны быть файлы

- oценочная функция: S = E (k*distance(f1,f2))^2

Page 27: Стриминг и эффективное чтение с DVD диска

Минимизация оценочной функции- ~5000 узлов в графе

- генетический алгоритм

- вставка дубликатов для оптимизации

- 2-24 часа на один групповой файл

- решение может быть сохранено в отдельный файл, и использовано много раз для построения оптимизированных групповых файлов

Page 28: Стриминг и эффективное чтение с DVD диска

Вопросы?Highly Detailed Continuous Worlds: Streaming Game Resources From Slow Mediahttp://www.gamasutra.com/features/gdcarchive/2003/Denman_Stu.ppt

Streaming for Next Generation Gameshttp://www.gamasutra.com/view/feature/1769/streaming_for_next_generation_games.php?print=1

It’s Still Loading?http://www.drizzle.com/~scottb/gdc/its-still-loading.ppt

PS3 Oblivion Seeing Double To Counteract Blu-Rayhttp://www.gamesetwatch.com/2007/01/ps3_oblivion_seeing_double_to.php Blog debate: PS3 to load games slower than the Xbox 360http://www.joystiq.com/2006/09/04/ps3-to-load-games-slower-than-the-xbox-360/2