I'm no expert, so what Sebe is saying may be true, and a lot easier, but I've haven't heard of how to do what he says, and like I said, I'm no expert, so I'm not really sure what the function/variable would be to change a regular blocks skin, but if you transphered everything over to skins on entitys you could simply make it do at each distance go to
distance < 100
entity.skin = 1
distance > 100 && distance < 500
entity.skin = 2
.
.
.