Sunday, July 17, 2011

The Office

If one would ask how Demo2 is going, then I would say , “Steadily”… uhm, “slowly”. Pity, but not a complete surprise though. Quite a lot things have been upgraded thoroughly in the code, several more things yet have to be made. Or usually the required features are already in the Engine, but limited. So it has to be revised anyway. Another slowdown is the lack of materials, textures, sounds and 3D props. This time I don’t want to “borrow” media from other games anymore, so we have to make everything ourselves. From a simple carpet texture to a noisy wind ambient loop.

I’m planning to release a movie in the meanwhile though. Not in-game or cinematic sequence of (horror)stuff. Merely a tech-movie. Just showing some fancy shader stuff, that’s all folks.

Nevertheless, a little bit more tempo would be nice. The problem with making a game is that it’s not just big…. It’s f$cking big! And I’m not just talking about all the programming work. Even a simple room can already hold 5 or more different textures(from each requires additional images such as a normal- or specularMap), 10 different props (bench, TV, painting, lamp, …), and several decal/overlay textures (dust, dirt, moss, holes, power sockets, …). Well, just look around in the room, toilet, or stinky office you’re sitting at the moment. And that’s just one room… A game like this needs hundreds, if not thousands.

Of course, after making a couple of environments, your so called library of textures, models, sounds and other shit to put in the game will start growing so that future locations can be filled faster with already-existing assets. But making a start feels like pushing forward a big Diesel Locomotive. Derailed. And because progress is so slow at the start, it’s harder to motivate people. We all prefer quick results, like mcDonalds hamburgers. Painting, modeling, programming or sound engineering is difficult without seeing direct results. Certainly when spending your precious free-time on it.

Off topic. Added some more specular intensity, and it turned out pretty nice for this screenshot that uses only 2 different textures by the way.

Nevertheless, if you want to realize a big project, you shouldn’t be afraid to bleed. Rome wasn’t built in one day either. In my case it requires a lot of effort from the modelers, drawers and anyone else involved. No assets = no game. But it also requires my support, feedback, motivating and vision. Just like in any other company, whether it’s the local tobacco store, a cheese-pudding factory, FC Barcelona, or the Navy Seals, employees need clear goals, a planning, and need to get helped or pushed time to time. This interaction between employees, managers and direction is crucial for any company. If the sales are bad, you can’t just blame the employees because they were too lazy to bake cookies. And neither can you expect to solve all problems simply by replacing a manager. It takes two to dance the Tango.

Now this “managing” task is harder than I thought. Just giving a good idea (“gonna make a cool game, yeah!”), then waiting until the 3D models of double barreled shotguns, awesome monsters and picturesque locations stream in via the mailbox is not going to work. But as a typical worker (don’t talk, just work), I’m not used to socialize a lot with others, demand things, push them, or stipple out rock-solid strategies. I’m used to get some assignments, then just execute them. Managers… ttsk. Talking all day, but never touched a hammer or made their hands dirty. Who needs managers?

In theory, managers are nothing but overhead indeed. If all workers do what they have to do, one Boss-guy should be enough. In practice, worker aren’t always motivated, don’t always know what to do, have internal problems, or are just waiting for feedback / approval before they continue. And certainly; the bigger the company, the harder to get them all facing the same direction.

Now I don’t have to command a whole army of Borgs. The complexity here is the distance and limited, fragmented time. I don’t know my helpers personally. Don’t know their faces, or voices. They spend some hours in their free time, but on varying intervals. This makes it easier to forget things, and a whole lot harder to make robust appointments. The lack of appointments makes it near to impossible to plan anything. As a result, no clear mission. Nobody really knows what to do when, and finally that degrades the motivation. Why work hard if there are no concrete results to expect anywhere soon? It works like a chain; if one link gets stuck, the whole chain starts stuttering.

Ice, ice baby. Asides being David Brent, I spend time doing (cheap) Sub-Surface-Scattering & Fresnel for this ice effect. Not done yet though. Pretty darn difficult, certainly to get it right in relative dark indoor situations.

Enough metaphors. Let’s fix this sink boy. To get more done, I could ask for more people to help (like I just did for the Concept Art). But in the end, I believe smaller, flexible, motivated teams can do more than big chunky ones. So before buying extra horsepower, it’s worth trying to get the maximum out of your current team. You can do this by threatening (you’ll lose your job!), but since this is a charity project, I’d better try it the positive way. Not by kindly asking, but by providing. The A-Team won’t be able to get in action if no one provides ammunition and cigars.

