|
|
Wasn't it Slime who wrote:
>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
> }
You can certainly write it more clearly as
#declare F = function{sqrt((x/scalenx)^2+(y/scaleny)^2+(z/scalenz)^2)}
#declare G = function{sqrt((x/scalex)^2 +(y/scaley)^2 +(z/scalez)^2)}
function { G(x,y,z)/baseradius
+ f_noise3d(x/F(x,y,z)*noisedetail + rndx,
y/F(x,y,z)*noisedetail + rndy,
z/F(x,y,z)*noisedetail + rndz
)*noiseamnt-1
}
This way it's easier to read, takes just about the same amount of time,
produces exactly the same output, and crashes in exactly the same place
when you try to divide by zero at the origin.
--
Mike Williams
Gentleman of Leisure
Post a reply to this message
|
|