POV-Ray : Newsgroups : povray.binaries.images : CGSE (Golf Ball) : Re: CGSE (Golf Ball) Server Time: 30 Mar 2020 13:56:10 GMT
  Re: CGSE (Golf Ball)  
From: Trevor G Quayle
Date: 25 Jun 2007 21:10:02
"Trevor G Quayle" <Tin### [at] hotmailcom> wrote:
>
> BTW, why is the render so long?  Is it just from the area lighting and focal
> blur?  Try manual bounding of the CSG of the sphere, sometimes this can help
> considerably, especially when you are differencing a whole lot of objects
> like the dimples.
>
> -tgq

To follow up on this, I have a similar type object (holes in a shell rather
than dimples) that I've worked on and instead of differencing  the holes, I
used blobs (give the dimple blobs a negative strength), and it is *much*
faster.

Compare Ball1 (blobs) to Ball2 (CSG) in the following:

//START

#macro GeodesicBlob(n,R,Obj,k)
    #if (n=0)
      cylinder{-z,z,Obj,k}
    #else
      #local nL=pow(2,(n-1));
      #local i=-nL;
      #while (i<=nL)
        #local nS=4*(nL-abs(i));
        #if (nS=0)
            cylinder{-z,z,Obj,k translate<0,0,-R> rotate x*i*90/nL}
        #else

          #local j=0;
          #while (j<nS)
            cylinder{-z,z,Obj,k translate<0,0,-R> rotate x*i*90/nL rotate
y*j*360/nS}
            #local j=j+1;
          #end

        #end
        #local i=i+1;
      #end
    #end
#end

#macro Geodesic(n,R,Obj)
    #if (n=0)
      cylinder{-z,z,Obj}
    #else
      #local nL=pow(2,(n-1));
      #local i=-nL;
      #while (i<=nL)
        #local nS=4*(nL-abs(i));
        #if (nS=0)
            cylinder{-z,z,Obj translate<0,0,-R> rotate x*i*90/nL}
        #else

          #local j=0;
          #while (j<nS)
            cylinder{-z,z,Obj translate<0,0,-R> rotate x*i*90/nL rotate
y*j*360/nS}
            #local j=j+1;
          #end

        #end
        #local i=i+1;
      #end
    #end
#end


#declare R0=40;
#declare R2=0.5;
#declare OS=5;
#declare X0=sqrt(pow(R0,2)-pow(OS,2));

#declare OS1=OS*(R0-R2)/R0;
#declare R1=X0*(R0-R2)/R0;
#declare RR=R0-2*R2;

#declare D=0.1;

#declare Ball1=
difference{
  blob{
    threshold D
    sphere{0,RR/sqrt(1-sqrt(D)),1}
    GeodesicBlob(5,RR,2,-0.01)
  }
  bounded_by{sphere{0,40}}
  rotate y*40
  pigment{rgb 1}
}


#declare Ball2=
difference{
  sphere{0,RR}
  Geodesic(6,RR,1)
  bounded_by{sphere{0,40}}
  rotate y*40
  pigment{rgb 1}
}

object{Ball2}

//END

-tgq


Post a reply to this message

Copyright 2003-2008 Persistence of Vision Raytracer Pty. Ltd.