Sunday, 9 October 2011

Terracraft WIP 1

Since Notch has yet to release the mod API I can't start on Sapphire Island yet, so in the meantime I've decided to continue on my terrain generation algorithm. So far, I've implemented the following:
  • Continents
  • Mountains, hills and plateaus
  • Rock strata
  • Regional temperature and height-based temperature lapse
  • Regional rainfall
  • Biome identification
Still to do:
  • Volcanoes
  • Orographic rainfall
  • Topsoil
  • Biome-based terrain features (canyons, mesas, oases, etc.)
  • Vegetation and other decoration such as boulders
  • Rivers
  • Caves
  • Ore distribution
  • Man-made structures (villages, ruins, etc.)
Below are two screenshots of  the current state. As you can see the map is quite a bit higher than a normal Minecraft map: I'm using a height of 512 instead of the default 128 to allow for proper mountains and generally get a more realistic scale; as in real life, a decent-sized tree for example will easily reach 20-30 meters. Sequoias can grow up to 100 m, which would take up almost the entire height of a standard Minecraft map. With the increase in height I can still have a mountain towering over a sequioa. The colors in the screenshots represent the biomes. Currently they have very clearly demarcated borders because I set specific cut-off points, but they're actually gradients so once I put in topsoil and vegetation they will smoothly blend into eachother. Below the terrain you can see cross-sections showing the rock strata. There are five types of rock (excluding the bedrock in the bottom layer of the map): sandstone, limestone, shale, granite and basalt. Each will have a different ore distribution. Diamond, for example will only appear in basalt. As usual, click for a larger view.

Friday, 16 September 2011

mc2obj render: SMP revisited

One more rendering before I resume development of mc2obj. A while ago I posted a few renderings using mcobj. The render below uses mc2obj, and is taken from roughly the same viewpoint as the first mcobj rendering for the purposes of comparison. As usual, click for the full view.

Wednesday, 14 September 2011

mc2obj render: Mountainview sunrise

I figured it was about time for me to stop working on mc2obj for a moment and actually make a render with it, so after creating a few 1.8-prerelease 2 worlds this one seemed interesting enough. I call it 'Mountainview sunrise". I must say 1.8 generates some interesting landscapes, though I do look forward to the day that I'm going to start on my own terrain generation alogrithm, because there are some aspects that I think could be significatnly improved. Anyway, as usual click the image for the full-size version.

Monday, 5 September 2011

mc2obj alpha release

Today I finally have a version of my Minecraft exporter that can be used by the general public. Note that it is still an alpha release, so there are some known (and probably some unknown) bugs. You can get the release at Github. There you'll also find the readme with more details on how the program works.

Wednesday, 24 August 2011

Minecraft .obj exporter part 2

My Minecraft .obj exporter can now export more than one chunk at a time. It took quite a bit longer than I hoped since the increased scale really brought to light the fact that I hadn't really paid a lot of attention to performance yet: things like parsing the regions lazily and building up the output as one giant string initially caused memory use to skyrocket. So I've spent the past few days learning a lot about Haskell performance, and it now performs much better. Memory isn't O(1) since I have to keep chunks in memory until all their neighbours have been processed, but since 3D Studio needs about 7-10 times as much memory to import the scene as I do to generate it it's of no practical concern anymore: if you run out of memory exporting a scene there's no way you would've been able to render it.

The main things still on the to-do list are:
  • Implementing the remaining materials
  • Implementing non-block geometry
  • Adding command line arguments so you can actually use the program with recompiling it
I've uploaded the project to GitHub:

Below are two current WIP shots of an area of 32x32 chunks:

Sunday, 21 August 2011

Minecraft .obj exporter part 1

For the renderings that have appeared on this blog so far I've been using mcobj, which is the de facto standard for exporting Minecraft worlds to 3D packages. Unfortunately, it has two main drawbacks:
  • It doesn't auto-apply any textures or generate any texture coordinates
  • It only outputs blocks, so anything with a different geometry (fences, railroads, torches, etc.) will show up as a block instead of using the correct geometry
Since it was last updated on May 15th, I don't foresee these issues being resolved any time soon. I therefore decided to take matters into my own hand and since I had no particular desire to learn Go I started writing a Haskell version from scratch. A couple minutes ago I managed to export my first full chunck.

There's still plenty of stuff to do (currently it exports each face of each block even if it has a neighbour on that side, there's no geometry other than blocks yet and only a subset of materials are implemented yet), but it's a start.

Saturday, 20 August 2011

Concept art - Coral Harbor

Coral Harbor is the port of Sapphire Island. As you can probably tell it is based on the city of Venice, with waterways being the main mode of transport. The architecture is based on Greek fishing villages. The river that runs through the center of town originates at Amber Falls.