The Minecraft Overviewer

a high-resolution Minecraft world renderer with a LeafletJS interface


Mapping Azeroth

WoW Map

RamsesA's Crafting Azeroth project completely recreates the World of Warcraft in Minecraft using an elaborate series of custom tools and old-fashioned manual touch-ups. For the last month or so, the Overviewer team has been working with him to render high-resolution maps of these worlds.

The two largest continents, Eastern Kingdoms and Kalimdor, are complete and are ready to view. Other continents may also be made available as they are rendered.

The process of creating these worlds to begin with is difficult and extremely interesting, and you can learn about it in this Minecraft Forum thread. This blog post, though, will focus specifically on what we had to do to create this map.

A Tall Order

The first hurdle to overcome was the world height. Normal Minecraft worlds are 256 blocks high, but Kalimdor is 1408 blocks high. This means that Kalimdor is 5.5 times taller than normal Minecraft worlds, and 11 times taller than old Minecraft worlds (before the Anvil map format). Since normal Minecraft clients can't handle worlds this tall, RamsesA split the world up into 7 normal-height overlapping world layers, and used a Bukkit plugin to automatically teleport between the layers for a nearly seamless experience. This is great for exploring the map, but Overviewer expects all its map data in a single world. So, the first step was to turn these 7 layers back into a single mega-world with all 1408 blocks of height. To do this, I used my own libredstone with python bindings.

Once all the world layers were merged, it was possible to load up the world in Overviewer. However, Overviewer still expected the world to be 256 blocks high, so it only rendered a tiny part of the world. Back after the Anvil change, when worlds doubled in height, brownan had worked out the changes needed to the render code. This change was so similar it was mostly a matter of changing a few constants. Our recent rewrite ensured that very few parts of Overviewer code actually depend on world height, and by the end of this process, it had been reduced to two source lines.

Making it Pretty

So now we were rendering, and boy was it something else. These worlds were huge and beautiful. We worked with RamsesA to come up with a combination of render primitives to best show off his work. Since there were a lot of forests with very large trees, a lot of the ground was too dark with the normal Overviewer lighting, so we settled on smooth lighting at 65% strength.

There were a few details left to work out about the rendering, though. RamsesA's conversion code placed water blocks in ways that Minecraft never does, causing a few minor errors in the render. Fixing these was just a few changes to the C source, and an since Overviewer is an incremental renderer, it was easy to just re-render the parts of the map that needed it. Having a render of the entire world also helped to find minor errors in the world itself, which were quickly corrected and fixed with more incremental renders. All told, it took about 2 - 3 weeks for all these renders to finish, running on the beefy 4-core machine hosting overviewer.org (graciously hosted by nexcess.net).

Final Presentation

Now that the bulk of the rendering was done, it was time for the finishing touches. Eminence and pironic assisted RamsesA in placing markers on the map, which showed location info and photos when clicked. This was mostly a matter of using Overviewer's built in POI code, with a few minor tweaks for using it to display so much information. A lot of the Overviewer team also helped with placing the markers and taking photos in-game to go along with them. Finally, Eminence made a few changes to the map controls to simplify the map interface, and a bunch of smaller ones to make the entire experience feel better.

One of the goals of the rewrite was to make large changes like this easy, and I think the success of this project is a sign that we succeeded. Now that we're done, the improvements and changes made for this project will trickle back into the official Overviewer source as soon as we clean them up and make them configurable. As a bonus, RamsesA found a wonderful optimization in our code that should speed up render times by as much as 15%.

All together, this was a massive and fun project for us. It was great working with RamsesA to stretch the limits of what Overviewer can do, and we hope you like the result.

(Reddit thread)

(permalink)

State of the Overviewer

For the last few months, Overviewer development has slowed. Fear not, the project is not dead! The semester is coming to a close and us core devs will hopefully re-acquire the necessary free time and motivation to handle some of the larger, outstanding, and much-requested features the community has been asking for.

