A few months ago, lyc
happened to be staying/working at a house that is about an hour train ride from where I live. We hung out three times during his trip and had so much fun. We stayed up until the sun came up talking about many things. He even gave me one of his live coding ray tracing tutorials. It was great to finally meet him after five years of chatting online.
On the third and final time we hung out, it was at his place in the context of a fractal meetup. Jess Platinus ChaosFissure
, and Jedakka
were there and it was really fun meeting all of them for the first time. Jedakka was a fan of Fractorium, which I had not known ahead of time. Me in the front in purple, Jedakka all the way at the back.
We kept in touch afterward via Discord and have been working furiously back and forth since July to implement a number of new features and bug fixes. He was the creative mind behind what was needed, and I of course was the implementer. In addition to that, I added a few ideas myself and even got a code merge request from a bitbucket user named Yuju Lu.
There are a lot of important changes in this update, so I urge you to get the installer from fractorium.com
as soon as you can (Mac and Linux builds coming soon). I think you will need to fully uninstall the old version first, and you must reload the dark.qss theme if you are using it.
One of the key changes is how the mouse and keyboard control the adjusting of affines. We've decided to make the default behavior be rotate only, and only allow scaling when holding shift. For a full breakdown of the new controls, see here:
I've also added a number of optimizations that will give a roughly 1-5% speedup in various cases on both the CPU and GPU. It's not much, but free performance is always nice.
As always, I welcome all feedback either here, in Discord or via email. I hope you enjoy this new version!
Here is the full list of features and bug fixes with the more important ones in bold.
-Double clicking on width or height spinner now resizes both, but scales to the one double clicked.
-Make variation tree background colors for zero and non-zero be theme-able. (Before, using the dark theme made it so you couldn't have a different color for included variations. Now you can. Credit: Yuju Lu.)
-Give tabs a height of 4px in the qss files. Looks a little large on 4k screens, but just right on HD screens which are much more common.
-Allow for toggling whether to interpolate between colors in the palette editor, or to do hard cuts between colors. (This was requested at the meetup, so now you have it.)
-Allow for adjusting spinner values with the + = or up arrow keys to increase, and - _ or down arrow keys to decrease.
-Allow for responding to global presses of + = and - _ to cycle up or down to specify which xform is set as the current one.
-Allow for adding "layers" via xaos which will add a user-specified number of xforms, and set certain xaos values to 0 or 1.
-Add a new menu item under the Edit menu to copy the OpenCL iteration kernel source to the clipboard.
-Show text on the status bar which indicates that an OpenCL kernel compilation is taking place.
-Show xform name on xform combo box when expanded. Adjust size to fit all names.
-Prevent QSS dialog from styling its editor, which makes it easier to see text when creating styles which have custom colors for text boxes.
-Attempt to preserve xaos when adding xform copies. Note this is not an exact copy, but just a preservation of some values based on position.
-Add some acceleration to the changing of spinner values when dragging the right mouse button to adjust.
-Make the pivot be the center of the viewable area when doing drag/rotate/scale with the right mouse button. (This was totally broken when the viewable area was smaller than the image size.)
--Clamp minimum scale to 10
--Draw a line from the mouse position to the pivot.
-Keep a cache of the last added final xform with each flame so that it can be quickly added, removed, then added back for testing its effect.
--This is not saved with the xml file and is solely for interactive editing.
-Add buttons to copy and paste affine transforms.
-Show xform names on the column headers of the xaos table.
-Add a color-coded third column to the variations tree which shows any properties of each variation which are non-standard. The column header has a tooltip which describes what the colors mean. (You can now finally know which variations have non-standard behavior.)
-Use a green dot for the x axis and purple dot for the y axis when drawing affines to help distinguish them more easily.
-Change the thickness of some of the lines used to draw the affine..
-Draw post affine circles using dashed lines.
-Draw a transparent circle over hovered xforms.
-Change how xforms respond to dragging. Rotate only is now the default, and scale will only happen with shift.
--Optionally do scale and rotate when holding shift, via a setting in the options dialog.
-Make the About box more presentable.
-Change qss files to make the text box in the About box be the same color as the one in the style dialog, so the link text is easier to see.
--This requires reloading the qss file.
-Add new palettes from user Rubydeva.
-Fix out of bounds crash in EmberGenome.
-Show grid setting was not being preserved during program run, only on close.
-Zooming with the mouse wheel was broken for images whose size is greater than the screen area.
-Manually typing xform weight when the xform had a name kept getting interrupted.
-Fix up some table layouts which seemed to have regressed/decayed over time for reasons unknown.
-Using undo/redo would create a new flame in the library every time.
-Solo was not being preserved when using undo/redo.
-File filtering in open and save dialogs was broken.
-Right clicking on integer spin boxes was causing the context menu to pop up, when it should be suppressed just like in double spin boxes.
-Deleting xforms was still broken.
-Snapping when dragging and holding ctrl was wrong sometimes.
-The program would very rarely crash on startup due to some values being in an uninitialized state.
-Pre/post assign method was wrong for Sphereblur, Concentric, RandCubes and PixelFlow.
-Avoid an occasional divide by zero in the OpenCL renderer when using the interactive editor.
-Only treat NaN as a bad point. Previously anything too close to zero or too close to infinity was considered a bad value. Only testing for NaN allows for infinity to be processed. Denormals are still flushed to zero. (Credit: bezo