I've seen something very similar in the game Cube from 2001 (and its later successor Cube 2: Sauerbraten from 2005). In that engine each vertex (as opposed to face) is edited at a time, allowing for very interesting and complex structures (But it can reproduce every shape that 'Sticky Cubes' can). Its also using octrees for very fast greedy meshing and a tiny (1m/512) voxel size.
@Kosro Жыл бұрын
Thanks for the nostalgia trip ;)
@havenkeeper6400 Жыл бұрын
Sauerbraten and Marble arena were a couple of my favorite games when I was little.
@clonkex Жыл бұрын
Man I LOVE those games. My siblings and I still play Sauerbraten every now and then and we still have a heap of old maps we created in multiplayer.
@doltBmB Жыл бұрын
It may be worth mixing blocks which are "soft" like this, with blocks which are "hard" like in a traditional building game. So bricks and wood and other refined materials work like normal, but soft blocks on the terrain or in the trees work like this.
@Legit_SuperFall Жыл бұрын
sort of how 7 days to die does it
@Wyi-the-rogue Жыл бұрын
Roblox
@dallazz5617 Жыл бұрын
Space engineers
@juansolo161710 ай бұрын
@@Legit_SuperFall 7 Days to Die uses smoothed marching cubes, but only for terrain. It uses assets for building components and trees. When you "damage" a building block it doesn't change shape because it's a solid model asset. It may have changing textures or "stages" of decomposition, like the doors, where they have multiple stages of holes being broken into them. It just replaces the model with another model for each stage.
@Legit_SuperFall10 ай бұрын
@@juansolo1617 yes i know, its v interesting However, i want smooth edges aswell
@daniilikyay4949 Жыл бұрын
Awesome! If a game were to be based off-of this I would strongly encourage adding "sticking rules", for example that pillar you made extended towards the cliff wall once it was close enough, but maybe it could be so player-made wood doesn't stick to natural stone/dirt, many possiblities are opened by making sticking selective.
@10bokaj Жыл бұрын
selective sticking is not a bad idea, although I have put this technic behind me, it has many problems.
@daniilikyay4949 Жыл бұрын
Are the problems with the underlying concept or is it that the concept is hard to implement, creating problems?@@10bokaj
@DapperNurd Жыл бұрын
@@10bokaj What kind of problems? Is it not practical to use this system for an actual game?
@ghowstcrafter9201 Жыл бұрын
@@10bokaj there is an actual full game with this same idea of voxel representation, its called castle story, look it up!
@isaias-1713 Жыл бұрын
@@10bokajhey what about a tool that changes the connection between blocks?
@jdigi78 Жыл бұрын
You could add special "air" blocks that don't collide with things but still deform the geometry. That way you can have sharp edges where you want them and still smooth the other sides of the block. A way to restore the block for fine editing would be nice as well.
@longiusaescius2537 Жыл бұрын
Maybe
@JustAnotherAlchemist Жыл бұрын
I was also thinking about an "undo" to restore blocks. Something delta/time based. Also I was thinking of a "modifier key" style editing, where it snaps to the usual angles / geometry while a key is held down. Both these would make editing much more intuitive. TL;DR: Lots could be done with his engine/idea.
@longiusaescius2537 Жыл бұрын
@@JustAnotherAlchemist maybe as an add-on or different mode "editor"
@xKeaton Жыл бұрын
Looks very promising. If you would handle the reduction/smoothness of the different blocks in steps It would allow for a lot more control. If this already is the case than reduce the steps. I think just 4 steps are already enough: 4/4 block, 3/4 block, 2/4 block, 1/4 Block. It would probably also feel great with a pickaxe and chipping away at blocks in increments. Slowly 1/4 after 1/4. Roofs would also work way better because you would set all outer edges to 2/4 and they would create a perfect edge all around, that seamlessly connects
@flameofthephoenix8395 Жыл бұрын
Perhaps you could have different tools with some being able to achieve more steps than others.
@seeranos Жыл бұрын
12 steps gives you the flexibility to reduce by 1/2, 1/3, 1/4 or 1/6. I dont think players would likely care about 1/12 steps but 12 gives a lot of flexibility in divisors.
@cis_ash Жыл бұрын
and if you want to still show off the smoothness & continuity of transitions - move between discrete steps with a snappy n fast easing function like easeoutelastic
@LewaElite Жыл бұрын
One weakness I'm noticing seems to be that it is very difficult for players to accurately match the volumes (states between full block and no block) of different blocks. For example, if a player has destroyed a terrain block and wants to restore the terrain to how it was before, it may be very difficult to make the new block be the exact same volume as the blocks surrounding it. While building, it would also be very desirable to be able to match the volumes of different specific blocks, like, for example, making sure the slope of a roof is neat and consistent, or making sure 2 windows have the same bevel around the rim. One intuitive solution could be to restrict the volume of a block to, say, 4 distinct levels instead of a continuous transition between full volume and zero volume. While this would reduce the total smoothness of the game, I don't think it would affect the general visual feel of the game too much, while it would also make editing nearly as intuitive and precise as it would be with regular cubes. If the smooth transition is important, a less invasive solution could be some kind of "eyedropper" system that allows players to copy the volume of 1 block to another. Another middle-ground could be to keep natural world generation and most means of editing terrain limited to distinct block volume levels as described before, but allow players the option to smoothly edit the volumes of blocks through some specific tool if they please. At any rate, this proof of concept seems like a very clever and cohesive approach to making the world more complex than simple cubes.
@tlpenguin3758 Жыл бұрын
I find it interesting that you could mess around using just voxels, but then you could make things like ramps and pillars and other more complex shapes without having to put in as much effort
@jeff__dev Жыл бұрын
This is cool! I would definitely prefer to have the editing of cubes snap to increments like 0.75, 0.5, 0.25.. etc instead of a smooth 1-0, maybe e special tool that breaks it in increments? I could imagine it would help with building roofs without making it look so buldgy :)
@SuperLlama88888 Жыл бұрын
Wow, very clever and looks cool! Tbh I don't think marching cubes would ever have really worked for voxel games due to editing the terrain, but this looks like a neat alternative!
@dottedboxguy Жыл бұрын
don't you know it, games like astroneer already use marching cubes
@SuperLlama88888 Жыл бұрын
@@dottedboxguy I've heard of that game before, and it looks cool!
@ChuckSploder Жыл бұрын
@@dottedboxguy so does no man's sky
@palmberry5576 Жыл бұрын
@@dottedboxguytrue, but all the operations on the voxels are done on a scale of several voxels + none of the important game elements are voxels
@toothlessblue Жыл бұрын
I think something similar to this was implemented in the Carpenters Blocks mod for Minecraft
@10bokaj Жыл бұрын
I doubt that
@valley-artifact Жыл бұрын
really cool, but it could really use some way of easily restoring blocks, would make building much faster because you could correct mistakes more easily
@Jason13Official Жыл бұрын
I hope this video gets shown to the game developers that need it 🙏🙏 would be very useful
@KozelPraiseGOELRO Жыл бұрын
It was indeed.
@SmoothieGamesLambda4 ай бұрын
Would love to learn how you did this. Super cool!
@isaacbunsen5833 Жыл бұрын
I think the nicest in-between would be to have a few different options. Primarily I would have a smooth state a cube state. By striking the smooth state you chip away the excess and reveal the cube shape. Optionally from there you could have some kind of block chiseling
@YippeePlopFork5 ай бұрын
I think that different smoothing groups - by terrain type - would help. For example: grass should be the smoothest (so requires extra smoothing or a better smoothing algorithm) and rock was plenty smooth enough using marching cubes / should be rough / hard edges. I wouldn’t smooth things like trees using marching cubes but use a custom smoothing pass just for them. Perhaps three smoothing / marching cubes passes: 1 for grass, snow etc, one for rock and one for trees and bushes (or use meshes for trees)? Just an idea…
@Mikasey Жыл бұрын
I think in Space Engineers ship hull blocks use similar system, or at least quite like it
@XiaoMingXing Жыл бұрын
Reminds me of Roblox’s terrain except honestly better. Roblox doesn’t have that sticky property your terrain has, which is honestly pretty awesome
@elnico5623 Жыл бұрын
the main issue with marching cubes is that the voxels become just points instead of volumes, the marching cubes kinda hug the dots and that makes it really hard edit and to assign textures, if i understand correctly in your implementation the texture is taken from the voxel/point at some constant cardinal direction, the sticky cubes solution seems wonderful, just needs some tweaking like having some sort of stepsize instead of the smooth change we see in the video
@brynshannon6692 Жыл бұрын
Were I to expand upon this for a game design, I would want the option to add or remove from a cube by percentage increments. Say, 5% at a time at minimum, but can go as far as 100%. This would allow for much more consistency and control, and you could apply the same thing to mining so that you can make sure you remove the exact amount of blocks (including fractions) you intended to.
@brynshannon6692 Жыл бұрын
It would also be nice to be able to specify which faces of a block "stick" and which treat their surroundings as empty air. I'd give the player a handful of "templates" for selecting this, so they can apply those changes quickly and build efficiently. For example, setting all sides of a block to Unstick aside from the top and bottom would be great for making fences.
@novarender_ Жыл бұрын
It would be great to have a separate tool for deforming vs. destroying voxels. It would stuck to have dents all over your base from accidental clicks! Another feature that would be quite useful is the ability to extrude in an opposite manner of deforming, but without placing another voxel, so it's easier to fine tune what you want quickly. Lastly, there needs to be some kind of precision controls which allows you to deform very slowly, as I saw you struggling in the video :) A more advanced engine could allow the user finer control over each vertex, which would fix the small ramps at the bottom of the door frame but may be out of scope of this project. Good luck!
@neologicalgamer3437 Жыл бұрын
I'm not entirely certain on its' applications to games, as that's not a field of industry I've spent my life studying, I can certainly see its' applications to 3D low-poly modelling. You could place cubes in the rough shape you want, and then use the sculpting tool in order to refine it. This could expedite the 3D modelling industry significantly, as it allows for far more rapid prototypes to be created. This technology if further developed could sell really well!
@10bokaj Жыл бұрын
I belive Z-brush uses voxel to make sculpting more intuitive. I belive they use dual contouring.
@jackatk Жыл бұрын
This is a really cool technology you developed! I don’t think it would fit well in a Minecraft-style game, but I can see it being really useful!
@softboifloof7911 Жыл бұрын
Bro that looks really nice only thing I think it needs is optimization
@KozelPraiseGOELRO Жыл бұрын
I don't even get convinced by the blocks, I was thinking more of a face/sheet style. And to make them, is putting info in the coodinate intead of on 8 at a time with blocks. Harder but I'll try as soon as I know how to use OpenGL. 8:01 I would recommend to add a less detailed smoothing. Add a iterations that make 15° variations in each step. I don't know if you get what I am trying to say.
@dombo813 Жыл бұрын
It seems to me like the biggest challenge for these sorts of smoothing is that minecraft proved "graphics" dont actually matter all that much, people have no problem with cubes, so a game that does something like this really needs to find unique gameplay involving the use of smoothness.
@10bokaj Жыл бұрын
Blocks are very intiutive to work with and is easy to for the computer to handle. It is a great combination, but for terrain I think it falls a little short.
@benbencom Жыл бұрын
This video is making me realize how No Mans Sky works when you are editing terrain (c.f. "very hard to see what you're doing...")
@bazem Жыл бұрын
I think you should have 2 different commands to remove a block, one where you subtract the size of the cube and another where you remove the entire block immediately.
@brentknight93186 ай бұрын
Low frequency radars can detect the presence of stealth aircraft, but they cannot precisely locate them sufficiently to guide a surface to air missile.
@misterk7_- Жыл бұрын
I really like this!
@lilboiUK Жыл бұрын
Very interesting! You could improve the visuals by using vertex colors instead of textures ie. brown for wood and grey for stone. This can help avoid problems with wonky UV's. You can take it even further by assigning roughness values to specific vertices for shininess. I'd suggest when modifying the sticky cubes to use integral values for easier alignment. Great work up to this point! I'm looking forward to seeing it progress
@celdaemon Жыл бұрын
so kinda like how ASTRONEER does it?
@vampirefrog4277 Жыл бұрын
Have you taken a look at Cube 2: Sauerbraten editing? It subdivides cube sides into 8 so you can have some level of smoothness, and it also does multi level cubes within cubes, it uses an octree.
@10bokaj Жыл бұрын
No, i have not played that game. I do have another video where I show some octrees.
@clonkex Жыл бұрын
@@10bokaj I believe Sauerbraten uses a multi-direction heightmap, essentially each face of the cube stores four values (one for each vertex) describing how much the vertex should be pushed into the cube. It gives very good control over level geometry.
@isaias-1713 Жыл бұрын
Hmm i think you can get way more configuration capacity with a visible percentage of compression and also the capacity to modify corners individually, perhaps a scroll bar can help or a standarized smoothing algorithm that stops at 10-20-30-40-50% or something like that
@OctagonalSquare Жыл бұрын
Cool concept! Nice work man!
@luna010 Жыл бұрын
This is really neat. would love to see a minecraftlike survival game like this. It could add a lot of depth to resource management and building design. Eg maybe you would build a house with thinner walls to save resources but would would be more susceptible to explosions. Could also be adapted for water physics, so the total volume of water could be conserved while water flows between blocks. The ability to have multiple materials/“blocks” in a single voxel would lead to even more possibilities.
@10bokaj Жыл бұрын
water is difficult, not impossiable just very difficult
@Slash0mega Жыл бұрын
Man, wish i was able to make stuff like this. it would be cool to set it up with a item that will increase, decrease, or set the smoothness of a block.
@PixelBrushArt Жыл бұрын
Cool demo!
@crunchy7200 Жыл бұрын
cool concept, but to me it screams "collision and camera clipping issues". its kinda awesome to be able to sculpt voxel like that
@10bokaj Жыл бұрын
camera cliping is not an issue when it is a first person game, collision is just handled by unity, those are not really issues that are diffucult to solve.
@crunchy7200 Жыл бұрын
@@10bokaj oh that's cool
@planeofimmanence2157 Жыл бұрын
My idea for marching cubes is to have different levels of smoothness for different materials, for example grass and dirt and sand and gravel and the like can have the real smooth, stone could be the more chunky and building materials can or the trees can be the regular cubes so it doesn’t look broken idk if that is possible?
@rampawar Жыл бұрын
Put another row of blocks on top of the fence and set their size to smallest. So the blocks below will stick out looking more like a fence
@pleaserespond3984 Жыл бұрын
This sounds more like an implementation of dual contouring. Which is great, dual contouring, aka Surface Nets is my favourite meshing algorithm! It's much simpler and more elegant than marching cubes. Minecraft is technically dual contouring, since the voxels are at the centres of the cubes instead of at the vertices. I could see a version of this built on top of dual contouring where the user has some form of explicit control for where the voxel centre is inside the cube as well as its "strength" being very intuitive and fun to use. The real challenge here is making an intuitive UI based around cube editing and then to compute the isosurface in a way that matches player expectations. I would try something like this: First, consider the general dual contouring algorithm. You find the points along the lattice's edges where the isosurface intersects it. If we let the user directly edit that, it should result in a very easy to use system. So for each vertex, store 6 numbers which can range from 0 to 0.5, corresponding to each of the 6 edges coming out of it, which set the intersection point along that edge from the voxel's centre. As the player breaks down the block from one side, pull back the intersection points at that side, or if the player is filling the block, increase them. This does let you have 2 intersection points per edge, but I think the regular dual contouring could be modified to handle it, you basically have cases where you create two faces per edge rather than one.
@10bokaj Жыл бұрын
No it is not an iso surface
@davidd6035 Жыл бұрын
So brilliant
@hazydodo Жыл бұрын
wow thats so cool
@10bokaj Жыл бұрын
Thanks, although it needs some more work, to be useful.
@micaiahstevens8840 Жыл бұрын
This looks amazing and is very great demo. Would be interesting to see if you added a hot bar with the different presets, how that would play out to build faster and much more intuitive. Then you select the type of another way, or vica versa, I just think there is a set number to things that look good, and you tweak them like you were to be more 'dynamic'! Set some level designers and builders would come up with some COOL designs. Then can collect 10.5 stone and be able to place 10 blocks and a half. I also notice you don't reverse the effect. If you take away 10% or something and go WOOPS, like a reverse key to add that % back to get to the previous state. LIKE a command pattern or some such. I FEEL this like an upgrade to the Everquest Next system, and those type of editing games.
@Cammymoop Жыл бұрын
this is really neat
@teawacrossman-nixom7696 Жыл бұрын
You have just created a better fundament building and generation system then minecraft ✨ CONGRATULATIONS my good sir a creating the StickyCubes system 🙏🔥
@suplerb Жыл бұрын
I really love this! I can’t wait to play a game with this
@suplerb Жыл бұрын
I think having defined steps (100%, 80%, etc..) would improving structure building a ton
@10bokaj Жыл бұрын
@@suplerb that is properly true.
@Niklas9999100 Жыл бұрын
This looks very interesting, would it be okay if i tried to develop a full survival game based on this idea?
@DeadRabbitCanDance6 ай бұрын
Look very nice. Are you using a fill factor for each voxel direction? 6 values in total? Or do you somehow cleverly store data for smoothing edges?
@10bokaj6 ай бұрын
I think the awnser is fill factor. I store a single float.
@patrlim Жыл бұрын
looks cool
@redshepard53063 ай бұрын
thats really neat
@therealpeter2267 Жыл бұрын
Very nice! It's kinda similar to "surface nets". Surface nets also produces one "block" per voxel, so it's easier to see what you're editing, but you can achieve complete smoothness with it. It's also really easy to implement and it's also fast. A combination of your algorithm and surface nets could be interesting, completely smooth terrain with blocks as building (because the downside of complete smoothness is the lack of complete blockyness. I assume it would be possible to achieve both with a customized frankeinstein method (I don't want to mention dual contouring, that's really hard to implement and is very slow in comparison)).
@10bokaj Жыл бұрын
AFAIK surface nets and some implementations of dual contouring is the same. There is like 8 (or so) ways to do dual contouring and they changed names a couple of times.
@therealpeter2267 Жыл бұрын
@@10bokaj Nope, I've implemented surface nets, dual contouring is a way different fish
@fire-ballmc9741 Жыл бұрын
its interesting how he always compares it to "other games" instead of just saying minecraft.
@shinrakishitani1079 Жыл бұрын
quite clever
@pingvin9166 Жыл бұрын
It looks interesting, maybe we should make some kind of generator or world editor? I also wonder if it is possible to make the blocks change their anti-aliasing a little by themselves without a serious loss of performance?
@alaanvv11 ай бұрын
outlining the focused object would solve the problem
@AtariWow Жыл бұрын
This seems similar to what Space Engineers (game) does
@gasparliboreiro4572 Жыл бұрын
really neat
@johannes451010 ай бұрын
I like sticky cubes and also sticky rice
@BlackMesaEmployee Жыл бұрын
im more impressed by the speed of ur voxel engine! are you using unity jobs?
@10bokaj Жыл бұрын
nah, just threads. Also it is not very fast look at my odin project there you will find faster generation and better compression.
@N_NY_M7 ай бұрын
very cool
@NaughtyKlaus Жыл бұрын
Looks like a prototype version of the terrain engine No Man's Sky has, and even their game has a lot of flaws still.
@Konyad Жыл бұрын
Nice video. I think there was some kind of capenter mode for minecraft that would do something similar. Things you can improve in your furute videos: - Some very quiet background music - Sections - Change render distance of your game so it's less laggy Other than that it was very cool :)
@jay-tbl Жыл бұрын
I kinda feel like videos that arent polished tutorials but rather quick demos are fine without music of a lot of polish Video chapters would be good tho
@betahunter Жыл бұрын
Is this a fellow Danish Man I wonder? :D
@wibiz9657 Жыл бұрын
Looks like sims 3 terrain editing
@10bokaj Жыл бұрын
in what way?
@wibiz9657 Жыл бұрын
@@10bokaj Just the way the blocks can be decreased and lowered in a concave or the opposite way by using tiles. It's the same way it works in older sims games, where the terrain is on a grid. I don't know anything about this game as KZbin just recommended it to me, so I don't know the significance of it, it just reminds me of things I do know about.
@volodymyrkilchenko Жыл бұрын
seems interesting but i still prefer the minecraft style
@wraithlordkoto Жыл бұрын
This is cool as fuck!!
@jakezepeda1267 Жыл бұрын
Interesting
@Lucas72928 Жыл бұрын
How do you do collision detection with the sticky cubes mesh?
@10bokaj Жыл бұрын
I use unities normal collision system, but if you are looking for a custom implementation I would do somthing like this: kzbin.info/www/bejne/i2KskGSXj9-io6c
@Lucas72928 Жыл бұрын
@@10bokaj Thanks!
@埊 Жыл бұрын
紫禁城之太和殿:10:33
@DRAGNIL68 Жыл бұрын
verry cool
@mambe4349 Жыл бұрын
How does it work?
@10bokaj Жыл бұрын
That is not something explainable in a youtube comment, but there is a paper on it: findit.dtu.dk/en/catalog/63c898437c8c8d1c237bca77 I don't know if you can access it...
@mambe4349 Жыл бұрын
@@10bokaj Damn, I cant but thanks anyway, I could probably just deduce it, its a really interesting technique
@10bokaj Жыл бұрын
@@mambe4349 Let me says this: I use lookup tables, lots of them. It is not a good technique as it is now, maybe it could be good, but it has some issues as I pointed out.
@mambe4349 Жыл бұрын
@@10bokaj more than marching cubes? XD
@AntonioNoack Жыл бұрын
@@10bokaj You probably have the publishing rights, so I'd suggest you publish your thesis openly elsewhere, too. (or does your university deserve these rights? Did it do the work? ^^)
@julianaomi2626 Жыл бұрын
Do you have the code in a source control/github?
@10bokaj Жыл бұрын
nope
@donutbedum9837 Жыл бұрын
@@10bokaj lmfao denied
@icebluscorpion Жыл бұрын
The smoothing is retarded if you don't have precise control of it try to put that feature on the mouse wheel to get more precise control such that your can smooth and unsmooth with a clicking turn of the mouse wheel also the smoothing should be in discrete steps such that you can repeatedly set the right smoothness/angle to each cube that you want to smooth. 🤔. Then the root won't look like as if a giant took a big on on your house anymore 😂