How to draw distant terrain like Oblivion - The Elder Scrolls?

for those who played Oblivion  - The Elder Scrolls knows that a very far land can be seen in a low quality terrain node, how to make it? since Jme camera have a max display distance, i wish i could made a low quality giant terrain node that would be always visible, but the hight quality terrain would still be rendered the exact same way as it is now!





for instance

                          1                                                                                                                      2


|

1: you can see hight quality terrain up to here
2: you can see low quality terrain up to here

Hight quality terrain is only shown until the view range limit as usual
Low quality terrain can be seen as far as 15 times the normal view range limit


sorry if it was hard to understand, thx for the help!

So you want LOD, Level of Detail, for your terrain.

A technique you could use would be to splitt your terrain in sectors (Terrain-Pages), calculate a low-poly version for every sector, and display the sectors depending on the distance.



I would suggest to try out the tests for terrain pages.

Iam not sure if this is already doing some LOD, but you can display very large terrains with jME and current hardware. Perhaps this is already fitting your needs.



I read 2 years ago, that it is not required anymore in many cases to do optimizations for terrain-rendering, because the GPU is fast enough to handle many triangles and CPU-optimizations could be even a slowdown in some cases.

You can look into something like is used in the Source engine, called 3D skybox's where the skybox actually includes geometry to help add the the illusion using parallax. It is scaled down and rendered before the rest of the scene, just like a normal skybox, but it also moves a small amount relative to the camera movement.

so, i could use a skybox to fake a distant ground?

i shall check this out then, thx for the ideas ;D

Oblivion does has some aggressive LOD applied on the terrain. You can't really render it brute force, JackNeil, because when far away, the amount of verticies really adds up. You get a ratio of about 20 verticies per pixel which is a complete waste.

Not at all, in Oblivion as i have seen once(using noClipping cheat), it have a fake low quality terrain below the real one. it have a little vertex amount also and a very loooooow quality texture… i intend to do similar. Since my game generates a random terrain made of:

400x400 blocks (denominated as "superBlock" for future reference on this topic)that is made of:

4 blocks (denominated as "Block" for future reference on this topic) that have more:

16 blocks (denominated as "subBlock" for future reference on this topic). Would be impossible to just draw those using brute force since it takes almost 1 second each Block to be loaded entirely. Instead i wish to make a heightmap using every superblock (160000 total) height and position as the vertexes and then make a texture made of 1 pixel per sub block (10240000 total pixels) to attach to the Trimesh generated from the whole map. my problem however is that the jME only displays 1 superblock radius approximately, it's the ideal distance for the detailed terrain, however even if i try to display the low quality one, i can't make it load further than it, it just won't display.



that would be a more detailed explanation of the problem, sorry still haven't time to test using a skybox or a TerrainPage. I'm currently using normal nodes to display the terrain, is it a problem or inconvenience on it?

I've found out a way to increase the camera view range, that would be to increase it's far Frustum to something more than 1000f



so i can increase it to 100000 and have a great view range. but that would cause a lot of lag since every node from

10 to 100000 distance or something would be rendered, what is bad.



so, there is a way to make some nodes to render as if the camera frustum was 1000 and some for 100000? so only the fast rendering nodes would be rendered further than 1000 distance and there would be little lag



(if i were to only load the high quality nodes up to 1000 distance they would be cut in squares(since the terrain is square shaped) instead of on circles)

When one of your LOD nodes is being updated, simply check if it's distance from the camera is larger than 1000 and if it is, use the fast-rendering version of the terrain instead. :slight_smile: