Friday, April 18, 2014

Video Update for April 2014

Wondering what happened in the last few months? Here is an update:


There are several things we did that were not covered in this update. You will notice a river in the background but there is no mention about water.


It is not that we are hydrophobic or that we want to tease you about this feature, we just want to spend more time improving the rendering.

I also go on in this update about how clean and sharp our new tools are. There is indeed a big difference in the new toolset, but still there are serious issues with aliasing when you bring detail beyond what the voxels can encode. For instance, the line tool now can do much better lines, but we still cannot do a one-voxel thick line that goes in any angle. This is because in order to fix the aliasing in this line would need sub-voxel resolution. So it OK to expect cleaner lines, but they can still break due to aliasing.

55 comments:

  1. Thanks for the update, the smoother rendering looks great. Someone viewing voxel farms work for the first time would have a hard time believing that it is all voxel based. To me, The next glaring issue is texture mapping being applied aligned to the world rather than the grammar generated objects.

    ReplyDelete

  2. I was wondering about the voxel physics after you demo'ed it last time. Once a voxel becomes a freemoving object, is it still considered a voxel, and can you manipulate it as a voxel? Or is it then considered just a model? Also, how stable would it be to have maybe a hundred freemoving objects at once? Lastly, if it does become a model while it is freemoving, is there a way to turn it back into a voxel when it is done being mobile?

    ReplyDelete
    Replies
    1. You have several options. It really depends on the game mechanics you want to accomplish. For instance, imagine you cut a tree. The tree falls as a single solid object. At this point your game may decide you want to consume all the wood in the tree and just remove the entire tree. Or, you may voxelize the fallen tree once it is resting so it becomes part of the voxel world again. One alternative we are planning is to keep both a voxel and a solid mesh representation. That will allow you to work on the voxels while the whole free structure moves. For instance if you do an airship you would like it to be detached so you can go different places. While you travel, you may still want to work and refine the voxels that make the ship.

      Delete
    2. Awesome! That's what I was hoping you guys came up with. I contacted VoxelFarm a few months ago about an indie SDK, and the word then was wait a bit. I was planning on drafting another email now, but I dont want to come across as pestering them. Would you recommend that I wait a while longer, or is there more information that they could give me?

      Delete
    3. No problem, you can email me directly.

      Delete
    4. Awesome, Ill start the draft over the weekend but I probably wont send it until after Easter, probably Monday or Tuesday.

      Delete
    5. Ok, sent the email. Lookin forward to your response.

      Delete
    6. Are you still working on your own game Miguel? Or are you too busy supporting licensed developers with their projects?

      Also are you planning on updating the Voxel Farm website. Not alot has changed in the year since I checked upon it last.

      Delete
  3. Best. Update. Ever!

    ReplyDelete
  4. So there is something like voxel resolution? I was assuming that these voxels can be as detailed as we make them. What is this resolution? Is it constant within the engine? What are the consequences of increasing/decreasing it?

    ReplyDelete
    Replies
    1. You need a cap in resolution anyway. Otherwise you can get amounts of detail you may not be able to render or network later. Voxel resolution in this demo is 30 cm.

      Increasing this resolution leads to larger memory and processor consumption (potentially)

      Delete
    2. How feasible would it be to make voxel resolution variable? We know that 99% of every world will never be seen up close, so it can stay at, let's say, 1m resolution, but the part the player is working on could maybe even go below 10cm?

      Delete
    3. It is fairly simple to have variable resolution. But making it variable does not mean it can hold more data, you just get the ability to have more resolution in one spot than another.

      As an engineer I am fairly pessimistic. I will assume the worst case scenario in your analysis will be the normal scenario when you hit production. That means if you support resolutions from 1 meter down to one centimeter, people will end up creating huge areas all maxed at one centimeter. So even if you have the ability to skip up to one meter, it won't make a difference because you won't get the chance to exploit it where it matters. Your world is as it had a one centimeter resolution. If you want to allow people to go down to one centimeter, you better make sure the entire world could work at that resolution, because users will take the system there.

      So even if you use adaptive grids (like a full octree), you need to think of the real limits of what you can handle. For instance this guy (Tenma from Landmark) builds consistently at the edge of what the voxels can encode:

      http://www.ac2hero.com/files/ogrecityv2-1.png

      If he had twice the resolution, he would have no problem maxing it out as well.

      Delete
    4. I noticed that there are many repeated details in this picture. What if higher detail (let's say it's that 1 cm) is available for instanced details, but the rest is in 20-30 cm. Wouldn't that look good and work well?

      Delete
    5. What happens when you modify instanced details?

      Delete
    6. They all change at once, of course.

      Delete
    7. Not sure what you guys are talking about anymore...

      Delete
    8. They change back to the original voxel density? Or do you have pockets of high density voxels wherever instanced objects were?

      Delete
    9. Instanced stuff takes zero voxels. The voxels are stored in the instance "class". When you make a hole through an instance, you are just adding air voxels in that location. Yes, very cool stuff :)

      Delete
    10. Wait... Does that mean you can do higher resolution/more detailed designs with grammars/instanced objects?

      Delete
    11. What I find looking at creations in Landmark is that at their voxel resolution, anything large (like landscapes) look great. However, the voxels are just too large for medium detailed work like window sills and door frames. Shelving. Cabinets, etc..

      I totally understand the fact that if you give people smaller voxels they will use them. That's true. Yet at the same time, the current size and technology constraints are degrading the final artistic quality. A wall looks good. A wall with a window suddenly has a more challenging time competing with something like WoW much less a newer game like Wildstar.

      Having more resolution, but limited in some way, might be a good answer for a game. Certain materials only can be smaller voxels. In the case like Landmark and claims, only so many small voxels can be in a claim area, the rest need to be regular size (allowing for some finer details, but in judicious use).

      Delete
    12. I agree, but I do not worry too much about that. I see no problem in cutting voxel volumes by half every year.

      Delete
    13. So... 30cm, 23.8cm, 18.9cm, 15cm, 11.9cm, 9.45cm, 7.50cm, 5.95cm, 4.72cm, 3.75cm, 2.98cm, 2.37cm, 1.88cm, 1.50cm, 1.19cm, 0.95cm... 15 years to get down to 1cm resolution!

      Delete
  5. Great update! The line tool is looking and snapping great. The crisp lines at joining the ground is SO improved, great work... It was something that previously seemed it might just be a limitation we'd have to live with.

    The grammar instancing is looking awesome, I appreciated your taking the time to flip through the ones that you all have been working on... Definitely going in the right direction, though I could see an eventual need to have some interface for navigating what could become an exhaustive set of grammars.

    The physics is great, the poly version of the mesh looks tight and very close to the voxel source... Good on you!

    It was a hard month or two waiting for an update, I think you have many fans already addicted... Personally, a simple video of you walking around in some area, just messing around would be fine to tide your fans over when things get busy.

    The work is looking great and the craft of Voxels is maturing with every step you take!

    ReplyDelete
    Replies
    1. The grammar menu could easily be tied to a folder with text files for individual grammars. Just imagine exploring a massive online world coming in contact with a cool castle whos grammar is automatically saved to that folder, then being able to further evolve that code set! We would see building designs not only flourish, but evolve and become immensely detailed.

      Delete
    2. those grammars are gonna be awesome, games will use it for procedural generation of thriving civilizations on habitable editable worlds.
      and i cant wait to play with it in landmark!
      really love this video, so happy for you! you must be living the dream now :)
      amazing work with the small things in the voxels those really go miles and look just awesome! cant wait to see this in the games to come, i really hope you get some love to starforge guys and these tools and things into that, landmark cant compete with exploring the never ending terrain in the massive epicness it can truly be available in a single player environment, i still miss their first terrain generation they used when they got voxel engine, while it was bare the land formations were nothing less than awe inspiring every where you looked, i would run for hours in that version.

      is your engine available for licensing again yet? :)

      Delete
  6. oops think i replied to another comment, but what i wanted to add was the physics!
    These objects should do destruction!
    but not just they should cause sounds and vibration/ camera shake, the possibility to create avalanches/ make mountains fall
    dust particles and all that good stuff!
    yes the potential is amazing really :)

    ReplyDelete
  7. How large are the wooden blocks you're placing in the beginning of the demo?

    Also, I'm curious - you mentioned a while ago that you had a distributed farm set up to handle some of the generation workload; the deformation we see in the demo is all local, right?

    ReplyDelete
    Replies
    1. These blocks are 8x8x8 voxels. Everything you see in the video is local, and it was captured on my relic machine (Intel i5, ATI 4770)

      Delete
    2. Impressive! 8x8x8 sounds like a dense field - how much space does the world take on disk (I would imagine that memory overhead is adjustable given that you can LOD far chunks)?

      Delete
    3. It is around 0.5 bits per voxel. But remember, only what users change needs to be saved. So for instance each of the 8x8x8 strokes shown in the video is 512 voxels, which is approximately 32 bytes.

      Delete
  8. Whoa, nice stuff here, especially the physics, I wish that Landmark would work without being connected to online servers, then I could mess around with this cool stuff.

    I have a question as always, how are you dealing with the extreme issue of repeating texture patterns?, in the videos I haven't noticed any of these issues, so I'm guessing you've done something.

    ReplyDelete
  9. I've been following your blog for a long time. Every update is great, and this is one of the best.

    I also want to say that many people (myself included) would be willing to pay for the current version. Even without any upgrades, it already looks like one of the most fun games I've seen, and I'd love to explore/build in the sandbox. I hope you are at least considering publishing it (maybe on steam greenlight?)

    ReplyDelete
  10. Really impressive engine. I'm glad you're growing. I wish you the best and hope you become a huge player in the game space. Dynamic worlds is exactly what many games could use to create so much more life in the virtual worlds.

    ReplyDelete
  11. This may come across as severely ignorant, but how feasible is it to have your engine generate content on the fly, similar to the chunk system of the notorious Minecraft? I was perusing some of your posts from before I started following you, and you mentioned back then that it took ~12 hours to generate... I cant remember exactly what space, but I believe it was roughly 2Km X 2Km. I imagine you instance somewhere between .5Km^2 to 1Km^2 at a time, roughly what time would it take to generate that in the background?

    ReplyDelete
    Replies
    1. It is already like that. Everything you see in those scenes was generated on the fly. This demos does not use pre-generation in any form. It takes around 12 seconds to come up with the starting scene from scratch. Then, as you move, any required chunks are synthesized.

      Delete
    2. Awesome. I had assumed to this point that you had gotten it to on-fly-fly generation, but when I read back to 2012 I started wondering what developmental posts I might have missed in between then and now. This is good, I had roughly two paragraphs of thoughts on hypothetical workarounds that I dont have to type out now.

      Delete
    3. On another topic, would it be beneficial to convert all (or as much as is possible) static objects/ models to voxels? Think: tables, chairs, vehicles, even doors and chest tops. Say for instance, like the conversation above mentioned, you had a higher resolution for non-editable things, like tables and chairs; things that would normally just be a model. Would it be better to keep them as models, or convert them to voxels when static? Would there ever be a reason to keep something a polygon mesh instead of converting it? Keep in mind I'm speaking strictly of static objects, not objects in motion.

      Delete
  12. This comment has been removed by the author.

    ReplyDelete
  13. Talking about voxel resolution and the amount of detail we can achieve, I had this crazy idea of multiple voxel grids overlapping each other... if that makes sense? I am no programmer, but would it be possible to have a separate grid of voxels running on a separate proccesing thread, angled 45 degree to the regular grid. So this angled version wouldn't interact to the regular version, and the polygons would be separate. The regular one could be the "primary one" for entire landscape and all. While the angled one allows any minisclue detail you manage to get out of 30cm voxels to be now angled at 45 degree angle and represented identically. I know angled walls work, but anything beyond that like complex shapes are not possible, they will blend to nearby voxels, distorting smooth angled walls and all that. (at least in landmark).

    ReplyDelete
    Replies
    1. Could work, still any high resolution grid will be maxed by users (because they can). So you are back to the original problem, how you fit a lot of voxels in a grid.

      Delete
  14. What did you mean when you said you found a way to "encode double the precision of surface features" using the same amount of data?
    Are you talking about the precision of the position of mesh corners generated by the minimal-squared error step in dual-contouring?
    I would have guessed that step was already super-precise for coarse meshes (Though very imprecise for curved implicit surfaces like spheres or polygonal approximations of such surfaces).

    ReplyDelete
    Replies
    1. It is about storing the data. For user creations we need to store the surfaces they make. We now can encode cases that normally would have shown aliasing or other types of deformation.

      Delete
    2. Wait, are you storing polygons generated from voxels? Or did you find a cleaner way of generating polygons from voxels?

      Delete
    3. It is still dual contouring. In the original article this was mixed with hermite data and QEF solvers. This is needed in some cases, but not every time. Sometimes we cheaper methods to figure out a voxel's internal surface point, so no need to store and compute any of the QEF stuff.

      Delete
    4. Doesn't that make it harder to save out a build session if the user places an imported mesh then, say, punches holes it with spheres? Seems like you'd be forced to save out the build site as a queue of abstract operations instead of a cumulative hermite edge-crossing terrain delta. Over time that queue could get huge I would imagine.

      Delete
  15. I look forward to the day when animated models and characters use a voxel-like system instead of polygons, we could achieve almost (emphasis on almost) Dwarf Fortress levels of injuries with actual graphics, actually cutting into the models skin and flesh with your sword on the spot it strikes, blood particles coming from exposed flesh voxels, assuming your swords blade voxels are strong enough to get through the armor.

    That's going to be cool, and it's inevitable, after photorealistic, 1cm voxels making up every object and creature in all of the world, with highly advanced AI like in EQN, wouldn't that be a sight to behold?.

    ReplyDelete
  16. Hey Miguel, have you received the email I sent you? I sent it a few days ago and I want to make sure it wasnt filtered for spam or anything like that.

    ReplyDelete
    Replies
    1. Nope... did you send it to miguel at voxelfarm.com ?

      Delete
    2. Yeah, I can send it again. "at" is the at symbol right?

      Delete
    3. I got it... will be replying later. Thanks!

      Delete
  17. For clouds, have you considered the International Cloud Atlas (http://library.wmo.int/pmb_ged/wmo_407_en-v2.pdf) as a base guide? It's very comprehensive.

    ReplyDelete
    Replies
    1. Thanks for the link. I had no idea such thing existed.

      Delete
  18. Are you considering selling the API or just licensing it for games? As a hobbyist programmer, I would be more interested in playing with the game engine than playing with any of the games.

    ReplyDelete