Contents
Making Your Game Tools Fast And Efficient
 
 
Printer-Friendly VersionPrinter-Friendly Version
 
Latest News
spacer View All spacer
 
November 22, 2009
 
Video Game Watchdog National Institute On Media And The Family Shutting Down [11]
 
Modern Warfare 2 Infinity Ward's 'Most Successful PC Version' Yet [12]
 
New Tech, Design Details Of Project Natal To Emerge At Gamefest In February
spacer
Latest Jobs
spacer View All     Post a Job     RSS spacer
 
November 22, 2009
 
Trion Redwood City
Sr. Evnironment Modeler
 
Trion Redwood City
Sr. Environment Artist
 
Sucker Punch Productions
3D Environment Artist
 
Sucker Punch Productions
Network Programmer
 
Sucker Punch Productions
Character Artist
 
Sucker Punch Productions
Texture Artist
 
Monolith Productions
Sr. Software Engineer, Engine - Monolith Productions - #113767
 
Sony Online Entertainment
Brand Manager
spacer
Latest Features
spacer View All spacer
 
November 22, 2009
 
arrow Upping The Craft: Susan O'Connor On Games Writing [6]
 
arrow Small Developers: Minimizing Risks in Large Productions - Part II [7]
 
arrow iPhone Piracy: The Inside Story [48]
 
arrow And Yet It Grows: Analyzing the Size and Growth of the European Game Market [5]
 
arrow NPD: Behind the Numbers, October 2009 [13]
 
arrow Reflecting On Uncharted 2: How They Did It [5]
 
arrow Sponsored Feature: Rasterization on Larrabee -- Adaptive Rasterization Helps Boost Efficiency
 
arrow Postmortem: Wadjet Eye's The Blackwell Convergence [2]
spacer
Latest Blogs
spacer View All     Post     RSS spacer
 
November 22, 2009
 
Time Fcuk [1]
 
Accepting the Inherent Value of Games
 
Planckogenesis, Part II: Song Structure & Gravy Train [1]
spacer
About
spacer News Director:
Leigh Alexander
Features Director:
Christian Nutt
Editor At Large:
Chris Remo
Advertising:
John 'Malik' Watson
Recruitment/Education:
Gina Gross
 
Features
  Making Your Game Tools Fast And Efficient
by Noor Khawaja
5 comments
Share RSS
 
 
September 25, 2008 Article Start Previous Page 3 of 4 Next
 

Software Architecture Considerations

Tool software architecture includes foundation features, framework, extendibility, and data format. Fundamental features should be listed during the technical design stage -- that can be critical to the software tool's architecture.

These may include Undo, Redo, Cut, Copy, and Paste, which require serious technical design considerations because they may apply to most parts of the software. Fig. 3 diagram shows data flow between components of the application.

Advertisement

In the framework category, these are some of the key application components. The user interface drives the application and may be kept as much decoupled from other components as possible. This may not be as simple as it sounds, but it will have advantages in maintenance down the line.

The current UI state such as dialog sizes, positions, and control states can be stored in an XML definition. This definition can be stored on disk so that the application can maintain its UI state when launched the next time.

The Undo and Redo state stores the state of content data, difference in content data, or command history. Again, this state can be stored on disk or in memory so that Redo and Undo actions can be performed.

The Content Data module manages the attributes data to include load, store, and conversion. The Live Update module is responsible for sending the data over to the remote target or game application when a change in the data occurs.


Fig. 3

As for extendibility, it is all too often that new features need to be added to the software, and it may not be done by the original authors. In some cases an open architecture or external module plug-in based architecture can be highly beneficial.

Ideally the attribute data format would not require a conversion to reflect object display. In other words, the data directly maps to content attributes. This may not be possible for all attributes, but data that is directly mapped will make real time update of the attributes easier.

For example, the color of light in the scene modified from the user interface will directly update the data field in the asset attributes data state without a conversion process.

Implementation

