How to make a Voxel Mesh Chunk
Geometry of one Voxel
first we need the Basic coordinates of one Voxel:
Voxel Structure
5-------6
/| /|
/ | / |
4-------7 | y
| 1----|--2 ^ z
| / | / | /
|/ |/ |/
0-------3 o----> x
assuming we have a unit cube we can define the geometry as follows:
vertices = [
[0,0,0],
[0,0,1],
[1,0,1],
[1,0,0],
[0,1,0],
[0,1,1],
[1,1,1],
[1,1,0]
]
tris = [
# bottom
0,1,2,
2,3,0,
# top
6,5,4,
4,7,6,
# front
7,4,0,
0,3,7,
# back
1,5,6,
6,2,1,
# right
6,7,3,
3,2,6,
# left
0,4,5,
5,1,0
]
General Idea:
- represent terrain by simple data stream, where 0 decodes an empty Block.
-
at first generation
foreach value x in datastream: if x == 0: for each neihbor n: # build mesh for adjacent plane and add it to chunk mesh
- result: a mesh containing all planes that are possible visible
- possible optimization: combine adjacent planes with same face normal to reduce amount of vertices
- we assume that in future only single blocks are changing, so we can just update a chunk’s mesh with low cost
- result: a mesh containing all planes that are possible visible