Old post (22 Feb'10): I don't know what process we follow to create textures, such as normal maps, but I did find some heightmap textures in the assets folder. Now, as we all know the surface perturbation is very well simulated by normal maps, but if we start extracting the Ambient Occlusion maps from the high polygon models or from heightmaps, then we can either have the interaction shader modified to add the Ambeint occlusion shadow based on light's direction or we can simply bake it on top of diffuse map so that entire lighting result gets modulated by AO with no extra shading cost. Now, for stuff like instanced geometry (such as boxes, hey stacks and a lot of such stuff), AO can be calculated 1. either from high polygon models that we generate normal maps from that use with their in game counterparts, or 2. from hightmaps using third party tools and then combining this heightmap based AO with AO generated from the geometry of low polygonal (in game) model. You can compute per vertex AO and AO from normal maps and from heightmaps using many third party softwares. For characters, I'd suggest to generate AO from the high poly counterparts and that would add the game a definitive visual improvement even if we choose to combine AO with diffusemap. Now, as per the map geometry (non-instanced) is concerned, we can generate AO from heightmaps that would account for accurate soft shading from surface perturbation and then to account for AO from actual geometry, we can either use AO maps the way they were used in training mission (but strictly for everything this time), or I can attempt to build a per vertex Ambient Occlusion generator that integrates into Dark Radiant and stores the AO result in alpha channel of vertex colors. This alpha channel can easily be accessed from within interaction shader and can be combined with heightmap based AO. We'll have to finalize free tools that would let us do all this and then a way of batching some these processes (e.g. generation of heightmap based AO), so old assets can be processed in one go. If we have all this done, then visuals will be at least at par with current gen games. Even if we are planning on shifting to id tech 5 engine, this asset creation method would have us prepared, since rage, like many other games, uses diffuse maps with baked AO. A note on an integrated Per Vertex Ambient Occlusion Generation tool: It's going to be fairly time consuming on my part to attempt to create such a tool. I haven't started looking into how the map data is stored, but I know it's stored in text format, so it should be theoretically interpretable. I also can use some help from the dark radiant veterans here to get a nice head start, in case we decide for it. -------------------------------------------------------------------------- Update 27 Feb'10. -------------------------------------------------------------------------- I think what I said in this thread so far, is kind of scattered in pieces and it's about time that I should make short points so that there's no confusion. Many thanks to STiFU for his time and for helping me get over the multi-hierarchy bulletpoint problem I got while posting this. Ambient Occlusion shading for Static and Dynamic(animated) geometry What's AO? The illumination at each point is a function of other geometry in the scene (Courtesy - AO on Wikipedia). So please don't confuse dynamic lighting with this. Types of Ambient Occlusion we can have in Dark Mod: Ambient Occlusion coming from the real Geometry. Texture space Ambient Occlusion Coming from a simulated Geometry, i.e. normal maps. E.g. Soft shadows between the cracks of a wall. Ways of obtaining Ambient Occlusion Generating Texture space AO: This can be generated from the height maps. These height maps can be generated from source images used to generate the normal maps. [*]Generating AO From Actual Geometry: Either, hand painted maps. Or, with the help of an Ambient Occlusion Generator integrated in Dark Radiant. For characters, AO maps should be obtained from the high polygonal models of the characters to get AO from pores of skin, cloth grains, chainmail armour etc. How to apply the Ambient Occlusion to scene (Alternate approaches): Based on direction and distance of each light. A pixel facing away from light should retain maximum AO a pixel facing directly the light should have AO wiped out. E.g. a torch held close to a dark corner (due to AO) should wipe out 80-90 of AO shadow whereas areas away from torch should retain 100% AO. Requirement: In order to achieve above, we need to store texture-space AO and geometric AO to a memory that can be made available to interaction shader at runtime. Texture space AO can be stored to blue channel of a normal map. This way, to store texture space AO, no extra texture memory required at the cost only a couple of extra shader instruction. Geometry based AO can be stored to the alpha channel of vertex-colours of the geometry with no texture memory cost. Also, vertex-colours are already accessible in the interaction shader. With AO generator this process can be automated. Making an AO generator would require a lot of R&D and work on my part. Manual method, e.g. hand painted AO is difficult in this case. I don't know how hard (if at all possible) it is to paint vertices in dark radiant. [*]Constant AO regardless of light's direction and distance. This should look like the grime decals, except for the fact that, we'd have texture space AO as well this time. This approach would require no change to interaction shader whatsoever. Texture space AO has to be baked into diffuse map. Geometry based AO can be stored to separate textures that can be applied as decals. Hand painted AO is already being used this way, e.g. grime decals. In an automated approach, AO generator can generate AO maps from geometry and can store them to disk. It should also automatically prepare/change materials accordingly. Requires feasibility study of this on my part. The least we can do to improve the look of the Game with the help of AO: Regardless of whether an automated approach for generating ambient occlusion is feasible, we can at least do following things to improve the look of the game, without having to change a single line of code and/or shader: Bake Texture-Space AO into diffuse-maps. Obtain AO from, preferably, high polygonal models of characters and bake it into their diffuse-maps. Grime decals as we are already using. Bake AO into static objects' diffuse-maps such as crates, hay-stacks, cart etc. AO would look a lot better if we have high poly counterparts of these to generate the AO maps from.