This document provides a summary of Alex Duran's talk on building object systems for games. The talk discusses static hierarchy-based systems and component-based systems. For component-based systems, it covers decisions around inheritance, whether the system is component-centric or object-centric, simple vs complex components, and inter-component interactions. It also discusses optimization strategies for inheritance like caching and instantiation to improve performance of object queries.
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0 ratings0% found this document useful (0 votes)
87 views64 pages
Duran Alex
This document provides a summary of Alex Duran's talk on building object systems for games. The talk discusses static hierarchy-based systems and component-based systems. For component-based systems, it covers decisions around inheritance, whether the system is component-centric or object-centric, simple vs complex components, and inter-component interactions. It also discusses optimization strategies for inheritance like caching and instantiation to improve performance of object queries.
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 64
Building Object Systems
Features, Tradeoffs, and Pitfalls
Introduction • Cellphones • Who am I? – Alex Duran – [email protected] – Programmer – Object System for Deus Ex 2 and Thief 3 Outline • Purpose and Scope of Talk • Brief Definition of Terms • Static Hierarchy Based Systems – Brief Discussion • Component Based Systems - Decisions and Consequences • Summary Purpose of Talk • Hard to correctly plan for everything, even with experience. • Deus Ex 2 / Thief 3 system designed with knowledge from a previous system in mind. • I still made mistakes. • Know about the options. • Understand the dangers. Scope of Talk • My experience is single player games. • And large (20+ total team size) development teams. • Not very familiar with: – Network communication for Object Systems – Persistent Worlds (Massively Multiplayer). – Differences for really small teams. What do I mean by these? • I expect most of you define these the way I do, but let’s be clear: • Object System • Hierarchy • Component / Property • Archetype • Instance • Designer What do I mean by… …Object System? • System responsible for maintaining data about Objects and Attributes. • Clients of the system can do queries about the value of an Attribute on an Object. • Answers the question: What is the value of “Health” on a “MedBot”? ...Hierarchy? …Component/Property …Archetype and Instance? …Designer? • Edits data on Archetypes or Instances. • Data editing doesn’t cause a recompile and doesn’t require a programmer. • Generally not a programmer, so doesn’t know how code works underneath. Static Hierarchies • Standard C++ model of inheritance. • Components are required – every child of has all the components of the parent(and maybe more). • Memory / Complexity are issues, nobody wants to put all functionality on the base archetype. • Since the layout is static and known – code can be faster, data apparent to programmers (no extraneous data). Static Hierarchies - Mistake • Ultima Underworld 1 – First Person RPG, fairly complex game. • Assumed: NPCs and Doors don’t need to share many components. • Later in design, player needed to have conversation with a door… but only NPCs have the conversation component. • Can’t push component up now, must hack around problem. Static Hierarchies - Success • Halo 1 – Much simpler in terms of objects. • Design fairly well understood. • Needed a fast, simple object system. • Can safely make NPCs and Doors separate. • Still had minor issues – NPC archetypes not subdivided enough. • Halo 2 – even better understood. Dynamic Hierarchies • aka Component-Based hierarchies. • Data determines: • Hierarchy Organization • Kinds and values of data on Archetypes • …and on Instances Static/Dynamic Hybrid • Static hierarchies improve speed. • Dynamic hierarchies improve flexibility. • Can have a hierarchy with some static branching at top, dynamic below that. • Be careful… can still make mistakes. • Deus Ex 2 – Emitters, characters, everything else. On to the new… • I expect most people in this room already were familiar with most of what I just talked about. • If not, see Scott Bilas’s talk from last year’s GDC. • Doug Church also did a useful talk recently. • Now that we’re on the same page… Component Based Systems - Decisions and Consequences • Next: – Inheritance – Basic • Later: – Component-Centric vs. Object-Centric – Components – Simple vs. Complex – Inter-Component Interactions – Inheritance – Advanced Inheritance – What I Mean • Components are optional… objects don’t have to have them. • If an archetype has values for a component, must the instance? • Store values on instances (or child archetypes) when distinction from parent value is desired (when a medbot takes damage, start storing hitpoints) Inheritance - Example Inheritance – Benefits • Removes problem of storing redundant data. • This saves memory. • Often more importantly, this helps designers. If they have to maintain the same data in multiple places… it will get out of sync. Inheritance - Cost • If an object doesn’t have a component, must ask parent. • If parent doesn’t have it… must ask parent’s parent… etc. • Depth of five or more not uncommon (average depth traversal for failure in Deus Ex 2 is ~3.6) • There are strategies to deal with these problems… I’ll get to them later. Inheritance – Failed Health Query Component Based Systems -Decisions and Consequences • Done: – Inheritance - Basic • Next: – Component-Centric vs. Object-Centric • Later: – Components – Simple vs. Complex – Inter-Component Interactions – Inheritance – Advanced Component-Centric vs. Object-Centric • What is Object-Centric? • What is Component-Centric? • Why one or the other? What is Object-Centric? • Object-Centric is the way people usually conceptually think of systems. • System thinks of its data as a collection of Objects, each of which has its own Components. • Data “belongs” to objects. • Object-Centric is the way data is presented to designers… every image so far has been “Object-Centric”. What is Component-Centric? • Objects are just UIDs(unique identifiers). They’re identical. • Components store UID-data pairs. • The behavior of an object is determined by the data that components store for that UID. • Internal only – externally data is displayed as if it were object-centric. • Thief 1, Thief 2 worked this way. Component-Centric: Diagram Why Be Object-Centric? • Intuitive. Internal representation matches the way people think about the data. • Easier to extract/insert an object from the world. (Streamed Worlds, maybe) • Objects can have associated code. Good for static-dynamic hybrid hierarchy systems (Like Deus Ex 2) • Can scope components. Why Be Component-Centric? • Efficiency – Each component stores its own data… can optimize for: – Sparse vs. Dense (HackStrength vs. Mass) – Random Access vs. Iterated (Hitpoints vs. Physics) • Helps enforce data-driven aspect of game… objects can’t be anything but data. Component Based Systems - Decisions and Consequences • Done: – Inheritance – Basic – Component-Centric vs. Object-Centric • Next: – Components – Simple vs. Complex • Later: – Inter-Component Interactions – Inheritance – Advanced Components – Simple vs. Complex • Simple Components (Hitpoints, Mass, Friction, Elasticity) • Complex Components (DamageModel, PhysicsModel) • Complex also “Aggregate” or “Bundled” components. Simple Components – Pros/Cons • Lightweight – low memory cost to setting data(just add Hitpoints) • Easy inheritance. • More allocations, more overhead to tracking. (Deus Ex 2: >50% spent on tracking. Most components are simple.) • Be careful not to split functionality up too much. (Deus Ex 2 Inventory) Complex Components – Pros/Cons • Keep relevant data together(Physics vs. Mass,Friction,Elasticity) • Less overhead on tracking whether objects have particular components. • Sub-component inheritance/override becomes important (inherit just Friction). • Heavyweight allocation(Suppose you only need Elasticity?) Too Simple? Deus Ex 2 Inventory • Four different components: • Inventory Type (essential) • User Arm Animation Set (essential) • Inventory Icon (important) • Inventory Sound Effects (important) • Could get around with inter- component requirements, but that adds overhead (and we don’t have that feature) Too Complex? Dungeon Siege - Inventory • 9000 lines of code. One component. • Not all of that necessary. • Tendency for component to have everything except the kitchen sink. Component Based Systems - Decisions and Consequences • Done: – Inheritance – Basic – Component-Centric vs. Object-Centric – Components – Simple vs. Complex • Next: – Inter-Component Interactions • Later: – Inheritance – Advanced Inter-Component Interactions : Requiring • Some components only make sense when other components exist (RenderScale without RenderMesh) • You’d like to have some components require other components. • Simple components – more important. • Deus Ex 2 doesn’t have a built-in system for this, so we have to rely on warnings or forcefully setting default values. Inter-Component Interactions : Excluding • On the other hand, some components don’t make sense with each other (RenderMesh and RenderSprite). • To know which to use, you need another component (RenderType) • Being able to make some component exclusive(or mutually exclusive) would change this. • SetProperty generally ok to have logic, since infrequent in-game. Component Based Systems - Decisions and Consequences • Done: – Inheritance – Basic – Component-Centric vs. Object-Centric – Components – Simple vs. Complex – Inter-Component Interactions • Next: – Inheritance – Advanced Inheritance - Advanced • Optimization Strategies – Caching – Instantiation – Tree Flattening • Dynamic Archetypes – Changing the values on Archetypes – Changing the Archetypes for an Instance • Multiple Inheritance • Inheritance Blocking Inheritance Optimization - Caching • Every time a query fails you go up the tree a level… and do another lookup. • Failures go all the way up. • Cache the results of queries in the hierarchy. • Make sure to cache failures as well as successes… since failures are more expensive. • Good statistics can inform caching (cache Physics, not HackStrength) Inheritance Optimization – Cache Invalidation • Does it matter? • Most systems don’t support changing data on archetypes while running the game (where speed matters most). • If you can’t affect the results of an up-tree query in game, you can’t invalidate the cache. Inheritance Optimization - Instantiation • Similar to caching, but not on-the-fly. • Mark components as “instantiated”, meaning that their values get copied down to instances automatically. • Better for things where instances are likely to differ from archetypes anyway (TimeSinceRendered). • No need to cache failures… implied. • Same potential for cache invalidation. Inheritance Optimization – Instantiation Dangers • Can do this in editor, or as part of “compiling” levels. • If you do on data used in editor, get invalidation problem for sure, since archetypes change in the editor. • Example: Thief 1 – Physics component, always forcing global replace on instances, invalidating some special objects(Key “hanging” on board) Query Statistics – Deus Ex 2 Base Queries 2365 100.00% Queries for Instantiated Component 1172 49.56% Percent Failed: Instantiated Queries 556 47.44% Queries for Inherited Component 1193 50.44% Percent Uptree: Inherited Queries 655 54.90%
If Uptree: Avg. Search Depth 3.63 3278
Examples: # of Queries Total Lookups
Physics : Inherited 160 819 Mesh : Instantiated 637 637 PrePivot: Inherited 175 352 RotationRate: Inherited 2 5 Inheritance Optimization – Tree Flattening • Can also reduce inheritance cost by flattening the hierarchy as a “compile” step on data before running the game. • Dungeon Siege does this. • Like instantiation, but stops at archetypes, not instances. • Loses inheritance benefit of memory savings. • Prevents changing archetypes. Dynamic Archetypes – Changing Values • Single Player Games - Just change existing instances manually. • But… Massively Multiplayer Persistent World? – Prefer instances to match archetypes. – Don’t want to shut down. – Just change the archetype… Dynamic Archetypes – Getting a Different Archetype • What about changing which archetype is my parent? • I can see uses… but none of them seem worth it in a single inheritance system. Just copy the relevant data over to a new instance. • But worth thinking about? • There are use cases under a multiple inheritance model… Multiple Inheritance • Data rather than code… • Multiple code inheritance seems destined to confuse people, especially designers who can’t see the code. • Not so for data, if: – Very simple rules for order of inheritance – Results of rules apparent to designers • Example: Thief 1 Metaproperties Multiple Inheritance – Thief 1 Metaproperties • Metaproperties are just archetypes with data associated with various component settings. Values set by designers. • Many were vulnerabilities. Every wooden object inherited from WoodVulnerability in addition to normal inheritance. • Also used to affect NPC behaviors (example on next slide) Metaproperty Example Multiple Inheritance – Thief 1 Metaproperties • Metaproperties could be changed in game. • Since this meant that an instance’s archetype could change, it affect caching and other assumptions. • But easy way for designers to control behavior. • Set all data for a guard to fall asleep (anim, barks…) by adding appropriate Metaproperty. Inheritance Blocking • What if parent archetype has component, like DamageModel, but this archetype doesn’t want it. • Could just recreate data elsewhere, but then you’ve got data duplication issues. • If there were a way to specifically NOT inherit a component, then you can put it where you want it, and just block the inheritance. Summary • Brief summary of the talk • Acknowledgments • Q&A Static Hierarchies vs. Dynamic Hierarchies • Component-based hierarchies provide flexibility for future design decisions. • Static hierarchies provide speed. Component-Centric vs. Object-Centric • Component-Centric systems provide efficiency when managing existing objects. • Object-Centric systems provide simplicity and easier addition and removal of objects. Simple Components vs. Complex Components • Simple components support inheritance more easily, at the cost of tracking overhead and additional inter-component dependencies. • Complex components encapsulate entire concepts better, but proper inheritance requires sub-component inheritance. Inheritance • Inheritance prevents duplication of data, making it easier for designers to keep objects up to date. • Can be slow. A number of optimization tricks exist, but reduce options for changing archetypes. • Changing archetypes is often not useful, but can work for you in MMORPGs or with multiple inheritance. What I Didn’t Talk About • Massively Multiplayer Games (except in Dynamic Archetypes) • Networking… communicating value changes. • Effects of system on end users trying to build content with provided tools. • References between objects. Acknowledgements • For talking about their systems: – Scott Bilas (Dungeon Siege) – Chris Butcher (Halo) – Steve Jakab (Star Wars Galaxies) • For additional insight into Thief 1 system: – Doug Church, Randy Smith, Chris Carollo Other Talks (from last year) • GDC 2002 : Scott Bilas : – "A Data-Driven Game Object System" – http://www.drizzle.com/~scottb/gdc/
• GDC 2002 : Rob Fermier :
– Creating a Data Driven Engine: Case Study: The Age Of Mythology – http://www.gdconf.com/archives/2002/index.htm
• And more recently…
Other Talks (this year) • GDC 2003 : Jeremy Chatelaine – “Enabling Data Driven Design Tuning via Existing Tools” – www.kamron.net
• Non-GDC : Doug Church :
– “Object Systems : Methods for attaching data to objects, and connecting behaviors. – http://www.d6.com/users/checker/ObjSys.ppt Q&A • Fill out your evaluations. • Any questions? • If I don’t have time to answer your question during Q&A, I’ll be around to talk afterwards. • After GDC, you’ll be able to find the slides for this talk at: – http://www.ionstorm.com/GDC2003/AlexDuran/ • And I can be reached at: – [email protected]