|
Collaboration between teammates is necessary in any software development project. Game development is no different. Textures artists, level designers and modelers have an impact on polygon counts, graphics memory usage and shader performance. Just like programmers influence how art data is rendered on screen. Although programmers and artists can have different training background, it is essential that they find ways to make a good game in a context where features and deadlines can change fast.
Here is the problem. Many times, I have found myself unable to give artists better control over the game during runtime. Why do they need to control runtime? Well, artists need to control things like atmospheric and weather effects, shading quality, and rendering fidelity. If you have done graphics programing on the Xbox 360 or the PS3 you know that they don't render things quite the same (not that one is better than the other). And because your lighting looks good on your PC doesn't mean it will be the same on console (it maybe turn out to be darker or lighter than you expected). As a programmer, I can always use a debugger or directly change the code until a feature is exactly as I want it to be. However artists may not have the technical expertise to do that. And yet, it is best that someone with an artistic vision be the final judge of the game rendering quality. For all those reasons, artists (and anyone involved in the approval of the game) need to be empower in controlling some of the game parameters at runtime and all this within some boundaries defined by programmers (you don't want the denominator of a division set to zero during program execution!).
Here is how I think you can give artists more control over a program's runtime.
- The code (and data) is always the most up to date piece of any game production. Code changes faster than it takes to update a wiki page and during a crunch period, no one has time to update the documentation.
- If you don't have the manpower, you don't want your programmers to improvise themselves as tool developers. It takes times to validate and get a tool ready for production and then to maintain it. Plus, you need very good knowledge of user interface design otherwise your tool won't perform correctly and you would have wasted resources building something that no one can use correctly.
- You want this to be easy for everybody. To entrust artists over the program runtime, you don't want them to be more like programmers, nor do you want your programmers to be more like artists. If you can manage a balance between programmers and artists expertise then you create a process that further invites collaboration between them.
This is what it looks like in practice. Let your programmers use and API to expose the code inputs parameters to artists. Like this:
// Initialize parameter system. uiTool.Initialize(); // A checkbox uiCheckBox* param1 = uiTool.CheckBox("Param1", false); // A spinbox with values within [-20, 20]. uiSpinBox* param2 = uiTool.SpinBox("Param2", 0, 1, -20, 20);
Then, you provide your artists with a client user interface that can connect, through network, to the program at runtime. When the client tool is connected to the program, its user interface exposes widgets that are linked to the exposed parameters in the code. Artists can then interact with the program in realtime.
Parameters in the client interface as defined in the code.
The APIs provided to programmers let them create variables that are reflected as user interface widget in the client interface. The API contains a server that is open to receive connection from the artists client interface. This way, artists get and interface with widgets component they can understand. And the programmers gets simple C++ class objects he can manipulate.
The server and the client communicate through XML data packets. When the client interact with a widget, an XML data packet is created and transmitted over to the server to be interpreted. Then the C++ objects associated to the widget is updated. The programmers controls the frequency of objects update and the range of their values.
It is simple to create sections of parameters and organize them in a way that is intuitive to artists. And because the tool widgets exist only during runtime, maintaining it is easy; you don't have another piece of code to maintain outside of your main engine. If you don't create C++ parameter objects in the code, they will not show up in the artists tool.
Parameters arranged in a tree structure.
Game development is dynamic process; features can change as the game progresses. This tool technology saves you the time and resources you need to write and maintain tools during production. The tools you create are always up to date with the code. And programmers can quickly provide artists with the right tools they need to get the job done. |