Terrain shader, part of our look. 3way vertex blend, same as everybody else. Very soft blends only, smooth it multiple times in Maya paint tool. All terrain blends hand painted, not too painful, but would have been nice to make this procedural some how. Art direction rules, base texture on flat, texture 2 for edges, texture 3 to add a gradient to when blends look flat, I want to see a soft gradient on all ground terrain, looks awesome. Breaking the rules breaks the style. Tech artist wrote a CGFX shader so artists can see the blends in the Maya viewport and tune them on the spot before export.
Sky boxes hand painted by concept artist, global only 3 total one for each theme.
Lighting, personally spent a lot of time on this. I created all the light rigs for this game. We used a hybrid lighting model, pretty standard now, but when we started I think this was cutting edge. Real time direct lighting, sun and shadows, baked light maps used for indirect light. No need to modulate range, ambient lighting rarely goes above 0-1 in any game. Really neat idea, light maps only store bounce light, real time lighting handles the rest, thanks to our game director for that idea, used to be a cg sup. Lighting is very important to the look, can't match concept art look without bounce light. There is no ambient light for the world, the light maps are the ambient light. Tech artist wrote custom mental ray baking farm/tools so we could use mental ray to batch bake light maps. I don't recommend this, many issues with mental ray, many bugs and limitations. Fuck mental ray, annoying piece of shit, not designed for baking maps for games. We will look at real time Beast or Enlighten if we ever need to bake maps again. Tech artist had to solve CGFX shaders do not render in mental ray, took a lot of time, good solution in the end. What you see is what you get. I spent a lot of time with rendering engineer making sure there are no discrepancies between mental ray render view and in game view. Do all lighting in Maya mental ray, bake, export, see in game, should look identical except for resolution/compression differences. I tuned all the lighting in mental ray, no need to view in game except confirm it exported correctly, look for bugs with light map uv's. dxt1 bounce maps, no mips to save memory, no channel packing, need colour of bounces to hit the look. Custom Maya unwrapping tool for light map uv's. Quite good, no ugly seams in the wrong places, but still kind of a manual process. Some tricky meshes still need to be done by hand. Artists need to appreciate light map uv's or game looks worse than it could. Basics of light rig, solid colour skydome emits photons, final gather 0 secondary bounces + global illumination 5 bounces, need to tick some secret box to cast through alpha channels. No ambient occlusion, would have liked to have done that as SSAO, but too expensive at the time, not many people were doing it back then, car does have a real time block of ao under it so looks good in tunnels/shadows. Skies used for lighting aren't the same colour as skybox textures, blue shadows on orange deserts looks bad, everything turns green. Secret colour for photon sky different than concept art sky.
Car/avatar are lit with the same direct light as the world, but use a simple flat ambient light rather than anything fancy. Avatars are small, cars already look good because of vertex ao and environment map. Tried sh probes, but were too slow to bake and didn't add a lot of noticeable value to the avatar/car. If I could go back in time I know some other tricks now to solve this issue, but flat ambient light separate from world allows you to pop the car/avatar from the background which I like.
Some fun shots of our indirect lighting component only, our debug draw mode to look for light map bugs.
Car shaders, specular dot and prebaked environment reflection map, reznel controlled reflection map fade off in the center, vertex ambient occlusion, ao painful to author. I love the way these look. Needed to tune each colour to make them look good, it wasn't as easy as just changing the base colour, similar to tuning skin tones for sports games. Concept artist did all this work tuning text files, gross. Blurry reflections and exaggerated freznel are key to the art direction/look. One global environment map per theme, 3 total. I authored these myself. Rendering engineer wrote me a tool so I could fly to any spot in the world and capture a cube map/six textures from that point in space. Used ATI CubeMapGen to blur them. Thanks EQ! That tool is great. Needed to recreate the car shaders in Maya mental ray to render out assets for front end thumbnails, environment cube as additive layer of a layered texture does this, freznel controlled transparency, looks exactly the same as in game.
Props draw distance fade in technique from Farcry 1! Looks super cool, scale in models, they look like they're growing, physics programmer used this to animate our smashables back to life when they respawn, go smash some stuff in our game then wait and watch them respawn so cool looking!
Tech art tools, object placer tool, really cool click any where on the screen to stamp a prop there using a random user defined/min max seed, scale rotate. Stamper tool, project any polygon mesh down to an underlying mesh, super helpful for driving games. Stole idea from NFS Undercover. Stamp down floating polies in seconds, very fun to stamp a teapot model over a piece of terrain. Some other great tools as well.
Road built out of nurbs patches, level designer likes to work this way, keeps them live so polymesh can be tuned and exported/reexported. Once white box is signed off artists have to manually texture road, painful, not artistic, waste of time. Somewhat automated, but still have to go through the motions. Adding rumble strips painful, manual labour. Hand built collision pass by artists so driving feels good, don't get stuck, not punishing, lots of work went into this which makes the game fun and not annoying. Roads and some terrain had 1:1 auto collision. We used havok, one big drawback was not allowed to scale props!? WTF!? Worked around this by making three of each prop and making them visually different as well as proportions different. Looks fine in game, but annoying that we could not scale, a ps2 feature, havok?
Worlds pipeline, I had a lot of influence on this, team really liked this pipeline myself included, much more efficient and common sense approach than some I've worked with. One button export of track, little to no learning curve, no random asserts for not prepping your mesh/shaders correctly. Hard for an artist to break the build, only happened twice in 2 years. Whole game was assembled in DCC, Maya was the level editor. Very fast, exporting tracks was quick under 30sec to 1min depending on track size, much faster at beginning of project when tracks were empty. Option to export track without updating collision for faster exports, no need to update collision constantly if you are an artist, not usually messing with level design geo. Props could be exported separately from track and would update in track, so updating a prop across the entire game would only take one export of its file and would take 1-5 seconds. No texture pipeline, huge win for our particular project. Artist saved .dds files directly in Photoshop, stored these in the same folder as .psd so artists did not have to browse and waste time. No texture pipe means no build time when you are exporting data to game, which means all the pipeline does is copy new .dds files, takes no time at all to get new textures in the game. Other team members only have to sync the data in Perforce, no build step just copy to Xbox 360 to get latest version of textures, there is no way to make this faster. Other games will try to solve this issue with a network cache, or just make everyone on the team suffer each time they export or get a new build and re dds the entire textures directory on first export. Loose files is the way to go. Custom reference editor, simplified controls exposed to artists, does not allow them to break the references, browser window for references with some limited structuring controlled in text file. I liked, artists prefer the content browser from UDK.