• Announcements

    • khawk

      Download the Game Design and Indie Game Marketing Freebook   07/19/17

      GameDev.net and CRC Press have teamed up to bring a free ebook of content curated from top titles published by CRC Press. The freebook, Practices of Game Design & Indie Game Marketing, includes chapters from The Art of Game Design: A Book of Lenses, A Practical Guide to Indie Game Marketing, and An Architectural Approach to Level Design. The GameDev.net FreeBook is relevant to game designers, developers, and those interested in learning more about the challenges in game development. We know game development can be a tough discipline and business, so we picked several chapters from CRC Press titles that we thought would be of interest to you, the GameDev.net audience, in your journey to design, develop, and market your next game. The free ebook is available through CRC Press by clicking here. The Curated Books The Art of Game Design: A Book of Lenses, Second Edition, by Jesse Schell Presents 100+ sets of questions, or different lenses, for viewing a game’s design, encompassing diverse fields such as psychology, architecture, music, film, software engineering, theme park design, mathematics, anthropology, and more. Written by one of the world's top game designers, this book describes the deepest and most fundamental principles of game design, demonstrating how tactics used in board, card, and athletic games also work in video games. It provides practical instruction on creating world-class games that will be played again and again. View it here. A Practical Guide to Indie Game Marketing, by Joel Dreskin Marketing is an essential but too frequently overlooked or minimized component of the release plan for indie games. A Practical Guide to Indie Game Marketing provides you with the tools needed to build visibility and sell your indie games. With special focus on those developers with small budgets and limited staff and resources, this book is packed with tangible recommendations and techniques that you can put to use immediately. As a seasoned professional of the indie game arena, author Joel Dreskin gives you insight into practical, real-world experiences of marketing numerous successful games and also provides stories of the failures. View it here. An Architectural Approach to Level Design This is one of the first books to integrate architectural and spatial design theory with the field of level design. The book presents architectural techniques and theories for level designers to use in their own work. It connects architecture and level design in different ways that address the practical elements of how designers construct space and the experiential elements of how and why humans interact with this space. Throughout the text, readers learn skills for spatial layout, evoking emotion through gamespaces, and creating better levels through architectural theory. View it here. Learn more and download the ebook by clicking here. Did you know? GameDev.net and CRC Press also recently teamed up to bring GDNet+ Members up to a 20% discount on all CRC Press books. Learn more about this and other benefits here.
Sign in to follow this  
Followers 0
merpnderp

I-Novae, how do they do Earth sized planets?

7 posts in this topic

I have been working on solving the issues involved with planet sized terrain meshes for a while now, and it appears that I-Novae has solved them: http://youtu.be/a6a69dMLb_k?t=2m59s

 

The main issues are GPU precision and jitter issues when using large values on the GPU and morphing LoD details smoothly into the next LoD.

 

It appears that I-Novae is using some sort of quadtree cubesphere, but the leaf node meshes are being done on the GPU to do the smooth morphing between meshes.

 

I'm not sure if they are even doing that, but I also don't see how it is possible on an Earth sized planet.

 

If anyone has any wisdom to share on the topic

0

Share this post


Link to post
Share on other sites

Why would a planet size mesh be a problem? They are probably using some real time procedural mesh generation technique probably seeded from some texture based scheme or painted on which defines how the meshes are generated, mostly mountains and craters, sand dunes etc.. couple this with realistic ground shaders and no vegetation. Surface voxel based terrain generators have been around for along time, slap on nice looking shaders and proper atmospheric light model shader for sky and you got urself a wallpaper worthy engine.

0

Share this post


Link to post
Share on other sites
ddn3

I believe the biggest challenge with a planet sized mesh is because solving for vertex positions on the GPU is difficult because those positions won't fit into a float with meter/sub-meter level precision. And without solving for positions on the GPU, morphing between LoD levels or split/unsplitting meshes on the GPU becomes difficult (I haven't found simple easy solution).

I'm going to check out the outerra.com demo and forums, but for now I'm slowly implementing a quadtree cubesphere that solves this problem by creating the vertex positions in a float texture, created on the CPU for double precision, and that way I can morph between LoD levels on the GPU.
0

Share this post


Link to post
Share on other sites


I'm slowly implementing a quadtree cubesphere

That's the approach I'm using at the moment. It's non-GPU so it is easier for me to understand.

Even with the few "pops" of the terrain, that video looks AWESOME!

0

Share this post


Link to post
Share on other sites
mark ds

I found this which is very interesting for creating noise functions, but was something I was already planning on doing. When a node splits, just create a single new octave for it, interpolate the points location in the parent, then add the new octave of noise to the new child. http://forum.outerra.com/index.php?topic=245.0

But I don't see how they're taking a cube face position like 4000000.1,4000000.1, 637100 and projecting that onto a sphere on the GPU. And they'd still have to apply the heightmap offset from their noise functions.
0

Share this post


Link to post
Share on other sites

A pretty good trick for any massive coordinate systems is to represent position using both integers and floats.

 

Keep the player (camera) centred at [0.0f, 0.0f, 0.0f] and move the world around him/her. You represent the large scale using integers (which are fast to add/subtract) and keep local 'sub-coordinates' in floats. For example (in 2D) the player could be in cell [14, 7] with an offset into that cell of [0.87f, 0.13f]. Assuming the integers represent 100 metre increments, to find out where to draw cell [16, 2] simply subtract them (maybe on the CPU) to get a relative offset of [2, -5]. Then pass the floating point coordinate [0.87f, 0.13f] to the GPU where you subtract again to get [1.13f, -4.87f]. Multiply this by the scaling factor (100 metres) and you have your render position. This way you're never dealing with massive floating point numbers, but only the offsets - which avoids floating point rounding errors. This works just as well in 3D.

0

Share this post


Link to post
Share on other sites
mark ds That seems perfect logical and reasonable except for a quadtree cubesphere, if you're using a GPU solution then you have to solve for the positions in the GPU on the face of a sphere. There's no way to do that without using the radius of the sphere. SO maybe you could use a cubesphere until a certain height and then once the camera is a below a certain height, switch ever node in our quadtree to a plane. Maybe have the furthest planes bend towards the center of the planet to simulate the curvature of the Earth (but probably not needed). Do you have a way to use spherical projections and still use floating points on the GPU?
0

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0