Original Post
I began work on my terrain part of my MMO/Persistant World game, and considered what I wanted the terrain to be able to do.
Preface: this is just kinda a think out loud situation.
The gist of it is, I want players to be able to alter the terrain. Because the game is going to support player structures, it might be required to terrace a hill, dig a hole, flatten the ground. I also intended for them to eventually dig a mine made out of voxels polygonized by an inside out marching cubes method, but thats a whole other topic.(Sounds minecrafty to me)
I understand that if someone alters the terrain you send a simple "delta" packet to alter the client's representation of the terrain. But my issues lie in simply transversing the world's large terrain. The issues are this.
1) If a player is moving through the world I need to update the client on what terrain is around him. If I use chunks of terrain at different LOD's I can reduce the height points needed in the area. Reducing the amount to be sent. At a terrain resolution of 1 point per meter (2 bytes per point), and a sight "radius" of 4 kM I would need almost 50kb of data for a single 32 meter shift in position. Seems like hefty chunk of data.
2) The client request for map data should be kept at a minimum size as well. Supposing the client cached some of the terrain data it would reduce the need for data from the server when a client hung around a single place. It wouldn't be great if the client asked for each chunk individually. Perhaps a rectangle request?
3) If a client caches a chunk, walks out of range, someone digs a hole, and the client walks back. How does the client know that it needs an update and can't use its cache anymore?
Any thoughts would be helpful.
Preface: this is just kinda a think out loud situation.
The gist of it is, I want players to be able to alter the terrain. Because the game is going to support player structures, it might be required to terrace a hill, dig a hole, flatten the ground. I also intended for them to eventually dig a mine made out of voxels polygonized by an inside out marching cubes method, but thats a whole other topic.(Sounds minecrafty to me)
I understand that if someone alters the terrain you send a simple "delta" packet to alter the client's representation of the terrain. But my issues lie in simply transversing the world's large terrain. The issues are this.
1) If a player is moving through the world I need to update the client on what terrain is around him. If I use chunks of terrain at different LOD's I can reduce the height points needed in the area. Reducing the amount to be sent. At a terrain resolution of 1 point per meter (2 bytes per point), and a sight "radius" of 4 kM I would need almost 50kb of data for a single 32 meter shift in position. Seems like hefty chunk of data.
2) The client request for map data should be kept at a minimum size as well. Supposing the client cached some of the terrain data it would reduce the need for data from the server when a client hung around a single place. It wouldn't be great if the client asked for each chunk individually. Perhaps a rectangle request?
3) If a client caches a chunk, walks out of range, someone digs a hole, and the client walks back. How does the client know that it needs an update and can't use its cache anymore?
Any thoughts would be helpful.
