taby said:
P.S. Your thinking is infectious. I think I see what you mean now… I must draw each cell once per neighbour, based on neighbour height. Correct?
I did not mean not draw once per neighbor. That's quite expensive and reflections would be still wrong on 2-ring neighbors. Also you'd have to do some complex masking to get reflection only on one certain neighbor.
I would look at the neighbors only to find some averaged reflection plane from their heights per cell. Then draw the cell reflected about this plane just once.
Won't be perfect, but it's the best you can do within the hack, i guess.
The filtered heightmap approach factoring in the current reflection vector should work better, but still drawing each cell just once.
I'll draw an image:
We want to get the reflection plane for the cell with the red circle.
We assume the reflection will appear mostly on the neighboring cell in the direction towards the eye.
So we sample our top down height map in this direction at a distance of one cells width, to see how high the ground at this location is. (green)
The result is then the ideal ‘best fit’ reflection plane for the red cell. And we do the same for all other cells, each having a unique reflection plane then.
But because all planes have the same direction, we can still render each cell just once using only one image for all reflections.