« Happy Birthday To Schizoid | Main | Huh »

September 06, 2007



Interesting topic, but this post is pretty hard for me to read, even though I did read the original article. (Not the comment, however...)

Could you add some color or italics to make it more clear which of the three sources a given sentence is from? (Original article, Gregg's comment, this article...)

(Love the blog!)

Max Battcher

Have you put much effort into attempting to the bend the Content Pipeline to your needs in this area? It seems to me that the Content Pipeline is extremely powerful and relatively easy to work with (define new importers/processors in the .NET language of your choice).

One solution I have seen is that a "level format" is used as indirection. The level format references individual art assets and art assets are checked into source control but not built directly by the Content Pipeline. Instead, when a level format is rebuilt by the Content Pipeline (in the case where a level is changed or a full rebuild done) the level format's Content Pipeline Importer/Processor then do the work to import the referenced art assets.

Plus if I remember correctly there are some "easy" ways to make smarter dependency graphs directly in MSBuild's XML if you don't mind hand-editing the .csproj generated by Visual Studio...

Paul Du Bois

Hey Jamie, gotta get home but thought I'd drop some notes on the asset build that we evolved into.

Artists check in DCC source (.ma files and such), and platform-neutral intermediate files (collada, uncompressed dds, and so on)

At first, the game read directly from the intermediate files. After a while this got kind of slow.

Then we added a way to serialize out the loaded assets into something easier/faster to load, but platform-specific. We'd cache these faster-loading files and use them if the timestamps looked OK.

Then we wrote a program (basically a command line version of the game) whose job was to create these cached platform-specific binary files, and wrote a primitive wrapper that loaded up intermediate assets to generate "cached" binary files, and checked them in.

Then we added dependency checking; whenever an intermediate asset is loaded, we keep track of what other assets are requested. The code that loads an animation collada file tries to load a bindpose, so we note that as a dependency. These auto-generated dependency files are saved and checked in. (Note that no programmer needs to do anything to specify a dependency besides use some data during asset processing; it works pretty well)

Recently we haven't had to touch it very much; mostly error reporting, figuring out who checked in an asset that fails to process and sending them an email, stuff like that. The next big push will probably be asset aggregation into wad files or whatever.

This is a pretty nice-to-use system. Artists don't need to shepherd anything through a content build, and they can see their changes without doing any building (since the content build code is all linked into the game executable). If we need to change some binary format, we build and check in a new version of the command-line asset builder (automated via ugly but functional web page) and kick off a data build (via same page).

Our dependency scanning (~18K asset files) ranges from 5 or so seconds to 2-3 minutes, depending on the state of the FS cache.

Again, this was all built slowly over time, so we both had stuff up and running quite quickly, and a lot of time to ponder our next moves (which was good, because some of the problems we ran into were subtle and required clever rather than simple solutions) I think the biggest PITA was our use of Collada (ick) but that's not really on topic.

Verify your Comment

Previewing your Comment

This is only a preview. Your comment has not yet been posted.

Your comment could not be posted. Error type:
Your comment has been posted. Post another comment

The letters and numbers you entered did not match the image. Please try again.

As a final step before posting your comment, enter the letters and numbers you see in the image below. This prevents automated programs from posting comments.

Having trouble reading this image? View an alternate.


Post a comment

Your Information

(Name is required. Email address will not be displayed with the comment.)

Jamie's Bragging Rights

  • Spider-Man 2
    The best superhero games of all time Game Informer
    Top five games of all time Yahtzee Croshaw
    Top five superhero games of all time MSNBC
    Top 100 PS2 games of all time Official Playstation 2 Magazine
    1001 Games You Must Play Before You Die Nomination for Excellence in Gameplay Engineering Academy of Interactive Arts & Sciences
  • Schizoid
    Penny Arcade PAX 10 Award
    Nominated for XBLA Best Original Game
    Nominated for XBLA Best Co-Op Game