91
New Dog, Old Tricks: Running Halo 3 Without a Hard Drive Mat Noguchi BUNGIE Studios

Loading___done_gdc_2008

Embed Size (px)

Citation preview

Page 1: Loading___done_gdc_2008

New Dog, Old Tricks:Running Halo 3 Without a Hard Drive

Mat NoguchiBUNGIE Studios

Page 2: Loading___done_gdc_2008

Loading... Done:How to Think About Content

Mat NoguchiBUNGIE Studios

Page 3: Loading___done_gdc_2008

Next gen is more

• More CPU: 6x or more• More RAM: 8x• More GPU: bajillion

Page 4: Loading___done_gdc_2008

Next-gen is more I/O bound

• I/O transfer speed: 2x• I/O latency: ~1x• DVD size: ~1x

Page 5: Loading___done_gdc_2008

What is Next-gen streaming?

• For players–Minimal load times–Wide and deep content

• For the platform– Run (well) on all configurations

• For developers– Designers– Programmers– Producers

Page 6: Loading___done_gdc_2008

Overview

• High level I/O design• What to load• Loading• RTM!

Page 7: Loading___done_gdc_2008

Case study: The Storm

• Total content size: 1,226 MB• Available content memory: 334.8 MB

Page 8: Loading___done_gdc_2008

PART 1: HIGH LEVEL I/O DESIGN

Page 9: Loading___done_gdc_2008

Goals

• Minimum quality guarantees• Maximize I/O performance• Globally optimizable

Page 10: Loading___done_gdc_2008

Policies

• One system to rule content I/O• Usage based optimizations

Page 11: Loading___done_gdc_2008

DVD vs. HDD

• DVD– 6-18 MB/s– 100-240 ms seek times

• HDD– 17-30 MB/s– 10-30 ms seek times

Page 12: Loading___done_gdc_2008

DVD vs. HDD

DVD HDD

Sequential I/O

12 MB/s 17 MB/s

Random I/O

~850 kB/s250 ms seeks

~6290 kB/s37 ms seeks

Reliability Variable Constant

Page 13: Loading___done_gdc_2008

DVD vs. HDD

DVD HDD

Sequential I/O

Good Good

Random I/O

BAD! Okay

Reliability Variable Constant

Page 14: Loading___done_gdc_2008

DVD vs. HDD

DVD HDD

Sequential I/O

Good Good

Random I/O

BAD! Okay

Reliability Variable Constant

Page 15: Loading___done_gdc_2008

Goals: Maximizing I/O performance

MINIMIZE SEEKS!

Page 16: Loading___done_gdc_2008

Classifying content by access

• Global data: 49.2 MB– Always loaded–Metadata– References to resources

• Resources: 1,177 MB– Everything else – Can be unloaded

Page 17: Loading___done_gdc_2008

Classifying resources by access

• Required– Required for correct behavior• Textures (N-1 mipmaps)• Geometry• Animation

• Optional–More detailed/richer experience• Highest texture mipmap

Page 18: Loading___done_gdc_2008

Goals: Minimum quality guarantees

• Required resources– HARD CONSTRAINT!– Assume this data is available

• Optional resources– Flavor!– Check this data is available

Page 19: Loading___done_gdc_2008

I/O behavior by resource

• Required resources– Synchronous/Blocking

• Optional resources– Asynchronous/Background

Page 20: Loading___done_gdc_2008

Sound...

• Streaming sound implies Random I/O• Is sound Optional?– HDD: Yes– DVD: Not exactly

Page 21: Loading___done_gdc_2008

Sound... the big giant screw (again!)

566 MB!

Page 22: Loading___done_gdc_2008

Sound... the big giant screw (again!)

• Why so big?– Everything makes a sound– Repetition is annoying

Page 23: Loading___done_gdc_2008

What sound can we stream?

• Not a lot for DVD– Streams == Seeks– Seeks == BAD!

• Stream sounds resilient to latency–Music–Mission dialogue–Multiplayer announcer

• Everything for HDD

Page 24: Loading___done_gdc_2008

How can we cull sound?

• Accept repetition• … except for footsteps• … and dialogue (crap!)

Page 25: Loading___done_gdc_2008

Why is dialogue so bad?

• Repetition is annoying• Repetition is annoying• Repetition is annoying• … unless you are making a point• Such as: repetition is annoying

Page 26: Loading___done_gdc_2008

AI dialogue tree branch:Praise

prsprs_plr_gdgrnd

prs_plr_killprs_plr_kll_blt

prs_plr_kll_mjr

prs_plr_kll_vcl_bmp

prs_plr_kll_wmelee

prs_plr_arb

prs_plr_mc

prs_plr_kll_lots

