Structure Synth

Simple Fractal in Structure Synth

Structure Synth is an application to generate 3D structure using a design grammar. Design grammar is a script with some rules. These rules decide final output. This page contains scripts that generate fractal like structure. The output can be exported in different file formats and rendered in Blender, Renderman, Sunflow and Povray.

Pythagoras Tree

// Pythagoras Tree

#define displace 0.5

set maxdepth 12

set background white

R1

rule R1 maxdepth 11 { { y 1 x displace rz -45 s 0.707 h 40 } R1

{ y 1 x -displace rz 45 s 0.707 h 40 } R1

box }

Pythagoras tree

H Fractal

//H Fractal

#define displace 0.25

1 * {z -0.1 s 50 50 0.1 color #bbb}box

set maxdepth 12

set background white

2 * {y -0.75 rz 180}R1

rule R1 maxdepth 7 {

{ y 0.5 x displace rz -90 s 0.707 h 40 }R1

{ y 0.5 x -displace rz 90 s 0.707 h 40 }R1

d

}

rule d{

{s 0.1 1 0.1 h 40}box

}

Dragon Fractal

// Dragon Factal

#define displace 0.5

set colorpool list:white,skyblue,#0044dd,#0088ee

set maxdepth 200

set background black

1 * {z -1 s 20 20 1 color #999}box

R1

rule R1 md 10 > R2 {

{s 0.707 y 1 x displace rz 45 }R1

{s 0.707 y 1 x -displace rz 45 }R1

}

rule R2{

{s 0.707 0.707 1 color random}box

}

Levy C Curve

//Levy C Curve

#define displace 0.5

set maxdepth 200

set colorpool list:white,skyblue,#0044dd,#0088ee

set background white

1 * {z -0.0575 s 50 50 0.1 color #666}box

R1

rule R1 maxdepth 11 > R2{

{ y 0.5 x displace rz -45 s 0.707 h 40 }R1

{ y 0.5 x -displace rz 45 s 0.707 h 40 }R1

}

rule R2{

{s 2.1 0.2 5 color random}box

}

2d Box Fractal

//2d Box Fractal

#define dis 1

#define siz 1/3

set colorpool list:white,gray,#ddd,#999

set background #000

a2

rule a2 w 3 maxdepth 2 > d {

{ s siz x 0 y 0 z 0 h 15 } a2

{ s siz x dis y dis z 0 h 15 } a2

{ s siz x dis y -dis z 0 h 15 } a2

{ s siz x -dis y dis z 0 h 15 } a2

{ s siz x -dis y -dis z 0 h 15 } a2

}

rule a2 w 3 maxdepth 3 > d {

{ s siz x 0 y 0 z 0 h 15 } a2

{ s siz x dis y dis z 0 h 15 } a2

{ s siz x dis y -dis z 0 h 15 } a2

{ s siz x -dis y dis z 0 h 15 } a2

{ s siz x -dis y -dis z 0 h 15 } a2

}

rule d {

{ color random } box

}

3d Box Fractal

//3D Box Fractal

#define dis 1

#define siz 1/3

set colorpool list:white,skyblue,#0044dd,#0088ee

set background #000

a2

rule a2 w 5 maxdepth 3 > d {

{ s siz x 0 y 0 z 0 h 15 } d

{ s siz x dis y dis z dis h 15 } a2

{ s siz x dis y -dis z dis h 15 } d

{ s siz x -dis y dis z dis h 15 } d

{ s siz x -dis y -dis z dis h 15 } d

{ s siz x dis y dis z -dis h 15 } d

{ s siz x dis y -dis z -dis h 15 } d

{ s siz x -dis y dis z -dis h 15 } d

{ s siz x -dis y -dis z -dis h 15 } d

}

rule d {

{ color random } box

}

Sierpinski Pyramid

//Sierpinski Pyramid

set background #fff

#define dis 0.5

#define off 0.866

#define gap 1

r1

rule r1 md 4 > p1 {

{ x 0 z 0.433 s 0.5 h 40 } r1

{ x 0.25 y 0.25 s 0.5 h 40 } r1

{ x -0.25 y -0.25 s 0.5 h 40 } r1

{ x -0.25 y 0.25 s 0.5 h 40 } r1

{ x 0.25 y -0.25 s 0.5 h 40 } r1

}

rule p1 {

{ z 0.5 h 50 } pyramid1

}

rule pyramid1 {

triangle[0,0,0;1,0,0;0.5,0.5,off]

triangle[1,0,0;1,1,0;0.5,0.5,off]

triangle[1,1,0;0,1,0;0.5,0.5,off]

triangle[0,1,0;0,0,0;0.5,0.5,off]

}

Inverted Sierpinski Pyramid

//Inverted Sierpinski Pyramid

set background #fff

#define dis 0.5

#define off 0.866

#define gap 1

r1

rule r1 md 5 {

{ x 0 z 0.433 s 0.5 h 40 } r1

{ x 0.25 y 0.25 s 0.5 h 40 } r1

{ x -0.25 y -0.25 s 0.5 h 40 } r1

{ x -0.25 y 0.25 s 0.5 h 40 } r1

{ x 0.25 y -0.25 s 0.5 h 40 } r1

{ z 0.25 } p2

}

rule p2 {

{ s 0.5 } pyramid2

}

rule pyramid2 {

triangle[0.5,0.5,0 ;0,0,off;1,0,off]

triangle[0.5,0.5,0 ;1,0,off;1,1,off]

triangle[0.5,0.5,0 ;1,1,off;0,1,off]

triangle[0.5,0.5,0 ;0,1,off;0,0,off]

triangle[0,0,off;1,0,off;1,1,off]

triangle[1,1,off;0,1,off;0,0,off]

}

Pythagoras Tree 2

//Pythagoras Tree 2

#define displace 0.51

set maxdepth 200

set background white

1 * {y -0.6 s 150 0.1 150 color #999}box

R1

rule R1 maxdepth 9 {

{ y 1.1 x displace rz -45 s 0.707 h 40 } R1

{ y 1.1 x -displace rz 45 s 0.707 h 40 } R1

{ color #fff } frame

{ } d

}

rule d{

{ s 0.1 0.9 0.9 x 5 } box

{ s 0.1 0.9 0.9 x -5 } box

{ s 0.9 0.1 0.9 y 5 } box

{ s 0.9 0.1 0.9 y -5 } box

{ s 0.9 0.9 0.1 z 5 } box

{ s 0.9 0.9 0.1 z -5 } box

}

rule frame {

{ s 0.1 1.1 0.1 x 5 z 5 } box

{ s 0.1 1.1 0.1 x 5 z -5 } box

{ s 0.1 1.1 0.1 x -5 z 5 } box

{ s 0.1 1.1 0.1 x -5 z -5 } box

{ s 1 0.1 0.1 y 5 z 5 } box

{ s 1 0.1 0.1 y 5 z -5 } box

{ s 1 0.1 0.1 y -5 z 5 } box

{ s 1 0.1 0.1 y -5 z -5 } box

{ s 0.1 0.1 1 y 5 x 5 } box

{ s 0.1 0.1 1 y 5 x -5 } box

{ s 0.1 0.1 1 y -5 x 5 } box

{ s 0.1 0.1 1 y -5 x -5 } box

}

3D Frames

//3D Frames

#define dis 0.55

set colorpool list:white,#ee0,#e0e,#0ee

set background #000

a2

rule a2 w 3 maxdepth 6 > d {

{ s 0.5 0.5 0.5 x dis y dis z dis } a2

{ s 0.5 0.5 0.5 x -dis y dis z dis } d

{ s 0.5 0.5 0.5 x dis y -dis z dis } d

{ s 0.5 0.5 0.5 x -dis y -dis z dis } d

{ s 0.5 0.5 0.5 x dis y dis z -dis } d

{ s 0.5 0.5 0.5 x -dis y dis z -dis } d

{ s 0.5 0.5 0.5 x dis y -dis z -dis } d

{ s 0.5 0.5 0.5 x -dis y -dis z -dis } a2

}

rule d w 2 {

{ s 1 1 1 color random } frame

}

rule frame {

{ s 0.1 1.1 0.1 x 5 z 5 } box

{ s 0.1 1.1 0.1 x 5 z -5 } box

{ s 0.1 1.1 0.1 x -5 z 5 } box

{ s 0.1 1.1 0.1 x -5 z -5 } box

{ s 1 0.1 0.1 y 5 z 5 } box

{ s 1 0.1 0.1 y 5 z -5 } box

{ s 1 0.1 0.1 y -5 z 5 } box

{ s 1 0.1 0.1 y -5 z -5 } box

{ s 0.1 0.1 1 y 5 x 5 } box

{ s 0.1 0.1 1 y 5 x -5 } box

{ s 0.1 0.1 1 y -5 x 5 } box

{ s 0.1 0.1 1 y -5 x -5 } box

}

Fractal Box 2

//Fractal Box 2

#define size 0.5

#define offset 0.5

set colorpool list:white,white,blue,#ee0000,#00ee00

set background #fff

R1

rule R1 md 5{

{ z offset s size } R1

{ y offset s size } R1

{ x offset s size} R1

{ z -offset s size } R1

{ y -offset s size } R1

{ x -offset s size } R1

{ color random } box

}

Fractal Box 3

//Fractal Box 3

set colorpool list:white,#ee0,#e0e,#0ee

set background #fff

#define size 0.4

#define offset 0.5

set maxdepth 7

R1

rule R1 md 6 { { x offset y offset z offset s size } R1

{ x offset y -offset z offset s size } R1

{ x -offset y -offset z offset s size } R1

{ x -offset y offset z offset s size } R1

{ x offset y offset z -offset s size } R1

{ x offset y -offset z -offset s size } R1

{ x -offset y -offset z -offset s size } R1

{ x -offset y offset z -offset s size } R1

{ color random } box }

Frame Frame 1

// Frame Frame 1

set colorpool list:blue,#0088ff,magenta,white

set background #fff

#define size 0.25

#define offset 0.3125

set maxdepth 7

R1

rule R1 md 4 {

{ x offset y offset z offset s size } R1

{ x offset y -offset z offset s size } R1

{ x -offset y -offset z offset s size } R1

{ x -offset y offset z offset s size } R1

{ x offset y offset z -offset s size } R1

{ x offset y -offset z -offset s size } R1

{ x -offset y -offset z -offset s size } R1

{ x -offset y offset z -offset s size } R1

{ color random } frame

}

rule frame {

{ s 0.1 1.1 0.1 x 5 z 5 } box

{ s 0.1 1.1 0.1 x 5 z -5 } box

{ s 0.1 1.1 0.1 x -5 z 5 } box

{ s 0.1 1.1 0.1 x -5 z -5 } box

{ s 1 0.1 0.1 y 5 z 5 } box

{ s 1 0.1 0.1 y 5 z -5 } box

{ s 1 0.1 0.1 y -5 z 5 } box

{ s 1 0.1 0.1 y -5 z -5 } box

{ s 0.1 0.1 1 y 5 x 5 } box

{ s 0.1 0.1 1 y 5 x -5 } box

{ s 0.1 0.1 1 y -5 x 5 } box

{ s 0.1 0.1 1 y -5 x -5 } box

}

Frame Frame 2

// Frame Frame 2

#define size 0.4

#define offset 0.5

set colorpool list:yellow,orange,white,red

set background #fff

R1

rule R1 md 4 {

{ x offset y offset z offset s size } R1

{ x offset y -offset z offset s size } R1

{ x -offset y -offset z offset s size } R1

{ x -offset y offset z offset s size } R1

{ x offset y offset z -offset s size } R1

{ x offset y -offset z -offset s size } R1

{ x -offset y -offset z -offset s size } R1

{ x -offset y offset z -offset s size } R1

{ color random } frame

}

rule frame {

{ s 0.1 1.1 0.1 x 5 z 5 } box

{ s 0.1 1.1 0.1 x 5 z -5 } box

{ s 0.1 1.1 0.1 x -5 z 5 } box

{ s 0.1 1.1 0.1 x -5 z -5 } box

{ s 1 0.1 0.1 y 5 z 5 } box

{ s 1 0.1 0.1 y 5 z -5 } box

{ s 1 0.1 0.1 y -5 z 5 } box

{ s 1 0.1 0.1 y -5 z -5 } box

{ s 0.1 0.1 1 y 5 x 5 } box

{ s 0.1 0.1 1 y 5 x -5 } box

{ s 0.1 0.1 1 y -5 x 5 } box

{ s 0.1 0.1 1 y -5 x -5 } box

}

Sierpinski Pyramid Cube

//Sierpinski Pyramid Cube

#define dis 1

#define off 0.866

set background #fff

1 * {z -0.1 s 50 50 0.1 color #ad6 } box 2 * {x 2 z 2 ry 180 } 4 * {y 2 rx 90 } r1

rule r1 md 3 > p2 {

{ s 0.5 x 0 y 0 } r1

{ s 0.5 x 1 } r1

{ s 0.5 x 0 y 1 z 0 } r1

{ s 0.5 x 0 y 0 z 1 } r1

}

rule r1 md 1 > p2 {

{ s 0.5 x 0 y 0 } r1

{ s 0.5 x 1 } r1

{ s 0.5 x 0 y 1 z 0 } r1

{ s 0.5 x 0 y 0 z 1 } r1

}

rule r1 md 1 > p2 {

{ s 0.5 x 0 y 0 }r1

{ s 0.5 x 1 }r1

{ s 0.5 x 0 y 1 z 0 }r1

{ s 0.5 x 0 y 0 z 1 }r1

}

rule p2{

{ x 0.5 y 0.5 z 0.5 color #b9c } pyramid

}

rule pyramid {

triangle[0,0,0;0,1,0;1,0,0]

triangle[0,0,0;0,1,0;0,0,1]

triangle[0,0,0;1,0,0;0,0,1]

triangle[1,0,0;0,1,0;0,0,1]

}

Tic Tac Toe

// Tic Tac Toe

1 * {z -0.1 s 20 20 0.1 color #eee } box

tictactoe

rule tictactoe md 2 > mark {

{ z -0.03 s 0.3 } tictactoe

{ x 2 y 2 z -0.03 s 0.3 } tictactoe

{ x -2 y -2 z -0.03 s 0.3 } mark

{ x 2 y -2 z -0.03 s 0.3 } tictactoe

{ x -2 y 2 z -0.03 s 0.3 } mark

{ x -2 y 0 z -0.03 s 0.3 } tictactoe

{ x 2 y 0 z -0.03 s 0.3 } tictactoe

{ x 0 y 2 z -0.03 s 0.3 } mark

{ x 0 y -2 z -0.03 s 0.3 } tictactoe

lines

}

rule tictactoe md 1 > mark {

{ z -0.03 s 0.3 }tictactoe

{ x 2 y 2 z -0.03 s 0.3 } tictactoe

{ x -2 y -2 z -0.03 s 0.3 } mark

{ x 2 y -2 z -0.03 s 0.3 } tictactoe

{ x -2 y 2 z -0.03 s 0.3 } mark

{ x -2 y 0 z -0.03 s 0.3 } tictactoe

{ x 2 y 0 z -0.03 s 0.3 } tictactoe

{ x 0 y 2 z -0.03 s 0.3 } mark

{ x 0 y -2 z -0.03 s 0.3 } tictactoe

lines

}

rule lines{

1 * { y -3 s 6 0.1 0.1} 2 * { y 20 color #aa4 } box 1 * { x -3 s 0.1 6 0.1} 2 * { x 20 color #aa4 } box }

rule mark{}

rule mark{}

rule mark{

{ rz 45 s 3 } xx

}

rule mark{

{ x 2 s 0.3 } oo

}

rule xx{

{ y -0 s 1.5 0.1 0.1 color #48e } box

{ x -0 s 0.1 1.5 0.1 color #48e } box

}

rule oo md 50 {

{ x 0.06 y 0.85 rz 7.5 } oo

{ s 0.75 1 0.75 } box

}