Content attributes data has to be mapped directly to user interface controls and data update has to reflect the change immediately. Ideally, the real time engine will be using the data and therefore, change in the data will be reflected automatically. Care must be taken when modifying data that has resources associated with it such as textures and geometry data.

The new resource may need to be newly created and the old resource disposed of. There will have to be checks on use of resources that are being disposed of in the tool source code to avoid unwanted results while new resource is prepared. A safe method would be to halt any display and not use the disposed resource until new resources are ready.

Let's go through a simple example to show implementation of user interface controls mapped directly to an object attribute. As shown in Fig. 4, we have a slider that controls the spin speed of an object being displayed in the viewport.  I use pseudo code (I'm keeping it similar to C++) to demonstrate data structure and code implementation.


Fig. 4

The slider mapping information is kept in a searchable database or a simple array, which has the structure shown in Fig. 4a. The Slider ID is a slider control resource identifier and pAttribute is a pointer that points to the address of the object attribute.


Fig. 4a

In the Fig. 4b example, the object attribute Spin Speed is kept in a separate data structure. This data structure is used directly for object display. Here the SpinSpeed field is the angular rotation speed of the object in the viewport. Since this field is being used in every frame cycle to retrieve the rotation speed of the object any changes to this field will result in instantaneous update in rotation of the displayed object.


Fig. 4b

As shown in Fig. 4c, when an object is selected or becomes editable, the searchable slider mapping information database is initialized or updated to reflect the current mapping. The pAttribute field is assigned to the address of object's spin speed field. This way the attribute value can be updated by using a pointer to it.


Fig. 4c

When the slider control changes its update, event updates the value of the attribute it is mapped to, Fig. 4d. The slider value is assigned to the object attribute by using the mapped pointer. The object data structure is decoupled from the slider database. Yet, the attribute update is reflected in the object attributes and onto the object display in real time.


Fig. 4d

Resources like device objects such as textures and geometry and other properties' data that requires additional processing cannot be directly mapped to the UI control.  Those controls may only update reference information such as file name or unique identifier which is then used to prepare the resource associated with the object.

For example, if a new material is assigned to the object then the previously assigned material is freed and the new material is created and prepared to be assigned to the object. Once assigned, the material is reflected in the viewport.

 
Article Start Previous Page 3 of 4 Next
 
Comments

robert toone
profile image
A nice straight forward article. I completely agree with. Sometimes however it is hard to convince teammates or development partners that this is really important and worth the resources it will take to get right.
thanks, this can only help our development cause.

ken sato
profile image
With multi-SKU development, a good set of tools can not only make iteration shorter but also simpler, allowing teams easier cross platform work by having your platform hooks ifdef'd on console specifics. That way objects created with various design packages can be viewed, assessed, and optimized per platform without having too many tools to become familiar with. Kudos.

King Lee
profile image
Good article!
I have written some editors...the main problem is about how to update data easily and make user easy to control.
I hope we can see more articles about this aspect。

Diego Castaņo
profile image
Absolutely. Tools not only need to be artist friendly, as the author says, but also pipeline efficient.
As games become more complex, with millions of assets, it becomes very important to be able to batch process these assets with minimal user interaction.
I'm a tools developer and I've been developing an open source 3D production solution (SDK, exporters, importers, scriptable interfaces, applications and plugins) that allows tools developers to create tools with this flexibility. This project is called SceneEngine.
http://www.sceneengine.org

Luke Rymarz
profile image
I currently work on tools outside the game industry, but it's nice to see an article focusing on the UI side for once. It's astounding how often the UI of a piece of software gets overlooked. Good UI design provides ease of use, but also --and this is something that isn't emphasized enough-- gives the implementer a very good head start on the software architecture.

But I'm curious; what do most people use for UI prototypes these days? I've had good times with C#, and I think Flex (and Adobe Air) is great if it fits into your workflow (i.e. flash anything). Anyone else have a favorite, or is there already a standard Max-like kit that everyone uses?



none
 
Comment:
 


Submit Comment