// Bricks and Blocks texture plugin. - October 1997 // Use by declaring settings then including. // Note: Needs a texture{} wrapper. This means that it can be layered or used in a texture map. // Creates an infinite number of courses of bricks. // Each course consists of rows of bricks. There is no offset between rows. // Every second course is offset by the amounts specified in XOffset and YOffset. /* // Sample declarations. #declare CourseHeight = 0.452 // Height of one course including mortar. #declare BrickXSize = 0.65 // Size of brick in X direction including mortar. #declare BrickYSize = 0.55 // Size of brick in Y direction including mortar. #declare MortarXWidth = 0.1 // Fraction of BrickXSize #declare MortarYWidth = 0.1 // Fraction of BrickYSize #declare MortarHeight = 0.125 // Fraction of CourseHeight #declare XOffset = 0.325 // Offset between courses in X direction #declare YOffset = 0.275 // Offset between courses in Y direction #declare CourseTurb = 0.15 // Turbulence applied to course planes #declare EdgeTurb = 0.15 // Turbulence applied to Mortar between bricks within a course. // Sample textures. Beware these take quite a while to render. #declare MortarTexture = texture{ pigment{ crackle turbulence 0.7 colour_map{ [0.0 rgb <0.35,0.25,0.3>] [0.5 rgb <0.3,0.1,0.12>] [1.0 rgb <0.4 0.4 0.35>] } scale 0.01 } normal{ bumps 0.4 scale 0.003} finish{ ambient 0.05 diffuse 0.15 phong 0.10} } #declare BrickTexture = texture{ pigment{ crackle turbulence 0.7 colour_map{ [0.0 rgb <0.45,0.2,0.07>] [0.5 rgb <0.3,0.1,0.02>] [1.0 rgb <0.4 0.15 0.05>] } scale 0.8 } normal{ average normal_map{ [0.8 crackle 1 turbulence 0.4 omega 0.8 lambda 1 octaves 3 scale 0.4] [0.3 bumps 0.5 scale 0.003]} } finish{ ambient 0.05 diffuse 0.5 phong 0.15 phong_size 100} } */ // Beginning of include proper. // texture{ gradient z turbulence CourseTurb texture_map{ [0.0 gradient y turbulence EdgeTurb texture_map{ [0.0 MortarTexture scale <1, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarYWidth/2 MortarTexture scale <1, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarYWidth/2 gradient x turbulence EdgeTurb texture_map{ [0.0 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarXWidth/2 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarXWidth/2 BrickTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1-(MortarXWidth/2) BrickTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1-(MortarXWidth/2) MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] } scale BrickXSize*x ] [1-(MortarYWidth/2) gradient x turbulence EdgeTurb texture_map{ [0.0 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarXWidth/2 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarXWidth/2 BrickTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1-(MortarXWidth/2) BrickTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1-(MortarXWidth/2) MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] } scale BrickXSize*x ] [1-(MortarYWidth/2) MortarTexture scale <1, 1/BrickYSize, 1/(CourseHeight*2)>] [1 MortarTexture scale <1, 1/BrickYSize, 1/(CourseHeight*2)>] } scale BrickYSize*y ] [0.25-(MortarHeight/4) gradient y turbulence EdgeTurb texture_map{ [0.0 MortarTexture scale <1, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarYWidth/2 MortarTexture scale <1, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarYWidth/2 gradient x turbulence EdgeTurb texture_map{ [0.0 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarXWidth/2 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarXWidth/2 BrickTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1-(MortarXWidth/2) BrickTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1-(MortarXWidth/2) MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] } scale BrickXSize*x ] [1-(MortarYWidth/2) gradient x turbulence EdgeTurb texture_map{ [0.0 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarXWidth/2 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarXWidth/2 BrickTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1-(MortarXWidth/2) BrickTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1-(MortarXWidth/2) MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] } scale BrickXSize*x ] [1-(MortarYWidth/2) MortarTexture scale <1, 1/BrickYSize, 1/(CourseHeight*2)>] [1 MortarTexture scale <1, 1/BrickYSize, 1/(CourseHeight*2)>] } scale BrickYSize*y ] [0.25-(MortarHeight/4) MortarTexture scale z/(CourseHeight*2)] [0.25+(MortarHeight/4) MortarTexture scale z/(CourseHeight*2)] [0.25+(MortarHeight/4) gradient y turbulence EdgeTurb texture_map{ [0.0 MortarTexture scale <1, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarYWidth/2 MortarTexture scale <1, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarYWidth/2 gradient x turbulence EdgeTurb texture_map{ [0.0 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarXWidth/2 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarXWidth/2 BrickTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1-(MortarXWidth/2) BrickTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1-(MortarXWidth/2) MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] } scale BrickXSize*x ] [1-(MortarYWidth/2) gradient x turbulence EdgeTurb texture_map{ [0.0 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarXWidth/2 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarXWidth/2 BrickTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1-(MortarXWidth/2) BrickTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1-(MortarXWidth/2) MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] } scale BrickXSize*x ] [1-(MortarYWidth/2) MortarTexture scale <1, 1/BrickYSize, 1/(CourseHeight*2)>] [1 MortarTexture scale <1, 1/BrickYSize, 1/(CourseHeight*2)>] } scale BrickYSize*y translate ] [0.75-(MortarHeight/4) gradient y turbulence EdgeTurb texture_map{ [0.0 MortarTexture scale <1, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarYWidth/2 MortarTexture scale <1, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarYWidth/2 gradient x turbulence EdgeTurb texture_map{ [0.0 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarXWidth/2 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarXWidth/2 BrickTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1-(MortarXWidth/2) BrickTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1-(MortarXWidth/2) MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] } scale BrickXSize*x ] [1-(MortarYWidth/2) gradient x turbulence EdgeTurb texture_map{ [0.0 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarXWidth/2 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarXWidth/2 BrickTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1-(MortarXWidth/2) BrickTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1-(MortarXWidth/2) MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] } scale BrickXSize*x ] [1-(MortarYWidth/2) MortarTexture scale <1, 1/BrickYSize, 1/(CourseHeight*2)>] [1 MortarTexture scale <1, 1/BrickYSize, 1/(CourseHeight*2)>] } scale BrickYSize*y translate ] [0.75-(MortarHeight/4) MortarTexture scale z/(CourseHeight*2)] [0.75+(MortarHeight/4) MortarTexture scale z/(CourseHeight*2)] [0.75+(MortarHeight/4) gradient y turbulence EdgeTurb texture_map{ [0.0 MortarTexture scale <1, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarYWidth/2 MortarTexture scale <1, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarYWidth/2 gradient x turbulence EdgeTurb texture_map{ [0.0 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarXWidth/2 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarXWidth/2 BrickTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1-(MortarXWidth/2) BrickTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1-(MortarXWidth/2) MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] } scale BrickXSize*x ] [1-(MortarYWidth/2) gradient x turbulence EdgeTurb texture_map{ [0.0 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarXWidth/2 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarXWidth/2 BrickTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1-(MortarXWidth/2) BrickTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1-(MortarXWidth/2) MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] } scale BrickXSize*x ] [1-(MortarYWidth/2) MortarTexture scale <1, 1/BrickYSize, 1/(CourseHeight*2)>] [1 MortarTexture scale <1, 1/BrickYSize, 1/(CourseHeight*2)>] } scale BrickYSize*y ] [1 gradient y turbulence EdgeTurb texture_map{ [0.0 MortarTexture scale <1, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarYWidth/2 MortarTexture scale <1, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarYWidth/2 gradient x turbulence EdgeTurb texture_map{ [0.0 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarXWidth/2 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarXWidth/2 BrickTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1-(MortarXWidth/2) BrickTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1-(MortarXWidth/2) MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] } scale BrickXSize*x ] [1-(MortarYWidth/2) gradient x turbulence EdgeTurb texture_map{ [0.0 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarXWidth/2 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [MortarXWidth/2 BrickTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1-(MortarXWidth/2) BrickTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1-(MortarXWidth/2) MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] [1 MortarTexture scale <1/BrickXSize, 1/BrickYSize, 1/(CourseHeight*2)>] } scale BrickXSize*x ] [1-(MortarYWidth/2) MortarTexture scale <1, 1/BrickYSize, 1/(CourseHeight*2)>] [1 MortarTexture scale <1, 1/BrickYSize, 1/(CourseHeight*2)>] } scale BrickYSize*y ] } scale CourseHeight*2*z // } // Remember to include texture{} wrapper in client file. // End of File