Linear Sim Tutorial – Whittaker Courtney

Written By Whittaker Courtney

It started off when I was looking at the glynnsim3 code trying to alter the shape when I realized a similar thing could be recreated using 2 or 3 xforms with linears and post_smartcrops. This setup, although more complicated, allows much more customization than just using a glynnsim3 on its own.

Recreating the center could be done using a pre_spherical on the linear, which I know now to also be equivalent to the reciprocal of the complex number z. So in this tutorial I will be using pre_recip, as the additional variables can dramatically change the design in interesting ways, once it’s set up.

Just make sure to be using the latest version of JWildfire that should have it included. Pre variations work by being calculated before the other variations used on a transform and for some reason in JWildfire at least, the individual pre_variations sometimes have very different effects than just using the normal variation enabled as a “pre_variation”.


First to start off, create a new flame from scratch.

Add transform, change linear3d to objectmesh_primitive_wf and add primitives_wf as the 2nd variation on the same transform.
Set the amount on primitives_wf to 1 and change shape from 1 to 0.
Then change the amount on the objectmesh_primitive from 1 to 0.1 to set the width of the ring.

This should setup a ring shape to outline the pattern.

Add another new transform, then in addition to the linear3d, add pre_recip and set amount to 1.
Then add post_smartcrop, set the amount to 1, click the green triangle under the name to expand the list of variables, then set radius to 0.95, roundstr to 1, distortion to 0 and set cropmode to 2.

This transform will serve as the inner portion of the ring shape and will remove everything outside of the ring.

Finally add a new transform, change the amount on the linear3d to 1.2.
Then, in addition to the linear3d add post_smartcrop with amount set to 1, radius -1.05 (a negative radius to cut out a hole), roundstr to 1, distortion 0 and cropmode 2 to remove the outline.

This will create the outer shape with a hole cut out of the center for the inner shape to fit in.

Now the fun part. (You may want to zoom in a bit to better see the design)

Select transform 3, make sure Post TF is disabled and move the pre_transform triangle to the right by 0.5, then rotate counter-clockwise by 45 degrees.
You should see the entire pattern shift then form a spiral without having any rings overlap.
Next, select transform 2, click on the green triangle under the pre_recip variation name to expand the list of functions. You should be able to use your choice of any one of these individually and with reciprocal or sqrt also in combination to customize the inner design without any overlapping portions. 🙂

For further tweaks try experimenting with different settings, different pre_variations or other variations added in addition to the transform. Also you can try adding pre_recip and other pre_variations to the 3rd transform to modify the outer shape. If th pattern gets too dim to see, try increasing the weight of the transform. Finally, prepost_circlize can be added to all 3 xforms and the ring shape can be modified to form any number of sided shapes like a triangle, hexagon or octogon, etc.

Or you can use this template here.

