Section 5 of 14

Finding good locations

Rendering modes showed the many ways to render a location. This page is about finding the locations themselves. A location is the geometric half of a wallpaper: a fractal family with its constants fixed, plus a frame given by a center and a width (the aspect ratio is fixed). Color is deliberately absent. Mode and palette are chosen later, in finding good wallpapers.

What makes a location good

There's no geometric definition of a good location. It's an aesthetic call, and the pipeline's working definition is my own taste. I rate locations on a four-point scale, from junk to exceptional wallpaper material. Each rating looks at two differently colored renders of the same place, because what I'm rating is the geometry: could this place make a good wallpaper across the modes and palettes available to it? Those ratings train the location judge, a small network that predicts the same scale (training judges). Here are a few examples from each rating:

1

junk: too empty, too plain, or too formless to use

A multibrot d = 4 frame a person rated 1, drawn in one neutral palette.
A multibrot d = 4 frame a person rated 1, drawn in one neutral palette.
A Julia d = 2 frame a person rated 1, drawn in one neutral palette.

2

something is happening, but it does not hold the frame

A Mandelbrot frame a person rated 2, drawn in one neutral palette.
A Julia d = 5 frame a person rated 2, drawn in one neutral palette.
A multibrot d = 5 frame a person rated 2, drawn in one neutral palette.

3

a keeper: worth rendering properly and coloring

A Phoenix frame a person rated 3, drawn in one neutral palette.
A Julia d = 4 frame a person rated 3, drawn in one neutral palette.
A multibrot d = 5 frame a person rated 3, drawn in one neutral palette.

4

exceptional: wallpaper material as it stands

A Julia d = 4 frame a person rated 4, drawn in one neutral palette.
A Julia d = 5 frame a person rated 4, drawn in one neutral palette.
A Phoenix frame a person rated 4, drawn in one neutral palette.
Three examples from each of the four location-rating classes, all drawn in one neutral palette so the geometry is the only thing varying.

Interesting detail crowds the boundary of a set (escape-time fractals), but the boundary alone isn't enough. Below are twelve viewports drawn at random along it, kept only if they passed a crude complexity check. I rated almost all of them mediocre at best, and that held across more than a hundred such draws.

A Mandelbrot frame taken at random on the boundary, drawn in one neutral palette.

width 0.00854

A Mandelbrot frame taken at random on the boundary, drawn in one neutral palette.

width 0.00234

A Mandelbrot frame taken at random on the boundary, drawn in one neutral palette.

width 0.0298

A Mandelbrot frame taken at random on the boundary, drawn in one neutral palette.

width 0.00268

A Mandelbrot frame taken at random on the boundary, drawn in one neutral palette.

width 0.0181

A Mandelbrot frame taken at random on the boundary, drawn in one neutral palette.

width 0.0132

A Mandelbrot frame taken at random on the boundary, drawn in one neutral palette.

width 0.00871

A Mandelbrot frame taken at random on the boundary, drawn in one neutral palette.

width 0.0474

A Mandelbrot frame taken at random on the boundary, drawn in one neutral palette.

width 0.00133

A Mandelbrot frame taken at random on the boundary, drawn in one neutral palette.

width 0.0182

A Mandelbrot frame taken at random on the boundary, drawn in one neutral palette.

width 0.0566

A Mandelbrot frame taken at random on the boundary, drawn in one neutral palette.

width 0.011

Twelve frames from one random draw over the Mandelbrot home view, all of them survivors of the structural gates.

Views I rate highly are rare, and they cluster: a spiral worth framing tends to sit near other spirals worth framing, as in Seahorse Valley. So this is a search problem. It needs promising places to start, a way to move locally, and a way to tell better from worse. The location judge is the last of those, and the search is a guided walk that explores thousands of frames per run.

Minibrots

Escape-time sets contain infinitely many miniature copies of themselves. In the Mandelbrot set they're called minibrots, and the multibrot planes of degree 3 to 6 have their own. Each copy has a nucleus, the c where the orbit of fc(z) = zd + c, started at zero, returns exactly to zero after p steps. That makes the nucleus a root Newton's method can solve for, so a minibrot is an exact coordinate at a known scale, not just a shape (code: the nucleus solver).

