Terrain Lod/Occlusion

Hello Everyone!

I’ve been “googling” searching for a LOD that might work on my terrain “engine”,
but didnt find anything that could be applied, or I just didnt know how to search or what to search for.
Anyway, my terrain is based on an Octree and it has Frustum Culling and after a certain distance it renders no more. I get 6 fps on Laptop Celeron 600 with a graphics card with 4 MB of vid mem.

Can anyone sugest me a LOD or occlusion
algo.
Thanks in advance.

I forgot to mension that, ive been looking into geomipmapping but since my “engine” supports caverns and stuff like that its not possible to implement it. (correct me if im wrong plz)

Well, I dont know what performance you micht get with that laptop… But I wrote a ROAM demo available at: http://cheo.resnet.wayne.edu/miguel/

good luck,

Miguel Castillo

It looks very good
Is ROAM capable of handling caverns and other stuff similar, like those stone arcs?

Thank you

To be honest, I have never tried, but I am sure you can do it.

The problem would be how you have your data because ROAM is normally used with heightmaps, which are flat pictures. Caverns would be kind of like two heightmaps together; one for the lower part and another for the upper part. So you would have to think of a way to actually create those caverns. This could be quite complex also because ROAM is based on error metrics that work in two dimensions. You would have to get over this and I think this is the hardest part of the problem…

What I would do is create the cavern with a 3d modeler and dump it on the map… Do some nifty tricks with texturing to decrease possible visual error.

Miguel Castillo

[This message has been edited by mancha (edited 03-19-2003).]

Ei dude!That looks very cool.Can you please tell me what ROAM really is and can we use some parts of it in our engine?

This would be a long thread, but sure, we can discuss ROAM. I think many people would benefit from it.

And yes, you can use my engine for anything but commercial, for which you would have to talk to me about.

If you want to use parts of my engine, just give credit where credit is due and we will be set… A link to the places where you use my engine would be nice. I like to see other people’s work.

Miguel Castillo

Originally posted by Mihail121:
Ei dude!That looks very cool.Can you please tell me what ROAM really is and can we use some parts of it in our engine?

ROAM is a way to do progresive meshing. You can make it view dependent, which is the main reason why ROAM came up in the first place. You can make it frame coherent, meaning that ROAM can be set to produce as many or as little triangles per frame as you want as long as there is time each frames. ROAM makes use of a bin tree to implicitly create triangles. The importance of this method with binary trees is that you are guaranteed a mesh without T-junctions, therefore no cracks.

What in the world does “implicitly create triangles” mean?
I asked myself this question 100000000 when I was reading papers and tutorials on ROAM. But to make it easier on the reader, implicitly storing triangle means that you dont store triangles’ coordinates, instead, you recursively split a triangle and pass down the coordinates of the split triangle. How do you keep track of the triangles then?
You use the bin tree where each node represents a triangle. So, ROAM is very cheap on memory.

This is a small overview. Try reading the tutorial in http://gamasutra.com That was my model from which I did my code, so you will find plenty of similarities.

Miguel Castillo

[This message has been edited by mancha (edited 03-20-2003).]

I was thinking about using something similar to what is used on models (player models and stuff), but im not sure if its gonna work with my octree.

Btw, does ur engine uses Diamond instead of tris?

Well, diamonds is just a name for a pair of triangles that can be split. There maybe other definitions, but in terms of ROAM, that’s what people refer to. So, yes, the engine has diamonds that are made out of triangles. The distinction between diamonds and just a set of triangles is very useful when we try to merge queues of triangles. For example, you have a bin tree that was split in the previous frame, and in the current frame we need to split it further, we start splitting those diamonds in the tree.

I would be very happy if people extend it my engine, or wanted to help extend it.

Thank you,
Miguel Castillo

Originally posted by Zinco:
[b]I was thinking about using something similar to what is used on models (player models and stuff), but im not sure if its gonna work with my octree.

Btw, does ur engine uses Diamond instead of tris?[/b]

Why wonder if its my bad searching way or there arent tutorials about… maps with caverns and arcs… I mean, all tuts I get are for heightmaps :|. Maybe Ill do occlusion instead of LOD, might not be as good as LOD in huge areas, but it always help .

Mancha, thx for the replies

For my thoughts about this, see http://www.opengl.org/discussion_boards/ubb/Forum3/HTML/009061.html
, especially my second post.

-Ilkka

My pseudo engine is capable of handling caverns and any kind of geometry, but Its slow, what i whant is a way to increase my fps (it would probably run good on high end PC’s, but since I dont have one and want ppl who dont have it either to be able to run it better )

In ur post I dindt understand “you can form nice roads by offsetting those vectors a little so that you get polygon edges match road’s edge.”

what do u mean by offsetting?

(sorry for my terrible english )

I ment just altering the vertice’s x and z positions slightly so that the polygon edges line up with the road’s edges. But that’s not so helpful to you, I’m afraid, did you read the other post, where I described the workflow to creating loddable geometry? I think that is more suited to your problem.

-Ilkka

I read it, and it looks like a LOD
anyway, until i have a better machine I wont be working on landscapes… 4fps is very depressing when rendering wireframe… imagine textured and with light… below 0 fps :\

cheers

Originally posted by Zinco:
4fps is very depressing when rendering wireframe… imagine textured and with light… below 0 fps

Unlikely. The typical hardware targetted for games usually renders textured triangles a lot faster than lines. Lighting is usually well accelerated too. But no matter what you do, you can’t render big landscapes fast unless you use some sort of level of detail. Occlusion is much harder to do and often leads to only small speed increases when compared to LOD.

-Ilkka

Ya, you are right, once more

Hey, check on this http://www.darkandlight.com/

it looks very cool, I think they only use heightmaps. What do you think?

Maybe I quit the idea of caverns and stuff like that :, I sure like them (Mines and dungeons)

Very nice shots.

Why should you quit the idea of caverns???
It is a great idea, but I think it is better to model the caverns with something like 3d studio and then dump it on the landscape… I dont know, just a thought…
BTW, unreal tournament 2k3 has a map that is inside a caverns… VERY nice stuff… I am sure they used the modeling first then dump approach.

Miguel Castillo

Originally posted by Zinco:
[b]Ya, you are right, once more

Hey, check on this http://www.darkandlight.com/

it looks very cool, I think they only use heightmaps. What do you think?

Maybe I quit the idea of caverns and stuff like that :, I sure like them (Mines and dungeons)[/b]

I do have a 3D editor in wich maps will be made (but it needs some stuff remade if not all), and that idea had crossed my mind but, it might not be very realistic. Anyway, with lights using triangle fans I get ± 8fps hehe
Ill have to think very well what to do.
As soon as i get some real spare time, Ill try to learn the ROAM algo.
Thx for the reply’s

Let me know if you need help with ROAM… And of course, feel free to use my implementation.

Miguel Castillo