Kalles Fraktaler 2.14

  • 283 Replies
  • 9901 Views

0 Members and 1 Guest are viewing this topic.

Offline claude

  • *
  • 3f
  • ******
  • Posts: 1622
    • mathr.co.uk
« Reply #270 on: October 14, 2020, 05:28:29 PM »
Yes, that's based on the phase/argument/angle of the first Z iterate to escape, which can be done after the loop and doesn't slow it down perceptibly even if it's not needed.

Offline FractalAlex

  • *
  • Fractal Fluff
  • *****
  • Posts: 361
  • Experienced root-finding method expert
« Reply #271 on: October 15, 2020, 09:22:44 PM »
Is it possible to have some coloring modifications based on real, imaginary and sum components (not the bailout variations, but the coloring thing)?

In Ultra Fractal it looks like this:
Code: [Select]
Basic(OUTSIDE) {
;
; Four basic and classic ways to color a fractal. Other classic
; algorithms are Decomposition, Binary Decomposition, and
; Distance Estimator.
;
final:
  if @type == "Iteration"
    #index = 0.01 * #numiter
  elseif @type == "Real"
    #index = 0.05 * (4 + real(#z))
  elseif @type == "Imaginary"
    #index = 0.05 * (4 + imag(#z))
  else
    #index = 0.05 * (4 + real(#z) + imag(#z))
  endif 
default:
  title = "Basic"
  helpfile = "Uf*.chm"
  helptopic = "Html/coloring/standard/basic.html"
  param type
    caption = "Coloring Type"
    enum = "Iteration" "Real" "Imaginary" "Sum"
    hint = "Specifies how the fractal is colored. Most options work best \
            with low bail-out values for the fractal formula, like 4. \
            The Iteration option is the classic way to color fractals."
  endparam
}
The images should look like this (the first two were rendered with XaoS, and the the third one with Ultra Fractal):
"I am lightning, the rain transformed."
- Raiden, Metal Gear Solid 4: Guns of the Patriots

Offline claude

  • *
  • 3f
  • ******
  • Posts: 1622
    • mathr.co.uk
« Reply #272 on: October 16, 2020, 04:10:21 PM »
Is it possible to have some coloring [...]
The eventual aim for 2.15 branch is to support custom colouring OpenGL fragment shader GLSL code (look at zoomasm presets for examples of syntax and data available), which should be able to do this (by using the NF and T channels, along with bailout settings, to reconstruct the final Z value) and much more.  I think working on that is a more productive use of my time than adding lots of different little hardcoded things.

Offline FractalAlex

  • *
  • Fractal Fluff
  • *****
  • Posts: 361
  • Experienced root-finding method expert
« Reply #273 on: October 16, 2020, 04:58:59 PM »
But what if I don't have the right version of OpenGL or OpenCL? Is there a backup plan for those that don't have these drivers, especially older computers?

Offline claude

  • *
  • 3f
  • ******
  • Posts: 1622
    • mathr.co.uk
« Reply #274 on: October 16, 2020, 05:12:32 PM »
Yes, there will still be a non-OpenCL code path for calculations, and I will try to make the OpenGL need only version 2.1 or so, which should be supported by pretty much anything. Supporting big images might be hard, but I aim to do that too via tiling if necessary.  The current colouring code won't go away for a long time either. If all else fails you can still use an older version, no one is forcing you to upgrade.

Offline FractalAlex

  • *
  • Fractal Fluff
  • *****
  • Posts: 361
  • Experienced root-finding method expert
« Reply #275 on: October 16, 2020, 10:23:43 PM »
The laptop that I'm using has the Mobile Intel(R) 4 Series Express Chipset Family with OpenGL 2.1. Will it be enough?
« Last Edit: October 16, 2020, 10:41:56 PM by FractalAlex »

Offline claude

  • *
  • 3f
  • ******
  • Posts: 1622
    • mathr.co.uk
« Reply #276 on: October 17, 2020, 05:08:12 PM »
If it doesn't work I'm sure you'll let me know to fix it.  But OpenGL for colouring in KF is in the future, nothing is implemented yet.

Offline FractalAlex

  • *
  • Fractal Fluff
  • *****
  • Posts: 361
  • Experienced root-finding method expert
« Reply #277 on: October 17, 2020, 11:12:43 PM »
Okay. What is the algorithm for atom domain coloring, as well as entropy coloring, the latter coloring I want also to have in Kalles Fraktaler (unless it suffers from the same problems as exponential smoothing)?

Offline claude

  • *
  • 3f
  • ******
  • Posts: 1622
    • mathr.co.uk
« Reply #278 on: October 18, 2020, 11:29:36 AM »
Atom domain colouring is based on iterations where |z| reaches a new minimum. Inner loop needs to be modified to keep track of the minimum.  Cellular colouring combines the previous minimum |z| with the current |z| at new minimum. It is essentially a point orbit trap at the origin, hobold has experimented with moving the point.

I don't know the algorithm for entropy colouring.  Link?
« Last Edit: October 18, 2020, 12:12:14 PM by claude, Reason: Clarification »

