
happy new year to you, my beloved reader :)
I’ve been extra busy lately with a soon-to-be-offically-released website. it was a lot of stress but the result is pretty satisfactory to all extents. Funnily enough, my last project for the agency (RAPP) was also the most exciting.
so, since last sunday I’ve been recovering and taking it easy / monitoring gently the end of the project. this gave me the occasion to try out structure synth along with sunflow.
unlike most 3D modeling softwares, structure synth allows one to create rules that will generate a 3D mesh. it’s pretty much like the L-system thing (def.) on which I had been working a while ago ( article[FR] ). the principle is the same ; you give a bunch of rules that are executed recursively. it’s just that it’s in 3D and it’s rendered with a kick ass engine :D
it looks like this ( check my brand new flickr account for bigger pictures ):






Now the least I can say is that structure synth’s language is extremely limited ; you can manipulate only the position/rotation/scale (PRS) and eventually a transformation matrix + a couple of properties.
but guess what ; it’s enough! :)
for instance the following snippet:
/* @author nicolas barradeau */ // Camera settings. Place these before first rule call. set translation [0 0 -20] set rotation [ 0.151268 0.0834454 0.985012 0.267793 0.955749 -0.122094 -0.95161 0.282253 0.122229 ] set pivot [0 4 0] set scale 1.1575 set background #FFFFFF set maxobjects 5400 //variables #define _col0 #F00 #define _col1 #FF0 #define _inc 0.1 //ground { s 100 0.01 100 y -10 color #FFF }box //seed = 14 40 * { y 0.1 ry 9 rz -2 s 1.01 1.01 1.01 color _col0 }column rule column w 0.5 { { y 0.5 ry 18 blend _col1 _inc }box } rule column w 0.2 { { x -0.25 z -0.25 y 0.5 s 0.8 blend _col1 _inc } box } rule column w 0.2 { 20 * { rx 1 ry 1.5 rz 3 s 0.75 0.95 1.10 blend _col1 _inc }box }
will give this alien looking shape

note that there is a PRNG that generates a seed. it’s auto-incremental by default but it can be switched off allowing you to keep track of the variations of a given set of rules.
the ‘w’ param after the rule’s name is the weight of the rule namely the number of chances it has to be picked up each time the rule is called.
here’s another example with a more complex set of rules:
/* @author nicolas barradeau */ // Camera settings. Place these before first rule call. set translation [0 0 -20] set rotation [ 0.22177 -0.798972 0.559059 -0.773209 0.205259 0.600059 -0.594185 -0.565345 -0.572249 ] set pivot [0 0 0] set scale 0.65 set background #FFF //cube's size #define _width 5 #define _height 5 #define _depth 5 //colors/iterations for the corners #define iterations 18 #define _col0 #172A29 #define _col1 #097B69 rule CUBE { { x -_width y _height z -_depth }C000 { x _width y _height z -_depth } C001 { x _width y -_height z -_depth } C011 { x -_width y -_height z -_depth } C010 { x -_width y _height z _depth }C100 { x _width y _height z _depth } C101 { x _width y -_height z _depth } C111 { x -_width y -_height z _depth } C110 } CUBE //8 CORNERS rule C000{ CORNER } rule C001{ { rx 0 ry -90 rz 0 }CORNER } rule C011{ {rx 180 ry 180 rz 0 }CORNER } rule C010{ {rx 180 ry 90 rz 0 }CORNER } rule C100{ {rx 0 ry 90 rz 0 }CORNER } rule C101{ {rx 0 ry 180 rz 0 }CORNER } rule C111{ {rx 180 ry -90 rz 0 }CORNER } rule C110{ {rx 180 ry 0 rz 0 }CORNER } //ARC rule ARC maxdepth iterations { { z 0.85 rx 6.5 s 0.95 blend _col1 0.09 } ARC box } //CORNER rule CORNER { { color _col0 }ARC { color _col0 rx -90 ry 90 }ARC { color _col0 rz 90 ry -90 }ARC }
which should be rendered like:

oh btw when I say render I mean with sunflow.
structure synth allows you to export a template for sunflow.
sunflow is also a pretty sharp tool :)
I was impressed by the speed at which it computes global illuminations( which is known to be a very expensive rendering method)
I haven’t pushed it too far though yet I’ve tweaked the example files and obtained pretty interesting results.
I’m sure we could include pictures to break the regularity of the renders.
was also thinking of an actionscript template for structure synth, like to export the meshes to a given flash 3D format. I don’t know if it’s worth given that most of the effect comes from the render.
So I thought of an exporter for the flash 3D engines models but it doesn’t make much sense either ( the *.jar won’t run on any server… ).
anyway, I keep in mind that such pictures are pretty easy to obtain and I’m glad to have had enough time to try it out.
happy coding :)
DieTapete
on Jan 22nd, 2010
@ 11:07 pm:
Yeah, structure synth is really cool. I tried it out a while ago: http://www.flickr.com/photos/dietapete/sets/72157613960710442/
There’s also a “structure synth” group at flickr with a lot of great renders.
A Flash port also already exists: http://wonderfl.net/code/600feced4a4597f93fbbc23e72414597b1b08fa5
sakri
on Jan 23rd, 2010
@ 10:12 am:
The results are impressive indeed! Thanks for the headsup! Where did you hear about this?
nicoptere
on Jan 25th, 2010
@ 3:12 pm:
@dietapete cool it is !
very nice set of examples you have on your flickr :)
thank you very much for the flash version !!
@sakri I think the first time was by keith peters on artfromcode :)
guillaume
on Jan 27th, 2010
@ 7:23 pm:
// sorry for le french //
Et dire qu’un mec comme toi va faire de la prod en freelance.
… and Anything But Logs
on Jan 29th, 2010
@ 12:40 pm:
[...] Nicoptere, en plus d’adorer la prod et de maîtriser la langue française avec un raffinement d’une subtile élégance, sait également utiliser judicieusement le code pour générer des compositions en volume graphiquement très efficaces. Il est bon. Plus d’infos sur la méthode ici. [...]