I think playability has overruled realism in the rules. To keep it simple, a hex is either clear, degrading or an obstacle. A hex may be a different terrain type to different units, depending on the line of sight(LOS). The thing to keep in mind though, that if LOS dictates that a hex is degrading or an obstacle, treat the entire hex that way. For degrading terrain-visualize a camo net completely covering the hex, for obstacles-visualize a hex shaped building that fills the hex in all three dimensions.
Please consider the below as a 2D side view. A through D are units. The # is a hex with degrading/blocking terrain. Each unit is in a separate hex or hex locations. Units A and B are in a building with an upper level in A1. The # is degrading/blocking terrain in A2 and is only at level 0. A3 contains units C and D. The 0 represents clear, no degrading or blocking terrain at that level(the word processing vaguaries caused me to put the 0 in as a physical place holder to keep the columns aligned):
A 0 C - Level 1
B # D - Level 0
A A A
1 2 3
example 5: B firing at D, or D firing at B. B and D are at the same level of the degrading/blocking terrain, so firing through degrading/blocking terrain rules apply.
example 7: A firing at C, or C firing at A . They are above #, the level 0 terrain, so fire is not degraded/blocked.
Again, B firing at C(and visa versa), or A firing at D(visa versa) would also get the degraded/blocked treatment as appropriate.
Does this help?