claude
Fractal Bachius

Posts: 563
|
 |
« Reply #15 on: May 24, 2014, 11:38:03 AM » |
|
I used a speedup that I developed that's utterly orthogonal to perturbation (and so, could in principle be combined with it). One effect of the speedup is that if one is centered on a minibrot of period P, one can compute the image as accurately as by computing it conventionally with an iteration count of P*N while actually computing only about P+N iterations. I would like to learn more about this optimisation technique. My thoughts are along the lines of renormalization scaling ( http://ibiblio.org/e-notes/MSet/windows.html and following pages ) but I haven't worked through the details... am I even close?
|
|
|
|
|
Logged
|
|
|
|
|
Pauldelbrot
|
 |
« Reply #16 on: May 25, 2014, 09:53:10 AM » |
|
I think it is related to that. I used the way the same structures repeat doubled, then doubled again, etc. as one approaches a minibrot, speculating that they followed a set of dwell bands around the minibrot analogous to the ones around the main set and that jumping from a feature to what it was doubled from, and then what that was doubled from, etc. amounted to performing normal Mandelbrot iterations with the minibrot in the role of the main set. This turned out to be exactly right.
Suppose one has a deep minibrot, and one finds a translation, scaling, and rotation transform that moves the whole Mandelbrot set onto the minibrot. If the minibrot's very deep and undistorted (unlike, say, the noticeably "bent" ones in the seahorse valley area where the seahorse tails join the bodies, or even the big spike mini), they can be made to overlap nearly exactly, with any error being far smaller than an image pixel.
In this event, one can take a point near the deep minibrot and find the corresponding point near the main Mandelbrot set (so that the above transform maps the latter point onto the former), then iterate that until it exceeds some large bailout radius M on iteration j, where one takes the inverse transform (so, back into the coordinate space of the minibrot) to get a point z. M should be chosen so that the bailout disk of radius M, likewise transformed, surrounds the deep mini out to no farther than where the period doubling around it begins, so still within the "doubled-up zone" around it.
One can now take the result z and iterate it in the normal way, with precision suited to a zoom centered on the minibrot containing the entirety of the transformed bailout disk. It should escape after some number of additional iterations k; the true iteration count of the original point can then be taken to be k + jp, where p is the minibrot's period. The smoothed iterations are calculated similarly, with j remaining and integer while k acquires the usual fractional part.
The results are, in the strictest sense, inaccurate -- if you drew an image this way at a huge, zottapixel scale, say, you would find errors with the rotation and orientation of tiny features centered on other deep minis in whose centers are within the image borders, for example. But generally if M is not too large all errors are much smaller than a pixel, or equivalently, all pixel color errors are sufficiently small. (And every other technique has inaccuracies too, such as perturbation's glitches that need added references to correct, and roundoff errors, and the like).
Because of this, one can save as much as half the precision and most of the iterations, and can get very deep minibrots' shorelines rendered very accurately without a supercomputer.
I was actually skeptical this would work so tidily when I first implemented it for a test render, but was pleasantly surprised how everything lined up perfectly and, unless M was too large, the boundaries between M-escape dwell bands around the mini were totally seamless. (Dislocations appear along those boundaries when there are errors.)
Note: all image series I've produced with this technique (Mandelbrot Safari and Seahorse Odyssey) had spot-checks along the way, low res images computed both this way and normally to check for errors or discrepancies of any kind, to make sure it was working.
The image at the start of this thread must contain many of the dwell band boundaries, but appears completely seamless.
In theory, the technique could be chained: with a zoom path past a series of minibrots A, B, C, D etc. one might use this technique around minibrot D to get most of the way to C, then use it around C to get most of the way to B, then A, then out much of the way to the main set, and perhaps do very little work at extended precisions.
The difficulties lie with automating this technique. It also (unlike perturbation) is grossly unsuited to exploration; only to generating zooms centered on a deep minibrot after the fact of said exploration.
|
|
|
|
|
Logged
|
|
|
|
claude
Fractal Bachius

Posts: 563
|
 |
« Reply #17 on: May 25, 2014, 11:22:20 AM » |
|
Thanks for the explanation! It makes sense, my brief experiments didn't do the splitting into k + jp and just gave an image of a non-hairy minibrot. Have you tried with distance estimation too?
|
|
|
|
|
Logged
|
|
|
|
|
Dinkydau
|
 |
« Reply #18 on: May 25, 2014, 11:51:12 AM » |
|
In this event, one can take a point near the deep minibrot and find the corresponding point near the main Mandelbrot set (so that the above transform maps the latter point onto the former) Wow, really? Is that it? Thank you for the explanation. Interestingly, I discovered the same relationship between minibrot versus "mainbrot" dwell bands inside your mandelbrot safari thread, after a comment about composing zoom paths by Kalles fraktaler. That was without realizing at any point that you were actually using something like that all the time, in a very smart way, to speed up your rendering! (and you didn't mention)How do you find the translation, scaling, and rotation transform required before rendering the minibrot already? Also how do you find the period of a minbrot? I was surprised you could provide the exact number in your mandelbrot safari thread but I thought it was kinda meaningless to know it with such accuracy in that context; now I understand it's actually very important.
|
|
|
|
« Last Edit: May 25, 2014, 11:57:29 AM by Dinkydau »
|
Logged
|
|
|
|
claude
Fractal Bachius

Posts: 563
|
 |
« Reply #19 on: May 25, 2014, 12:05:10 PM » |
|
How do you find the translation, scaling, and rotation transform required before rendering the minibrot already? The page I linked to has some formulas, they work with complex numbers so the scaling and rotation relative to the top continent is  and the translation is the coordinates of the minibrot (top continent has coordinates 0+0i). Shouldn't be too hard to combine these from two minibrots to make a transformation relative to one minibrot from the other. Also how do you find the period of a minbrot? You can use the Jordan curve box method described by Robert Munafo here: http://www.mrob.com/pub/muency/period.htmlOr use partials (n where z_n reaches a minimum) and Newton's method to find the nucleus and see if it's where you expect it to be.
|
|
|
|
|
Logged
|
|
|
|
knighty
Fractal Iambus
  
Posts: 819
|
 |
« Reply #20 on: May 25, 2014, 09:38:19 PM » |
|
(and you didn't mention)
 I've noticed this effect once while playing with a fragmentarium shader (mandelbrotOrbitTrap.frag) where the orbit trap is a circle centered at 0. I never thought it would be used to optimize MBset renderings (and in such dramatic way). R-E-S-P-C-T masters!  IMHO, it deserves an article and a thread of its own. You can use the Jordan curve box method described by Robert Munafo here: http://www.mrob.com/pub/muency/period.htmlOr use partials (n where z_n reaches a minimum) and Newton's method to find the nucleus and see if it's where you expect it to be. Or use a kind of interval/affine arithmetic as the one I used here to compute mandelbrot polynomial roots (Newton method is also used). A couple of pictures from fragmentarium (the radius of the orbit trab is given in the file names).
|
|
|
|
Logged
|
|
|
|
|
Pauldelbrot
|
 |
« Reply #21 on: May 26, 2014, 12:43:01 PM » |
|
Wow, really? Is that it? Thank you for the explanation. Interestingly, I discovered the same relationship between minibrot versus "mainbrot" dwell bands inside your mandelbrot safari thread, after a comment about composing zoom paths by Kalles fraktaler. That was without realizing at any point that you were actually using something like that all the time, in a very smart way, to speed up your rendering! (and you didn't mention) I considered it to be highly experimental at the time. I wanted more experience with it. Also I didn't (and still don't) have anything turnkey-ready for other people to use, due to the automation complexities. How do you find the translation, scaling, and rotation transform required before rendering the minibrot already? Very tediously, generally using a rough low-res image of the nanobrot and a superimposed scaled and rotated unzoomed (or even zoomed out a bit) Mandelbrot to get the coarse adjustment, and then using small "keyhole views" of the nanobrot at the tips of the three biggest antennae (top, bottom, spike tip) to fine tune things and verify at the end that everything is aligned. That's quite a bit of manual work. Which is why this probably can't be considered ready for prime time yet. Also how do you find the period of a minbrot? I was surprised you could provide the exact number in your mandelbrot safari thread but I thought it was kinda meaningless to know it with such accuracy in that context; now I understand it's actually very important. Software can iterate a point in the minibrot a few million times, and then save, then iterate until the difference from the saved value becomes very tiny again, counting between these two. For confirmation, checking at a dwell boundary for any seams in the coloring (with something fairly high frequency in the gradient) can verify that it's exactly right. If it's off, even by one iteration, with a high frequency gradient there will be seams, particularly at deeper boundaries (closer to the nanobrot).
|
|
|
|
|
Logged
|
|
|
|
|
Pauldelbrot
|
 |
« Reply #22 on: May 26, 2014, 01:01:48 PM » |
|
The page I linked to has some formulas, they work with complex numbers so the scaling and rotation relative to the top continent is <Quoted Image Removed> and the translation is the coordinates of the minibrot (top continent has coordinates 0+0i). Shouldn't be too hard to combine these from two minibrots to make a transformation relative to one minibrot from the other. You can use the Jordan curve box method described by Robert Munafo here: http://www.mrob.com/pub/muency/period.htmlOr use partials (n where z_n reaches a minimum) and Newton's method to find the nucleus and see if it's where you expect it to be. You could go much farther than that. My sketch for how to begin automating this, starting from a point c somewhere in the cardioid of a nanobrot: 1. With  = z^2 + c) and  = f_c(f_c(...(f_c(z))))) ( i repetitions), compute , f_c^2(0), f_c^3(0) ...) for a large number of iterations, or until Brent periodicity detection trips, then find iterates ) and ) that are very close and minimize p > 0. That's probably the period. 2. Letting  = f_c^p(0)) and  = f_c^{2p}(0)) , use Newton's method to find zeros G and H of g and h respectively close to c by using c as the initial guess. These should be the center of the nanobrot cardioid and the center of its period 2 disk, respectively, if nothing went horribly wrong. (If h converges to the same point G as g, then it may be necessary to do a few iterations approximating Newton applied to }{g(c)}) , then switch to just h.) 3. Compute the parameters of an affine transform that maps 0 to G and -1 to H. That might take care of finding the transform (and its inverse), as well as the period of the nanobrot. The tricky bit that still remains, though, is figuring out how big the bailout for the "Seven League Boots iterations" should be. It won't always be the square root of the magnification; sometimes it will be considerably smaller. There's also the tricky matter of, given that an exploratory session has produced a point in a final deep nanobrot's cardioid, finding (automatically!) all the shallower "flyby minibrots" within whose enhanced-symmetry zones the point is, so as to be able to chain this technique.
|
|
|
|
|
Logged
|
|
|
|
|
Kalles Fraktaler
|
 |
« Reply #23 on: May 26, 2014, 09:42:59 PM » |
|
It's irked me just slightly that just as I was developing this method someone stole my thunder by producing the even more potent perturbation method.  I think your contribution to psa is indeed a big thunder since it was not complete at all when mrflay left the scene, and with your glitch detection method you completed it!
|
|
|
|
|
Logged
|
|
|
|
|
Pauldelbrot
|
 |
« Reply #24 on: May 27, 2014, 01:54:47 PM » |
|
I think your contribution to psa is indeed a big thunder since it was not complete at all when mrflay left the scene, and with your glitch detection method you completed it!
Thanks!
|
|
|
|
|
Logged
|
|
|
|
claude
Fractal Bachius

Posts: 563
|
 |
« Reply #25 on: June 05, 2014, 08:44:23 PM » |
|
The tricky bit that still remains, though, is figuring out how big the bailout for the "Seven League Boots iterations" should be. It won't always be the square root of the magnification; sometimes it will be considerably smaller.
I've made some progress automating (using the beta/lambda stuff from ibiblio for scaling and partials/newton to find all flyby minibrots), but this is what I'm stuck on at the moment with bad seams when the different bigstep iterations don't match up. I think my escape radius choices are too big, so the features get distorted too much before chaining to the next outer minibrot - using mercator map I should jump to the next inner minibrot after passing through its corresponding embedded julia set sufficiently far that the features are flat lines (circles around the target). Any ideas if this is correct, and moreover how to automate this part? http://mathr.co.uk/mandelbrot/2014-06-05_mercator_bigstep_glitches.png looks pretty bad so far...
|
|
|
|
|
Logged
|
|
|
|
|
Pauldelbrot
|
 |
« Reply #26 on: June 06, 2014, 09:15:28 AM » |
|
I don't think I can help much here; sorry. Getting that radius right is definitely going to be the hardest bit to automate.
|
|
|
|
|
Logged
|
|
|
|
SeryZone
Strange Attractor
  
Posts: 253
Contemplate...
|
 |
« Reply #27 on: June 07, 2014, 10:11:28 AM » |
|
1) Pauldelbrot, what's soft you use? 2) So, you really used 9*10^10 iterations for this? I think, we should use petaflops computers for calculating so hard locations... 3) How to make so awesome multicolor palette?
|
|
|
|
|
Logged
|
|
|
|
|
Pauldelbrot
|
 |
« Reply #28 on: June 07, 2014, 10:17:22 AM » |
|
1) Pauldelbrot, what's soft you use? Custom much of the time. Other times, UF with heavy use of own formulas and colorings. 2) So, you really used 9*10^10 iterations for this? I think, we should use petaflops computers for calculating so hard locations... That's the accuracy at which it's rendered, but the speedup discussed above allowed jumping forward by several times the period of the final minibrot at the start of each pixel. 3) How to make so awesome multicolor palette? Multiwave. There's a ucl for it posted around here somewhere, and it's also implemented in Nanoscope.
|
|
|
|
|
Logged
|
|
|
|
|