As of 1.29 I looked in the TerrainTypes.xml and here's what I saw essentially:
fertile land and river land contribute 1.5 units of grain to the area around them. (So if there were two "fertile" tiles you might see 3 grain somewhere between them.) Fertile (2 grain) Plains (3 g) Fertile (2 g)
forest contributes 2.0 material to the area around it.
base essence is 0.15 from tiles, with extra added from certain resource features nearby.
If you just boost those up a bit... all of a sudden the yields look much nicer all around. It's not a matter of "materials and essence crowding out grain". There is no max total. They just all have very low values contributing into the mix and thus the likelihood of a decent spot becomes negligible.
The stardock team is trying to address this by increasing grain and materials buildings to give a larger multiplier to low base yields, and I support this change since I've never reached the end of a city building queue. However, the problem might not be in the generation algorithm, but rather the low base inputs, especially on map selection which isn't temperate (no rivers, few fertile spots).
Having messed around with it, I've found 2.0 grain, materials unchanged, and .60 essence pretty friendly, but IDEALLY there would be 3 selections for each resource at map generation. (Essence low, normal, high) which substitute in appropriate values. *shrug* We'll see where they go with it.
It's important to note that there IS a MINIMUM total (grains+material+essence) for a tile to show a yield and be able to be settled. One way to keep "city spots" a limited resource, but still be workable is to increase this value to whatever your threshold of pain turns out to be. If a 4 yield total (130) seems ridiculous then 5 would be your minimum, etc. Personally, I like this around 7 (232, 241, 331, etc).
Update: Reviewing changes made in ver 1.291 I see that some more changes have been made to increase yields. These changes are nearly the same as what I'm using, and should help people having trouble with bad starts.