|
Features

From the Ground Up: Creating a Core Technology Group
Tools and
Pipeline
Our
goal is to give content creators fast and simplified access to the
technology. The more times they can iterate and the less time spent
waiting for fixes, exports, and programming changes, the better
the game will be.
Tools.
Tools for development are essential, but their development can easily
be mishandled. They can limit content quality and production flow
if not properly developed. This is often due to limited resources
being dedicated to tool production early on. Tool development can
also be too ambitious, providing complex, deep tools that do not
meet the expectations of professional artists who are used to mature
interfaces. Tools can place a major burden on users by introducing
complex steps or latency between creating assets and seeing them
in the game. They might depend on parallel functionality in the
game that could be changing rapidly and end up requiring heavy maintenance.
At worst, an asset that works in the tool might not work at all
in the game once it is imported.
Our
approach to tools is to create them at three levels. These levels
correspond to how tightly coupled the assets and data the tool manipulates
are with the game (and how fast changes happen) and how deep the
user interface is. Figure 1 shows the relationship among the different
types.
The
top level consists of plug-ins and extensions to Maya and other
commercial tools. Maya has hundreds of man-years of development
in its user interface, there is a rich pool of talent that knows
how to use it, and its interface is extremely customizable and extensible.
This is what the artists and designers use to perform the large-scale
operations of creating levels and geometry and setting up gameplay.
They spend most of their time in this environment, and so their
tools need to be solid.
The
mid-level tools are MFC applications linked to our engine. An example
of this is a tool that allows us to create and tune our animation
finite state machine (FSM). FSMs are often defined in code or in
obscure text files that designers or artists cannot manipulate.
A user interface such as MFC allows your tool programmers to create
capable interfaces rapidly. The artist is graphically manipulating
the FSM and its parameters, and can see the immediate progress within
the game view. There is nothing that can be lost in translation
or code duplication between the engine and the tool when they are
linked together.
The
lowest level of tools we develop are those which run directly on
the console. These tools manipulate data that is dependent on the
hardware. An example of this is our mip-map tuner which allows the
artist to select a texture within the game running on a PS2 and
tune the mip-map (l and k) settings in real time. The networking
layer allows this tool to be run on a PC that is on the same network
as the PS2. Once the artist is happy with the settings, he or she
saves the parameters out to the asset pipeline, which uses those
values for all subsequent PS2 exports.
Another
important feature is to make sure the interfaces are as uniform
as possible, for example, making all your camera controls work the
same as Maya's. Keeping a dozen or so tools under proper control
creates problems. Properly versioning the tools and the assets they
create is a major requirement for the pipeline, which I'll address
next.
|
|
Renderware Graphics 3.5 introduced platform-independent
XML format (RF3) and export templates that control how the
RF3 is converted to platform-dependent assets. This is a great
example of an intermediate file format that made the pipeline
far more extensible.
|
 |
 |
 |
|
Asset
pipeline. Channeling the flow of thousands of assets (source
and exported) through a system that maintains many revisions can
be a major challenge. The problems are too numerous to list individually,
so I'll generalize them:
-
Maintaining revision control not only of the assets but of the
executables. When everyone has different versions of the game,
it's hard to track down problems but easy to lose tuning improvements.
- Old
assets that are no longer useful clutter the system long after
they should be retired.
- Numerous
paths for adding assets exist. No permission system exists to
protect the data.
- No
meta-data exists to control the asset export. For instance, what
would you do if you needed to change the scale of every exported
asset?
- Bad
data (assets that can crash the game, for example) needs to be
caught before it goes out to the rest of the team.
The
first step in creating an asset pipeline is to visualize what you
want it to do. We flowchart the path for assets through each system
we want to create and work with the artists and designers to develop
case studies of how specific areas of a pipeline will work. The
goal of this flowchart is to identify and remove bottlenecks for
the artists to create scenes and see them in their final form.
Many
developers have created custom asset management tools that required
major investments. The impact on budgets and schedules due to bad
asset pipelines certainly justified the expense. However, there
are some recently released commercial applications that make such
an investment in homebrewed solutions no longer necessary. We chose
Alienbrain as our base asset management system. Alienbrain came
with Maya integration built-in and an extensive COM-based interface
that allowed us to integrate it with our engine and tools.
One
other key element of the system is the use of an intermediate XML
file format that is exported by the tools (Figure 2). This intermediate
file format is an additional file that is exported into the pipeline.
It contains all the data that you would potentially be interested
in. This gave us two major benefits:
First,
assets can be re-exported from an automated system if we wish to
change some basic value. For example, when we wanted to rescale
our geometry, we changed one float in one template and hit one button
to re-export everything.
The
other benefit is that exported assets can be deleted and regenerated
every night. Together with meta-data-driven asset tracking, this
is a useful system for culling old assets that are no longer used.
|
|
During
development there are many improvements to the technology
or methods made to make life easier. How do you track these
improvements? A single document that collects descriptions
of these is a great help.
Think
of what you would want to hand to new programmers joining
your team. You want them to come up to speed on your team's
practices as efficiently as possible. If they need to know
it, it should be in the best practices document.
|
 |
 |
 |
