Botond Kósa
|
|
« on: February 11, 2014, 03:28:28 AM » |
|
Mandel Machine is a highly efficient Mandelbrot set explorer application. http://web.t-online.hu/kbotond/mandelmachineMain features: - Up to 536 MP (~23000x23000) image size
- Up to 32x32 supersampling
- Magnification up to 8000 zooms (image size ~4E-2408)
- Max iterations up to 400 millions
- Iteration counts histogram
- Detailed statistics
- Full history of changes
- Save/load location and rendering attributes
- Save images as PNG files
- Copy image to clipboard
Intuitive mouse navigation: - Zoom in and out with the mouse wheel
- Zoom in faster by double-clicking
- Click-and-drag to select area to zoom into
- Selection rectangle can be moved, resized and rotated
- Right click and drag to pan (experimental)
Coloring options: - 3 palette presets
- Palette can be extracted from any jpg/png/bmp image
- 8 different iteration transfer functions
- Color density & offset adjustable
- Smooth/solid/inverted dwell bands
Optimizations to speed up calculations: - Extensive use of SIMD instruction sets (SSE2, SSE3, AVX) with single and double precision floating point data types
- Inner loops implemented in assembly language
- Arbitrary precision fixed point arithmetic using 64-bit integer data types, fully unrolled loops
- Perturbation algorithm with series approximation, automatic correction of blobs
- Tweaked Mariani/Silver algorithm to guess areas with monotonic iteration counts
- Multi-core support (up to 32 threads)
- Pixel grouping to fully saturate the execution units of modern CPUs (up to 16 pixels with SSE2, up to 32 with AVX-capable CPUs)
Upcoming features: - Calculate distance estimates
- Palette editor
- Movie maker
- ...and more...
Special thanks to Michael Condron, Bruce Dawson, Kevin Martin and Karl Runmo for sharing their ideas. Any comments are welcome.
|
|
« Last Edit: September 09, 2014, 10:30:44 AM by Botond Kósa »
|
Logged
|
|
|
|
lycium
|
|
« Reply #1 on: February 11, 2014, 04:05:12 AM » |
|
Looks very impressive for a first release, nice work! Did you write the optimised iteration kernels yourself using intrinsics, or is this via some JIT compiler?
|
|
|
Logged
|
|
|
|
cKleinhuis
|
|
« Reply #2 on: February 11, 2014, 08:20:22 AM » |
|
nice first shot, most interesting is that you feature the pertubation methods, will take a look later on!
|
|
|
Logged
|
---
divide and conquer - iterate and rule - chaos is No random!
|
|
|
panzerboy
Fractal Lover
Posts: 242
|
|
« Reply #3 on: February 11, 2014, 08:55:38 AM » |
|
Just started playing, LOVE the load image to build a palette function. You can use this to grab the colours from any JPG or PNG to build your palette. I've used it below to grab a palette from a multi layered Kalles Fraktaler image (14 layers!)
|
|
|
Logged
|
|
|
|
Botond Kósa
|
|
« Reply #4 on: February 11, 2014, 10:04:08 AM » |
|
Looks very impressive for a first release, nice work! Did you write the optimised iteration kernels yourself using intrinsics, or is this via some JIT compiler?
The iteration kernels were written in assembly language directly, and there is some code in C that prepares the data for the ASM procedures. All this is compiled with MSVC 2010 into a dll file. The application is Java-based, and the native routines are called via JNI.
|
|
|
Logged
|
|
|
|
Botond Kósa
|
|
« Reply #5 on: February 11, 2014, 10:12:42 AM » |
|
Just started playing, LOVE the load image to build a palette function. You can use this to grab the colours from any JPG or PNG to build your palette. I've used it below to grab a palette from a multi layered Kalles Fraktaler image (14 layers!) You can also open Kalles Fraktaler files (*.kfr) directly from the Load fractal definition dialog. The palette stored in KFR files is also loaded, albeit some manual adjustments on Color offset might be required (and also on Color density if Divide iteration in KFR was set larger than 1).
|
|
|
Logged
|
|
|
|
blob
Strange Attractor
Posts: 272
|
|
« Reply #6 on: February 11, 2014, 10:27:14 AM » |
|
Any chance for a 32bit version?
|
|
|
Logged
|
|
|
|
Botond Kósa
|
|
« Reply #7 on: February 11, 2014, 10:43:06 AM » |
|
Any chance for a 32bit version?
I plan to release one. It would be about 2 times slower than the 64-bit version, but still significantly faster than any software without perturbation algorithm.
|
|
|
Logged
|
|
|
|
blob
Strange Attractor
Posts: 272
|
|
« Reply #8 on: February 11, 2014, 10:47:06 AM » |
|
Great! Looking forward to it.
|
|
|
Logged
|
|
|
|
youhn
Fractal Molossus
Posts: 696
Shapes only exists in our heads.
|
|
« Reply #9 on: February 11, 2014, 02:39:49 PM » |
|
Just installed on Windows 7 64 bit. User interface feels nice.
Can I compile this on Linux ... ?
|
|
|
Logged
|
|
|
|
Botond Kósa
|
|
« Reply #10 on: February 11, 2014, 03:51:19 PM » |
|
Can I compile this on Linux ... ?
Compilation would require rewriting some parts of the C and ASM code since they were written according to the needs of the MSVC compiler. Under Linux I had to use gcc or some other compiler with potentially different calling conventions. I tried to run the installer using Wine but with no success so far. Maybe I should distribute the software as a standalone application with no installer. That could be run using Wine. I will give it a try.
|
|
|
Logged
|
|
|
|
ellarien
|
|
« Reply #11 on: February 11, 2014, 04:44:49 PM » |
|
Very nice! But I have a comment and a question, as my former supervisor used to say.
The comment: the image often scrambles on panning (but a recompute fixes it.)
The question: Is there anything I can do to get the details filled in on deeper zooms? I've tried increasing the iterations and the precision and the scale, but beyond about magnification 100 the denser areas are often missing and previously filled-in areas will go flat on zooming in or out -- though zooming in further will sometimes fill them in. Do I just have to wait for the glitch-solving functionality?
I'm running Windows 8.1 on a Core i5 laptop with 8Gb of RAM, if it helps.
|
|
|
Logged
|
|
|
|
youhn
Fractal Molossus
Posts: 696
Shapes only exists in our heads.
|
|
« Reply #12 on: February 11, 2014, 05:06:52 PM » |
|
Care to share the exact location, no. of iterations, etc ... ? Then we can have a look at it.
|
|
|
Logged
|
|
|
|
Botond Kósa
|
|
« Reply #13 on: February 11, 2014, 05:31:40 PM » |
|
The comment: the image often scrambles on panning (but a recompute fixes it.)
That's why the panning function is marked as experimental, it still needs some corrections. The question: Is there anything I can do to get the details filled in on deeper zooms? I've tried increasing the iterations and the precision and the scale, but beyond about magnification 100 the denser areas are often missing and previously filled-in areas will go flat on zooming in or out -- though zooming in further will sometimes fill them in. Do I just have to wait for the glitch-solving functionality?
This is caused by the lack of any type of glitch solving (manual or automatic). Until I add these functions try to zoom in on parts with high contrast. The reference point is found by a hillclimbing method looking for the highest iteration value, starting from the center of the image. High contrast parts usually contain a local maximum that is suitable for most parts of the image.
|
|
|
Logged
|
|
|
|
youhn
Fractal Molossus
Posts: 696
Shapes only exists in our heads.
|
|
« Reply #14 on: February 11, 2014, 06:33:59 PM » |
|
Turn off the pertubation theory to decrease these glitches (but increase duration of computation) ... ?
|
|
|
Logged
|
|
|
|
|