I got #fast (constant work per pixel) #DensityEstimation for #FractalFlame working!
Takes about 1-2 seconds to do the DE for a typical 2048x1024 image.
Much faster than my previous attempts which were O(dim^2) per pixel, or O(dim^4) for the whole image (totally impractical for non-tiny images).
I've written a blog post about it which will be published on Saturday.
#FractalFlame #DensityEstimation #fast
Ported my #FractalFlame renderer to #OpenCL. Even on #GPU the #DensityEstimation is way too slow to be useful, it's quicker to get the same visual quality by plotting a zillion points.
The attached has around 8k samples per pixel, taking around 1min/frame (1 hour total). 256k subframes for motion blur, each being a single path of 16k iterations. Only plain simple #MoebiusTransformation stuff without xaos control..
#MoebiusTransformation #DensityEstimation #gpu #opencl #FractalFlame
Working on my #FractalFlame renderer.
Better #DensityEstimation, doing it with linear histograms instead of logarithmic makes it work with "keep doubling" batch sizes instead of having to do it every small constant batch size. This sped up one test from 18s to 12s.
Also proper #BézierCurve interpolation of the #MoebiusTransformation via #Slerp of multiplier and two fixed points on the #RiemannSphere, remembering that additional #ControlPoints are needed and the curve passes through only every third point. The additional points are generated from approximated derivatives at the points where the curve passes through. Animation speed is normalized: parameter found by binary search in a precomputed array of approximate arc lengths.
Also #AutoWhiteBalance copy/pasted from GIMP, only the first frame is analysed and the resulting bounds are applied to all frames, to avoid strobing from independent frames (better would be to analyse the whole video, but storage is probably a bit of an issue for that).
Also #MotionBlur by accumulating discrete subframes of 1-sample-per-pixel each into the histogram, I think the video has 256 samples per pixel total.
#FractalFlame #DensityEstimation #BézierCurve #MoebiusTransformation #Slerp #RiemannSphere #ControlPoints #AutoWhiteBalance #motionblur
Without any #DensityEstimation at all the same number of samples takes only 42mins wall-clock on the same CPU. Colours are different though: there's more contrast, and the highlights are less saturated.
I tried to speed up the adaptive #DensityEstimation by doing it only after each doubling of samples, but it didn't work out. Works much better if you do it after a constant number of samples, which means you need to do it way more often, but later passes should be faster if the image density histogram isn't too pathological.
Attached image is with density estimation after each average 1 sample per pixel accumulation, total number of points plotted is 65550.5 samples per pixel. Render time was 75mins wall-clock on a 16-thread CPU. Image was post-processed to improve contrast (GIMP auto white balance).