The
Best Practices Document
|
The
major ongoing issue of an asset pipeline is that it is constantly
changing. With the addition of tools during development it is easy
to introduce problems and pathways that make it harder to use. Revisiting
the state of the pipeline and fixing problems is a must, as asset
pipelines are never truly "finished."
Methodology
The
effectiveness of a programming team is determined by how well they
are organized and how well they work together. A team that is not
moving toward a commonly understood goal and sharing the same practices
is not going to be very productive.
Shared
practices. Creating a game is a team effort that should be supported
by certain practices. Such practices include sharing tool improvements
and improving the ability for programmers to understand each other's
code. Code that is hard to read, poorly documented, or full of bugs
hinders efforts to streamline programmer productivity. Improvements
to the technology and development tools need to be shared widely
enough to benefit all programmers on the team.
To
help solve this, we use a best practices document. This document
is a collection of all the standards and practices that have been
established. This document is constantly updated to include improvements
or refinements to the system.
The
best practices document includes coding standards, setup instructions,
naming conventions, documentation requirements, commit practices,
and descriptions of useful utilities and tools for the programmers.
Revisions to this document happen continually; whenever someone
sends out a useful macro for debugging, I'll have them include the
information for that in this document.
A
best practices document alone is not sufficient, however. Other
practices such as code reviews and pair programming exist to ensure
that the entire team is continually following these practices and
that good practices are being promoted. If these practices are followed,
you'll find that everyone's code quality will improve and maintenance
will be reduced. Programmers write better code when they know more
people are going to look closely at it.
|
|
A lot of automation to control the commit practices can
be built. This automation makes the task of committing and
sending mail to the team as painless as possible.
|
 |
 |
 |
|
Commit
practices. Source version control tools are essential, but they
can introduce as many problems to a project as they solve. It's
very easy for programmers in a rush to commit untested code changes
that bring the entire project to a halt. It's not uncommon to see
teams spending half their time fixing problems related to this issue.
We've
set aside a PC that is our commit test target. Before a programmer
makes a commit, he or she first reserves this machine. Following
the commit, the test PC retrieves those changes and rebuilds all
configurations of the game. When all the builds are successful,
the target PC is released and the programmer sends a note to a team
list describing the changes. This catches most of the problems committed,
but not all of them. Daily build tests catch many of the rest.
Nightly
builds. A common problem occurs when you're not sure what version
of the game or assets is being used by members of your team. An
artist might have a crash problem on his or her machine, but the
problem cannot be replicated on a development system. Trying to
figure out such puzzles wastes a large amount of time.
Earlier
I mentioned that we re-export all of our assets overnight. This
is done on the PC that is used as the commit test target. The tool
that creates these builds also embeds version numbers in the executables
and the game (for run-time version testing). Each morning the assistant
producer runs the game that was regenerated overnight and goes through
a regression test. Any problems must be solved immediately. Once
a working set of assets and executables are identified, they are
copied up to a network drive. Everyone on the team is informed (using
Alienbrain instant messaging) that they can update to these versions.
The
benefit of this is that the team can copy known working assets and
executables to their local drives and start making changes. If an
artist introduces a new asset that breaks their local copy of the
game, then they know they caused it and that that they cannot commit
this new asset. The same goes for programmers changing code. In
such a situation the artists are encouraged to seek a programmer
to solve the problem.
Leadership.
Programming teams are often led by someone who does not yet understand
how to lead. That person has shown a great talent for programming
and was probably promoted with no instruction on how to fill the
lead programmer role. This situation can lead to disaster for the
team, because the lead will continue to focus on programming and
not leading the team.
Leads
need to spend half their time managing the effort, dealing with
problems that are affecting the team, planning to avoid future problems,
and making sure everyone is working toward the same goal. During
milestone crunch times, they will need almost all of their time
free for putting out fires. As a result, leads should not assign
themselves key tasks around critical milestone deliverables. Leads
should focus on mentoring and taking a global view of the technology
being developed by the entire team. There is no way a lead programmer
alone can create enough useful technology that would offset the
benefit gained by having someone focusing on team issues.
From Investment
to Returns
Many
of the problems described here are common to every developer. Our
solutions were developed based on our current circumstances and
collected experience. These same solutions may not apply to you,
but the problems still need to be addressed. Creating and justifying
the expense for infrastructure can be an uphill battle with management;
the value added by infrastructure cannot easily be tracked by counting
games sold. A solid infrastructure does not ensure a hit game; rather
it reduces the number of obstacles that get in the way of creating
a hit game.
Suggested
Reading:
Brown,
William J., and others. AntiPatterns: Refactoring Software, Architectures,
and Projects in Crisis. John Wiley & Sons,
1998.
Cerny,
Mark, and Michael John. "Game Development Myth vs. Method."
Game Developer vol. 9, no. 2 (June 2002):
pp. 32-36.
Game
Programming Gems, vols. 1-3. Charles River Media, 2000-2002.
McConnell,
Steve. Rapid Development. Microsoft Press, 1996. (Or any
of McConnell's other books.)
Meyers,
Scott. Effective C++, 2nd Ed. Addison-Wesley, 1997
______________________________________________________
|