The grass in those screenshots probably use plains, or little meshes which might just be plains with kinks in them. The idea is you use a texture of a grass clump - and put a lot of plains down on the terrain, and with enough plains you have a pretty good grass field. You could store an array with all the locations of your grass, and load 20 or so grass patches, then position these at the points closest to the camera. Then when you move, different points are taken into the camera range and you re-use the grass objects. It would be advisable to spend time on the grass re-use system as that will greatly affect your frame rate, an indexed system works best, you don't really want to calculate the distances for each grass point, that would be a little slow.
Personally I'd use a big grid and an index saying which points were in each grid space, then you simply find the grid location your standing in and can get the surrounding locations and affect the grass that way. Tricky but nice and fast. You can use instanced objects too, with an instanced object, it's like a clone of an object, you can position and rotate and texture them, but they take their other settings from the parent object - the benefit is that instanced object display much quicker than loaded objects.
If you use fogging, then try and use it sparingly if it does'nt fit the scene. Like broad daylight, you don't want a severe fog and camera range, or the game ends up looking like a DBC matrix demo - I'd suggest forgetting about anything but sky on the skybox, a nice smooth fog effect, and a colour that matches your sky. With some care, you can get things looking nice and still run at decent frame rates.
Van-B

Muhahahahaha.