optimization: only update the vertices in GPU when vertices changed rather than update them every frame
added a higher quality terrain texture at the cost of lowering the performance