I rate the filaments and spirals in the halo around a copy highly, more often than the copy itself, so minibrots tend to sit near locations worth framing.

Three minibrots from finished gallery wallpapers (bottom), under the whole set each one sits in (top). The small dark shape is the copy's body; the structure around it is its halo.

The walk

Each family gets its own walk: a growing forest of frames. The frontier is a priority queue, and the walk keeps expanding the most promising frame it knows about (code: the walk). Its roots come from several channels that I interleave rather than rank: seed views from solved nuclei and each plane's home view, pools of Julia constants from earlier discoveries, locations I've already rated well, and roots the twin channel makes during the run (below). Roots from proven material account for most of what a run admits, but fresh roots are how the walk opens territory nobody has looked at yet.

An expansion proposes four children inside the parent, each 35 to 50% of its width. Most are aimed at foci. The walk blurs the field at several radii and keeps the peaks that survive every blur, so a child points at coherent structure rather than one bright pixel. The rest are placed at random or toward dense detail, as insurance against the focus finder's blind spots.

One frame of the walk, with the foci the blurring kept ringed on it and the four frames its children were proposed at outlined in four colors.

the frame the walk is standing in

The frame proposed as child 1, drawn in one neutral palette.

Child 1 · aimed at red focus

The frame proposed as child 2, drawn in one neutral palette.

Child 2 · placed at random

The frame proposed as child 3, drawn in one neutral palette.

Child 3 · aimed at green focus

The frame proposed as child 4, drawn in one neutral palette.

Child 4 · toward detail density

One expansion's proposals. Top: the parent, with the surviving foci marked and the four child frames boxed. Bottom: each child drawn on its own, in its box's color, labeled with what it was aimed at.

Each child then goes through four steps:

  • Render. It's drawn once, small, in a fixed neutral palette, and the gates and the judge both read that one picture.
  • Gate. Structural checks drop frames that are mostly interior, escape at once, have a flat field, or have too few tiles with edge detail.
  • Score. The judge gives the probability the view would rate at least a 3. Above the admission bar a frame is a find. Between the admission and expansion bars it's a stepping stone the walk may explore through. Below that it's refused. The bars are operating policy on one model's scale, restated at each retrain to keep the same volume admitted. A parameter-plane descent starts wide and bland, so its first few rungs are excused the expansion bar.
  • Prioritize. Queue order is the judge's score plus one random draw per frame plus a small depth bonus, so frames get picked roughly in proportion to their score. Each batch of eight reserves a quarter for untouched roots and two slots for reframings, and a root retires after twelve expansions on a parameter plane or thirty-six on a Julia or Phoenix plane.

The judge never moves the camera. It only reorders the queue and decides each frame's fate; where the walk can go is decided by the proposal rules.

Every scored frame goes into the walk's append-only ledger, refusals included. That ledger is the walk's product, and rendering, palette choice, and curation all draw on what it admitted. A branch stops at a minimum width of 10⁻⁹, and the walk ends when its run budget does.

Five rows. Each has one fractal view on the left and four smaller views beside it, every small view labeled with a number; the bottom row's four are finished color wallpapers.
One descent, from the whole set to a wallpaper. Each row shows the frame the search is standing in and the four it offers, with the judge's estimate under each; a green border marks an admitted frame, and the amber corner follows the one this descent took. The top row is four starting places rather than proposals, and the bottom row is the location the descent kept, with four wallpapers of it.

Reframing a find

My first idea for skipping the search was to enumerate minibrots directly and use them as seeds. It failed: a good view usually has a minibrot nearby, but nearly all minibrots sit in dull neighborhoods. What works is the reverse: find minibrots near views the walk already likes and recompose the camera around them. A reframing inherits the quality of the view that triggered it. Three operators do this, each firing when a kept frame shows signs of a minibrot:

  • snap_to_nucleus solves for the nucleus and centers it. It's accepted only when the nucleus lies within a bounded distance of the frame, relative to its width, so most attempts are refused and it stays a local correction.
  • lateral_to_sibling looks around the current minibrot for a neighbor at comparable scale and frames that one.
  • expand_neighborhood sweeps the surrounding disc for minibrots at the current scale or below and proposes the best two.
