Sunday, November 4, 2012

Into the sandbox

This is a follow up on my earlier post, where I announced a new take on my engine so it could be used for games like Minecraft.

Here is a video of me building a nice house on a hillside. The video is a bit long (38min) even if it plays at double the speed. You may want to get some snacks.

Here is one shot of the house, it is far from finished, but I really like the view out of the bedroom:


Here is the video:


The video shows how anything from the world can be removed. You can also add new blocks, which are all square, pretty much like Minecraft.

But unlike Minecraft, you can use tools to smooth out the blocks creating nice curves and slopes. The idea is to work initially in squares, then smooth it out as needed. Smoothness and slopes comes in a second phase. Otherwise it would be too difficult to place them and control the resulting shapes. I think it is the best approach possible. It combines the simplicity of square blocks with the rich appearance you can find everywhere else in this virtual world.

Something else about the video. Right at the beginning you can see a green progress bar. This is how long it takes to get into the world, no matter if you are starting it from scratch.

This video was taken from a i5 with 4 cores, running a Radeon 4770.

I continued to work on the house after I stopped recording. The save data for the entire world is around 300K.

As usual I look forward to you opinions and questions.

88 comments:

  1. Incredible! So exciting to see all of your amazing work come together this way. This is going to be huge.

    ReplyDelete
  2. Fantastic. I'm having fun watching your project evolve. Can't wait to get in there and mess around. :)

    ReplyDelete
  3. Are you still hoping to make a survival/simulation type game out of this?

    ReplyDelete
  4. I'd love to see this integrate with the voxel studio language so that people can make their own custom blocks and designs.

    I might suggest a better texture/block selection screen. Perhaps render out all the possible textures on a visual reference menu of some sort?

    Is it multiplayer?

    ReplyDelete
  5. This blog och project just continues to blow my mind.

    ReplyDelete
  6. How can one man working on a side project totally blow everyone else out of the water? Can't even imagine what you'd if you were to take it full-time!

    Also, I don't think you showed it in the video, but I assume you'll have the ability to edit single voxels, cause I assume that even the smallest blocks you show are made of several voxels? What's the voxel size? And after that I assume each voxel has a softness value for smoothing the wireframe, right?

    ReplyDelete
    Replies
    1. I edit single voxels at some point in the video, when adding a thin row of wooden blocks under the window frames.

      A single voxel is a lot larger than what you would expect. There is not a smoothness value. I use dual contouring where a point floats somewhere inside the voxel.

      Delete
    2. I actually thought the voxel size being at least 2x bigger until I saw the video :O

      Delete
  7. This looks fantastic, very exciting! Was there a demonstration of smoothing and sloping in that video that I missed or is that yet to be shown?

    ReplyDelete
    Replies
    1. No, it was all boxes in this video. Smoothing will come later.

      Delete
  8. You should call it Crysiscraft.

    I don´t have anything to add, just encouraging. Your project is awesome! :)

    ReplyDelete
  9. So all that stuff about generating and rendering a world on a network of distributed processing power was a lie :O?

    ReplyDelete
    Replies
    1. No, that is real. If you want to do static worlds like Skyrim's or WOW the non-realtime branch of the engine does better. Only what is labeled "VoxelFarm Realtime" in the blog applies to this new branch of the engine.

      Delete
  10. Is there a Overgrowth-style alpha coming soon? I would pay $30 just to mess with this. I more interested in tech than most of the games themselves.

    ReplyDelete
  11. Just wondering, you use dual contouring right? How do you create the signed octree from the voxel data, and what about the Hermite data? (forgive me if i am misinterpreting the papers)

    ReplyDelete
  12. I want to play this... now preferably... later would do too, but it would be torture if you wouldn't allow us to play with it! D=

    ReplyDelete
  13. Soooo this just went from being a way cool project to super-mega-awesomest project ever.

    ReplyDelete
  14. This is enough. Put it in Kickstarter, make billions and give us the best game in the video-game history!

    About the VoxelFarm, with the "poor" and unrealistic Minecraft engine people has made entire cities.
    With VoxelFarm I can't even imagine what could came out. People would pay just to "visit" these places and structures.

    ReplyDelete
    Replies
    1. the kickstarter is a cool idea... but i dont think the idea is to make billions the idea is to set the first goal at the same hours he works at his job for say 3 to 4 months plus a little extra(for some goodies) and if the goals reached he puts his full time work into this project.... then when he is complted then he makes billions x3

      cuz if hes doen all this is a few hours every week, full time job working on this iwll make it go waaaay further

      Delete
    2. Actually the "billions" are needed to make him work full time, and hiring a team to handle all the side tasks of making a game (marketing, website management, tools, testing, art, other platform conversion, etc. ) as no one is good at doing everything.

      Delete
  15. I can just congratulate you. What you have done in the last months is far from what everybody expected, I guess.
    So do you really plan to release a complete game or do you work on the engine and let others write the game mechanics? Also, is there a possibility to see a video of your incredible architecture in the sandbox-mode? That would be great!

    Whatever you will do, make it more awesome.

    Just one more question: Would it be hard to integrate physics into your engine? What I miss most is some water ;)

    ReplyDelete
    Replies
    1. yes, water would be great =D. I bet it would also increase the processing requirement by a lot...

      Delete
  16. Absolutely blown away. Amazing work as always, please keep it up!! :)

    ReplyDelete
  17. Hmm. I wonder whether doing a game in the style of minecraft would be the best thing to do in this context tbh. I feel like approaching it as a toolkit for people to play with would work better.

    What I mean is that the product you provide contains a large and simple-to-use toolkit for the "player". The players can then with this toolkit create levels and (in a way) games to share among each other. In a way similar to what the Steam Workshop enables for Portal 2 and what is possible with LittleBigPlanet on PS3.

    This doesn't exclude any of the functions already implemented - the construction aspect in this video would still be there - but there would be no survival aspect to it in that context. The functionality would be used by users to create the worlds of their "adventures" which they then share with each other.
    Examples of additional systems that would be needed in that context are: Mission System (for users to easily be able to set goals for the actual players of their adventures), Item Systems, the whole sharing aspect of the game (which should IMO be one of the basic concepts behind such a final product), etc.


    When it comes down to it, my main concern is that the room for Minecraft-clones (no offense) is limited and especially constrained by Minecraft itself. By diversifying off the basic concept and combining it with an "user-generated-content"-powered system I feel that it would have much more a chance of making it "big". :)

    ReplyDelete
    Replies
    1. I think you got it right. At this point my focus is getting the engine to a point other people can create games on top of it. Whether it will be through modding or good-old licensing, it has to be seen. Probably both.

      Delete
    2. I don't think that Minecraft will stop the growth of ProcWorld. Actually, I think ProcWorld has a huge chance of taking over minecraft.

      Minecraft has some key weaknesses. For example, the ability and ease of hacking/cheating can get extremely annoying. Also, the visuals, while appealing to some, can also turn many away.

      ProcWorld and Minecraft are similar in that they are both voxel based sandbox games, but that's it. Minecraft is currently more advanced because it has a few years head start. ProcWorld still has a huge potential for growing, and for changing the gamestyle.

      For example. While I do think you should include a "survival" option, I also think that the ability to create maps, and worlds and to share them, is extremely important. That is something minecraft doesn't do very well.

      My biggest critique of the video is that the textures are so repetitive. I never noticed it before. Perhaps it's a side effect of the editability, but the textures for the mossy gravel, and for the stone, are extremely easy to distinguish where they repeat. I suggest to add some randomness to your textures.

      Also, how will you keep track of how much of a material someone has? Will it be counted in voxels, then material will be subtracted/added depending on how much you create/destroy?

      Delete
    3. It's a good idea, give to the player a toolkit to create adventures and world can be fun and different. Success key can be to add a social aspect to the toolkit. If a player build a nice temple, it can be nice for him to export a blueprint of his creation and share it in a build-in asset exchange window. And why not include and importer to turn 3d models made in an external tool into a voxel based model?

      Delete
    4. Yes, I actually had envisioned a creative mode where you can access a library of user-created elements. You would rate models as you used them, making sure good designs will go to the top. There was actually a "license fee" you had to pay to the creator, using in-game money. Some players could become very rich just from selling their creations.

      I am not sure if this will be a feature of the released game though.

      Delete
    5. By using in-game money, you mean real or virtual money?

      Delete
    6. Virtual money. Let's say gold nuggets are the standard currency, then instancing the design by another player would cost you X amount of nuggets. Some may give away their designs anyway.

      Delete
    7. cool, based on this, maybe designers could ask in return a few number of raw materials. He could exchange his house blueprint for 100 stones, 20 woods and 30 straws. With these materials it's more easy for him to create a new blueprint.

      Delete
  18. Dude I remember following this from way back. How many hours a week have you spent on this on average? This is next label amazing now. And are you in the game dev industry?

    ReplyDelete
  19. Very cool, very Frank Lloyd Wright house you built there. I hope you don't keep this under your hat for too long: from what I can see of what you've already demonstrated, I could spend hours playing with the way you have this set up as-is (and would pay for the privilege).

    ReplyDelete
  20. Something you should implement is a 'create/remove line/volume', where you could select the first voxel, then select the second, and destroy/create everything in between. It would come in handy for carving out large chunks of mountains, or adding in window sills like you did.

    ReplyDelete
  21. Amazing. How are you going to deal with the floating blocks? (for example in Minecraft only sand and gravel are affected by gravity)

    ReplyDelete
  22. Any chance of a playable demo soon?

    ReplyDelete
  23. You might want to look into the control scheme used in Sauerbraten ( http://sauerbraten.org/ ) for level editing. There are some pretty striking similarities, and I always found the Sauerbraten interface quite easy and quick to use.

    ReplyDelete
  24. Wow! This game would be a dream come true. I can't wait to play it.

    ReplyDelete
  25. So how well does the LOD system handle user built items?

    ReplyDelete
    Replies
    1. You tell me :). This video already shows user built items at multiple LOD. User changes to the world go through the same pipeline as the rest of the world.

      It is tricky. The aliasing issues are a hard problem. I don't think anyone has solved this problem for large voxels like the ones seen here. I have a series of tricks to minimize aliasing, but it is still there.

      Hopefully it is something a good hearted player can forgive.

      Delete
    2. I was interested in that too. It seems that the angles stay sharp, from what's in the video. Unless he changed the LOD to be farther.

      Delete
    3. @Miguel: Any chance you could talk about those tricks? Totally understandable if not though. This thing is your baby. A golden baby. With sharp features.

      Delete
    4. There is a very good article covering the issues and solutions here: http://0fps.wordpress.com/2012/08/20/simplifying-isosurfaces-part-2/

      Delete
    5. | But there is a catch: In order to properly implement morphological sampling you have to change the way you calculate 0-crossings slightly.

      Good lord, not again. Maybe I'll just use MIN as it preserves features, yet expands them some. Are you doing surface simplification, volume simplification, or both?

      Delete
    6. How do you solve the "thin walls" issue? Like if you had thin walls in a high LOD, that crossed over into a lower LOD, wouldn't you end up with cracks in the terrain?

      Delete
    7. There will always be aliasing, it is a matter of minimizing the damage. Thin walls are possible the worst case scenario. I grow them so they are not thin anymore. But this is not always possible, in these cases you may have really thin features just vanish when they become distant enough.

      It may not be a big issue if the LOD where this happens is far. You may think of it as additional detail coming into the view, pretty much like the rest of LOD.

      Delete
    8. Yea, if it's far away then it's no problem, but if you have a thin wall in LOD0, and then it disappears in LOD1, not only will the wall be gone but you'd have visible cracks. Growing the wall using Min or Morphological would work, but I've noticed using those can cause different LOD's to not match up correctly. Tough stuff you've solved.

      Delete
  26. This message may be a little long but well see *takes breathe in*
    how easy would it be to make models to be used in there...

    What programme would be used , as i have an idea that if i got my hands on a sdk or a source for this id implement not just large boxes medium or small boxes which to me seems large and to clumbsy for this type of game

    i will post some pictures of what i mean as in wall units, these will most probably snap to grid in the smallest size box you can place, i am thinking also these wall units could be changed or added more or less of and used as modules for randomly made houses

    http://i49.tinypic.com/21lo0ed.png
    the top row is what it looks form inside the bottom what it looks like form outside, these would be the lowest quality for someone wanting a quick walls... maby also implement different types of cladding outside and different types of inside like job different color paints,,, those are for later on though

    Each wall type would require different amounts of wood, like the blank wall would require less tha the door and the window more than the door because of the wood used.

    http://i49.tinypic.com/v7cguh.png
    there would or may be grid sized flooring as in 2 modules wide by 2 modules up to maby 4 by 4. as this shows the left set is the underside the right set is the top side you could also set it for the floor to be wood stone carpet depending,

    http://i46.tinypic.com/qz11dk.png
    also if it will be a survival game some modules could be made degradable so you could walk through a destroyed town (that was procedurally generated and then degraded at random)
    Each module only returning a percentage of its build cost dependent on how much it was degraded

    http://i48.tinypic.com/1430zlv.png
    if this system was used you could make a floater type menu where you can import house blueprints of sorts and use them in different games and worlds
    Of course houses would be alot larger and extravagant than this and these maby also importing things like auto landscaping under its floor,crating tables beds also inside the blueprints for houses and so on

    That is my rant over but yeah , i do belive a minecraft style block placing is to large for this it is nice for landscaping and creating roads, gardens and paths but as or houses and walls it is a bit much

    If you want to know any more im following a few of your posts as well as this one if you want to know anything or want some more details and explanations you can email me nvr.loved@yahoo.com

    ReplyDelete
  27. My friend, who is canny about such things, said what impressed him more than anything is the mountains in the distance.

    ReplyDelete
  28. This looks absolutely amazing. Easily the best static building I've seen in a game, and I've been watching every game that comes along in the Minecraft vein.

    What I wonder is: Will your engine be able to handle dynamic elements? Doors that open? Switches? Windmills? Mechanical contraptions? I think making things that move is a key part of a good creative building game (and one of Minecraft's weaknesses, honestly), and what I know of your engine makes me suspect that it'll be difficult for it to handle such things. Unless the dynamic elements aren't composed of the same voxel-ish engine that the rest is.

    ReplyDelete
    Replies
    1. Right, I don't think I can mix dynamic elements with the voxel-based features. They would have to be a completely different system.

      Delete
  29. Colour me unimpressed and disappointed by your decision to go down the Minecraft clone route (although the technical aspects are, as usual, top notch)!

    Was this decision made out of an urge to create something "playable" instead of just continually working on the engine -- with the Minecraft option simply being an easy option? Is this project a definite indication of the actual game route you plan to take from now on?

    ReplyDelete
    Replies
    1. The non-realtime side of the engine is mostly done. At this point it was more about making a game with it. Engine-wise, I had nothing for real-time and sandbox. This is where the challenge was for me.

      Delete
    2. Fair enough! :)

      It's not like I'll stop reading the blog or watching the videos, anyway. I'm always curious to see where you go and what you do next (and how else can I see wonderful scenery without actually going outdoors??).

      Delete
  30. Have you considered taking data from a saved minecraft file and rendering it out in your engine? And have you shown this to Notch? You should.

    ReplyDelete
    Replies
    1. Never thought about it. I guess it is one thing other people (modders) will be able to do when this thing is out.

      I'd love to get Notch looking at this, but I don't know him. I bet he gets 100 messages a day saying "hey Notch look at my new engine".

      Delete
  31. How about letting the user instance some of those buildings you've shown us before?

    ReplyDelete
    Replies
    1. Working on that, seeing how much of it will be possible.

      Delete
  32. Will this have multiplayer functionality? And do you think an i7 could handle this or would the hyperthreading make it run worse?

    ReplyDelete
    Replies
    1. Yes, I am aiming for a strong multiplayer aspect. An i7 should be perfect.

      Delete
  33. Love it :)
    Simply amazing to see what's possible. What impresses me most is the speed with which you can generate a complete new world, and the incredibly small size that's needed to save the data.
    Keep up the excellent work!

    ReplyDelete
  34. Hello Mr. Cepero,

    I am wondering how do you keep voxel data in your system. I know that Dual Contouring generates polygon recursively on an octree, but this octre already has sign information vertices, intersection point and normal on edges. But what happens when the player modifies the terrain by, say, setting to empty a voxel? Do you still keep the original grid of voxels from which restart the octree generation -> polygon generation, or you still store voxels in some sort of "compressed" structure, such as an octree?

    Let me reformulate: okay you use an octree for polygon generation, but where do you keep the voxel data itself? A grid is surely unfeasable. Do you use a secondary octree?

    Thanks for your attention, we're struggling with this problem.

    Massimo

    ReplyDelete
    Replies
    1. No need to keep the original voxels, they can be generated any time you need. You can store user changes in any structure you like, an octree works fine, but it is not the only way.

      Delete
  35. That would be a nice game ;) Nice job, keep it up. I can't wait for the next update :) PS. Terrains are amazing

    ReplyDelete
  36. Thank you for your kind answer. We would keep the original voxels as a "cache" of the implicit function that generates the virgin terrain.

    If I may I would like to ask you another, crucial question. If you don't compress the implicit function into an (editable) octree, does it mean that when you regenerate the polygons of a terrain chunk, you directly sample the implicit function (taking under account user changes) to get the density values at vertices, intersections and normals at edges as required by Dual Contouring?

    If so, you then discard the temporary octree used to generate polygons with DC and only keep the geometry. At user changes, you rebuild the octree as stated before.

    Is this correct?

    Thank you again, and keep up the so much inspiring work!
    Massimo

    ReplyDelete
    Replies
    1. At this point you should consider licensing my engine :)

      Drop me a line at gmail if interested.

      Delete
  37. Just found your project, amazing, can't wait to get in there.

    ReplyDelete
  38. Hi,

    Happy to see the progress on your project.

    I have a question regarding networking. How do you stream the terrain now that it can be modified on the fly? As far as I remember you just streamed chunks of polygon soup from the different LOD as needed, how do you do it now?

    I hope I don't need a license for that.

    ReplyDelete
    Replies
    1. There is no need for streaming terrain anymore. It is generated every time on the client.

      Delete
  39. One idea would be to use boxes as the main block, but the ability to use stencils from the top/front/side of said block.
    With stencils i mean simple black/white images where black is nothing and white is solid, or the other way around.
    Would allow for complex, customizable shapes in an easy way.

    ReplyDelete
    Replies
    1. Could work, not sure if it will be intuitive for the user.

      Delete
  40. It appears to me that you aren't doing culling very well...
    Even for the generation of the voxels, one really doesn't need to generate voxels that it can not see (such as deep underground). I am not quite sure of your methods for generating the voxels (and if you use any form of LOD), but I'm guessing that you don't do culling for them.
    Also, the rock textures look very tiled. There are many methods of making them... not tiled looking, but the easiest is to just randomly rotate and shift them.

    ReplyDelete
    Replies
    1. I only do Frustum culling. Any form of occlusion queries are not robust or fast enough for a voxel world, where you will end up having holes everywhere. Also in some bad cases most of the world will display, for instance when you are on top of a very large tower or mountain. If the framerate is tied to how much the system can cull, the system would bog down in these bad cases.

      It works better to draw all the geometry and shade only what really shows. I do use a LOD system, this guarantees the number of polygons in any scene will be something the engine can handle.

      As rotate and shift textures to make them look better, do you have an example of this technique where it works well?

      Delete
    2. There is a mod for minecraft that randomly rotates select textures... doesn't shift them though.
      Makes it look a LOT less artificial.
      Of course you can use multiple textures and do "splatting". A lot of heightmap based terrain does multiple textures combined together to show transitions between two materials, and for making things look less tiled.

      Delete
    3. Yes, I do texture splatting too. It has to be setup by the world artists so in many cases I have just one texture. This is where you see a lot of tiling.

      I still don't know what you mean by rotating textures to avoid tiling. Yes, they could be rotated but it would distort the texture. Is there a screenshot of this thing, another game that uses the technique?

      Delete
    4. The point is to distort the texture. If parts are distorted in different ways, then it looks less artificial. Also for higher definition textures, warping them or smoothing them randomly helps. You should be able to do the warping effects in a pixel shader.
      I'm rather sure optifine for minecraft uses the rotation. Its subtle, but helps.
      Also it doesn't distort the textures at all. I think this is because there is no filtering on the textures. You can still see each individual square pixel.

      Delete
    5. Warping and distorting looks as bad as tiling. I rather stick to splatting and/or aperiodic tiling.

      Delete
  41. Awesome! Some thoughts:

    The tiling is incredibly ugly. Minecraft avoids the issue by having low-res graphics in the first place. If you could procedurally generate textures too, that would help a ton. Seeing how awesome everything else is, it's hard to imagine this to be too difficult for you.

    Controls look a bit difficult.

    ReplyDelete
    Replies
    1. |The tiling is incredibly ugly
      You are incredibly ugly. Thanks for updating on what minecraft does!
      | If you could procedurally generate textures too, that would help a ton.
      You have no idea if that's true. It would also be a nightmare performance wise.
      |Controls look a bit difficult.
      No really? Do you have any more super helpful comments? The game is obviously in pre pre alpha, you really think he doesn't know that? You people who give just totally unhelpful and nonconstructive comments but actually think they are helpful, you're just the worst.

      Delete
  42. Just found this blog today, have to say it all looks great. Got a soft spot for procedural generation.

    Are any mesh details in the terrain (especially the desert zones) from textures or is everything geometric purely algorithmic / noise, erosion etc ?

    How are you doing the texture blending between voxels by the way? Could it be tied to the weighted-marching-cubes algoritm to create sharp edges between the 'structural' voxels?

    Any texture-based Parallax / Displacement-Texture features?

    Is it deferred rendering ? Plans for local lighting (dynamic point lights) ?

    ReplyDelete
  43. Wow, such incredible progress!

    Question: Would this engine be extensible so that several planets could live inside it?

    Could a world be generated in real-time on a server procedurally?

    I don't know if you're still planning on it but releasing your work to integrate with unity could spawn an incredible generation of procedural games, I for one would make a infinite space sim MMO with sandbox elements.

    ReplyDelete
    Replies
    1. Yes you could do planets with this as well.

      You could generate on the server side.

      No plans for unity for now.

      Delete
  44. How is the same data so small?

    ReplyDelete
    Replies
    1. Save data is small because only what the user changes is stored. These changes also are very regular (think of walls, floors, etc) so they compress very well.

      Delete
  45. Come on, please! I want to play this, pre alpha or whatever, I want to play it!

    ReplyDelete
  46. i like it, is your computer but, it has low frames?

    ReplyDelete
  47. Did you sell this to Sony for EQ next? It looks a lot alike

    ReplyDelete