Tools

Max and Maya Integration

Being able to preview for any target, including consoles, inside the modeling tool is quite impressive; how is that implemented? And how does that work for LODs; can the artist tweak the rendering quality parameters straight in there too?

DA: The Gamebryo on-target viewers export the data to our NIF format and allow artists to preview it on the consoles by sending the file over the network and launching a viewer application on the console. Any setting including mesh LOD information that can be stored in a NIF file is previewed as well.

You say it's a "pluggable architecture" - what kind of things have you seen developers adding to it?

DA: Gamebryo's exporters use a scripted export process that executes a number of plug-ins with various options in a predefined order. By representing the export process as a script, we allow studios to standardize their export process across all artists. Standardization is very important when you have a large number of artists producing content.

Also, because the script executes plug-ins the export process can easily be extended. These plug-ins allow you to manipulate the scene graph just prior to export in a reproducible way. There are a variety of plug-ins that we ship with Gamebryo, including tools for scene graph optimization, asset analysis of memory requirements and asset efficiency, platform-specific optimizations to format data for PC vs. consoles, and creation of additional data for collision or the portal system.

If customers have a special custom scene graph object, they can use tool plug-ins to allow artists to add these new objects to exported scene graphs without having to change the more complicated Gamebryo exporters from 3ds Max or Maya. For example, a client could create a specialized AI navigation node. They could create a plug-in that searches the scene graph for nodes marked a particular way, then add an AI navigation node into the exported scene at that location. Artists can add AI nodes to the environments directly from content creation packages even though the Gamebryo Max Plug-in knows nothing about that type of object.

You can use plug-ins to change the file saving behavior as well. Instead of writing to our NIF file format, you could write to a database or some archive file. You could extract textures and place them all in a texture library separate from the geometry. The possibilities are endless.

Platform-specific exporting optimizations; is there anything that'd be interesting to explain there?

DA: Platform-specific export is critical to Gamebryo. We perform a variety of optimizations, and we allow user-controlled behavior. For example, a user can target a texture format and size based off of platform. The exporters will automatically reformat and downsample textures as requested. This capability is very useful when targeting multiple platforms with different GPU capabilities and RAM limitations. For example, you may want to use a 512x512 texture on you PC version of a game but downsample that texture to 256x256 for console versions. The exporters will perform that operation automatically if requested.

For optimizations, we tailor the generated geometry and textures to match the hardware that is being targeted. There are lots of details that are examined here, including: 

  • Considering the geometry format. Indexed triangles, a single triangle strip stitched with degenerate triangles, multiple strips, and so on.
  • Format of the output textures. Is the format requested by the artist valid? If not, what's the closest match for the target console?
  • Tiling of textures. Layout the texture memory of the texture so that no additional processing occurs when the texture is loaded onto the consoles.