• Members of the previous forum can retrieve their temporary password here, (login and check your PM).

HD RGB Fractals Infinite Zoom (Open Source Generator App)

Migrated topic.
v1.73
-automatic resizing of the fractal preview if its smaller than the window
-the generator will not restart if you reselect the same setting that was already set

v1.72
-Added comboBoxes for colorpalette/huecycling and spin select.
-Added comboBoxes for extra spin speed and extra huecycle speed.
-fixed backwards zoom out switching parent-child color wrong

Github repository: GitHub - SkrFractals/RgbFractalGen: RGB Self-Similar Fractal GIF Loop Generator
Drive folder: RgbFractalGenShared – Google Drive
(new version are likely to be found there)
 
Last edited:
I finally got the pure c++ version somewhat working, it's uploaded on drive and github. But still not really impressed with it, doens't seem any faster, and een seems to periodcally lag for some reason when generating with "Of Animation" parallelism type.
 
New major update v1.8 Cs and Clr are on the drive and github.
-Bloom feature - useful for blurring or smoothing out, brightening, making it appear more colorful, or makign it appear more painted.
-Code cleanup and several bugfixes
-Quality of life improvements, lik not restarting when you change a settign to the same value, not freezing the GUI when you change settings, allowing cancelling of gif save if it gets stuck, and asking if you are sure when you try to close it while it's saving a gif.
-Sliders changed to textboxes, so it takes less space, and the settings are mroe precise and repeatable.
Here is an example of a sirpinski triangle with the bloom set to level 10:

update: i realized why there's still a noticeable change when the lowest dots switch to it's children, while I am already blending the color of the parent to the combined colors of its children before it splits, I realized I shoudl also do the sme for the XY, basically to ensure that in the moment the parent dot splits, the children remain in the same placce and only then spread away from each other in time.
Together with that I also got an idea for further optimization - since some values are the same in each depth of the iteration, like the size of the shape, i coudl precompute the sequence before recursively iterating, so that I don't need to divide the size by the same value for every child shape, and then their children and so on. Given how deep that goes and the number of children increases exponentially, that should save a ton of compute. I have already implemented it in Cs, now I am implementing the same in Clr and I will update then.

update: Cs update is finished, im about to upload it, the animations are truly seamless now, i can't tell at all the frame where the child and parent get switched/split. Just try to find that moment in that second gif, i bet you can't, it's literally impossible.
 

Attachments

  • bloom10.gif
    bloom10.gif
    26.2 MB · Views: 2
  • seamless.gif
    seamless.gif
    3 MB · Views: 2
Last edited:
So I was told my fractals are way too dark again, so I decided to implement a brightness setting, and allow it to go all the way to 300%.
I also found out that I actually wasn't even normalizing it to 100% brightness in the first place, but only about 60%, so now I get even more why were people callign it too dark.
Cs version with the feature is already uploaded, Clr coming coon.
Here are some images renderer at brigtness 200%, bloom 10, saturation 10, at 1280x720:
 
So I have got a new idea to further speed up the generator:
-Since I have already parallelized and optimized the image generation, the third party gif encoder was not the bottleneck
-I noticed that my generator could have already finished generating the entire animation, but the gif encoder was still not anywhere near done writing the gif
-And since the gif frame need to be finished drawing before i can unlcok the bitmap data and display it, this also slows down the visible results in the preview as it needs to keep waiting for the gif to finish encoding.
-So I went into the third party encoder, and figured out how to parallelize it as well, and will smartly manage the threads for both
-will prioritize encoding gif when images are ready, any remaining free tasks will be used for further image generation
-so that should significantly boost the performance, I already have the code changes enabling parallel threads in the third part encoder finished, now I'm implementing the thread management in my program to use that.

update: the new Cs version with the gif parallelism is on github. I also added ability to make the gif background transparent (by having -1 in void ambient setting). But since gifs don't support alpha channels, only a single transparent color, and my fractals are fully antialiased, the transparent exports will have black flickering pixels on the edges.

update: Cs v1.83 is finally debugged. I noticed that the gif parallelism, the OnlyImage mode, the Animation RAM mode, and the OfDepth mode were broken, all of that fixed now in Cs. Clr v1.83 should be coming soon as well.

update: The gif parallelization in c++ is not going so well, it's failing to write the file correctly, and so far I have no idea why. I'm giving up for now on the c++ version. The Cs work pretty well anyway.
 
Last edited:
i've made the parallel gif export work on clr, including transparency.

aslso I've noticed that I might have not pushed nay of the commited changed to the github from all the way from the beginning when I created it, I've pushed it all now, so it should be up-to-date.
 
New major version is coming soon, it will include:
1. A new highly parametrized CutFunction that will hundreds of new variants to 3 fractals - Pentaflake, Hexaflake and Sierpinski Carpet. It's a unified parametrized version of the "NoBackDiag" cutfuction that ws capable of making the pentaflakes with koch voids that's in my avatar and that mandelbrot-like hexaflake. Now expanded with way more options and a lot of these new variants look amazing.
2. I've scripted a hashing test to group together all the unique seeds, to going through them will no longer give you disappointingly repeating or no results. Now every seed will make a unique fractal.
3. Fractal definition editor to bring the cusomization ability up another notch.
4. and a couple bugfixes.
 
