Progress is going to be a little slower for the next month because I’m taking a break, I’m still working on this whenever I have free time but for the next month or two I’m going to be on other subjects.

This week I implemented the frustum culling to avoid rendering of parts of the world that are not visible, it test against an octree so it is really easy to determinate that large areas are not going to be render.

I also been working a little bit more on optimizing the rendering algorithm, it is better now but there is still work to do on that field.

I did a little research on how to generate a terrain using the perlin noise algorithm, this article on was really usefull on this subject, I already did a basic implementation but I have to work more on it to achieve a good result:

I’m going to start working a little on the collision part, mostly allowing to create and remove voxels with the mouse and after that I will work on the lighting system.


So this last week was a little slow for me, I couldn’t work on all the features that I wanted but I did manage to improve the greedy meshing algorithm that I was using.

It works pretty fast now even when removing multiple blocks on several chunks, one of the things I did was to change the way I was doing the merge, in the previous version I had to render both faces of each triangle because of situations like this:

When two voxels shared the same face but the face needed to look in both directions at the same time, the solution was simply to split the face in to two faces:

With this done now I can activate the culling and render each triangle only once.

I also Implemented the octrees to distribute the chunks and be able to do culling (still pending):

I hope to finish the frustum culling this week and maybe do some implementation for occlusion culling.


I’ve been busy last week trying to implement a greedy meshing algorithm based on the article by Mikola Lysenko on the 0FPS blog, It was a bit more tricky than I expected (I still have to optimize it more) but the basic theory for this is pretty straight forward:

This allows me to merge multiple blocks and hide the triangles that are not visible

So far I think it is working fine, it takes quite some time right now (about 50ms) to regenerate the chunk of 16x16x16, which would be about 4 frames in a 60fps application, I will try to reduce this number as much as I can.

Next thing on the list is trying to implement octrees to later perform culling of the chunks.