<flame smooth_gradient="0" version="JWildfire V4.10 (11.05.2019)" size="2560 1440" center="0.0 0.0" scale="570.0000127776791" rotate="0.0" filter="0.75" filter_type="GLOBAL_SHARPENING" filter_kernel="MITCHELL_SMOOTH" filter_indicator="0" filter_sharpness="4.0" filter_low_density="0.025" oversample="1" post_noise_filter="0" post_noise_filter_threshold="0.35" quality="100.0" background_type="GRADIENT_2X2_C" background_ul="0.0 0.0 0.0" background_ur="0.0 0.0 0.0" background_ll="0.0 0.0 0.0" background_lr="0.0 0.0 0.0" background_cc="0.0 0.0 0.0" bg_transparency="0" fg_opacity="1.0" brightness="4.0" saturation="1.0" gamma="4.0" gamma_threshold="0.01" vibrancy="1.0" contrast="1.0" white_level="220.0" temporal_samples="1.0" cam_zoom="1.0" cam_pitch="0.0" cam_yaw="0.0" cam_persp="0.0" cam_xfocus="0.0" cam_yfocus="0.0" cam_zfocus="0.0" cam_pos_x="0.0" cam_pos_y="0.0" cam_pos_z="0.0" cam_zpos="0.0" cam_dof="0.0" cam_dof_area="0.5" cam_dof_exponent="2.0" low_density_brightness="0.24" balancing_red="1.0" balancing_green="1.0" balancing_blue="1.0" cam_dof_shape="BUBBLE" cam_dof_scale="1.0" cam_dof_rotate="0.0" cam_dof_fade="1.0" antialias_amount="0.75" antialias_radius="0.5" post_symmetry_type="NONE" post_symmetry_order="3" post_symmetry_centre_x="0.0" post_symmetry_centre_y="0.0" post_symmetry_distance="1.25" post_symmetry_rotation="6.0" frame="1" frame_count="300" fps="30" post_blur_radius="0" post_blur_fade="0.95" post_blur_falloff="2.0" zbuffer_scale="1.0" mixer_mode="OFF">
  <xform weight="0.5" color_type="DIFFUSION" color="0.0" symmetry="0.0" mirror_pre_post_translations="0" material="0.0" material_speed="0.0" mod_gamma="0.0" mod_gamma_speed="0.0" mod_contrast="0.0" mod_contrast_speed="0.0" mod_saturation="0.0" mod_saturation_speed="0.0" mod_hue="0.0" mod_hue_speed="0.0" obj_mesh_primitive_wf="0.1" obj_mesh_primitive_wf_fx_priority="0" obj_mesh_primitive_wf_primitive="0" obj_mesh_primitive_wf_scale_x="1.0" obj_mesh_primitive_wf_scale_y="1.0" obj_mesh_primitive_wf_scale_z="1.0" obj_mesh_primitive_wf_offset_x="0.0" obj_mesh_primitive_wf_offset_y="0.0" obj_mesh_primitive_wf_offset_z="0.0" obj_mesh_primitive_wf_subdiv_level="0" obj_mesh_primitive_wf_subdiv_smooth_passes="12" obj_mesh_primitive_wf_subdiv_smooth_lambda="0.42" obj_mesh_primitive_wf_subdiv_smooth_mu="-0.45" obj_mesh_primitive_wf_blend_colormap="1" obj_mesh_primitive_wf_displ_amount="0.1" obj_mesh_primitive_wf_blend_displ_map="1" obj_mesh_primitive_wf_receive_only_shadows="0" obj_mesh_primitive_wf_colormap_filename="" obj_mesh_primitive_wf_displ_map_filename="" primitives_wf="1.0" primitives_wf_fx_priority="0" primitives_wf_shape="0" primitives_wf_a="1.0" primitives_wf_b="1.0" primitives_wf_c="1.0" primitives_wf_filled="0" coefs="1.0 0.0 0.0 1.0 0.0 0.0" chaos="1.0 1.0 1.0"/>
  <xform weight="0.5" color_type="DIFFUSION" color="0.0" symmetry="0.0" mirror_pre_post_translations="0" material="0.0" material_speed="0.0" mod_gamma="0.0" mod_gamma_speed="0.0" mod_contrast="0.0" mod_contrast_speed="0.0" mod_saturation="0.0" mod_saturation_speed="0.0" mod_hue="0.0" mod_hue_speed="0.0" linear3D="1.0" linear3D_fx_priority="0" pre_recip="1.0" pre_recip_fx_priority="-1" pre_recip_reciprocalpow="1.0" pre_recip_dividepow="0.0" pre_recip_sqrtpow="1.0" pre_recip_asinhpow="0.0" pre_recip_acoshpow="0.0" pre_recip_atanhpow="1.0" pre_recip_asechpow="0.0" pre_recip_acosechpow="0.0" pre_recip_acothpow="0.0" pre_recip_logpow="0.0" pre_recip_exppow="0.0" pre_recip_zx_mult="1.0" pre_recip_zy_mult="1.0" pre_recip_zx_add="0.0" pre_recip_zy_add="0.0" post_smartcrop="1.0" post_smartcrop_fx_priority="1" post_smartcrop_power="4.0" post_smartcrop_radius="0.95" post_smartcrop_roundstr="1.0" post_smartcrop_roundwidth="1.0" post_smartcrop_distortion="0.0" post_smartcrop_edge="0.0" post_smartcrop_scatter="0.0" post_smartcrop_offset="0.0" post_smartcrop_cropmode="2" post_smartcrop_static="2" coefs="1.0 0.0 0.0 1.0 0.0 0.0" chaos="1.0 1.0 1.0"/>
  <xform weight="0.5" color_type="DIFFUSION" color="0.0" symmetry="0.0" mirror_pre_post_translations="0" material="0.0" material_speed="0.0" mod_gamma="0.0" mod_gamma_speed="0.0" mod_contrast="0.0" mod_contrast_speed="0.0" mod_saturation="0.0" mod_saturation_speed="0.0" mod_hue="0.0" mod_hue_speed="0.0" linear3D="1.2" linear3D_fx_priority="0" post_smartcrop="1.0" post_smartcrop_fx_priority="1" post_smartcrop_power="4.0" post_smartcrop_radius="-1.05" post_smartcrop_roundstr="1.0" post_smartcrop_roundwidth="1.0" post_smartcrop_distortion="0.0" post_smartcrop_edge="0.0" post_smartcrop_scatter="0.0" post_smartcrop_offset="0.0" post_smartcrop_cropmode="2" post_smartcrop_static="2" coefs="0.7071067811865476 -0.7071067811865475 0.7071067811865475 0.7071067811865476 0.5 0.0" chaos="1.0 1.0 1.0"/>
  <palette count="256" format="RGB">