Features like:

  • Easy addition of custom/mod blocks such as IC2, Redpower, etc.
  • As a superset of the above bullet, a plugin-type system for Overviewer to easily add functionality
  • A re-design of some of the config options that I personally think are confusing (like how --check-tiles works)
  • Better handling of maps edited with external tools
  • More performance improvements
  • A re-design of the docs to make it more clear and easier to find relevant information
  • Probably more I'm forgetting

I have high hopes that development will pick back up in the next few weeks. We've been keeping up with smaller bug-fixes and features, but these larger features require larger blocks of time.

Incidentally, if anyone out there has any Python experience, or would like to help e.g. with documentation, please see us on our IRC channel (#overviewer on Freenode). The Overviewer is a community-run project and needs volunteers to help keep things moving. That means you could help drive development while us regulars are too busy with school/work/vacation/whatever!

(permalink)

Overviewer History

derchris in #overviewer has made for us an updated visualization of the Overviewer commit history. Check it out!

What's interesting is you can pretty clearly see when I left around 0:30, or November 2010, and then when I return around 2:00, or October 2011.

Thanks derchris for the video! Thanks everyone for your contributions!

(permalink)

Overviewer 0.9 released!

For an intro to Overviewer in general, see the front page of our documentation site.

Support for Minecraft 1.2 worlds is now merged into the "master" branch of our repository!

Those of you who have repositories with "anvil" or "rewrite" checked out will need to switch to the master branch (git checkout master).

Those of you who have the old "master" branch checked out will need to see This Post to upgrade to the new version. Config files are incompatible with this upgrade, so this is important!

Also to note if you're upgrading from 0.4 (the old master branch): remember that due to changes made to the format you WILL need to re-render your maps from scratch. Trying to update existing maps will NOT work. Also due to major changes to the web assets, you should not simply copy over custom web assets to the new version. In particular, custom overviewerConfig.js files can cause strange problems.

The new version has been arbitrarily named 0.9. Windows builds are now available on our downloads page.

As always, stop in on IRC with any questions or just to say hi!

This is still in beta because there are a few features yet missing, but since Minecraft 1.2 is released, we felt that it was more important to have the master branch compatible with the current Minecraft. Here are the features yet to be implemented:

  • Signs, Spawn markers, and other Points of Interest
  • Ordering of renders and worlds in the javascript interface Edit: Done! Mar 6 2012
  • Overlays

(permalink)

Anvil Support

Edit: The "anvil" branch is now merged into master as version 0.9. The note about using anvil is still relevant, but there no longer exists an "anvil" branch. Links to the docs updated. -brownan

The Overviewer now has initial support for the new Anvil map format (used in Minecraft 1.2)! You can find this version in the anvil branch on GitHub. If you need a Windows build, feel free to ask us in our IRC channel.

(Edit: we build the windows builds on-demand. Right now things are developing rapidly and the current version may be unstable, so that's why we're not building them automatically. Once things stabilize we'll start posting the new builds on to the github downloads page. -brownan)

Using the Anvil Branch

The Anvil branch is based on our recent code rewrite, which means that it has a different configuration format and command line options. Please see our blog post or the documentation for more details. Changes made during the rewrite made it much easier to upgrade the Overviewer to Anvil; making these same changes to the old code would be much harder, so we are not planning to update the old code to handle Anvil.

Due to the large changes made to support Anvil, you will need to render your maps from scratch. Trying to update existing maps will not work. Also, due to major changes to the web assets during the rewrite, you should not simply copy over custom web assets to the new version. In particular, custom overviewerConfig.js files can cause strange problems.

A Note about Biomes

In addition to the much taller worlds possible with Anvil, the new map format now stores biome information with the chunks. This means that you no longer have to run the Biome Extractor in order to get biome colors on your maps. Biome colors are working right now in the Anvil branch; go check it out!

(permalink)