prs_plr_sniping

Page 27: Loading___done_gdc_2008

Full AI dialogue tree

• (The full dialogue tree makes PowerPoint choke)– 97 top vocalizations– 143 first level vocalizations– 23 second level vocalizations

Page 28: Loading___done_gdc_2008

Full AI dialogue tree size

• 295 MB(!), 19788 lines• Count, Size by specializations– 130 MB, 9331 lines for top vocalizations– 143 MB, 1214 lines for first level

vocalizations– 22 MB, 1214 lines for second level

vocalizations

Page 29: Loading___done_gdc_2008

Shrinking AI dialogue

• Remove virtually all dialogue• Add back– Involuntary dialog– Sound designer specified dialog• “Take it!”• “Found enemy!”• “Where did they go?”

Page 30: Loading___done_gdc_2008

This is for DVD-only!

• HDD will always sound great!

Page 31: Loading___done_gdc_2008

So... what?

Page 32: Loading___done_gdc_2008

Checkpoint...The Storm: DVD Working Set

• Available memory: 334.8 MB• DVD working set : 514.2 MB– Global data: 49.2 MB– Required resources: 465 MB• Textures: 216.6 MB• Geometry: 138 MB• Sound: 70.5 MB• Animation: 39.9 MB

Page 33: Loading___done_gdc_2008

PART 2: WHAT TO LOAD

Page 34: Loading___done_gdc_2008

Mapping resource usage to position

NOT DRAWN TO SCALE!

Page 35: Loading___done_gdc_2008

Mapping resource usage to position

• Break up into sections, a.k.a BSPs

Page 36: Loading___done_gdc_2008

Mapping resource usage to position

Page 37: Loading___done_gdc_2008

Multiple bsps = Zone set

• Example: “Intro”

Page 38: Loading___done_gdc_2008

Multiple bsps = Zone set

• Example: “First Encounter”

Page 39: Loading___done_gdc_2008

Zone set activation volumes

Loading…Loading… done

Active zone set: “Intro”Active zone set: “First Encounter”

Page 40: Loading___done_gdc_2008

Checkpoint... The Storm: DVD Working Set

• Available memory: 334.8 MB• DVD working set: 375.8 MB– Global data: 49.2 MB–Max zone-set resources: 148.7 MB– Sandbox resources: 177.9 MB

Page 41: Loading___done_gdc_2008

Scarab

Page 42: Loading___done_gdc_2008

Ghost

Page 43: Loading___done_gdc_2008

Brute

Page 44: Loading___done_gdc_2008

Sandbox resources

• NOT DRAWN TO SCALE!

Page 45: Loading___done_gdc_2008

Restrict sandbox resources per zone set

• Zone set: “Intro”

• Disallow:

Page 46: Loading___done_gdc_2008

Restrict sandbox resources per zone set

• Zone set: “Intro”

Page 47: Loading___done_gdc_2008

Checkpoint... The Storm: Working Set

• Available memory: 334.8 MB• DVD working set: 308.9 MB– Global data: 49.2 MB–Max zone-set resources: 259.7 MB

• Available memory > DVD working set• Hooray!

Page 48: Loading___done_gdc_2008

Checkpoint... The Storm: Working Set

• HDD working set: 258.1 MB– Global data: 49.2 MB–Max zone-set resources: 208.9 MB

Page 49: Loading___done_gdc_2008

PART 3: LOADING...Finally!

Page 50: Loading___done_gdc_2008

Canonical streaming model

Streaming (I/O)

Game Thread

Render Thread

Resource

Access State

Page 51: Loading___done_gdc_2008

Canonical streaming conflicts

Streaming (I/O)

Game Thread

Render Thread

Resource

Access State

Page 52: Loading___done_gdc_2008

Halo 3 streaming model

Game Thread

Render Thread

Cached Resour

ce Access State

Streaming (I/O)

Resource

Access State

Page 53: Loading___done_gdc_2008

Halo 3 streaming model

Game Thread

Render Thread

Streaming (I/O)

Resource

Access State

Cached Resour

ce Access State

Page 54: Loading___done_gdc_2008

Resource access stateresource address

<resource> <address>

<resource> <address>

<resource> <address>

… …

Page 55: Loading___done_gdc_2008

Generic loading process

• Determine working set• Load• Publish

Page 56: Loading___done_gdc_2008

Generic using process

• Grab published access object• Run frame/tick/loop• Release published access object

Page 57: Loading___done_gdc_2008

Required loading process

• Determine working set• Load• Publish

Page 58: Loading___done_gdc_2008

Required loading process

• Determine working set from active zone set

• Blocking Load required resources• Publish

Page 59: Loading___done_gdc_2008

Transitioning between zone sets