Offline FractalAlex

  • *
  • Fractal Fluff
  • *****
  • Posts: 361
  • Experienced root-finding method expert
« Reply #279 on: October 18, 2020, 01:48:05 PM »
Here's the link for entropy coloring: https://fractalforums.org/fractal-mathematics-and-new-theories/28/entropy-mandelbrot-coloring/368

Also, what's the formula for atom domain coloring?

Offline claude

  • *
  • 3f
  • ******
  • Posts: 1622
    • mathr.co.uk
« Reply #280 on: October 18, 2020, 02:55:20 PM »
Thanks for the entropy colouring link, the matlab code is clear enough.  It's purely a post-processing effect (no need for inner loop changes), so should be possible with future OpenGL colouring algorithms - I will probably need to pad and overlap tiles so there are no seams at tile edges, but that's a small implementation detail that users won't need to worry about too much (just a number to put in for stencil radius if that kind of local area-based post-processing is needed).


The formula for atom domain colouring is in 3 parts:

before iterating:
  minimum_z = infinity+0i
  atom_coord = 0+0i
  minimum_N = 0

during iteration:
  if (|z| < |minimum_z|)
  {
     atom_coord = z / minimum_z
     minimum_z = z
     minimum_N = current iteration count
   }

after iteration:
   colour based on minimum_N and/or atom_coord

variation (moving the trap point a la hobold):
during iteration:
  if (|z - trap| < |minimum_z - trap|)
  {
     atom_coord = (z - trap) / (minimum_z - trap)
     minimum_z = z
     minimum_N = current iteration count
   }


The need to do things during iteration means all the inner loops need to be modified, which is not something I am going to do outside of the OpenCL code path (a full build of KF takes 45minutes wall-clock on my laptop, without SIMD it goes down to 15minutes, with atom domain / orbit trap variations the time could easily double or triple; with OpenCL the formulas are compiled on demand and optimized for the target device).  Also it probably won't work with series approximation because you can't skip iterations when computing the running minimum.

Offline hobold

  • *
  • Fractal Fluff
  • *****
  • Posts: 357
« Reply #281 on: October 18, 2020, 04:06:55 PM »
Atom domain colouring is based on iterations where |z| reaches a new minimum. Inner loop needs to be modified to keep track of the minimum.
Another way to view this is to regard the whole orbit (of one iterated pixel) as a point cloud. Search that point cloud for the one point that is closest to the coordinate origin. The iteration number of that closest point determines colour. (This geometrical view is what led me to using a "target point" other than the origin.)

Quote
Cellular colouring combines the previous minimum |z| with the current |z| at new minimum.
Switching to geometrical view again: when there are two different orbits points P1 and P2 that both have almost the same minimum distance from the target point, that means we are close to the boundary between two different domains. Minor changes in the orbit's starting value will flip between P1 and P2 as the determining point for the pixel's domain.

In other words, looking at both the minimum distance and the second smallest distance gives me an indicator how far the pixel is from a boundary between adjacent domains. Cellular colouring uses this to emphasize those domain boundaries.

Offline gerrit

  • *
  • 3f
  • ******
  • Posts: 2244
« Reply #282 on: October 18, 2020, 09:47:14 PM »
Another way to view this is to regard the whole orbit (of one iterated pixel) as a point cloud. Search that point cloud for the one point that is closest to the coordinate origin. The iteration number of that closest point determines colour. (This geometrical view is what led me to using a "target point" other than the origin.)
Switching to geometrical view again: when there are two different orbits points P1 and P2 that both have almost the same minimum distance from the target point, that means we are close to the boundary between two different domains. Minor changes in the orbit's starting value will flip between P1 and P2 as the determining point for the pixel's domain.

In other words, looking at both the minimum distance and the second smallest distance gives me an indicator how far the pixel is from a boundary between adjacent domains. Cellular colouring uses this to emphasize those domain boundaries.
Lovely explanation.

Offline hobold

  • *
  • Fractal Fluff
  • *****
  • Posts: 357
« Reply #283 on: October 19, 2020, 12:12:31 AM »
Lovely explanation.
What can I say?

Problems that I happen to solve often turn into geometry along the way. Because if they don't, I am a lot less likely to solve them. :)


xx
Kalles Fraktaler 2.13

Started by claude on Kalles Fraktaler

90 Replies
4908 Views
Last post March 20, 2019, 05:32:26 AM
by claude
xx
Kalles Fraktaler 2.15

Started by claude on Kalles Fraktaler

0 Replies
68 Views
Last post October 14, 2020, 04:17:06 PM
by claude
xx
Kalles Fraktaler 2 + GMP

Started by claude on Kalles Fraktaler

232 Replies
12551 Views
Last post September 12, 2019, 10:27:53 PM
by claude
xx
Another version of Kalles Fraktaler?

Started by greentexas on Kalles Fraktaler

9 Replies
1184 Views
Last post September 22, 2017, 02:59:16 PM
by greentexas
xx
Kalles Fraktaler Movie Maker64

Started by Bill Snowzell on Fractal movie gallery

0 Replies
343 Views
Last post February 01, 2018, 09:29:04 PM
by Bill Snowzell