// ----------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------- Grass texture #declare Tan1 = rgb< 0.86,0.58,0.44>; #declare Green1=rgb<0.80,0.67,0.20>; #declare Green2=rgb<0.36,0.63,0.03>; //#declare Green1=rgb<0.4,0.7,0.2>*0.2; //#declare Green2=rgb<0.37,0.63,0.07>*0.8; // -------------------------------------- #declare P_Spotted =pigment { spotted color_map { [0.0 color Tan1*0.1 ] [0.2 color Tan1*0.4 ] [0.2 color Green1*0.4 ] [0.3 color Green1*0.9 ] [1.01 color Green1*1.1 ] } } //------------------------ #declare P_Earth = pigment { spotted color_map { [0.0 color Tan1*0.3] [0.6 color Tan1*0.3] [0.6 color Green1*0.4] [1.1 color Green1*0.4] } } //------------------------------ #declare P_Green=pigment{Green2*1.1} //#declare P_Spotted=pigment{Red} //#declare P_Earth=pigment{Blue} #declare T_Grass=texture { pigment { gradient y turbulence 0.2 pigment_map { [0.0 P_Earth] [0.3 P_Green] [0.95 P_Spotted] [1.00 P_Earth] } } finish{ specular 0.2 roughness 0.015} scale <0.001,1,0.001> } //---------------------------------------------------------------------------- end Grass texture // ----------------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------------- #include "makegrass.inc" // ----------------------------------------------------------------------------------------------- // Patch parameters // ! Final number of triangles = nBlade * nBlade * segBlade * 2 (or 4 if dofold = true) #declare lPatch=50; // size of patch //#declare nBlade=4; // number of blades per line (there will be nBlade * nBlade blades) #declare nBlade=10; // number of blades per line (there will be nBlade * nBlade blades) #declare ryBlade = 0; // initial y rotation of blade #declare segBlade= 15; // number of blade segments #declare lBlade = 25; // length of blade #declare wBlade = 1; // width of blade at start #declare wBladeEnd = 0.3; // width of blade at the end #declare doSmooth=0 ; //false;/true; or 0;/1; // true makes smooth triangles #declare startBend = <0,1,0.3>; // bending of blade at start (<0,1,0>=no bending) #declare vBend = <0,-0.5,0>; // force bending the blade (<0,1,1> = 45°) #declare pwBend = 3; // bending power (how slowly the curve bends) #declare rd = 459; // random seed #declare stdposBlade = 1; // standard deviation of blade position 0..1 #declare stdrotBlade = 360; // standard deviation of rotation #declare stdBlade = 1.2; // standard deviation of blade scale; #declare stdBend = 2; // standard deviation of blade bending; #declare dofold = 1 ; //false;/true; or 0;/1; // true creates a central fold in the blade (twice more triangles) #declare dofile = 0 ; //false;/true; or 0;/1; // true creates a mesh file #declare fname = "grass_01.inc" // name of the mesh file to create // ----------------------------------------------------------------------------------------------- // Prairie parameters #declare nxPrairie=14; // number of patches for the first line #declare addPatches=1; // number of patches to add at each line #declare nzPrairie=55; // number of lines of patches #declare rd=seed(25307); // random seed #declare stdscale=1.5; // stddev of scale #declare stdrotate=1; // stddev of rotation #declare doTest=0; //false;/true; or 0;/1; // replaces the patch with a sphere // ----------------------------------------------------------------------------------------------- // Create the patch #if (dofile=true) // if the patch is already created, turn off the next line MakeGrassPatch(lPatch,nBlade,ryBlade,segBlade,lBlade,wBlade,wBladeEnd,doSmooth,startBend,vBend,pwBend,rd,stdposBlade,stdrotBlade,stdBlade,stdBend,dofold,dofile,fname) #declare objectPatch=#include fname #else #declare objectPatch=object{MakeGrassPatch(lPatch,nBlade,ryBlade,segBlade,lBlade,wBlade,wBladeEnd,doSmooth,startBend,vBend,pwBend,rd,stdposBlade,stdrotBlade,stdBlade,stdBend,dofold,dofile,fname)} #end // ----------------------------------------------------------------------------------------------- // Create the prairie object{MakePrairie(lPatch,nxPrairie,addPatches,nzPrairie,objectPatch,rd,stdscale,stdrotate,doTest) // or optional: show Single Patch // object{ ObjectPatch scale 1/40 texture{T_Grass } /* size ~ 1.00 !!! */ // scale 1 // -> size ~ 1 units high scale 0.5 // -> size ~0.5 units high translate<0,0,-1> } // ----------------------------------------------------------------------------------------------- //cylinder{0,y*0.01,5 texture{T_Grass scale 40}} // Test pole 1 unit high ------------------------------------ cylinder { <0,0,0>,<0,1.00,0>, 0.05 pigment { color rgb<1,1,1> } scale <1,1,1> rotate<0,0,0> translate<0,0,0> } // end of cylinder ------------------------------- //-----------------------------------------------------------