|
Game build systems will usually be put in place to increase the predictability of new releases back to the team. When those aren't stable, other things are done to make those systems more reliable. Everything done here adds to the volume of work and the complexity of the project.
As game development has gotten more complex, projects have become unwieldy and for many teams, progress has slowed. It's caused developers to have a focus they never had to have before: optimize not only the game, but also the tools and processes involved in building the game. It's a huge shift in mindset.
Local/Individual Iteration
What items above are most responsible for impeding a single developer's progress these days? It's generally the tools involved in daily workflow: compilers, debuggers, digital content creation tools, source code and content control systems, custom tools and the game runtime itself.
Each component in the tool chain adds time to your iteration rate. When you make a change, how long does it take you to see the effect of that change in the most appropriate environment (game, viewer, whatever)? The closer it is to instantaneous, the better you are doing.
Team Iteration
A change made locally doesn't really exist until everyone on the team can see it (Is it in the build yet?)
This is usually all about getting your change submitted to a repository, and getting it successfully through a build cycle. Here's a build cycle diagram that will be useful in discussion.
As project leaders and studio executives have trouble understanding how far along their game development project is, they implement metrics and automated processes to help them achieve some predictability.
They stand up automated builds to bring order to a very complex, error-prone process.
In addition, to stabilize the build and protect the ongoing investment in the game, "gates" are placed in the way of checking in anything into the game. Sample "gates" include:
- Get your change integrated into your local build
- If it's a code change, either:
- Compile a single configuration on your main development platform.
- Compile all configurations (debug, release, shipping) on your main development platform.
- Compile all configurations on all platforms.
- If it's a content change, either:
- Transform data on your main development platform.
- Transform data on all platforms.
- Test your change by either:
- Running manual tests on all platforms, performing sufficient tests to verify that your change worked as expected and didn't break anything.
- Running an automated test on all platforms, in addition to the above.
- Running the entire automated test suite on all platforms, in addition to the above.
Wow. I'm forced to do that to check in my change? No wonder things are slow.
|
It seems to me, as the game industry continues to mature, that it is becoming more and more like the general business industry, not further diverging from it.
Sorry, a bit of an aside there I know, but I am just curious. Do you really feel the game and business IT industries are that dissimilar? And if so, do you feel they are headed toward further divergence, or not?
So I would say game development is very much like IT, but in some ways even more necessitates the use of practices that reduce failure, show consistent progress, and make the product as good as the vision that gave birth to it.
Martin & Anon #1: I brought out waterfall to make a point, not so much to say that it is the methods we use today. I've never done business software development, and I admit these days that waterfall doesn't really work for most teams, across both business and entertainment software. But when I started game development, waterfall was the standard on the business side, and it never worked in games. There's also always been no off-the-shelf tools to develop the differentiating features in games - those tools need to be written specially by the team, for the team. That means that the team is building the software it needs to make the game, not just the game itself. You are bringing artists and engineers together in an amazing cauldron of creativity, something I don't believe the business software industry does anywhere near the same scale.
On the other hand, there is a LOT that game developers could learn from business software teams that have been working in larger numbers far longer than they have. There is an incredible cultural barrier to get past in bringing new techniques into the Game Industry - lots of NIH, and developers who want to "work like they always have". You really have to work to get individual developers to change their tune and optimize how they develop games so they CAN make it better. Hence the title for the article "Building a Mindset..." - you have to begin with individuals, and spread the mindset to the team, before you can change culture.
Steven: When your team is small, and you are keeping it lean and mean, the challenge is to find the fun as quickly as you can, and get ready to scale your team. What I've personally seen is -- once a team finds the fun, and have all the foundational tools they need to make the content required for the game, they scale the team - and then find out that all of their tools and processes do not scale to a larger team - they can no longer iterate like they could when they were small. And sometimes, pressures come from publishers to scale the team even further than they anticipated. It is a delicate balance. You don't want to over-engineer. But you also don't want to get caught with a process that doesn't let you continue to iterate when you get big.
Anon #2: With large worlds, if you haven't properly built your tools, baked lighting or global illumination builds can indeed take days. Full content builds from source can also take days. These days, teams that are doing it well distribute these builds across multiple machines and cut the time down to see results. But if you're the guy that needs to see lighting changes, you're still in a world of hurt if you have to wait for the lighting build to see your change in the engine. How do you see "enough" results to know if the change you just made worked? You need close approximations much more quickly that don't involved a large lighting build. You need to see a few still frames at different camera angles in the scene you modified rather than a fully interactive world. You need a quick path.
Machines are definitely not the only inefficient things. Poor tool interactivity workflows and lots of context switches on your desktop can really slow things down too (amongst lots of other things). It's just that its probably easier to hit the tools and processes than it is to effectively optimize every single tool workflow, including those off-the-shelf tools that game developers DO use, like DCC tools.
Anon #3: I hope I answered your concern in the response to Martin.
Again, thanks everyone for your questions, and you should see part 2 soon.
It's interesting that you bring up lighting-iteration as a significant bottleneck. I'm currently a graduate student in graphics, and there's a lot of research out there on rapid-iteration of scene lighting. A lot of it is focused on lighting-design for CG movies, but a lot of other techniques may be applicable to rapid iteration of environment lighting (anti-radiance comes to mind). It would be great if one small, isolated change in a map did not necessitate a complete re-computation of lighting.
Back in the old Quake days, their solution (god bless Carmack) was to make lighting optional. As a designer/level builder (back in the day when they were the same person), you didn't have to run the "light" or "vis" tools to play your map. It just meant that 1) your map would run slower (vis optimizes it) and 2) everything would be full-bright. Perfectly reasonable trade-off's in a development workflow.
Anyway, can't wait for Part 2.
As far as using a commercial engine that you don't own a license to just for preproduction, I'd have to say that's not legal. You're getting a lot of benefit using an engine to get your ideas fleshed out, even if you don't ship with it (full disclosure: I work for a middleware company, so this is the expected response).
Anon #4: A great point, and I chose to write the article from the minimum state up, rather than showing a picture of a completed working system. Two reasons for this -
(a) I've tried to paint the full picture for teams before and ideas have been rejected wholesale because it seemed like too much investment.
(b) It's tough to have a one-size-fits-all solution for all teams. Every team has different requirements.
I still think that's its a worthwhile exercise, and I think i'll spend some time building a full picture of a system I think would work for most teams. People reading that type of article hopefully will be able to see the different parts and take the parts that work for them, and don't worry about the parts that won't.
Thanks for the comments.