POV-Ray : Newsgroups : povray.beta-test : Function weirdness : Re: Function weirdness Server Time
31 Jul 2024 00:27:57 EDT (-0400)
  Re: Function weirdness  
From: Slime
Date: 19 Sep 2001 00:21:40
Message: <3ba81d54$1@news.povray.org>
Yeah, it makes sense now... I wish there were some way to force the function
to store a value just so that the same value doesn't have to be calculated
multiple times. That could speed up rendering, probably. I ended up doing
this for my function:

    function { sqrt((x/scalex)^2+(y/scaley)^2+(z/scalez)^2)/baseradius +
     f_noise3d(x/sqrt((x/scalenx)^2+(y/scaleny)^2+(z/scalenz)^2)*noisedetail
+ rndx,
         y/sqrt((x/scalenx)^2+(y/scaleny)^2+(z/scalenz)^2)*noisedetail +
rndy,
         z/sqrt((x/scalenx)^2+(y/scaleny)^2+(z/scalenz)^2)*noisedetail +
rndz
     )*noiseamnt-1
    }

This created the intended effect. Its just that
sqrt((x/scalenx)^2+(y/scaleny)^2+(z/scalenz)^2) is calculated three times in
the whole thing, and I'd imagine with all the division, exponentation, and
square-rooting, it's slowing down the render significantly. I guess there's
no real other way though.

(note that all the variables in that like scalex, scalenx, noisedetail,
rndx, noiseamnt, and others are all predefined elsewhere in my code.)

- Slime
[ http://www.teja.nu/slime/ ]
[ http://www.teja.nu/slime/images/ ]

"Warp" <war### [at] tagpovrayorg> wrote in message
news:3ba707ad@news.povray.org...
>   Repeat after me: A function is not a macro.
>
>   The difference might not be completely clear at first, but it's an
important
> difference.
>   A #local-command is a parse-time command used mainly in macros.
Functions
> do not work this way.
>
> --
> #macro N(D,I)#if(I<6)cylinder{M()#local D[I]=div(D[I],104);M().5,2pigment{
> rgb M()}}N(D,(D[I]>99?I:I+1))#end#end#macro M()<mod(D[I],13)-6,mod(div(D[I
> ],13),8)-3,10>#end blob{N(array[6]{11117333955,
> 7382340,3358,3900569407,970,4254934330},0)}//                     - Warp -


Post a reply to this message

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