Saturday, February 25, 2012

Real men don't draw buildings

Real men -and women- don't draw buildings, they write them. Why limit yourself to one instance of a building when you could define an entire family?

It turns out writing building grammars is hard, it feels closer to programming. For procedural architecture to take off, creation tools must appeal to artists. All we have now are maddening languages and graph editors. Only a few artists have the skills to make any sense of them. I would like to find a solution for this, but I got nothing so far.

I have created a timelapse video where you can see me creating a grammar from scratch. It is for a family of simple, rustic houses like this one:


You can click on the image to see it in detail. This is a rendering of the triangles output by the grammar evaluation. This model has not been altered by hand.

Here is the video:


21 comments:

  1. I think there's some potential for a marriage between parametric and procedural modeling. Designing a house with various parameters is already being done by engineers making technical drawings. Not only can those parameters (eg width, height, number of windows) be changed to produce an infinit number of instances, but the structured nature of the drawings also provides enough information to merge it with procedural techniques for adding detail.

    ReplyDelete
    Replies
    1. Yes, the potential is huge. The challenge is how to visually edit grammars. Having some parameters is one thing, but written grammars are very powerful. They allow you to exploit recursion and abstraction, elaborate expression, without these you would end up with very homogeneous buildings.

      CityEngine has some visual editing, but it is somewhat limited compared to what can be achieved with written grammars.

      I think the way to go is to find a small subset of grammar operations that can produce complex results and also can be expressed and edited visually.

      Delete
  2. Impressive. how many hours it took you to write it?

    This show power of procedural architecture, you need only one artist (with programing skills :D) to create whole city. with it, you need only cerate style not every instance of it (aka one building in that style).

    ReplyDelete
    Replies
    1. It took less than one hour, but I knew where to go. I also cheated and pasted a couple of small rules at the end for the shingles.

      Delete
  3. CGA Shape seems highly interesing and there are a nice bunch of detailed publications, http://en.wikipedia.org/wiki/CityEngine (publications at the bottom)

    ReplyDelete
    Replies
    1. I have borrowed heavily from CityEngine. Their papers helped me a lot, even when I chose a different approach.

      Delete
  4. Have you seen Shamus Young's Pixel city?

    http://www.youtube.com/watch?v=-d2-PtK4F6Y

    ReplyDelete
    Replies
    1. Yes, I saw it log time ago. One of the best demos I have ever seen.

      Delete
  5. That looks remarkably powerful! But I can see what you're saying about being intractable to an artist - it is really verbose. Are you thinking of simplifying the grammer into a set of functions with an API? Something like this:

    House SimpleHouse( Wall1Definition, Wall2Def...);
    Wall Wall1Definition(HasDoor = True, Windows = 1,...);...

    Maybe?

    ReplyDelete
    Replies
    1. Well some of the grammar features are redundant. They are there just to make the programming easier. If writing programs is not required, it is possible to keep a small core of operations that are still able to do everything you need. I have already identified this core, what I'm missing is a way to input these rules in a 3D viewer with just a mouse. Ideally no keyboard input should be required, even for complex grammars like a castle. That is the challenge I see.

      Delete
    2. Oh, cool. I get what you mean. Also curious, what are you using to do the parsing of the grammar rules?

      Delete
    3. I'm using the GOLD parser: http://www.goldparser.org

      Delete
  6. Hi, can I ask you which API do you use? I don't know, if it is right question... I mean win32 api or mfc etc...

    ReplyDelete
    Replies
    1. The UI uses .NET components. I got some free third party components for the panel docking and the syntax-highlighted editor. Previews are done with OpenGL. There are bits of win32 everywhere.

      Delete
  7. how will this building look when you import it to your landscape? it will be integrated with rest of geometry or will be independent model?

    ReplyDelete
    Replies
    1. Buildings are voxelized and blended with trees and terrain. It is a unique geometry mesh for everything. I have posted about this in the past, you should be able to find some screenshots as well.

      Delete
    2. and how it looks after mesh optimization? house have some small detail, hat can be lost after that. it would be great if you post some screen shots of it.

      Delete
  8. It looks pretty much the same. Terrain and trees have more detail than architecture, houses help keeping polygon counts low.

    ReplyDelete
  9. I would imagine that different words could be pre-rendered in a sort of pallet, and that they could be painted together by drag and drop.

    Some of the words could have more interactive elements. A wall, for example, could be drawn and windows painted on it.

    The more advanced artits would mix the paints and define how the various parameters can be tweaked.

    The key to doing this would be to develop a way to say "windows CAN go into walls" while mixing the paint.

    ReplyDelete
  10. This is a really interesting aproach, one thing that bothers me is : How high is the polygon count of those models? the way I see it, each of those bricks is a mesh, with a few polygons. Are you performing some sort of simplication algorithm? Any tips on that?

    ReplyDelete