Name: splits
Type: 2D
Author: Michael Faber

Name: splits3D
Type: 3D
Author: Chris Johns (TyrantWave)

Name: separation
Type: 2D
Author: Michael Faber


The splits variation splits the plane horizontally, vertically, or both, moving the halves away from the center to leave a gap. Don’t confuse it with the similarly named “split” (without the final ‘s’). Here is the result of using splits on an octagon with three different settings: the first has x=0.25 and y=0, creating a horizontal split with a vertical gap; the second has x=0 and y=0.2, creating a vertical split with a horizontal gap; the third has x=0.3 and y=0.2, doing both and creating a cross shaped gap.

Splits has only limited use in a final transform (perhaps the gap will be filled using another layer), but is very powerful when iterated. To begin, let’s just focus on horizontal splits. The image below was created using two transforms: one with nBlur to create the central octagon, and the other with splits to show how it works. The first iteration of splits divides the octagon down the middle and shifts each half, creating the two half-octagons closest to the center. The second iteration divides it again, creating the next two half-octagons, and this repeats forever (though only five iterations are visible in the image).

As a general rule, the amount of the variation used to create the base (nBlur here) should be the same as the splits parameter (x here) to make the tiles fit perfectly; for this image, both the nBlur amount and the splits x parameter are 1. Each variation has its own charactistics, so this isn’t a universal rule, but it’s a good place to start.

Now that we see how splits works, let’s jump in and see one of the many possible splits styles: splits-nBlur. We start with a blank flame, add a transform, and set the variation to nBlur with a fairly small amount like 0.25. Set numEdges to 4 (to make a square) and equalBlur to 0 (to give a central highlight). On the Color tab, set the Speed to -1 to give it a pure color. Now for the trick: On the Affine tab, enable Post TF and change the Y2 value from 1 to 50; this turns the square into a bar. Next add transform 2, set the weight to 2, and set the variation to splits with amount 1. Set parameter x to 0.275 and y to 0. This will tile the bar horizontally, much as we did for the octagon above, but this time with bars.

We didn’t quite follow our rule: the nBlur amount is 0.25 but the splits x parameter is 0.275, slightly more. This leaves gaps between the bars where the black background shows through. Now, disable Post TF and, with transform 2 selected, rotate the triangle. Here is what it looks like when rotated 33°.

This is just a base; tweak it in the usual ways. For example, add a final transform with auger.

The nBlur can be replaced with other variations that produce a square result to get different patterns on the stripes. Even variations that produce circles work; a circle is stretched into an ellipse rather than a rectangle, but it is so long that the difference is not readily apparent. Lets replace the nBlur with rings2 and set the val parameter to 1, which makes rings2 produce a circle. Rotating the pre-affine for transform 1 right 90°, fiddling with the color values, and changing the gradient produces this.

Rotating the splits transform right 60°:

Adding a final with coth, adjusting the transform, and zooming in to one side:

When tweaking this style of flame, keep in mind that we set the transform 1 Post TF Y2 value to 50 to make very long, skinny rectangles (or ellipses). This value can be adjusted as needed. When the manipulation makes the ends visible, increase the value to make the rectangles longer and hide them. Conversely, decrease the value to shorten the rectangles and make the ends more prominent. In the previous image, close examination shows that the ends of the ellipses are visible in a line going diagonally up and to the left from the center of the spiral. Increase the Y2 value to make them continue to the center. But in this case, the spirals overlapping the other shapes is a bit distracting, so it may work better to shorten them. Here, we’ve reduced the value from 50 to 20, making the ellipse ends prominent both near the focal point and at the bottom left, making a more interesting image.

We’ve used vertical bars tiled horizontally with splits, but the process works the same with horizontal bars tiles tiles vertically. Just increase the X1 value instead of Y2, and use the splits y parameter instead of x. However, the results are very similar, so we won’t pursue that here.

Setting both the x and y parameters of splits results in diagonal tiling, which works well when there are both vertical and horizontal bars (though they overlap in the center). For the following image, transform 1 has rings2 with amount 0.25 and the Post TF Y2 value set to 50 (as above) and transform 2 has nBlur with amount 0.15 and the Post TF X1 value set to 30 (to create a horizontal bar). Transform 3 has splits with x set to 0.28 (slightly more than the rings2 amount) and y set to 0.17 (slightly more than the nBlur amount) to tile them diagonally.

Tweaking this, including adding a final sigmoid, we get the following.

A few variations work well with splits without needing to be stretched. Elliptic is a classic. There are many elliptic-splits tutorials, including one at elliptic, so let’s use something different here: bipolar. But bipolar produces a horizontal bar (in contrast to elliptic which produces a vertical one), so we will be using the splits y parameter instead of x.

To make a bipolar-splits flame, start with a blank flame and set the zoom to 4. Add a transform and set the variation to bipolar with amount 1. In the Affine tab, set Post TF and rotate right 90°. Add a second transform, set the variation to splits with amount 1, and change x to 0 and y to 1. In the Affine tab with Post TF still set, rotate right 90°. Then unset Post TF and enlarge the pre-affine transform by 200%. In the Color tab, set the Color to 1. This is the base bipolar-splits flame.

For a different flame, change the bipolar shift parameter to 1 (other values don’t work as well). Changing the size of the transform 2 pre-affine triangle also produces nice results, as does adjusting the X1 and Y2 values independently.

