SlideShare a Scribd company logo
1 of 28
Роман Лут,
ведущий программист
Deep Shadows
Что такое стриминг?
- загрузка ресурсов на фоне к тому моменту, когда они
понадобятся
Зачем нужен стриминг?
- большие детализированные игровые миры, все ресурсы
которых не помещаются в оперативную память - в памяти
находится только «активный» контент

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

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

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

- преодоление проблем медленных устройств хранения
(DVD, сетевое соединение)
Что можно стримить?
- текстуры
- звуки, музыка
- модели
- уровни
- анимация
- collision mesh
- видео
- и т.д.
Что включает в себя
поддержка стриминга?
- возможность загружать ресурсы на фоне

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

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

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



Предыду- Текущая Следующая
щая зона зона    зона



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

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


Пример: GTAIII, Oblivion,
Gothic, Operation “Flashpoint”
Уникальные и shared ресусы
Стратегия 1. Все ресурсы одной зоны – уникальны.
- приводит к дублированию одинаковых ресурсов в памяти
и на DVD
- увеличивается размер зоны в памяти
- увеличивается размер игры на диске
- увеличивается объем данных зоны
+ более эффективное чтение с DVD

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


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


+ позволяет сэкономить память
+ уменьшается объем загружаемых данных зоны
- приводит к фрагментации памяти
- недетерминированный порядок чтения (много DVD Seek)
Уникальные и shared ресурсы
Стратегия 3. Некоторые ресурсы – общие (shared).
Независимый кеш. Shared ресурсы загружаются по
надобности.
                                      Кэш текстур
                                        Текстура А
    Данные зоны 1
                                        Текстура Б
                                        Текстура В
    Данные зоны 2                       Текстура Г
                                        Текстура Д


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

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

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

                                    Кеш ресурсов В
- невозможно сформировать
                                         Данные зоны 1
четкие требования к объему
арта
Класс Streamable resource
- состояние: не загружен, загружен, загружается в данный
момент
- метод StartBackgroundLoad()
- метод Unload()
- поле: приоритет
---------------------------- для общих ресурсов ----------------------
- поле refCount
----------------- для общих независимых ресурсов ---------------
- поле: lastUsedOnFrame - «последний раз использовался на
кадре»
Эффективное чтение на фоне
- hardware thread для чтения данных(99% времени
блокирован I/O операцией)
- hardware thread для распаковки, создания и
инициализации ресурсов)
- финализация ресурсов в основном thread между кадрами

                    кадр N              кадр N+1
  Loading thread

    Init thread

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

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

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

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

- возможное решение: хранить в памяти упакованную
версию такого ресурса, распаковывать при необходимости
Dummy-ресурсы
- текстура – уменьшенная версия, 32x32 DXT1 = ~700 байт
(на самом деле больше из-за layout)
- модель – спрайт/нижний LOD/не отображается
- звук – моно, низкий битрейт/упакованный/НЕТ
- уровень – НЕТ
- музыка – не проигрывается
- анимация – НЕТ
- collision mesh – НЕТ
- если ресурс понадобился, а его нет в памяти – возникает
провал FPS
- если сложно/невозможно реализовать стратегию
предварительной загрузки для данного типа ресурса –
нельзя использовать загрузку по надобности.
Фрагментация памяти
- актуально для XBOX,PS2,PS3,Nintendo DS, Wii
- Windows, XBOX 360 – не актуально (виртуальная память,
нет фрагментации физической памяти)

Решения:
- зона – линейный блок, in-place construction
- разделение памяти на зоны для разных типов ресурсов,
custom allocators
- сборка мусора (возможна только при использовании ref-
pointers)
Насколько большой может
быть зона?
-все «активные» зоны и их общие ресурсы должны
помещаться в оперативную память

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

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

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

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

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

- размер зоны – 87МБ MAX
Физические характеристики
    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