Three rows, one per reframing operator: the triggering view, what the operator proposed, and the best frame admitted below it; then one frame reframed three ways.
The three reframing operators, one row each: the frame that triggered it, what the operator proposed, and the best frame the walk went on to admit below it. At the foot, one frame all three fired on, answered three different ways.

Inside the walk a reframing is a move, not a find. The reframed view goes onto the frontier, and only its children are scored. I size those frames outward, never at the copy's own size, because what I want from a minibrot is its halo.

Reusing previous finds

Quality clusters tightly, so most of the effort explores around known-good seeds, with a steady share of fresh roots looking elsewhere. A run reads whatever map exists when it starts and never waits on new labeling.

The Mandelbrot-Julia connection pays a second dividend. An admitted parameter-plane location's center c is a Julia constant, and a Julia set inherits the character of where its c sits. For the Julia families of degree 2 to 6, the center of an admitted plane location of the same degree becomes one of their roots; only degree 2 also has a pool of constants of its own. That's the twin channel. A new twin is skipped if its c is within 0.032 of one already accepted. I measured the near-duplicate rate across five decades of separation and found no knee, so the radius is just how much near-duplication I'm willing to pay for.

The reframing operators also run as a channel of their own, outside the walk. They fire at highly rated plane locations, solve each nearby nucleus, and let the judge pick the best of a ladder of outward framings, which is recorded as a new location. Later generations fire at nuclei that earlier ones promoted, so the channel grows chains of derived neighborhoods. It has become one of the strongest sources of good locations in the project. The figure below follows one seeded chain from its root to an admitted frame, with an expand_neighborhood reframing in the middle.

Step 1 of 6 of one descent: a multibrot d = 5 frame drawn in one neutral palette.

1 of 6the rootRated 4 by handwidth 5.13×10−5the proven channel: a root per rated keeper

Step 2 of 6 of one descent: a multibrot d = 5 frame drawn in one neutral palette.

2 of 6zoom onto a focusexpandablewidth 2.33×10−5

Step 3 of 6 of one descent: a multibrot d = 5 frame drawn in one neutral palette.

3 of 6zoom, placed at randomadmittedwidth 9.21×10−6

Step 4 of 6 of one descent: a multibrot d = 5 frame drawn in one neutral palette.

4 of 6expand_neighborhood16× the copy's own sizewidth 1.81×10−7

Step 5 of 6 of one descent: a multibrot d = 5 frame drawn in one neutral palette.

5 of 6zoom onto a focusexpandablewidth 6.70×10−8

Step 6 of 6 of one descent: a multibrot d = 5 frame drawn in one neutral palette.

6 of 6zoom onto a focusadmittedwidth 2.42×10−8

One seeded chain, frame by frame in order, from the rated root to the admitted find.

Examining walk quality

In one run, 98% of roots seeded from locations I'd rated well admitted at least one frame, against 22% of roots drawn fresh from the boundary. Both kinds were walked to about the same median depth. Starting in a good neighborhood pays off, and searching a poor one harder doesn't, which is why the pipeline invests in seeding rather than longer walks.

Three bar charts of how deep each root's walk got, beside three bars of how many roots produced a find at all.
Left, how deep each root's walk got, in rungs below the root; right, the share of roots that admitted at least one frame. The top two rows are the two kinds of root in one run, and the third is a different run, shown for scale.

The refusals hold up: the frames turned away are the flat, exterior, and interior-dominated ones the gates exist for. The walk is looser about what it keeps open, and many expandable frames lead nowhere. I keep it that way, because the cost is frames walked, not bad admissions.

Training judges covers where the location judge comes from and what a small network can and cannot be trusted to know.

A sample of the admitted pool the mode and palette work draws from.