1 / 28

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

Стриминг и эффективное чтение с DVD диска. Роман Лут, ведущий программист Deep Shadows. Что такое стриминг?. - загрузка ресурсов на фоне к тому моменту, когда они понадобятся. Зачем нужен стриминг?.

Télécharger la présentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

  3. Зачем нужен стриминг? • большие детализированные игровые миры, все ресурсы которых не помещаются в оперативную память - в памяти находится только «активный» контент • непрерывный геймплей – отсутствие экранов загрузки • сокращение времени начальной загрузки (New game) • преодоление технических ограничений консолей • - преодоление проблем медленных устройств хранения (DVD, сетевое соединение)

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

  5. Что включает в себя поддержка стриминга? • возможность загружать ресурсы на фоне • ориентацию «движка» на асинхронную работу с ресурсами • стратегию предварительной загрузки • - стратегию выгрузки ресурсов при недостатке памяти

  6. Классический (линейный) стриминг - гоночный симулятор Текущая зона Следующая зона DVD

  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. КлассStreamableresource • состояние: не загружен, загружен, загружается в данный момент • - метод 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 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_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-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

More Related