Some other variations that work with this technique in place of bipolar are:

  • arcsech2, try shrinking transform 1
  • arcsinh, rotate and resize transform 1
  • sqrt_acoth, double or even quadruple the transform 1 size
  • sqrt_asech, double the transform 2 size, and try shrinking transform 1
  • sqrt_asinh, shrink transform 1 by 200%, then move it around

Here is an example using arcsinh:

We’ve seen that setting both x and y in splits tiles diagonally. But using two transforms with splits, one with x set and one with y set, will create a rectangular tiling of the rectangle in the center. We illustrate this with the following. Transform 1 uses dc_perlin, transform 2 uses splits with x=1 and y=0, and transform 3 uses splits with x=0 and y=1.

Rather than use this directly as a base, let’s take use the idea from the splits-crop tutorial by Maulana Randa (see the Resources section below for the original tutorial). Transform 1 will have any variation or combination of variations that might be interesting; we’ll start with spherical. It is linked to transform 2, which uses crob to crop the result of transform 1 to a square and create a border around it. Transforms 3 and 4 will have splits as used above to create the tiling.

Start with a blank flame and set the zoom to 5 to enlarge the center, where all the detail will be. Add a transform and, to begin, set the variation to spherical. But many variations and combinations of variations can be used here to give different designs. For now, leave the Affine settings alone, but we’ll definitely want to come back and tweak them; different variations will need different affine transforms. On the Color tab, change the Color to 0.5. Now add a Linked transfrom by clicking the button to the right of Add and set the variation to crob. This will crop the result from the first transform to a square that will be tiled by splits. The defaults are fine, but let’s reduce the value for ratioBlur to 0.02 to make the borders a bit thinner. Add a third transform (a normal transform, not linked) and change the variation to splits and set x=1 and y=0. Duplicate that transform and change x=0 and y=1, and set the Color of the last transform to 1. This is the base.

We can fill this in better by selecting transform 1 (with spherical) and shrinking and rotating it. (Shrinking the pre-affine transform makes spherical bigger.) Here we shrink by 133% and rotate left 45°, then to fill in the hole in the center we add linear as a second variation, with a very small negative amount (-0.01).

Many different variations will work on the first transform, but most will require adjusting the pre-affine transform to look nice. Here we use eyefish, shrunk by 450% and rotated left 45°.

The next one uses elliptic on the first transform, rotated left 90° and shrunk 150%.

The final one uses linear on the first transform, rotated left 45° and shrunk 217%. In addition, the weight for first transform was increased to 2 and the color speed to 0.75.

Splits has four additional parameters: lshear, rshear, ushear, and dshear, which shear the plane in addition to splitting it.
By default (what we have done so far), the values are all 0, so no shearing is done. Describing what they do is a bit confusing (see the Parameters section below) and hard to apply to practical use. It’s easiest to just try changing them and see what happens! A few tips:

  • Use lshear and rshear when x is non-zero, and ushear and dshear when y is non-zero.
  • Subtlety is key; use small values. Large values will often create holes in the flame.
  • Both positive and negative values are allowed. They shear in opposite directions.

As an example of what they can do, the following is splits-crob flame with spherical and a tiny bit of linear shown above with the shear values set to 0.25; lshear and rshear on transform 3 (with x=1) and ushear and dshear on transform 4 (with y=1). This is a relatively large value for shear values, and some sparse spots are beginning to appear.

Related Variations

Splits3D is a three dimensional version of splits. It has an additional parameter, z, which specifies how much to split the flame along the z axis. But there are no shear parameters (twelve would be needed in 3D). In theory, splits3D could be used to make three dimensional tilings in the same manner as splits makes two dimensional ones. However, in practice it is difficult to achieve the rich textures characteristic of splits in 3D because of all the overlap. To show how splits3D works, here is a sphere made with obj_mesh_primitive split with splits3D.

Separation works similarly to splits, but is non-linear. It has additional parameters xinside and yinside that provide additional control. The following image is similar to the tiled octagon above but using separation instead of splits.

This is with xinside=0; successive iterations get smaller and smaller. Increasing xinside squishes the iterations together and even reverses them. Decreasing xinside (making it negative) stretches them, partially counteracting the shrinking effect.

Separation can often be used in place of splits. Set x and y to the same values as with splits, and start with xinside and yinside set to -0.5, then adjust them as needed.


Splits moves half-planes delineated by the x and y axes; the parameters specify which half-plane(s) to move and in what direction. All can be negative to move the opposite direction.

variation amount Scale factor for the output.
x Move the left and right half-planes apart by this amount.
y Move the top and bottom half-planes apart by this amount.
lshear Move the left (negative x) half-plane up by this amount.
rshear Move the right (positive x) half-plane down by this amount.
ushear Move the bottom (positive y) half-plane right by this amount.
dshear Move the top (negative y) half-plane left by this amount.


Most of these are for Apophysis, but the concepts apply to JWildfire.

Flame pack (flames used above)
Splits-Crop Combo by guagapunyaimel (Maulana Randa)
Splitting Julian’s Crop by Naomi Richmond (adaptation of above tutorial)
Splits-Cylinder Tutorial by Fiery-Fire (Iwona)
JWildfire Cylinder & Splits Tutorial by Naomi Richmond (adaptation of above tutorial)
Splits-Elliptic Tutorial by SaTaNiA (Damien Girodon)
JWildfire Elliptic-Splits Tutorial by Naomi Richmond (adaptation of above tutorial)
Smo Elliptic Splits by Epogh (JJ Viviers)
Split Mandelbrot Elliptic Tutorial by Naomi Richmond
Splits-Ngon Tutorial by guagapunyaimel (Maulana Randa)

Leave a Comment