|
|
Sticking with the theme of computational computer graphics...
Thanks to Mike, I discovered Mandelbulber, a program which plots various
3D fractal types, in the manner of POV-Ray's "julia" object. (Indeed,
that exact object is one of the things it can plot.)
Basically I'm sitting here trying to figure out how it's possible to
render these images in less than the age on the Universe. Certainly I
know from bitter experience that as soon as you ask POV-Ray to draw any
kind of isosurface, the render times become astronomical. And that's
assuming you ask for a /smooth/ function to be plotted. If you ask for
something really rough (e.g., the "granite" function), even low-res
previews become intractably slow.
And yet, even with my ancient PC, Mandelbulber manages to render really
quite complex images at 1500x1000 pixels with (hard) shadows and
screen-space ambient occlusion in about 20 minutes or so. And as far as
I can tell, it's all CPU-based. No GPU trickery at all.
My mind is blown. I literally cannot figure out how it can be anywhere
near that fast.
As I understand it, what POV-Ray does is "sphere tracing". You specify a
"maximum gradient" for the function to be traced. Assuming the gradient
of the function /really is/ always less than this, then for any point in
space, you can sample the function and compute the minimum distance you
have to travel to find a zero. This distance than defines the radius of
a sphere centered at that point which is guaranteed to not contain a
surface. (Assuming the gradient specified is /correct/!)
From what I've been able to gather reading between the lines, it seems
most methods for tracing isosurfaces demand that you analytically know
the /derivative/ of the function to be plotted. A saw a paper on sphere
tracing which even notes that one of the main "advantages" is not
needing to know the derivative, just the maximum gradient.
This is a bit puzzling, since it seems that knowing the maximum gradient
tells you /more/ than knowing the actual derivative would. Setting
max_gradient=5 tells you that there exists no point anywhere in space
for which (the absolute value of) the derivative exceeds 5. Knowing the
formula for the derivative just lets you sample the derivative at an
arbitrary point in space.
That seems far less useful. Oh, sure, right /here/ the derivative is
0.02; but there's absolutely no reason why 2 units further along the ray
the derivative can't be 10^25.
Even knowing the /second/ derivative doesn't seem to help very much,
since /that/ can still change arbitrarily abruptly.
On the other hand, the trouble with max_gradient is that you have to set
it to the most pessimistic value possible in order to get correct
results. Which is a nuisance if the function is only very steep in a few
areas. Being able to specify a formula to compute (or even just
estimate) the gradient seems like it ought to be a win.
Then again, what you want isn't the gradient at /this/ point, it's the
maximum gradient within whatever radius of this point.
Then again, these fractals are isosurfaces of recursively-defined
functions. Perhaps that helps somehow?
Post a reply to this message
|
|
|
|
On 20/07/2011 04:53 PM, Invisible wrote:
> Sticking with the theme of computational computer graphics...
>
> Thanks to Mike, I discovered Mandelbulber, a program which plots various
> 3D fractal types, in the manner of POV-Ray's "julia" object. (Indeed,
> that exact object is one of the things it can plot.)
>
> Basically I'm sitting here trying to figure out how it's possible to
> render these images in less than the age on the Universe.
To give you some idea of what I'm talking about:
http://www.youtube.com/watch?v=bO9ugnn8DbE
I've wasted hours of render time yet never come up with anything even
slightly worth looking at. I shiver to think what the render time for
the above video might be...
--
http://blog.orphi.me.uk/
http://www.zazzle.com/MathematicalOrchid*
Post a reply to this message
|
|