It might take few more days to get is stable enough, but here are all the new pentaflakes and hexaflakes:

update: still having about 3 bugs (rare random crashes, random empty void, one of the parallelism modes broken...) but the features are quite complete, plus I've added another 2 new ones:
1. void scaling parameter - bilinearly scales up the void noise so that I could include it to the mp4 conversion, so that the the compression would not just erase it and break itself from the fine noise. Plus in high resolution the fine 1px noise was simply not even very visible, now it is.
2. improved child color mixing predictions - i've said few post back that i've made the deep points slowly turn into the mixed colors of their children before they split so that the split would be seamless, but that did not account for the cut functions that can result in some children missing. Not I'm precomputing all possible chidlren color mixing configurations for the selected cutfunction, so that every point actually smootly transitions into the colors of it's own set of children that it will split into. Now I really can't see in which frame the parents split even with cutfunctions enabled!
3. savefile to load your last settings, and some safety qustions when you are about to do somethign that could lose you something.

update: it's out on github and drive

update: I've added a preview resolution pregeneration - before the main images it makes a series of incrementally smaller ones, a quarter sized one, then a quarter of quarter before that and so on, so that you can get a preview image very fast, then it gradually sharpens and then slowly begins to animate. Also I've made it so that switching the genration mode or delay doesn't restart the entire generator, but just the encoding, or let's the encoder catch up with the missing frames.
 
Last edited:
I am preparing a new feature. I was toying with the various cutfunction seeds finding nice fractals, and I did find a bunch. Some very even complex and interesting enough that I started to wish I could zoom into some parts of these than just the center. And so I Itried to add that as a feature. It was quite a pain in the ass to implement, the generator is built from the ground up assuming zooming to the center in every way, and it still is even with the feature on, I'm jsut shifting the traget location to the center eavy frame. This feature also required to rewrite msot of the very complex calculations predicting the symmetries periods and such, to ensure it can still automatically loop seamlessly even in these new cases. And now it's strating to look like it does work, though still a few issues I need to iron out.
 
update: I was not even fully finished with the child zoom feature, and I've got another idea for a new idea, so I'm going to imlement that as well I decided.
The feature will be customizable color palettes. Before this there were basically just 2 built in palettes (RGB and BGR) and picking them was combined with the 3 hue shifts (static, -> and <-). Giving you options RGB BGR RGB->GBR RGB->BRG BGR->GRB and BGR->RBG. I'm gonna have to split this choice to just the palette and just the shifting.
I've already got a bunch of idea what new palettes to add, like colorblind simulation, for colorblind people, black and white, wavy etc. Adn I might even let the user make their own palette to add to the list.
Thoguh soon into the implementation I've realized I'm gonna have to mostly rewrite all of the color sampling functions, and most infuriatingly even the hueshift period calcualtor, which was really complicated and pain in the ass to derive in the first place. Completely incompatible with the new palettes, so I'm getting back to the dariwng board with that.

update: seems like everything about the new color palettes seems to be working now, I am still testing all the different combinations of settings to be sure nothign is broken, and will still need to fix a few broken zoomChild settings, but the next stable version release is probably around the corner.

update: it's nice when you realize what you thought was a bug was not actuallya bug at all. I was testing the zoom children on this fractal, and notice, that a bunch of them just gave me empty void. So I put that on a bug list to investigate. Now it hit me that of course, those haveto be the children that the cut function cut out entirely and tyurned into big voids, ofcourse zooming infinitely far into that will just render nothing. But I guess I could try to predict which zoomchildren will get cut out with the selected cutfunction with the selected seed and exclude them from the options. update: it's done, and so far I haven't seen any bug for a while, so I'm about to release it. update: it is on github and google drive. Here's the links again so you don't have to go through all the posts to find it:


What will be new in v1.10.0:
-added more AngleSets to TetraTriFlake
-fixed crash when lowering max threads
-fixed Antispin not working correctly in OfDepth mode
-fixed crash when changing the number of children in the editor
-and some more bugfixes
-expanded and custom color palettes
-no zoom option (make sure to account for in hue multiplier)
-fixed OfDepth pixels

And some examples of the new features in the attachments:
-PREVIEW_NOZOOM: No Zoom + new color palette (RYGCBM rainbow)
-PREVIEW_CUTFUNCITON: The one fractal i was testing zoom children on
-PREVIEW_ZOOMCHILD: The same fractal, but now it's zooming into the corner child (one of the 6 wheels at those corners)
 

Attachments

  • PREVIEW_CUTFUNCTION.gif
    PREVIEW_CUTFUNCTION.gif
    6.6 MB · Views: 2
  • PREVIEW_NOZOOM.gif
    PREVIEW_NOZOOM.gif
    33.2 MB · Views: 3
  • PREVIEW_ZOOMCHILD.gif
    PREVIEW_ZOOMCHILD.gif
    50.8 MB · Views: 2
Last edited:
So like always I was just about to finish exporting all the updated videos when i got yet another idea to make them all obsolete again. I'll never reupload the videos at this rate lol. Since I've been making the video by converting a GIF export to mp4, it suffered a 256 color palette that is the maximum for GIF format. But Mp4 can handle full 24-bit colors, so I decided to add a feature that exports all frames as lossless PNGs and then converts those into the high quality MP4. At least I also made a performance upgrade that made it about 4 times faster.
 
Back
Top Bottom