Загрузка с 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
Оптимизация чтения с DVD
- основная задача при чтении с DVD/Blue Ray –
минимизация количества Seek

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

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

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

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

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

- групповые файлы – не нужно seek на каталог, файлы
расположены вплотную
Компрессия
- текстуры – DXT/JPEG/ etc.

- звуки – mp3, ogg

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

Пример.
Чтение:12 Mb/s, Распаковка: 30Mb/s, Compression rate: 0.6
 Скорость чтения: 14.3Mb/s
 При параллельной распаковке: 20Mb/s
Xenus 2 . Стратегия загрузки
При приближении к зоне:
- загружается геометрия уровня, collision mesh, свойста
объектов

По надобности: текстуры, модели, звуки, музыка

Эвристики: зависимость ресурсов (автомобить +
взорванный автомобиль), модель уружия – модель гильз
и т.д.

Некоторые ресурсы всегда в памяти
(шейдеры, строки, описания объектов, диалоги, текстуры
HUD)
Минимизация Seek
- групповые файлы (100Mb - 2GB)

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

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

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

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

   - oценочная функция: S = E (k*distance(f1,f2))^2
Минимизация оценочной функции
- ~5000 узлов в графе

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

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

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

- решение может быть сохранено в отдельный файл, и
использовано много раз для построения
оптимизированных групповых файлов
Вопросы?
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

More Related Content

What's hot

Оперативная память
Оперативная памятьОперативная память
Оперативная памятьTitenko1
 
029
029029
029JIuc
 
Оптические диски
Оптические дискиОптические диски
Оптические дискиNick535
 
загрузить в DSpace
загрузить в DSpaceзагрузить в DSpace
загрузить в DSpaceFedor Krasnov
 
Хранение музыки и видео / Артур Матвеев (Волнорез)
Хранение музыки и видео / Артур Матвеев (Волнорез)Хранение музыки и видео / Артур Матвеев (Волнорез)
Хранение музыки и видео / Артур Матвеев (Волнорез)Ontico
 

What's hot (7)

Оперативная память
Оперативная памятьОперативная память
Оперативная память
 
029
029029
029
 
Оптические диски
Оптические дискиОптические диски
Оптические диски
 
1508 10035
1508 100351508 10035
1508 10035
 
Lekcia15
Lekcia15Lekcia15
Lekcia15
 
загрузить в DSpace
загрузить в DSpaceзагрузить в DSpace
загрузить в DSpace
 
Хранение музыки и видео / Артур Матвеев (Волнорез)
Хранение музыки и видео / Артур Матвеев (Волнорез)Хранение музыки и видео / Артур Матвеев (Волнорез)
Хранение музыки и видео / Артур Матвеев (Волнорез)
 

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

распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2rit2011
 
02 - Hadoop. Архитектура HDFS
02 - Hadoop. Архитектура HDFS02 - Hadoop. Архитектура HDFS
02 - Hadoop. Архитектура HDFSRoman Brovko
 
50
5050
50JIuc
 
Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)
Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)
Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)Ontico
 
Isilapp — Extreme Cloud Storage on FreeBSD
Isilapp — Extreme Cloud Storage on FreeBSDIsilapp — Extreme Cloud Storage on FreeBSD
Isilapp — Extreme Cloud Storage on FreeBSDAndrew Pantyukhin
 
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ontico
 
Extreme Cloud Storage on FreeBSD, Андрей Пантюхин
Extreme Cloud Storage on FreeBSD, Андрей ПантюхинExtreme Cloud Storage on FreeBSD, Андрей Пантюхин
Extreme Cloud Storage on FreeBSD, Андрей ПантюхинFuenteovejuna
 
Extreme cloud storage on free bsd (Андрей Пантюхин)
Extreme cloud storage on free bsd (Андрей Пантюхин)Extreme cloud storage on free bsd (Андрей Пантюхин)
Extreme cloud storage on free bsd (Андрей Пантюхин)Ontico
 
