Very common technique for preserving detail while reducing triangle count
The 'self-occluding' part
Bake in more information:
How much light does a texel get from a given direction?
Up
(0, 1, 0)
Right
(1, 0, 0)
Down
(0, -1, 0)
Left
(-1, 0, 0)
Could be 4 images -- linear data, so it could be 4 channels in a single image instead (rgba maps to urdl, for example)
This covers a case that normal mapping doesn't handle:
Normal mapping just indicates what direction texel faces
When generating or authoring a horizon map, we can bake in information about other geometry into this texel
For example, if a texel would face light and be 'lit' under normal mapping, but would logically be darkened by a taller texel that blocks light, we darken texel in that direction's horizon map
(I also took the time to start using WebGL and migrate from native applications and C++)