E47908DD7C08D57F08CE8208C68508BF8808B88B08B08E08A99108A194089A9708929A08
8B9D0884A0077CA30775A6076DA90766AC075FAF0757B20750B50748B80741BB0739BE07
32C10737BF103BBD1840BA2145B82A49B6334EB43B53B24457B04D5CAD5561AB5E65A967
6AA7706FA57874A38178A08A7D9E92829C9B869AA48B98AD9095B59493BE9991C79E8FCF
A28DD8A78BE1AC88EAB086F2B584FBB786F4B988EDBB8AE5BE8CDEC08ED7C291D0C493C8
C695C1C897BACA99B3CC9BACCF9DA4D19F9DD3A196D5A38FD7A687D9A880DBAA79DDAC72
E0AE6AE2B063E4B25CE6B455E8B64EEAB846ECBB3FEEBD38F1BF31F3C129F5C322F7C51B
EDBD24E4B52DDAAC36D0A43FC79C48BD9451B38B5AA98363A07B6C9673758C6B7E836287
795A906F5299664AA25C42AB5239B44831BD3F29C63521CF2B18D82210E11808EA1E0DEB
2413EB2A18EC301DED3622EE3C28EE422DEF4832F04E38F0543DF15A42F26048F3654DF3
6B52F47157F5775DF57D62F68367F7896DF78F72F89577F99B7CFAA182FAA787FBA284F4
9E81ED997DE6957ADE9077D78C74D08771C9836DC27E6ABB7A67B47564AC7161A56C5D9E
685A976357905F54895A5182564D7A514A734D476C48446544415E3F3D573B3A50363748
3234412D313A292D33242A2C2027251B241E172116121D0F0E1A080917010A16010B1601
0C15010D15010F1401101401111301121301131201141201151101161001171001180F01
1A0F011B0E011C0E011D0D011E0D011F0C011F0C091F0B111F0B191F0B201F0A281F0A30
1F0A381F09401F09481F09501E08571E085F1E07671E076F1E07771E067F1E06861E068E
1E05961E059E2709972F0D9038118841158149197A521D735B216C6325646C295D752D56
7D314F8635488F3941973D39A04132A9452BB14924BA4D1DC35115CB550ED45907D55C0C
D75F10D86215D9651ADB681EDC6B23DD6E28DE712CE07431E17736E27A3AE47D3FE58044
E68348E8874DE98A52EA8D56EB905BED9360EE9664EF9969F19C6EF29F72F3A277F5A57C
F6A880F7AB85F8AE8AFAB18E  </palette>
</flame>

You may be interested in ...

Leave a Comment