Как Linux работает с памятью — Вячеслав Бирюков
Как Linux работает с памятью — Вячеслав БирюковКак Linux работает с памятью — Вячеслав Бирюков
Как Linux работает с памятью — Вячеслав БирюковYandex
 
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...Ontico
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Ontico
 
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)Ontico
 
Использование ленточных технологий для сокращения стоимости файловых хранилищ
Использование ленточных технологий для сокращения стоимости файловых хранилищИспользование ленточных технологий для сокращения стоимости файловых хранилищ
Использование ленточных технологий для сокращения стоимости файловых хранилищAlexander Reytman
 
Client optimization drupal
Client optimization drupalClient optimization drupal
Client optimization drupalYury Glushkov
 
MyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDBMyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDBSergey Petrunya
 
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...Ontico
 
Архитектура хранилища бинарных данных на Одноклассниках (Александр Христофоро...
Архитектура хранилища бинарных данных на Одноклассниках (Александр Христофоро...Архитектура хранилища бинарных данных на Одноклассниках (Александр Христофоро...
Архитектура хранилища бинарных данных на Одноклассниках (Александр Христофоро...Ontico
 
20 устройства хранения информации
20 устройства хранения информации20 устройства хранения информации
20 устройства хранения информацииSergey Lomakin
 

Similar to Стриминг и эффективное чтение с DVD диска (20)

распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
 
02 - Hadoop. Архитектура HDFS
02 - Hadoop. Архитектура HDFS02 - Hadoop. Архитектура HDFS
02 - Hadoop. Архитектура HDFS
 
50
5050
50
 
Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)
Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)
Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)
 
Isilapp — Extreme Cloud Storage on FreeBSD
Isilapp — Extreme Cloud Storage on FreeBSDIsilapp — Extreme Cloud Storage on FreeBSD
Isilapp — Extreme Cloud Storage on FreeBSD
 
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
 
Extreme Cloud Storage on FreeBSD, Андрей Пантюхин
Extreme Cloud Storage on FreeBSD, Андрей ПантюхинExtreme Cloud Storage on FreeBSD, Андрей Пантюхин
Extreme Cloud Storage on FreeBSD, Андрей Пантюхин
 
Extreme cloud storage on free bsd (Андрей Пантюхин)
Extreme cloud storage on free bsd (Андрей Пантюхин)Extreme cloud storage on free bsd (Андрей Пантюхин)
Extreme cloud storage on free bsd (Андрей Пантюхин)
 
Как Linux работает с памятью — Вячеслав Бирюков
Как Linux работает с памятью — Вячеслав БирюковКак Linux работает с памятью — Вячеслав Бирюков
Как Linux работает с памятью — Вячеслав Бирюков
 
High Load
High LoadHigh Load
High Load
 
apparatnoe_obespechenie
apparatnoe_obespechenieapparatnoe_obespechenie
apparatnoe_obespechenie
 
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...
 
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
 
Использование ленточных технологий для сокращения стоимости файловых хранилищ
Использование ленточных технологий для сокращения стоимости файловых хранилищИспользование ленточных технологий для сокращения стоимости файловых хранилищ
Использование ленточных технологий для сокращения стоимости файловых хранилищ
 
Client optimization drupal
Client optimization drupalClient optimization drupal
Client optimization drupal
 
MyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDBMyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDB
 
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
 
Архитектура хранилища бинарных данных на Одноклассниках (Александр Христофоро...
Архитектура хранилища бинарных данных на Одноклассниках (Александр Христофоро...Архитектура хранилища бинарных данных на Одноклассниках (Александр Христофоро...
Архитектура хранилища бинарных данных на Одноклассниках (Александр Христофоро...
 
20 устройства хранения информации
20 устройства хранения информации20 устройства хранения информации
20 устройства хранения информации
 

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

  • 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. Класс 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