Currently I’m working on ambient occlusion. I finally fixed a long standing bug involving color arrays. In the end it was something really stupid. Some new screenshots soon!
-
Recent Posts
Recent Comments
Archives
Categories
Meta
Currently I’m working on ambient occlusion. I finally fixed a long standing bug involving color arrays. In the end it was something really stupid. Some new screenshots soon!
To generate the terrains of Oemfoeland, I use Simplex noise. A noise function gives always the same result for a given set of coordinates. You can do a lot of interesting things with this noise. With some tweaking on the numbers, you get landscapes like these:


These landscapes are very promising, I lost some time myself exploring this endless world. It’s very addicting! It’s an infinite sea with islands, coasts, bays, grasslands and mountains. Now it’s time to add some real content and gameplay. The next big thing on my list is physics. Now you just fly through the world without any collision detection or gravity.
I secretly submitted the demo Voxeland (a non-interactive version of Oemfoeland) as a PC demo competition entry with some nice music at Revision 2011. It currently only works on Windows, sorry. (Mac and Linux availability are for my next showcase.)
You can press G anytime to stop the camera. You can navigate the infinite world yourself by using the keys W, S, A, D, Space and C. You can also place and destroy blocks by clicking your right and left mouse buttons.
Have fun!
It has been a long time since I last updated this blog. This is because I didn’t make any progress for some months. Some problems that were difficult to solve and transparency bugs stole a great deal of my motivation.
Transparency is a real bitch when you are developing a 3D scene. When looking through some transparent blocks, half of my chunks were not rendered at all! This week, a colleague pointed out that you have to render all your transparent objects at the end. You also have to sort them from far to near and render them in this order. I tried the first remedy and yes, it worked! Sorting, on the other hand is more difficult and only remedies the fact that you cannot see some other transparent objects. I will solve this issue later.

Another motivation killer was the fact that I didn’t like the performance of my virtual world. I have some separate thread that loads chunks into a VBO in a queued fashion but it gives me huge performance hiccups. Another performance eater was the visibility optimizer. What it does is this: it removes all faces that are facing a solid object, as you cannot see them anyway. Every time I loaded a chunk from disk, I recalculated those extra data. To solve this performance hit, I just save an extra file containing the visible faces with each chunk. The result was very noticeable, but I still have the VBO construction spikes.
By the way, I still didn’t had time for creating my own textures. I think that I first want the engine to be stable enough before I can begin to think about fancy stuff like this.

This weekend I’ve optimized the chunk management code and added the ability to save your world. I’m still using the Painterly textures because I haven’t had the time to design my own textures.
A fun way to test the saving feature is creating something nice. When you exit Oemfoeland and fire it up again, your world is waiting for you in the state you left it. As you can see in the screenshot, it works!
Things that are on my list for the coming weeks:
I’m struggling with the implementation of my dynamic world loading mechanism. I need to leave the loading of new chunks to another thread. But that other thread is not playing nice… I am going to sleep and think about it
[Edit: it was a small stupid thing I looked over... it works great now!]

One of the advantages of Minecraft executing my idea is that I have some texture packs to experiment with. I will draw my own textures soon, but these are from the Painterly Pack.
Last week, I completely rewrote my rendering engine. I divided my world into chunks and when the player is not nearby a certain chunk, it will be compressed and stored into a vertex array or a VBO, if the GPU supports it. I got a very good performance on my MacBook Pro, with no hiccups at all. But before I make bold promises, I will generate some more interesting worlds to see if that performance still holds.
When this becomes playable, I will put a java applet on this site so you can try it yourself. Stay tuned!
I just tried to implement a technique called Ambient Occlusion out of curiosity. I think the result looks pretty good for just 20 lines of extra code. The technique is simple: I just modify some vertex colors of a floor tile when there is a wall next to it.

The original MyWorld idea from 2006 assumed a big world where a whole bunch of players can build amazing structures together. It was meant as an experiment to see what would come out of it. This experiment has been successfully executed by Minecraft Classic, and the results are amazing. However, MyWorld was not only about building, but also a virtual economy and society. For example, automatically growing cities like in Transport Tycoon and the ability to start your own business, in combination with player-created quests.
I am very happy that Minecraft hasn’t executed all of my ideas, although the block world was very painful to see at first. Random cube-world clones keep popping up since its success. I can imagine that many people want to copy the concept. I am not simply creating a Minecraft clone, but executing my own idea in it’s own right. After all, my idea was first, long before Infiniminer. And I have proof of it.
Oemfoeland will be a completely different game, and I hope it will be at least as fun as Minecraft. Some more concepts will be explained later, like my killing system. I wonder if that turns out to be fun or not…
By the way, I am implementing this all in Java/lwjgl, just like Notch. Letting it work on almost all browsers and platforms is just brilliant.

We’re getting somewhere. Currently you can build and destroy blocks. I really need to optimize the rendering code and divide the world into chunks. Do you recognise the handcrafted Oemfoe?