Jump to content

View more

Image of the Day

Adding some finishing touches...
Follow us for more
#screenshotsaturday #indiedev... by #MakeGoodGames https://t.co/Otbwywbm3a
IOTD | Top Screenshots

The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.

Sign up now

Question about spherical planetary terrain

4: Adsense

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
1 reply to this topic

#1 Sock5   Members   


Posted 30 April 2013 - 06:54 PM

Ok I know this topic has been beat to death in many threads, but there's a few things I couldn't find anywhere and I wanted to ask about, mainly about the way the geometry is handled.In most of the implementations I've seen, the planet is basically a cube with the cube vertices transformed to shape a sphere, however it's not rendered as a single cube, but as 6 quads(I guess it makes it easier for the programmer to work with the 6 faces as if they're just normal planar terrain) and when you close up and level of detail increases, the children faces(which are also seperate quads) pop up in place of the quad that is nearest to the camera.They either generate the planet geometry(basically create the vertex buffers of all quads at all LoD levels) at initialization(guess it only works for small planets with low overall detail, otherwise memory won't be enough) or they create and release them at run-time(very heavy on run-time performance) and overall, these methods cause big pop-ups.I was wondering about the other way of implementing it, where they do it entirely on the GPU(or so it's stated).I was thinking adaptive tessellation with displacement and hull shader frustum culling)?But when I try that I get horrible performance when I get too deep, infact I've never been able to get good performance with tessellation when generating a lot of geometry out of nothing, it seems that the correct way to use it is to add small details to an alredy thick mesh?Can anyone share a tip on GPU planetary generation?Some people say they transform the vertices in compute shaders, but how do they generate them?Or do they do some hybrid approach between the CPU and the GPU version(which I suppose would still be subject to LoD popping).

Edited by Sock5, 30 April 2013 - 07:04 PM.


#2 AllEightUp   Moderators   


Posted 30 April 2013 - 10:38 PM

I can't state direct facts on this but I can tell you where you may be missing a beat which is potentially causing problems.  The reason the cube is rendered as 6 separate objects is because of the way the level of detail works.  It doesn't stay "6" faces for very long.  Now I'm going to simplify greatly and assume really low tessellation to keep things simple but hopefully you will understand the idea in general.  As you approach the cube, the face closest to you (or primarily in view or whatever metric used says) will subdivide into 2x2 new polygons.  The new central point will be displaced as required and now the side facing you is four more 'discrete' polygons being rendered which replaced the original single face.  Note, this is "not" a GPU tessellation, it is a full honest to god creation of 4 more polygons.  Now, you keep zooming in, assume the center of your view is the upper left generated polygon.  That single polygon will subdivide into another 2x2 group of polygons.  Keep zooming in towards the upper left of a subdivided face and you may eventually end up with thousands of polygons, but the other 5 faces are still in their un-subdivided state because they are not visible and don't contribute to the scene.


If you look around from a point near the subdivisions, far away items will be chunky and near things will be fairly detailed.  At this point though, only a couple 10k polygons are in the render at most and things are quite blocky nearby.  You might apply GPU tessellation to near polygons in order to add further detail and remove sharp edges.  But you don't apply it to the entire face, just the x'th subdivided faces the camera is closest to.


This just seems like a possible item you might be overlooking.  If this is too simple, sorry, figured I'd throw it out there though.

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.