Search Unity

  1. Megacity Metro Demo now available. Download now.
    Dismiss Notice
  2. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

Voxels! - Introducing Cubiquity, a voxel plugin built with C++ and PolyVox

Discussion in 'Works In Progress - Archive' started by DavidWilliams, Apr 29, 2013.

  1. NarkLord

    NarkLord

    Joined:
    Sep 24, 2013
    Posts:
    13
    I disagree, the colored cube terrain is very important and is the only part of cubiquity I'm really interested in. It opens up different types of games. Don't assume that just because you aren't interested then no one will be.
     
  2. sinoth

    sinoth

    Joined:
    Jan 15, 2013
    Posts:
    30
    I'm sure people are interested. However, what does it offer that other (cheaper) cube voxel systems don't? From a profitability standpoint I honestly don't think people looking for a cube voxel landscape will fork over that much dough, especially with other alternatives.
     
  3. Ellandar

    Ellandar

    Joined:
    Jan 5, 2013
    Posts:
    207
    Hi All,

    back from being interstate for a week. In regards to the $200 price tag, I think if there were no free version it would probably be high, but considering the only requirement to pay the $200 is if you are going to release a product then it seems like a fair price (to me at least) for what you get. Last time I checked Free and Paid only differ in that you are not allowed to use the free version for commercial purposes.

    Ell
     
  4. DavidWilliams

    DavidWilliams

    Joined:
    Apr 28, 2013
    Posts:
    522
    Ok, due to popular demand I've just added in four more materials, so a terrain volume can now have a total of eight. Here's a rather messy image to demonstrate :)


    It's not really an optimal implementation but that's a detail for later. Actually Cubiquity has always supported eight materials but only four textures were being passed to Unity with weights passed in the vertex colors. Now the other four textures are also being passed, with the vertex tangent being abused to carry the weights. This can be done in a more intelligent way as practically speaking no single voxel/vertex actually makes use of all eight materials at once, but at least it shows the concept.

    I don't have a clear answer here - it will need some research. But I will say that I intend to provide better terrain shaders for Cubiquity anyway (normal mapping and possibly displacement mapping). What features of RTP would you want beyond these?

    As for colored cubes vs. terrain, well everyone has their own needs of course. We did struggle for a while over whether to focus on one or the other, but there is a lot of common code and supporting both has led to some nice design decisions which should be beneficial in the future (e.g. if we want to add a third volume type such as Dual Contouring).

    Yes, this is correct, and it will continue to be the case after the paid version is released on the asset store. Well, assuming some people do actually buy it anyway. I should also point out that you need a valid license for the duration of development - you can't develop your comercial game on the free version and then just buy a license prior to release. But we should make an FAQ to cover these kinds of scenarios.
     
  5. Ellandar

    Ellandar

    Joined:
    Jan 5, 2013
    Posts:
    207
    Hi All,

    A few updates on the generator. First I'd like to say that the majority of time it takes to build these terrains is spent in the noise libraries. Cubiquity is very fast, running lots of fbm noise generators is the slowdown here. I'll do an optimisation pass soon, along with writing a cache for Aubergines Noise (or switching to another one...starting to look at this: Coherent Noise generator which is why i've implemented some timers in the app. This will allow me to determine which one is faster with identical setups.
    This is also not using the latest version of Cubiquity, as David just released the update and I didn't want to attempt to use the latest version till I had this post done.

    So, enough talking, on with the show.

    First pass at smoothing: This version has each surface voxel sampling its peers looking for air, and then subtracting weight from the voxel for each peer it finds. The same is then done for the air voxels but inverse (add grass weight).
    This is a decent first pass, but I'm not creating a second cubic data structure to sample, so it's quite inaccurate at this stage.

    $mountainUnsmoothed.png $mountainsmoothed.png

    Biomes:
    All biomes are generated using the settings in the inspector, no code changes required.
    Last screen shot captures the settings...All I did was change the values of two sliders to generate all these images:
    Mountains Vs Hills and MountainHills Vs Plains

    Plains
    $PlainsVolume.png $PlainsCubic.png


    Continued in next post...
     
  6. Ellandar

    Ellandar

    Joined:
    Jan 5, 2013
    Posts:
    207
    Hills
    $HillsCubic.png $HillsVolume.png
    Mountains
    $MountainsVolume.png $MountainsCubic.png
     
  7. Ellandar

    Ellandar

    Joined:
    Jan 5, 2013
    Posts:
    207
    All 3 mixed (includes settings to recreate if you wish)
    $AllTerrainsCubic.png $AllTerrainsVolume.png $AllTerrainsSettings.png


    The code to generate this stuff is here:
    https://bitbucket.org/Ellandar/ellandarsterrainbuilder

    You will need Aubergines noise and Cubiquity added to the project to make it work:
    Aubergines Noise
    and
    Cubiquity

    Next up:
    • more materials now that 8 are available
    • better smoothing
    • review the noise library, and look into caching.


    Eventually i'll go back to my game i'm making my kids :) If only cubiquity weren't so much fun!

    Ell
     
  8. DavidWilliams

    DavidWilliams

    Joined:
    Apr 28, 2013
    Posts:
    522
    Great stuff as always :)

    Have you considered simply averaging neighbouring voxels? I think you don't even need to a second volume, you can simply sample your noise function multiple times and then average the results. That is, when you want to compute the voxel value for (x,y,z) you actually evaluate (noise(x,y,z) + noise(x+1, y, z) ... + noise(x,y,z-1)) / noOfSamples.

    Of course this is slow because of all the extra evaluations, but with some care you can probably cache the results. You might also need some normalization, and should probably do the operations at floating point precision before writing the results into Cubiquity. If it's too smooth you could also weight the samples so that your 'main' voxel contributes a greater amount. Maybe it's all too slow, but something to think about.

    Also, do you mind if we use one or two of your images for the Asset Store page (when we have one)? It would be nice to illustrate that procedural generation is possible with Cubiquity.
     
  9. Ellandar

    Ellandar

    Joined:
    Jan 5, 2013
    Posts:
    207
    That would probably work with some good cacheing. Thanks for the idea.

    You are welcome to use any of the material I put here for the store or your page.

    Ell
     
  10. Ellandar

    Ellandar

    Joined:
    Jan 5, 2013
    Posts:
    207
    Hi David,

    I have a question about duplicating a volumedata object. I'm timing the difference between doing cached noise lookups and lookups on an alternative volume (which I suspect may be faster); but i'm having trouble duplicating a volume.

    I create my initial volume data like this:

    Code (csharp):
    1.         string volumeDataPath = VolumeData.GeneratePathToVoxelDatabase();
    2.         TerrainVolumeData data = TerrainVolumeData.CreateEmptyVolumeData(myRegion, VolumeData.Paths.StreamingAssets,volumeDataPath );
    and then I populate it with a terrain. Once done i'd like a copy of this database, so I do this:

    Code (csharp):
    1.             TerrainVolumeData duplicateVolumeData = TerrainVolumeData.CreateFromVoxelDatabase(VolumeData.Paths.StreamingAssets, volumeDataPath);
    But I believe i'm getting an voxel object that has no voxles set, possibly because I need to call a write/save function on the initial volume?
    I'll keep reading code, but I figured if you were there I might get a response whilst you were available.

    Edit: I think I found it, check your bitbucket.

    Ell
     
    Last edited: Mar 3, 2014
  11. Ellandar

    Ellandar

    Joined:
    Jan 5, 2013
    Posts:
    207
    New smoothing is in.

    This image is a reproduction of the terrain called "All 3 mixed" with the new smoothing function.
    The function is slow, it's the averaging of neighbors that David suggested, the second terrain to sample was faster than resampling the noise function (in the order of minutes, hehe).

    I can reduce the cost a bit, as I'm not doing any caching at all and it's really a brute force approach. Looks nice though :)

    $AllTerrainsVolumeSmoothed.png

    Ell
     
  12. sinoth

    sinoth

    Joined:
    Jan 15, 2013
    Posts:
    30
    Awesome, thank you! That commit also helped me figure out where to start experimenting with different shaders :)

    Parallax occlusion mapping. Once I get a handle on how the lib operates I'm going to attempt adding it myself and will report back with results.

    Bugs / Questions

    After assigning new textures to the TriplanarTexturing material, the Material buttons under "Paint" show nothing, though they still do work and allow painting the correct texture.
    $2014-03-03 15_29_18-Unity - main.unity - cubiquity - Copy - PC, Mac  Linux Standalone_.png

    This is a minor complaint but pressing "F" in the editor to "Frame Selected" doesn't seem to work properly for a Terrain Volume. The resulting view is pulled really far back. Makes navigating the terrain difficult. It's as though Unity thinks the object is bigger than it is or maybe has zero size?

    I'd like a bit more control when it comes to initializing a terrain volume. For example, Unity's Terrain has a "Flatten" button that sets the entire terrain to a given height. Something similar in Cubiquity would be nice. Currently I'm trying to completely fill up a terrain volume, but not sure how. I was going to write a script to do this but the changes wouldn't be saved during play mode.

    On that note, what is the best way to tweak the size (underlying voxel array) of a terrain volume? I'm wanting a square rather than rectangular volume. I expected there to be a parameter somewhere that sets the X,Y,Z size of the voxel data but can't find it.

    Lastly, what is the best way to edit a terrain volume at runtime? I found TerrainVolumeEditor.SculptTerrainVolume which looks like it may do the trick, but I couldn't find any lower-level functions to do something like ask if the voxel at (x,y,z) is empty or full.

    edit: At some point, having undo/redo for sculpting/smoothing/texturing would be extremely helpful.

    edit^2: While painting/smoothing/texturing and pressing ALT to rotate the camera, left click still modifies the terrain. It should probably stop painting if ALT is pressed, or camera manipulation is otherwise engaged.
     
    Last edited: Mar 4, 2014
  13. Ellandar

    Ellandar

    Joined:
    Jan 5, 2013
    Posts:
    207
    Hi Sinoth,
    quite keen to see what shaders vertex investigation you can come up with, RTP is really nice and Cubqiuity + RTP would be very sexy.

    Your last question is something I can probably answer for you.
    The object you need to reference is:
    TerrainVolumeData

    There's a method you can call on that called GetVoxel(x,y,z). It will return a MaterialSet object that contains all of the material weights contained within that voxel.
    You can then loop through the 8 materials to see how much weight each material holds, add the total and you now have the total voxel weight.

    I'll write some sample code below. It's untested but should work, there's nothing destructive in there so cut/paste and see what happens :)
    All C# code.
    Code (csharp):
    1.  
    2. // Get the volume Data
    3. TerrainVolumeData volumeData = terrainObject.GetComponent<TerrainVolumeData >();
    4.  
    5. // Get the materials from the voxel
    6. MaterialSet voxelMaterialSet = volumeData.GetVoxel(x, y, z);
    7.  
    8. //Setup a variable to hold the count
    9. float voxelWeight;
    10.  
    11. // Iterate through all the materials adding up their weights.
    12. for (int materialIndex = 0; materialIndex < voxelMaterialSet .weights.Length; materialIndex++)
    13. {
    14.     voxelWeight += volumeData.weights[(uint) materialIndex];
    15. }
    16.  
    17.  
    You should now have a float (which should probably be a byte...i'm at work and rushing this a bit) called voxelWeight that contains the current weight of the voxel.

    In regards to getting some buttons to do things like, "make all terrain X depth", or "set all voxels on" to produce a cube, I can put that together for you tonight (in about 8-9 hours from now).

    Ell
     
    Last edited: Mar 4, 2014
  14. DavidWilliams

    DavidWilliams

    Joined:
    Apr 28, 2013
    Posts:
    522
    @Ellandar - I did some more thinking about a discussion we had previously. I suggested using the noise value directly as a density to get smooth terrain (rather than manually thresholding), but the problem was dealing with multiple materials. But now I'm wondering if it can be done in two passes, to seperate the shape of the terrain from the distribution of materials.

    In the first pass you would only set a single material (say the first one) and you would use the noise value directly. This should give smooth terrain. In the second pass you would use the noise values to compute the distribution of materials for each voxel, but you would scale them to ensure that they sum to the density you computed in the first pass.

    I'm not sure it works... but it seems interesting. And sorry if we already discussed it but I slightly lose track of all the ideas in this thread!

    Ok, that would be great to see. It'll be easier to start with normal mapping though, to get the tangent space working and handle passing the extra textures.

    I haven't seen this and can't test right now, but I've logged it here: https://bitbucket.org/volumesoffun/cubiquity-for-unity3d/issue/36/missing-textures-on-buttons

    Almost certainly caused by line 70 of TerrainVolumeRenderer.cs which uses a hardcoded size: https://bitbucket.org/volumesoffun/...ipts/TerrainVolumeRenderer.cs?at=master#cl-70

    I logged it here: https://bitbucket.org/volumesoffun/cubiquity-for-unity3d/issue/37/compute-proper-mesh-bounds

    I think Ellandar's comments address most of these. Also see the documentation in MaterialSet.cs.

    Indeed, though I suspect it's fairly difficult :)

    I did have an issue related to this and I closed it: https://bitbucket.org/volumesoffun/...sue/26/editing-can-occur-when-rotating-moving

    Obviously not enough testing so it's open again now. Thanks for the reports - I will try to get some of them addressed!
     
  15. sinoth

    sinoth

    Joined:
    Jan 15, 2013
    Posts:
    30
    Thanks Ellandar! Your comments helped a lot :)

    I tried setting my own volume size by changing MainMenuEntries.cs, line 15 to "height = 64" rather than 32. This created strange behavior -- try it yourself and sculpt the terrain to max height. It behaves oddly near the top and I'm not sure why. It seems to be jagged and won't flatten nicely like a height of 32.

    edit: The above behavior only seems to happen when you use the leftmost brush (the one with lots of alpha). Using the brush on the far right (no alpha) seems to work fine.

    I've been tinkering with Undo today and it seems like Unity relies on being able to track binary changes to properties of objects. Unfortunately, it looks like all the "magic" happens inside the Cubiquity DLL, so we don't have an easy way for Unity to track these changes :( I suppose that means undo/redo will need to be handled outside of Unity. Scultping is easy enough (undoing a sculpt means performing it's inverse) but painting isn't so trivial.

    Can you explain what happens on the transition from editor -> play mode in terms of the underlying voxel data? Does it get copied somehow? I've looked through the synchronization functions and I can't figure out how the terrain is "reset" when you leave play mode. My intuition is that we could abuse this somehow for the Undo system.
     
    Last edited: Mar 4, 2014
  16. DavidWilliams

    DavidWilliams

    Joined:
    Apr 28, 2013
    Posts:
    522
    Yeah... I am aware of some odd behavior with the sculpting brush that I haven't fully worked out yet. It acts as if there is a limit to the extrusion which shouldn't be the case. It will need some more investigation.

    The way it works internally is that the volume is kept as a set of blocks (probably 32x32x32 voxels but I forget exactly). When you write to the volume data it doesn't actually modify these blocks, but instead creates new blocks which override them. When reading data, it first check to see if it is overridden and if not then it returns the original data.

    At any time you are able to discard all of the overridding blocks (which gets your original data back) or you can 'accept' them, in which case they become part of the original data and you can start with a new set of overrides. We accept them when leaving edit mode but discard them when leaving play mode, which is how we achieve the behavior you observe (see ShutdownCubiquityVolume()).

    I believe it would indeed make sense to extend this for the undo system. Rather than one set of override blocks I imagine there could instead be a stack, so that you could push or pop the current state of the volume. The size of such a stack would probably be very limited, but even a few entries would allow a basic undo system.

    Unfortunately it is indeed all tied up in the C++, so it depends on me actually implementing this functionality. I don't currently have any schedule for doing this.
     
  17. sinoth

    sinoth

    Joined:
    Jan 15, 2013
    Posts:
    30
    So to confirm, PolyVox has source available and the C# portion of Cubiquity has source available, but the Cubiquity DLL does not have source available? Is that so you can protect your work from theft? I must admit one of the nicer aspects of Cubiquity was being able to peek behind the scenes and help give back to the library.
     
  18. DavidWilliams

    DavidWilliams

    Joined:
    Apr 28, 2013
    Posts:
    522
    Yes, this is correct. PolyVox is a proper open source library, while Cubiquity is a commercial endeavour which makes it easier to integrate with other engines (currently Unity, but hopefully others in the future).

    The C++ source code is withheld for a few reasons. Firstly we need to be very careful about what we put on the Asset Store as it will then be covered by the standard Asset Store license. This means we lose control of the licensing which might complicate integration with other engines in the future. Actually we should check what other integration packages do in this regard.

    I'm also assuming there's less of an interest in C++ code from the Unity community, and that it would add some support overhead. We will probably allow interested parties to separably buy a source license for Cubiquity (and serious users would want this for security), but this would be additional to the usage license and would be purchased from us directly (for the reasons mentioned above).

    There's also protective reasons - the free version of Cubiquity was originally feature limited and this was too be implemented through the .dll. There's currently no intention to return to this model but we also have to see how things go in terms of sales on the Asset Store. The C++ code is a kind of fallback in that sense.

    I think you've asked a very important question here... I'm going to so add it to the FAQ (ready for when we have a website).
     
    Last edited: Mar 6, 2014
  19. sinoth

    sinoth

    Joined:
    Jan 15, 2013
    Posts:
    30
    @DavidWilliams: Shot you a PM. Not sure if that is the best way to contact you -- this forum can be finicky.
     
  20. NarkLord

    NarkLord

    Joined:
    Sep 24, 2013
    Posts:
    13
    I managed to successfully import from magica voxel. The converter does fail if the volume size is 15x15x15 or less in size.
     
  21. DavidWilliams

    DavidWilliams

    Joined:
    Apr 28, 2013
    Posts:
    522
    Thanks, I have logged this issue here: https://bitbucket.org/volumesoffun/...38/magica-voxel-import-fails-on-small-volumes

    Magica Voxel is a really nice editor, and I hope it can support larger volumes in the future. The current size limit (128*128*128 ) makes it a bit to small for editing most levels unfortunately. Recently I came across another voxel editor called VoxelShop - I think it has the same size limit but it does look promising. I think it can export to the Magica Voxel format though I haven't tested it:

     
  22. Ellandar

    Ellandar

    Joined:
    Jan 5, 2013
    Posts:
    207
    Hi David.

    I find that Volumes with regions smaller than 15x15x15 fail to create.
    Perhaps this is the source of the import issue.

    Ell
     
  23. DavidWilliams

    DavidWilliams

    Joined:
    Apr 28, 2013
    Posts:
    522
    Yes, that sounds likely. Perhaps the internal block size is set to 16x16x16 voxels (I thought it was bigger but don't actually remember...) and maybe it won't create s smaller volume than that. I'm not sure why that would be the case but I expect it will straightforward to fix.
     
  24. DavidWilliams

    DavidWilliams

    Joined:
    Apr 28, 2013
    Posts:
    522
    Hey guys, time for another quick update. I'm pleased to say we have finally built a MacOS version of our Cubiquity engine and the Unity3D integration seems to be working as expected :)


    This isn't actually in Git yet as there are a couple of path issues to resolve, and we haven't tested standalone builds yet. We'll try to get it in Git over the coming days and then release a new snapshot soon.

    Apart from that we have mostly been working on documentation and general polish. We're really working towards the asset store now, and are not expecting to add any new features before we get there (but lots of new features afterwards :) )
     
  25. DavidWilliams

    DavidWilliams

    Joined:
    Apr 28, 2013
    Posts:
    522
    Just a quick note that the aforementioned OSX support is now checked into BitBucket: https://bitbucket.org/volumesoffun/cubiquity-for-unity3d

    Please give it a try and let us know if you run into any problems (particularly if they appear to be OSX-specific). I've noticed that if you make changes to the volumes in play mode then they are not being restored when you return to edit mode, so we'll look into that one. Apart from that it seems pretty good so far :)
     
  26. DavidWilliams

    DavidWilliams

    Joined:
    Apr 28, 2013
    Posts:
    522
    Just a heads up that we've released a new snapshot with the OS X and Linux support. Details and downloads are in our 'Assets and Asset Store' thread.
     
  27. DavidWilliams

    DavidWilliams

    Joined:
    Apr 28, 2013
    Posts:
    522
    Hi guys,

    This isn't the most exciting feature of Cubiquity but it is one of the most important... the user manual and API documentation!


    We've added both online and PDF versions of the documents:
    • Online HTML version on our website: http://www.cubiquity.net/cubiquity-for-unity3d/1.0/docs/index.html
    • PDF files in the Git repository: https://bitbucket.org/volumesoffun/cubiquity-for-unity3d/src/master/Assets/Cubiquity/Documentation/
    Hopefully you will all find this useful in your voxel endeavors :)
     
  28. Ellandar

    Ellandar

    Joined:
    Jan 5, 2013
    Posts:
    207
    Hi David,

    I have a quick question about the Region object, is it local space or global space?
    If local, I'm wondering about the need for lower and upper, wouldn't it just be a size?

    I only ask because I have the following code:
    Code (csharp):
    1.  public bool CheckIfInBounds(int x, int y, int z)
    2.     {
    3.         return (x >= VoxelVolume.enclosingRegion.lowerCorner.x  
    4.                   x <= VoxelVolume.enclosingRegion.upperCorner.x  
    5.                   y >= VoxelVolume.enclosingRegion.lowerCorner.y
    6.                   y <= VoxelVolume.enclosingRegion.upperCorner.y  
    7.                   z >= VoxelVolume.enclosingRegion.lowerCorner.z  
    8.                   z <= VoxelVolume.enclosingRegion.upperCorner.z);
    9.     }
    where x,y,z are co-ords in localspace to the voxel world. Basically I create a 3d array [x,y,z] with the same number of elements as the voxel world has voxels; then when I want to interact with cubiquity I use these x,y,z co-ordinates. My concern is if I need to handle a situation where 0,0,0 doesn't exist in cubiquity because lowerbounds > 0?

    Or alternatively, is there a better way of determining if a value is within bounds? I could be "doing it wrong"(tm)

    - Ell
     
    Last edited: May 4, 2014
  29. DavidWilliams

    DavidWilliams

    Joined:
    Apr 28, 2013
    Posts:
    522
    The region corresponding to a volume is just its extents described in local space. It bascially tells you the minimum and maximum voxel positions you can write to and read from. There is no requirement for the volume to start at zero and it can even start (and finish) at negative positions.

    In practice, you will usually want to start your volumes at zero and simply apply a transform if you want them positioned elsewhere in the scene. So why allow negative/non-zero values at all? Partly it could be useful if/when we move to larger/infinite terrain, as I can imagine in some cases it might make sense to have the volume centered on zero rather than starting from zero. But mostly there was just no reason to prevent this - it's extra flexibility if anyone ever needs it.

    Perhaps you should separate Cubiquity's concept of bounds from your own, so that a water simulation could be confined to only part of the volume? I think you can also skip the bounds checks an be prepared to handle the resulting Cubiquity exceptions though I'm not sure that's a good approach.

    Looking to the future, I would quite like to get rid of the concept of volumes having a particular region at all. I think you should be able to read from any voxel, and if there is no data it should just return zero. And if you write to a voxel which doesn't exist it should simply create a new chunk for that position and add it to the database. At least that's the direction that I'm currently thinking.
     
  30. Ellandar

    Ellandar

    Joined:
    Jan 5, 2013
    Posts:
    207
    thanks David, that really does clear things up.
    Negative Regions: I didn't even consider that.

    At the moment the simulation is totally separated from cubiquity, the reason I'm interested is because the interface between the simulation and cubiquity translates the simulators request: "I need to know if I can flow this way" into: "Get the voxel from the voxel engine and pass it to the simulator".

    That's a very good idea about being able to ask for any valid Vector3i and cubiquity spawning a chunk if needed, tricky stuff!

    Oh, speaking of Vector3i's! it just reminded me that you have a header in that file indicating a different license. It might be worth checking if it's compatible with the two Asset store licenses; otherwise cubiquity might be rejected on the first try due to that header.

    - Ell
     
  31. Ellandar

    Ellandar

    Joined:
    Jan 5, 2013
    Posts:
    207
    Hi David,

    Got another one for you.
    When creating a lot of water voxels on the screen, I have an issue where large chunks of them completely stop rendering.
    It's like they are frozen, but the simulation continues to tick underneath them, eventually the rendering catches up and the current state is displayed.
    Usually several seconds have passed before the catchup occurs.

    Like I said, it's possibly not even cubiquity so I'll go digging on the Interwebz too!

    - Ell
     
  32. DavidWilliams

    DavidWilliams

    Joined:
    Apr 28, 2013
    Posts:
    522
    I think you can disregard my previous comment about the time-stamping as that's probably not the issue here. I think the problem is just that Cubiquity is struggling to keep up with all the mesh generation - probably it hasn't finished syncing the mesh before the voxel gets modified again, and so a queue of sync tasks is building up.

    Actually the issue was not serious for me and it was quite hard to see it in your demo (but I could if I watched carefully). I get the impression it is more serious for you. It could well be that it depends how fast your computer is, which may also be why it doesn't happen on smaller volumes?

    In Volume.cs there is a variable called 'maxNodesPerSync' which is currently set to '4'. If you increase this is should keep the mesh more closely synced to the volume. However, it might be that the 'queuing up' is happening in the native code library rather than the C# code in which case it might need more work to fix.

    Edit: I must say it's really great that you are pushing Cubiquity so hard. I didn't really anticipate it being used like this and I'm pleased it's (mostly!) holding up. The focus is currently on getting to the asset store, but once that happens I'd really like to put some work into performance and scalability which should then help you further.
     
    Last edited: May 4, 2014
  33. Ellandar

    Ellandar

    Joined:
    Jan 5, 2013
    Posts:
    207
    Morning David,

    spot on mate! Incrementally changed it from 4 -> 6 -> 8 -> 10 and it incrementally got better. 10 Seemed good.
    Video of problem and fix:
    [video=youtube_share;0Kuqs0kjV6k]http://youtu.be/0Kuqs0kjV6k

    Thanks for your quick help.

    edit: might have to wait a bit for the video to process on Youtube, it's being very slow for some reason.
    edit: and there it is. All done.
     
    Last edited: May 5, 2014
  34. DavidWilliams

    DavidWilliams

    Joined:
    Apr 28, 2013
    Posts:
    522
    Great! You'll notice this parameter isn't actually exposed though the API so I'll have to think what to do with that. I was concerned that the value would be meaningless to the average user and think it should be computed automatically somehow. Perhaps I should make sure that at least a certain percentage of the outstanding tasks get processed every frame. Anyway, I'll give it some thought.
     
  35. DavidWilliams

    DavidWilliams

    Joined:
    Apr 28, 2013
    Posts:
    522
    Hey everyone,

    If you've been watching our other thread then you will have seen that Cubiquity for Unity3D is now available on the asset store!


    For a while we have been maintaining two separate threads ('Works in Progress' and 'Assets and Asset Store') but I don't think we need to do this anymore. Now that we have released I think that discussion should be held in the 'Assets and Asset Store' thread. Please update your bookmarks and let us know what you think of the latest version!

    I will lock this thread eventually, but might bump it a couple of times first for those who have subscribed to notifications.
     
  36. im

    im

    Joined:
    Jan 17, 2013
    Posts:
    1,408
  37. DavidWilliams

    DavidWilliams

    Joined:
    Apr 28, 2013
    Posts:
    522
    This false positive only affects the old version of Cubiquity in the Git Master branch. It is not present in more recent releases (e.g. develop branch) on in the asset store version. It is not actually a virus! More information here:
    Also, be aware that this work-in-progress thread is now closed, as we have released on the asset store and now have a thread in the 'Asset and Asset Store' forum:
     
    Last edited: Nov 19, 2014
  38. Mighty-Professional

    Mighty-Professional

    Joined:
    Jan 24, 2014
    Posts:
    166
    I do not seem to have this file in that location or anywhere in my Cubiquities folders. Is there anywhere else I can get it?
     
  39. DavidWilliams

    DavidWilliams

    Joined:
    Apr 28, 2013
    Posts:
    522
    This 'work-in-progress' thread is now closed, so I answered you in the new 'Assets and Asset Store' thread.