What you have here is really cool I usually spend hours upon hours just exploring the game climbing the tallest mountains. I really love what you did with the LODS makes the world more fun to explore. Right now i do realize your working on the more technical aspect but I'm just here to say this game has so much fucking potential keep up what your doing
The problem at 2:24 is because your bounding box for a block is *identical* to what you assume the block obscures other blocks with. The bounding box is the *maximum* extent that a block can have, while the volume that a block obscures other blocks with is the *minimum* volume that a block needs to occupy (in a less obvious sense of "minimum"). For "opaque/solid" blocks, this creates quite strict conditions for the shapes of blocks (you'd need the voxels to cover all edges). And of course, this is no problem for blocks that don't obscure other blocks at all, like transparent blocks (like leaves) or non-full blocks (like fences). I realized the "obscuring" part of the problem when I played Minecraft with custom block models and looked at a diagonal wall that someone built with logs. Custom block model logs are traditionally cylinders who touch the faces of their collison box, but that leaves gaps where you can see past the log. In order to be able to build diagonal walls, the logs would need to touch the edges of their collision box. (Seen from the top the logs would need to be a circle touching the corners of a square, not a circle touching the edges of a square.) A solution that I would -use- try is to extend the bounding box. The blocking volume obviously needs to stop at _at least_ the seam between two blocks, otherwise you'd have gaps between them, so you can't shrink it. But the bounding box can (probably?) be expanded. And then you'd fill the whole blocking volume and have details stick out of it instead of recessing into it. (Or in reality, you'd need to fill out only the wire frame, and the 14x14 pixels in the middle of each face would still be free to either stick out or recess in. Think of "Chiseled Stone Bricks"; the chiseled squares can be features that are carved into the full block.) The only problem with that is that I think you determine which block obscures which by their bounding boxes, and not by the individual voxel. And bounding boxes that are closer to you would extend to _behind_ where bounding boxes of the blocks behind start. This is especially "bad" if you make a glass block which extends outside it's blocking volume, in order to cheekily get the rear face hidden when the glass is placed in front of a solid block (say quartz). _All_ glass block voxels would render as if they are in front of the quartz block. At least as long as the game decides that the glass block is in front of the quartz block; when that changes you can get a z-fighting like effect where the glass voxels jump from being rendered to being obscured.
Hello again, you seem to make quite a lot of long comments under my videos :D I have actually thought about this, but there seem to be lots of edge cases with this approach: Overlaps with other model(→z-fighting) and occlusion testing(→meshing gets more expensive) being the biggest problems here. (And sadly there is still a general performance problems with all types of detailed voxel models currently, and more/larger models wouldn't really help here) I would really like to have this though. So at some point in the future I'll probably invest the time to make it work. There is a bunch of cases where this would be really cool: Leaves could have a bunch of extra detail without needing to draw interior faces. Bricks and similar could have the individual bricks stick out by one voxel, which would look really cool. Diagonal fence connections would be possible (currently this would only be possible with a dent right at the connected edge) More log sizes would be interesting. By the way you don't need to make the logs bigger to support diagonal log walls. Instead you could make them behave like diagonal fences, adding a connecting log between the blocks.
I only found your channel recently, but I have fallen in love with your devlog videos. Before I clicked on this, I knew it was gonna be a great video! Keep up the good work and thanks for being there!
I got this video reccomended to me yesterday, and just finished watching through the rest of the devlogs. This is a great series, and a very interesting project! I'll have to try it out sometime, but in the meantime I'll keep an eye out for any future updates! 👍
For the displacement mapping, could you not just have it only be active when its touching air, or disabled when touching a block? Then you could also disable it at further distances to help with performance? Im not a coder so I dont know how difficult this all is, but the displacement mapping could be a really good way of distinguishing from minecraft. Also it would be cool if those crystals on the stone could physically fall off and then be picked up, just a thought!
The grass texture being upside down lol
Yeah, I Have no idea how that happened :/
I probably flipped my texture coordinates somewhere in the process.
@@quantumdeveloper2733 maybe it was flipped with stb image after the rewrite
@@maksymiliank5135 Yeah, I figured that out already. Thanks for trying to help me anyways.
What you have here is really cool I usually spend hours upon hours just exploring the game climbing the tallest mountains. I really love what you did with the LODS makes the world more fun to explore. Right now i do realize your working on the more technical aspect but I'm just here to say this game has so much fucking potential keep up what your doing
The problem at 2:24 is because your bounding box for a block is *identical* to what you assume the block obscures other blocks with.
The bounding box is the *maximum* extent that a block can have, while the volume that a block obscures other blocks with is the *minimum* volume that a block needs to occupy (in a less obvious sense of "minimum"). For "opaque/solid" blocks, this creates quite strict conditions for the shapes of blocks (you'd need the voxels to cover all edges).
And of course, this is no problem for blocks that don't obscure other blocks at all, like transparent blocks (like leaves) or non-full blocks (like fences).
I realized the "obscuring" part of the problem when I played Minecraft with custom block models and looked at a diagonal wall that someone built with logs. Custom block model logs are traditionally cylinders who touch the faces of their collison box, but that leaves gaps where you can see past the log. In order to be able to build diagonal walls, the logs would need to touch the edges of their collision box. (Seen from the top the logs would need to be a circle touching the corners of a square, not a circle touching the edges of a square.)
A solution that I would -use- try is to extend the bounding box. The blocking volume obviously needs to stop at _at least_ the seam between two blocks, otherwise you'd have gaps between them, so you can't shrink it. But the bounding box can (probably?) be expanded.
And then you'd fill the whole blocking volume and have details stick out of it instead of recessing into it. (Or in reality, you'd need to fill out only the wire frame, and the 14x14 pixels in the middle of each face would still be free to either stick out or recess in. Think of "Chiseled Stone Bricks"; the chiseled squares can be features that are carved into the full block.)
The only problem with that is that I think you determine which block obscures which by their bounding boxes, and not by the individual voxel. And bounding boxes that are closer to you would extend to _behind_ where bounding boxes of the blocks behind start.
This is especially "bad" if you make a glass block which extends outside it's blocking volume, in order to cheekily get the rear face hidden when the glass is placed in front of a solid block (say quartz). _All_ glass block voxels would render as if they are in front of the quartz block.
At least as long as the game decides that the glass block is in front of the quartz block; when that changes you can get a z-fighting like effect where the glass voxels jump from being rendered to being obscured.
Hello again, you seem to make quite a lot of long comments under my videos :D
I have actually thought about this, but there seem to be lots of edge cases with this approach: Overlaps with other model(→z-fighting) and occlusion testing(→meshing gets more expensive) being the biggest problems here. (And sadly there is still a general performance problems with all types of detailed voxel models currently, and more/larger models wouldn't really help here)
I would really like to have this though. So at some point in the future I'll probably invest the time to make it work.
There is a bunch of cases where this would be really cool:
Leaves could have a bunch of extra detail without needing to draw interior faces.
Bricks and similar could have the individual bricks stick out by one voxel, which would look really cool.
Diagonal fence connections would be possible (currently this would only be possible with a dent right at the connected edge)
More log sizes would be interesting. By the way you don't need to make the logs bigger to support diagonal log walls. Instead you could make them behave like diagonal fences, adding a connecting log between the blocks.
Very interesting, i have yet to even play the game, but i love checking up every now and then to see the progress
It's not much of a game yet anyways to be honest.
I only found your channel recently, but I have fallen in love with your devlog videos. Before I clicked on this, I knew it was gonna be a great video! Keep up the good work and thanks for being there!
I got this video reccomended to me yesterday, and just finished watching through the rest of the devlogs.
This is a great series, and a very interesting project! I'll have to try it out sometime, but in the meantime I'll keep an eye out for any future updates! 👍
You sound so happy and the music is amazing! I will be watching all of this. Good luck!
Great as always :D
Awesome :)
For the displacement mapping, could you not just have it only be active when its touching air, or disabled when touching a block? Then you could also disable it at further distances to help with performance? Im not a coder so I dont know how difficult this all is, but the displacement mapping could be a really good way of distinguishing from minecraft.
Also it would be cool if those crystals on the stone could physically fall off and then be picked up, just a thought!
It's not as easy as you think it is.
Hello fellow German :)