Page 60: Loading___done_gdc_2008

Zone set transitions

ZOMG!

Page 61: Loading___done_gdc_2008

Intro <-> First Encounter

Page 62: Loading___done_gdc_2008

Intro <-> First Encounter

Page 63: Loading___done_gdc_2008

Intro <-> First Encounter

Page 64: Loading___done_gdc_2008

Intro <-> First Encounter

Page 65: Loading___done_gdc_2008

Intro -> First Encounter

Loading… done

Page 66: Loading___done_gdc_2008

Checkpoint...The Storm: Available memory

• Final build, HDD– Available memory: 390.1 MB– HDD Max required memory: 258.1 MB

• HDD Available memory: 132 MB!

Page 67: Loading___done_gdc_2008

Generic I/O scheduler

Scheduler

I/O Reque

st

I/O Reque

st

I/O Reque

sts

I/O Reque

st

Page 68: Loading___done_gdc_2008

Pop Quiz!

• Optimal # of I/O in flight – 1– 2– 6– Infinity– None of the above– I don’t know

Page 69: Loading___done_gdc_2008

Pop Quiz!

• Optimal # of I/O in flight: Zero

Page 70: Loading___done_gdc_2008

Pop Quiz!

• Optimal # of I/O in flight: 1

Page 71: Loading___done_gdc_2008

Generic I/O scheduler

• Un-bad generic solution• Not-good specific solution

Page 72: Loading___done_gdc_2008

Optional I/O scheduler

• One I/O at a time• Fast changeover• Priority

Page 73: Loading___done_gdc_2008

Optional I/O Scheduler

• Desired resources– {A, B, C}

• Loaded resources– {C, D, E}

• To-load resources– {A, B}– Desired - Loaded

Page 74: Loading___done_gdc_2008

Optional I/O scheduler [fix]

SchedulerI/O

Request

Desired{…}

Loaded{…}

Page 75: Loading___done_gdc_2008

Optional I/O priority [fix]

SchedulerI/O

Request

Desired Soon{…} Loaded

{…}Desired Later{…}

Desired Now{…}

Page 76: Loading___done_gdc_2008

Optional I/O optimizations

• Bounded set == bit vector• Bit vector ordered by optimal load

order• Minimum seeks!

Page 77: Loading___done_gdc_2008

PART 4: RTM!

Page 78: Loading___done_gdc_2008

Total game size

• Total: 15.06 GB–Main menu: 91.25 MB–Multiplayer: 4.27 GB– Campaign: 10.70 GB

Page 79: Loading___done_gdc_2008

Shared resource files

• Commonly used resources in global files–Multiplayer & Campaign– Campaign only

Page 80: Loading___done_gdc_2008

Total game size, shared maps

• Total: 7.07 GB–Main menu: 82.0 MB– Shared: 927 MB–Multiplayer: 1.67 GB– Campaign: 5.37 GB

Page 81: Loading___done_gdc_2008

FULL GAME OPTIMIZATION:FRANKENBUILD

Super Ninja Art!

Page 82: Loading___done_gdc_2008

Optimizing map layout

• Determine resource “usage”– “Usage” == all zone sets is it used in

• Package resources with identical “usage”

Page 83: Loading___done_gdc_2008

Optimizing single map layout

Optimized Map Layout

Zone usage key

Zone usage key

Zone usage key

Page 84: Loading___done_gdc_2008

Optimizing shared map layout

• Determine shared resource “global usage”– “Global usage” == all maps and zone

sets is it used

• Package shared resources with identical “global usage”

Page 85: Loading___done_gdc_2008

Optimizing shared map

Optimized Shared Map Layout

Map/Zone usage key

Map/Zone usage key

Map/Zone usage key

Page 86: Loading___done_gdc_2008

Relink map files

• Obvious diagram (and SmartArt spew)Origi

nal map

Optimized

layout

Optimized map

Page 87: Loading___done_gdc_2008

Total game size, Frankenbuild

• Total: 5.36 GB–Main menu: 52.6 MB– Shared: 704 MB–Multiplayer: 1.06 GB– Campaign: 3.55 GB

Page 88: Loading___done_gdc_2008

Don’t throw stuff away!that you need... later

• Don’t unload shared resources– Store disk location with each resource

before loading next map–Match resources based on disk location

before loading more data

• Preload map resources from main-menu– Load resources for next map, then

associate disk location for each resource

Page 89: Loading___done_gdc_2008

Halo 3: Optimized for Hard drive

• Framework for content usage• Minimize or eliminate load times• Guaranteed gameplay experience

Page 90: Loading___done_gdc_2008

Target Streaming for Massive Damage

Page 91: Loading___done_gdc_2008