Warning: mysql_connect() [function.mysql-connect]: Too many connections in /var/www/cal/iamcal.com/include/comments.php on line 6
Lego Carcassonne


Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /var/www/cal/iamcal.com/include/comments.php on line 238

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/cal/iamcal.com/include/comments.php on line 238

Lego Carcassonne

By Cal Henderson, March 6th 2011.

After seeing the Lego Catan doing the rounds a couple of weeks ago, I thought I'd like to have a go at something similar. I've been playing a lot of Carcassonne on the iPhone recently (Hit me up for a game, I'm really bad: cal at iamcal.com) so that was the natural choice. The tiles are square, so that immediately made it much simpler.

I started out by downloading SR 3D Builder. I had played around with the LDraw tools a few years ago and they were pretty difficult to do anything useful with. While SR 3D is hardly intuitive, after a couple of hours of struggling with the sparse ESL documentation, I was able to start building. Since the road tiles have a centered road, I wanted an odd sized tile. I went with 9x9, since that gives me a good 4x4 area to play with for each corner. I created a black tile base to start with.

I wanted to make a playable set, where the pieces interlocked with each other. Since there are 3 unique sides in the game (field, road and city), I went with 3 different interlocks which would mean that only like-sides can be joined together. Since each tile is 9 units on a side and I can't use the center square (because it has to lie flat against its opposing tile) or the corner squares (they get tricky because they are shared by 2 edges), I had two groups of 3 squares to play with. Each of those 3 can be a peg or a hole, but the 2nd set of three needs to be a mirror of the first so it'll interlock. This gives 8 different possible combinations (or 27 if you allow leaving squares flat too), which is more than enough. I picked 3 simple patterns and built them onto the base plate in brown.

Once I'd created the edges, it was a simple matter of cloning the right edge pieces onto the base to construct each tile. The content of the tile then sits on top, using green for the fields, white for roads and tan/red for cities and cloisters.

By far the most time went into rendering the designed images. Turning the L3B designs (which are a simple text format that you can easily edit by hand) into pretty images can be done using POV-Ray, an open-source ray tracer. POV-Ray also uses a simple text language for input, known as POV files. To turn L3B files into POV files, you need L3P and L3PAO. Luckily, SR 3D installs the L3Draw toolkit, which includes both of these tools (and a bunch more), probably in C:\LDraw\.

L3PAO creates POV files, using the LDraw block data files. It can also use LGEO, another block data library which contains better block data for rendering. The LDraw tools already have LGEO, but I used the latest version for better results. Once you've generated the POV files, you can run a quick test render - it won't look great, but you can see your model.

I followed an old tutorial which covers importing a new color system and setting up better lighting.

For much improved radiosity lighting, you'll want to use MegaPOV. The latest version of MegaPOV (1.2.1) will not work with the latest version of POV-Ray (3.6.2), Once I downgraded to POV-Ray 3.6.1, it all worked fine.

I was unable to find the HDR lightprobes mentioned in the tutorial, but I located these alternatives. You need to drop the .hdr files into your POV-Ray/include folder for them to work. I couldn't get good results using them, but I'd love to hear tips.

Using a white sky sphere and a circular area light I was able to get some pretty good results, but there were a large number of specular defects (white and black single pixels) at the gaps between bricks. Anti aliasing fixes this, so rendering at twice the needed resolution and then down-sampling using a bicubic filter (Photoshop or PaintShopPro will do this) works great.

If you find the brick colors too shiny, you can manually change the color values. Black is color 0, so search in koyancolours.inc for the Color0 block and you'll see it points to lg_color_N06.inc. This file contains the texture definition, as described here. Play around with the textures until you get the look you want.

The source files for my tiles are on GitHub if you'd like to play with them or build on them. I have a few ideas for the meeples (the little dudes used as game pieces in Carcassonne) and for some of the game expansions. Using Lego Design-by-me, I should be able to order the full game at some point.

Update, March 6th, 4pm PST: I created a single tile in Lego's Digital Designer. The source file is available in the GitHub repo. The crossroads tile is priced at around $25, which would put the full 72-tiles game at around $2000 (the city tiles use a few more piece than the road ones). Ouch! Any ideas how you could build the set cheaper?

Update, March 7th: Based on a design by FredWallace in the comments, I've put together a smaller, simpler set of 7x7 tiles. They lack the interconnects, but they have an interesting layered look:

This set should be a lot cheaper to make. I also used the tan color (LDraw color 19), rather than dark tan in the original set. Not only does it look better, but these pieces also exist!

This scale makes it quite easy to make a nice little shield motif too. Might be a bit small to use minifigs as meeple though.


I love lego, board games and computers, but there's a billion things I don't know. If you spot any glaring mistakes or omissions, leave a comment or drop me an email and teach me: cal [at] iamcal.com

If anyone can figure out how to use groups in SR 3D, please let me know. I'm considering writing a simple tutorial on using it in general, since it was such a pain to get up and running. Let me know if that interests you.

The source code for the models can be found here on GitHub.

Copyright © 2011 Cal Henderson.

The text of this article is all rights reserved. No part of these publications shall be reproduced, stored in a retrieval system, or transmitted by any means - electronic, mechanical, photocopying, recording or otherwise - without written permission from the publisher, except for the inclusion of brief quotations in a review or academic work.

All source code in this article is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. That means you can copy it and use it (even commerically), but you can't sell it and you must use attribution.