Saturday, May 5, 2012

Video of a forest

As promised, here is a video of a forest:



Some stats about this video:

  • It was captured in realtime on an ATI 4770 at HD720p
  • Framerate was capped at 30 fps
  • It shows an area of 1 km x 1 km
  • It has seven LOD
  • It took 12 hours to generate in three VoxelFarm nodes
  • The generated mesh dataset is 100 MB

Some good news:

  • This is streaming over HTTP. Peak bandwidth was below 300K/seg
  • Mesh resolution can be increased, streaming can cope
  • LOD transitions are hardly noticeable

What needs work:

  • More diversity: This has only one type of tree leaves and two types of grass.
  • Needs more plants in the floor, bushes and baby trees
  • Shadows and global illumination
  • Billboard placement needs improvement
  • Better textures

39 comments:

  1. This is gorgeous. I've seen you say that you're not satisfied with your own artwork, and want to see what a real artist will accomplish with these tools, but I think you're already accomplishing a visual quality higher than I've seen in many projects with teams of skilled artists on them.

    I'd love to see shots of the forest from a great distance, transitioning to up close, to get a better look at the LoD. In this video, we don't really see the forest until we're fairly close up.

    And a small nit, seeing your cursor at the top of the screen the whole time bothers my OCD. :-)

    ReplyDelete
    Replies
    1. Yes, sorry about the cursor. I did not see it until it was too late.

      It looks OK, but it bothers me to know I am wasting the technology's potential. I am limited as an artist, there is no way around that. As a programmer, you can always try harder and you will have a breakthrough. As an artist, you need to "see" it. I don't have that gift.

      Delete
    2. You may be limited as an artist (though this looks pretty nice)--but you are building a very fine set of paint brushes.

      Delete
  2. Knowing nothing about the way you generate this on your farms, could you GPU accelerate the creation of the world?? If you could, I imagine it would dramatically reduce times.

    ReplyDelete
    Replies
    1. World generation already runs in the GPU using OpenCL. I cannot tell how much faster this is than a similar CPU implementation anymore, but at the time I switched to GPUs I saw around four times speedup.

      Delete
    2. Have you considered using both, if you aren't already? I would imagine that with the node setup you've got it would be trivial with only the downside of having to maintain two versions of your algorithms.

      Delete
    3. The beauty of OpenCL is that the same code can run on GPU and CPU, even in the same machine at the same time.

      Delete
  3. Congrats, this is a very good job

    ReplyDelete
  4. Really nice, especially when considering all of this will integrate into your terrain/city/whatever-else landscapes.

    I'm guessing you're using keyboard for movement? The jerky camera...heh. Why not mouse?

    Any chance of a flyover video as opposed to one ground based?

    Keep up the good work!

    ReplyDelete
  5. Amazing work. Its truly inspiring to see these milestone videos. You're in a league of your own with this project.

    Apart from your own criticisms in your post, I find that the rocks local to the player can still be quite jarring and low resolution. Maybe it can be hidden with textures. Which, by the way, makes me wonder if you've put much thought into tessellation in textures? You could put the extremely high resolution details into the textures with tessellation at a very low cost to rendering and also avoid yet another LOD level.

    ReplyDelete
    Replies
    1. Yes, I plan to improve the resolution of near objects. I have some extra polygons in my budget, also higher resolution textures and tessellation will help.

      Delete
  6. One thing struck me as a bit unrealistic: I don't know how hard that would be to do, but with such big trees, there should be dead leaves on the ground. Or maybe some dirt material with a texture that shows dead leaves.

    Otherwise, it's all very impressive and beautiful !

    ReplyDelete
    Replies
    1. I agree. Also it is weird to find dense grass under big trees. I will improve this for sure.

      Delete
  7. Looks really pretty. My only remark is: why do the rocks often look so purple?

    ReplyDelete
    Replies
    1. It's most likely due to the shading.
      It looks like the ambient light is kinda purplish and makes the shadows a bit purple too.

      But as he said, shadows and global illumination are still incomplete. I have a feeling this is going to get so much better :)

      Delete
  8. Wow, that is beautiful!

    If you have close control over how mountains are formed, this could make a great mountain climbing game. Peaks (or ranges) could be rated at various difficulties from walking to scrabbling to crampons and ice axes, with times and routes (and unconquered peaks!) stored for competition. Best of all, there'd always be new content!

    I tried to move that mouse cursor a couple of times... :D

    ReplyDelete
  9. Since it is voxel, is it possible to change terrain at runtime?

    ReplyDelete
    Replies
    1. Not possible in this current iteration. Everything you see is pre-generated. This is more for games like Skyrim, not Minecraft.

      Delete
    2. Would it be possible to change the terrain off screen somehow? (Dont know what that would be useful for, or why it would exactly be possible, but there has to be someone who can use it XD)

      Delete
    3. Yes, offline changes not a problem.

      Delete
    4. I am not sure whether you understood what I said (Since you say offline, or I might just not quite understand what you mean)

      I meant, while the program is running, but no-one is actually able to see an area, whether you can change that area.

      Delete
    5. In that case it would be the original question: "is it possible to change terrain at runtime?" :)

      Delete
  10. Looks nice!
    Now, on to the mandatory questions XD:
    Was this forest created by your natural growth thingy?

    Also, I assume that the better shading will make a lot of improvements, since sometimes it was a bit difficult to see the shape of the leaves(not the individual leaves, but the communal leaves of a single trees)

    Also v2.0, Are you going to do something about those floating rocks?

    ReplyDelete
    Replies
    1. Yes, this forest is a quick test run of the generator I have discussed in earlier posts. This test was done with only four tree classes.

      Delete
    2. Cool, so will all the plants get to use that system? (Including grass, shrubbery etc.)
      If this system looks at how much shade or sun there is, it could yield a rather interesting and natural looking result I bet (Grass not being prevalent under trees for example) There could even be plant-species that wouldnt survive in full sunlight (I believe those actually exist)

      When I first read about your procedural forest, I was impressed and actually wanted to see it in action XD. Its nice to see that even with 4 species, it can still create a nice forest!

      Delete
  11. It's looking really nice, the grass in particular is looking fantastic. The criticism is that the foliage of the trees is too opaque. The current level is fine for evergreen trees but deciduous trees tend to have a bit more of the background visible through their canopy.
    Otherwise fantastic work

    ReplyDelete
  12. Awesome! I hope you'll decide to improve the lighting first because that makes all the difference for achieving convincing realism. Keep up the good work!

    ReplyDelete
  13. That's some lush green scenery.

    As far as the lighting checklist, any plans for subsurface scattering leaves?

    ReplyDelete
    Replies
    1. Yes, I have a model that scatters light through the crowns. I am porting it to the voxel farm so it can scale with the scene sizes.

      Delete
  14. Ok, question: have you tried forests over abandoned towns yet? I would love to see ruined walls and pillars inside of a dense forest. The two complement each other so well, and create complex, interesting areas very quickly.

    Also, have you considered implementing some procedural sounds? (Like those mentioned on obiwannabe.co.uk as an example). I realize that sound is a massive step up in terms of effort, but even some soft rustling around trees and some forlorn wind at higher altitudes would go a long way towards immersion in these videos.

    ReplyDelete
    Replies
    1. Yes, ruins engulfed by forests will be a common sight.

      I got nothing about sound yet.

      Delete
  15. I am very curious, will you be able to add procedurally generated RPG elements like towns with npc's and varying dungeons? And will this be released as a full game when you are finished? One last question, what are the specs of the rig you were running it on this video? Thanks! Please respond!

    ReplyDelete
    Replies
    1. I got town generation already. Not much about other RPG elements. I need to decide on a game style yet.

      The video was captured on an Intel i5 2.8 GHz, ATI 4770

      Delete
    2. Perhaps rather than an actual game, you could make some sort of a simulation or something? (A world simulator =D) where NPCs do their normal living, with actual lives which can change etc. I would love to have some program where I can just observe an entire world go about its business, and observe it through time, see wars break out perhaps, droughts in some areas which cause people to migrate, or just a petty squabble between two people =D.

      This is ofcourse mostly wishful thinking, which is probably really really hard to obtain, but hey, a man can dream cant he?

      Delete
  16. Hi,

    I've been following your project for a while now, and you seem to be doing a good job; your results look very nice.

    I have a few questions though, if I may.

    What is the voxel density? ie. how far are each voxel from their neighbors? You seem to be able to render quite detailed objects, I guess you are using a pretty high voxel resolution.

    How much do you simplify the highest LOD (closest to the camera) mesh?

    Last but not least, do you plan dynamic modification of the terrain?

    Keep up the good work :)

    ReplyDelete
    Replies
    1. Voxel resolution is adaptive to surface detail, it can also be controlled by surface material properties. As a result some features can be subdivided a lot, down to a resolution of 2.5 centimeters approximately. But this is happens rarely, most of what you see remains at higher resolutions.

      Another goal of this project is to be able to stream the world over a typical internet connection. This imposes some other restrictions on the compression. I simplify each LOD cell down to one or two thousand polygons. This requirement is what really determines the amount of detail you see in these last videos.

      I do not plan for dynamic modification at this point, but I have developed it to some point. I just want to see how good it can look, then find out what can be carried over to real time generation.

      Delete
  17. YouTube link for those who don’t have Adobe Flash: http://www.youtube.com/watch?v=nizHTdGUWkM

    ReplyDelete
  18. I always thought that this would be brilliant for game designers. One could build a world quickly, use that as a template or a starting block then change and edit the world to suit the needs of the game.

    ReplyDelete
  19. This is actually oftenly done I think, however it is often done roughly, mostly just with terrain, trees, rocks etc, the things that are really really common.

    Bethesda also applied it to their caves and dungeons in Oblivion, however this wasnt appreciated as they turned out bland, and all the same.
    Not saying it will be a bad idea to make a whole world procedurally generated, but it takes more work to make a better world (For example, to get a realistic world with cities etc, it would be preferable to be able to simulate the history of the world, and generate the world that way to create the most realistic world)

    ReplyDelete