Thursday, July 19, 2012

Through the desert

Over the last few weekends I rewrote some of my 3D layers. I was bothered by the synthetic look of the Perlin and Worley functions I was using. It was not only that, it was becoming increasingly difficult to obtain different looks out of these functions.

The new functions are a lot simpler to use, they use real samples from nature. Here is one screenshot:



Some of these large rock formations would be a real headache if you only had generic noises. There are still a couple of Worley layers in there, actually those produce the features I like less about this terrain. I did not have enough time to replace them.


Here is a video:

   

Both video and image were captured from Sputnik, so please disregard the texturing. The mesh resolution is intentionally low. What you see is streamed over HTTP, bandwidth never goes over 400K/sec.

19 comments:

  1. Looks pretty good for under 400Kps. If you were to venture a guess, how long would a player need to buffer before they could start walking around? As in, suppose they had never been to this desert and were somewhere far away, and teleported over?

    ReplyDelete
    Replies
    1. A typical scene is made of approximately 700 cells. Each cell averages 15K. If you were teleported to a new location with nothing on your cache, you would need to download approximately 10 Megabytes. If you cannot go over 400K/s, it would be 30 seconds of buffering more or less.

      Delete
    2. That's not too bad. Still, would it be possible for the minimum threshold to be adjusted on the client end, so that a user could set the value to something lower, like 500? Deliberately trade off visual fidelity for a little quicker load up.

      Delete
    3. Yes, it can be lowered down. Also note this is based on an octree. This means cells that are further away from you are likely to appear on many scenes. They can be pre-cached. The datase for an entire octree level decreases 8 to 6 times as the levels go up. Level 0 could be 100 Gigabytes for a 10Km x 10Km island. This is way too much for a single PC, but then level 1 would be 16 Gigs, level 2 would be 2 Gigs, which is something you can have as part of the game's installation.

      Now, for a typical scene, half the cells will be level 2 or higher. They will come from the cache. You will get the scene in half the time, no matter where you are teleported. The same applies as you walk and new cells are streamed.

      Delete
    4. Oh dear, I hope I don't have a data-cap anymore once you actually get this out to the public =3.

      Delete
  2. I love how this generates worlds which are actually quite close to what level-designers sometimes take a really long time to do XD, Not sure how realistic it looks, as I have never BEEN to a desert, leave be to a desert with cliffs, but it looks like it could be a real place =3. The only problem I can see is still the odd floating rock, or massive spires which seem a bit unrealistic at times.

    ReplyDelete
    Replies
    1. Now that you said it, I haven't been to a desert either :)

      Delete
    2. It looks pretty desert-y--for a canyon/mountainous area. In real life, the bottom of that gully the video crossed would probably open out into some flatter terrain.

      I really like the horizontal striations, but if possible one thing you might want to do is give some rock type variations horizontally spread across cliff faces. It's pretty common to see narrowly striped rocks like that sitting on top of or below rocks of slightly different color and texture. That helps add variety too, and can help the player keep track of how high up they are. You can see this in a lot of Grand Canyon pics.

      One thing that looks great in yours is the appearance of rock walls and eroded sediment filled gullies.

      Delete
  3. I was wondering which dataset you use and how many samples you have in the database. Also: does this dataset have sufficient metadata like landscape-type, average temperature, etc. I am currently researching generative models for height-maps and would love to implement this as a plug-in for your procedural world as my master thesis in AI next year (I am not a graphics guy so visualization will be difficult for me)

    I am also checking if I can create more procedural game-elements such as story, NPC simulation (either through swarm-AI or by making some type of potential field in a planning space to attract NPC's towards certain goals)

    ReplyDelete
    Replies
    1. For the large features (larger than 10 meters), I still use Perlin noise for the initial state of the terrain, then some filters like terracing, and then some simulation filters like fluvial erosion. The produces a very bland, low resolution terrain. Then I apply several 3D layers that add detail sizing from 20 meters to centimeters. This is what makes all the rocks and surfaces you see. I was relying heavily on noises for these layers, with this desert test I switched most of them to 2D and 3D maps.

      Delete
  4. That's looking good! Comparing this to the forest, I got to wondering if you have worked on any higher level biome distribution mapping. It's tricky in games since any real life size will make it practically impossible to travel by foot from one area to another. On the other hand, there are pretty good ways to determine temperature and rainfall from geography and winds.

    I know it's not done yet, but eventually you should consider adding in some scrubby plants and bushes. Your tree generation system should work well since it produces tons of actual branches, not just crappy billboards, leaf polygon blobs, or anything. Deserts are very rarely completely without plant life, especially down in the valleys and cracks.

    ReplyDelete
    Replies
    1. For biomes I have hand-made maps at this point. It is a grayscale map that specifies the intensity of a given biome at each point.

      Yes, I plan to add other instanced detail. Not only for plants, I think small rocks would look nice too.

      Delete
  5. Hi. Awesome looking as usual. I was just wondering, is there any plan to remove the islands, or maybe turn them into rigid bodies and drop them onto the landscape? Those have been in the project for as far back as I have been keeping tabs on it. Keep up the great work!

    ReplyDelete
    Replies
    1. Yes I have nasty plans for the islands. It will be probably the last thing I deal with. Also you have to admit it has gotten better. If you compare the last video with one of the early ones you will see floaters have been reduced almost 10 times.

      Delete
  6. Hi,

    you should take a look at this guys work
    http://atomontage.com/

    i really like the desert settings of this guy. he also produces high-res rocks procedurally. This could be interesting for you, too.

    That way you get really cool random looking stuff.

    ReplyDelete
    Replies
    1. Yes I know of Atomontage. Very impressive work. I think we use pretty much the same techniques for generation. I am keeping low detail to make sure the resulting content can stream over a typical internet connection.

      Delete
  7. Stunning, and it's nice to see a different type of area! (but I still like the forest better, perhaps I'm simply arboreal)

    Your rock formations remind me of some of the terrain in Crysis -- any idea if they used procedural systems to give their terrain a natural look? Reminds me that I should install that game again, it's pretty.

    ReplyDelete
    Replies
    1. Well, since from what I can read, the view distance alone is from 2 to 8 KM, I would take an educated guess saying you could almost assume that most terrain in Crysis was made using procedural generation. It would cost heaps to do large terrains by hand (As you need to hire special people for making terrain by hand, which is expensive)

      The important areas are probably made by hand, the places where missions take place etc. (Haven't played Crysis, so not sure if there are missions or something, but it will have important places where you HAVE to be XD), but the areas inbetween will probably be procedurally generated.

      Delete
    2. Floating Rock!
      @0:19

      Delete