Friday, January 31, 2020

Fractal Friday 2020.01.31

For this week's post I'm showing off more of the rendering and layer-compositing options that are part of MathPaint. I'm using the same fractal settings for all of this week's images - a Mandelbrot set with breakout value at 10.0, max iterations set to 200, and viewed at the (approximate) ranges [-1.432, -1.345] on the x-axis and [-0.026, 0.06] on the y-axis.

Here's a 5-color linear gradient rendering, with the colors set at iteration-levels 1, 44, 90, 150, and 200:



We can play with not only the assigned colors, but also the way the colors are mapped. Here's the same fractal using a color cycle, where each level is mapped to the next color and when all colors are used up, it starts again. I get a gradual gradient effect here by using 16 colors, all the same shade of blue that get darker and lighter through the cycle, so it's a more gentle effect than my previous color cycle examples:



The rest of this week's images all take advantages of MathPaint's layered-rendering architecture. Fractals are just one of the types of layers we can create, and all layers support transparency so they can be composited. Here's another gradient rendering, but in this case the max color is assigned to be transparent, so whatever is in the layer below will show through the set. I've put a cartesian function layer underneath to create a pattern with a repeated, gently-skewed sine function:



I also added a couple of CoreImage filters to the above rendering, to add a little extra glow and vibrancy.

The edge-drawing mode that MathPaint supports also leaves a transparent background by default (though you can turn on an opaque background color if desired). Here's the same fractal rendered in edge mode, with a 2D geometry layer underneath. The polygon is drawn repeatedly with a resize-shape delta applied to create the expanding background pattern:



The final example uses two fractal layers, with the same basic parameters but very different rendering approaches. The front layer only calculates every 10 points on the grid, and draws a circle whose size is scaled by the iteration value, again leaving a transparent background. The underlying layer is rendered with a three-color gradient:



I'm getting pretty excited about the upcoming private beta of MathPaint 1.0! If you want to keep up on MathPaint release news you can "Like" the MathPaint Facebook Page, and if you would like to see more images made with MathPaint just follow Mathaesthetics on Instagram, Facebook, Twitter, or Pinterest.

Friday, January 24, 2020

Fractal Friday 2020.01.24

This week I've been busy working on the MathPaint architecture so didn't develop any obvious fractal rendering features... Though I did succeed in getting some optimizations in to speed things up, and the fractal renderer is now fully concurrent (using Cocoa OperationQueue and Operation objects.)

This week I chose to explore another of my favorite fractals, the 3rd-degree Julia Sets (same as regular Julia sets but taking z^3 instead of z^2.) I also decided to keep things fairly consistent in terms of color this week, using linear gradient mappings between three colors for each image. I hope you enjoy the results!






Next week I expect to get a little more experimental, particularly since the performance improvements will all be done so I will be able to visit unexplored areas more quickly. Until then, you can follow Mathaesthetics on FacebookTwitterInstagram, and Pinterest.

Friday, January 17, 2020

Fractal Friday 2020.01.17

This week's images again come from some experiments with new features for MathPaint, the flagship software app I'm working on.

Previously I posted some experiments with edge rendering in fractal geometry, where only the boundary between levels of output are drawn. It shows the boundary between iteration levels but does not indicate the level itself (which is normally shown by a color gradient value).

This week's experiment takes a different approach to interpreting iteration values, which are integers in a fairly small range (usually 1 to 100 or at most a few hundred). Rather than render the level as a color, we convert it to a size - and draw a shape centered at the point, at the indicated size. Higher iterations create bigger shapes, quick iteration boundaries create very small shapes. We use a sparser grid (only evaluating one of ever five, eight, or 10 pixels - the setting can be adjusted). The idea is similar to an alternate vector field rendering which was explored in this blog.

Here's the familiar Mandelbrot set, rendered with squares drawn at sizes corresponding to iteration levels:


I like the rather stark, structured aesthetic that the squares lend to the shape. A bit more lively is this Julia set zoom, drawn with the same square shapes (and a different line color):


Different shapes can change the character of the rendered images. Here's a z^5 julia set (one of my favorite forms) rendered with circles, drawn with a 2-point line:


And a zoom in on the same image, with background and foreground colors changed - I like this as an abstract image that isn't recognizably a fractal, but the underlying math gives subtle organic pattern to parts of it:


Finally here is a regular Julia set rendered with 45° diagonal lines, first zoomed in, then zoomed back out with thinner lines:



More MathPaint screenshots and mathematical art coming next week! You can follow Mathaesthetics on FacebookTwitterInstagram, and Pinterest.

Wednesday, January 15, 2020

Hello World, from MathPaint! (Preview)

If you've been following Mathaesthetics posts you've seen a variety of images shared - different types of generated art from fractals to repeated 2D plots to vector fields and scalar fields and more.

All images on this blog are created by our flagship software product, which has been in development since November 2019. Today for the first time I'm publicly sharing some screenshots of the user-interface, starting with a few document windows:

Hello World, from MathPaint!

These MathPaint documents were used to create our app icon and current Facebook cover.

MathPaint is a Mac OS desktop application written in Swift. A private beta release is planned for February 2020, and the completed 1.0 application will be released later this year, through the Apple AppStore.

CoreImage effects can be applied to any MathPaint canvas
I've always felt that creativity and mathematics belong together. MathPaint is designed for creative professionals who would like to harness of of the endless generative capability of mathematics to create visual forms, patterns, textures, and algorithmic art. You don't need to be a programmer to create such designs with MathPaint, and the release will include visual templates and presets that are intuitive to browse and modify, plus cool automation features:

The "Repeater" feature can add multiple iterated re-renderings to a model

I also think MathPaint is a natural tool for students. While there are robust software products for mathematical modeling and computation, MathPaint focuses on aesthetics and uniquely permits the creative impulse to guide mathematical learning and exploration.

I will be using MathPaint to make art, and I hope to see a community of makers who create original expressive work with this software. Even algorithmic artists used to coding may find some rewarding features and workflows with this tool.

Document settings give you a page-layout app's control over your math-art canvas.

Now that the first screenshots are out, look for weekly updates and posts on MathPaint progress! And of course, a continuing stream of art, including our Fractal Friday posts, all made by MathPaint.



Friday, January 10, 2020

Fractal Friday 2020.01.10

ICYMI, I'm currently writing an application that generates mathematical art. It's created in Swift, for Mac OS desktop systems. All the images on this blog are created from it, including the fractals posted every Fractal Friday.

This week I hooked up a full range of CoreImage effects to the app, and I'm having fun sending fractals through tiling effects to create some really cool repeating patterns.

For the first one I used a small 320x320 source image of an edge-rendered Julia set section

I played around with this image using the Twelvefold Reflected Tile and Eightfold Reflected Tile filters to get these:




I used a more psychedlic-looking color-banded Mandelbrot section for the next set:


Friday, January 3, 2020

Fractal Friday 2020.01.03

The noise renderer has gotten more sophisticated in the past week, and it's being put to work in this week's set of fractals. Each image includes a generated noise-texture, with various approaches to transparency in the fractal permitting the texture to show through.


The Julia set image above has a semi-transparent purple in the color mapping which permits a fabric-like texture to show through giving the rendering the feeling of a woven fabric or paper fiber texture.

This bold, edge-drawn mandelbrot set view is a bit more stark against its chiseled, black-and-gray noise surface:


An N-cubed mandlebrot section gets a bit subtler treatment with a horizontal grain texture, which shows through most clearly in the dark 'maxed-out' section:


A bit crazier are the curve-and-line-segment generated scribbles showing through this Julia set segment's color cycle, with transparency in each color band:


While it's only the beginning of January, this 5th-degree Julia set floral image looks forward to spring, especially with the tangled green bezier-noise suggesting foliage, showing through the transparent lower-iteration values around the floral center:


All of these images were created with the Mathaesthetics flagship software, a desktop app for Mac OS X which has now been in development for two months. The first beta will be released early this year, with a full release coming before summer. If you like these images and are interested in creating your own with this software, or just seeing more as the software evolves, make sure to follow Mathaesthetics on Twitter, Instagram, Facebook - and we're also now on Pinterest!