So, it was time to look in the mirror to acknowledge my faults or shortcomings. One of the problems was the amount of info. Not that they don’t know anything about the project. No, there are so much documents, mails and posts scattered around that it’s simply too much. Admit it. Asides from nice books, do you really read tons of paperwork? No. It’s a waste of time making them, because 95% of the people will skip it anyway. I should learn to keep my descriptions short, and less suggestive. Don’t ask “should we do this or that?”. Just tell them what to do. Show them who’s the Boss! And if you need opinions or feedback, put it in simple, compact polls. You don’t have to rule the joint like Stalin, but as a chief, you are expected to chose directions.

Asset manager
As said earlier, another difficulty with games is the tremendous amount of assets to make. Assets? Yes, sounds, textures, models, maps, shaders, concept-art, story dialogs, an animated mouse-cursor… pretty much anything that is relevant for the game. If you want your helpers to do something, they’ll need to know what to make of course. And since there is usually more than just one asset to make, someone needs to prioritize things as well.

To make it more complex, game-assets are often interleaved. A map asset may require other texture assets, going to be made by another person. So to prevent endless waiting, the priorities of all helpers need to align. Person A can’t finish his map if person B has low priority on certain important sub-assets of the same map. This is what would be called “miscommunication” in a normal company. Obviously, the complexity grows when more and more assets & personel arrive on the scene.

Yet another problem with assets is the “unknown”. Do you really know already what EXACT assets to create for, let’s say, a corridor map? Often it’s up to the artist to decide what materials, music or decorations suit best. But to find that out, you’ll have to put the bastard at work first. To do so, he needs to know about this corridor in the first place. In other words, assets can be seen as a tree-structure. From top-level, abstract, global assets such as “making game Tower22”. Going down deeper and deeper till the actual game-content assets such as “ConcreteWall #34 normalMap texture”. First you’ll write out the top-level assets, then you start zooming in, further and further.

The red/green/blue bands is caused by an effect called "Dispersion". Now this code isn't exactly based on realistic wavelength calculations. But it looks cool nevertheless. Maybe overdone for ice, but glass objects can certainly make good use of this. How it's done? Just by calculating 3 different refraction vectors, and sampling 3 times from the background texture. One coordinate for Red, one for Green and another for Blue.

I think most of us hobby game developers made listings in Notepad or Excel. This and that map, blue chair, orange bench, dustbin and a Ming vase model. Go. But then you probably also recognize the quality of these listings: not up-to-date, incomplete, lacking detail, and asides you, no one really looks into them. It works for small assignments, but not for something in the magnitude of a game. So, I did two things:
A:- Ask a person (Brian) to help me managing
B:- Made a database tool to manage the assets

Since Brian is a writer, he probably knows better than me how to “RAR” my huge documents into short but powerful (proper English) texts. He can help me building the assets listing. He does not know about the deep gritty details such as which shaders need to be made to render a 3D turd. But he does now about story telling… and since we have to fine-tune the story and all of its assets (locations, themes, characters) first, before we can go deeper… The splitting process automatically will dig up the story details and paths that yet need a decision.

To manage all of this, I made a simple MS Access database. And a graphical program around it. In a folder-structure (the top-down approach), you can insert assets. An asset here is made of:

- Short name
- Type (texture, character, game info, 3D object, …)
- Description
- Design info (text, additional files, papers and weblinks that explain HOW-TO make it)
- Status (not started, work in progress, almost done, done, suspended, aborted)
- Priority (lowest to highest)
- Assigned person(s)
- Planned / released data (to make appointments)
- Estimated & spend hours (for administrative purposes)

And yet a more powerful feature is the ability to drag & drop assets into another. This allows to make abstract assets, split out in deeper, detailed assets. Example:

---------High poly body
---------High poly head
---------Low poly body
---------Low poly head
---------AlbedoMap body
---------NormalMap body
---------SpecularMap body
---------AlbedoMap head
---------NormalMap head
---------SpecularMap head
---------Background docs
------------------Weapon handling
------------------Ladder climbing

We can already insert the “Player” asset, without knowing which sub-assets we’ll exactly need. Hell, I don’t know what kind of animations or sounds we’ll need. The same asset can also be referred by multiple parent nodes. For example, Demo2 requires the “Ladder climbing code” asset.

Well, this program allows Brian and me to manage the assets of course. But it also allows others to have a look or eventually to update their own progress. Be careful not to let a whole bunch of persons mess around in your database, or it will get mess as every person as a different grouping / naming strategy. Each person can see his (priority) pending tasks (+ explanations), or the progress from others. Hopefully, this helps streamlining everything, and ultimately, helps motivating people. If two persons work slow, the third will be less motivated as well. If two persons work hard, the third has a better chance to get sucked into this “fanatic workflow”.

CEO of… uh, crap, still no name yet

No comments:

Post a Comment