Skip to content

ArtMatic Designer 2.0 Additions

A major V2 development was to create a full script language to represent an ArtMatic system. Thanks to the script language you can create an ArtMatic tree from a text file and in reverse, build a script from a tree. The feature makes it very easy to share tree logic/structures through text and is a great addition for educational purposes. Examples given through the docs or the web can be shared and tried immediately: type ^ or ;, paste the text, and click Make tree. The language is inspired by C and GLSL. It is straightforward and supports standard mathematical equations syntax.

Type names are:

  • vec1 for scalar
  • vec2 for 2D points
  • vec3 for 3D points or RGB (packed or not)
  • vec4 for 4D points or RGBA (packed or not)
  • vec5 for xyRGB

Comments can be included, starting with // or #

By convention, variables are named fa, fb, fc, etc., or pa, pb, pc, etc., when the vector is packed. You can use other names but keep the p for packed variables to keep track of packed data. Optionally you can name vectors with (va, vb, vc, etc).

Vector elements can be referenced with .x, .y, .z, and .w, as in length(va.x, vb.z). .r, .g, .b, and .a are also recognized for RGBA components.

Output tile variables are named fout1, fout2, vout1, etc.

Global Input variables are X, Y, Z, T for time, and A1, A2, A3, A4 for aux inputs. Subtrees (Compiled trees) input variables are x, y, z and w.

Constants can be Pi, π, numerical values like 2, 3, 1.234, or scientific notation like 13e-4. The script pre-filtering will evaluate expressions like 3/5 or 2^3 into numerical constants. The script built-in parser can handle complex math formulas like X*3 + Y*(3/π) - sin(4X + 1) and will try to minimize the number of AM tiles needed to do the calculation.

Built-in math functions and math operators are mapped to corresponding AM tiles. In general, math functions are lowercase while ArtMatic functions start with uppercase letters. The list of supported standard functions:

  • With 1 argument: sin, cos, tan, asin, acos, atan, sinc, tanh, exp, log, sqrt, cbrt, floor, round, fract, trunc, abs, sabs, smoothabs, sign, length, random;

    Example: vec1 fa = sin(X) + Y*2 + π; vec1 fb = exp(fa)

  • With 2 arguments: min, max, smin, smax, length, dist, atan2, pow, mix, mod, modulo, dot, cross, exp, log, complex, random;

    Example: fa=smin(X,Y)

  • With 3 arguments: length, dist, step, sstep, smoothstep, mix, clamp, rotate, pow, random;

    Example: fa = clamp(X, 0.3, 1) will map to fa = Clamps.linear(X) with parameters set to 0.3 and 1.

  • With 4 arguments: length, dist for 4D spaces

Note: dist and length are the same and map to the Euclidean Distance function. The ArtMatic Script Text editor uses colors to guide the user in typing a coherent algorithm.

Variables are drawn in orange, constants in green and types in dark blue. If a syntax error is present, or the line cannot be resolved (expression too complicated or inconsistent) the line will be drawn in red.

Unrecognized functions are drawn in red; ArtMatic functions are drawn in purple; supported maths functions are drawn in blue. Global Input variables are drawn in blue-green. Control-click on a function name will trigger a pop-up to choose another one in the same category.

vec3 fa = color(1, 0.1, 0.7);
vec3 fb = fa * sin(4*T + Pi);
vec3 vb = RGB_PictMovie(X + T, Y);
vec3 vc = Gradient.colormix(X, Y);
vec3 fout = mix(fb, vb, 0.66) * vc;

Shortcut: &

Creates a script representing the current ArtMatic tree. You can use this to script-edit the system which can be faster and more practical to reconnect inputs and outputs, to change functions (control click on function names) or insert new tiles. Click Make tree button to re-build the corresponding tree when done. If there is an error, Make tree will abort and display the error type if applicable. When using this function, current parameter values are saved and restored when possible.

Builds and writes the current tree into an explicit ArtMatic script file in .txt. The parameter value lists may be included in the file after the trees and subtree functions. Each line represents a tile with its input and output stored in a variable. Example in Scripts sources & examples/Plot11 subfunc_TextTree.txt

Subtree_filter parameters

tileparams(2,0,3,\_);
tileparams(1,0.3,0,\_);
tileparams(3.141593,\_,\_,\_);

Open the script editor with a text file. Click the Make tree button to build the corresponding tree; If parameter value lists are included in the file, the tile parameters will be set to the list values. Clear the list if you want a generic tree rebuild with default parameters. The script editing tool displays only one tree at a time, but you can select subtrees by clicking on the top tree display name. The root is always named “MainTree”. Note that parameter values are not accessible with the built-in script editor but you can easily change them in a text editing app.

Shortcut: ; or ^

Open the script editor with a default script to modify and complete. You can load any script file in .txt or .rtf format within the dialog. You can type directly or copy and paste in the editing area. You may want to turn off the automatic filtering when typing new lines as it may interfere.

Click Make tree button to build the corresponding tree. Input scripts can be implicit and contain multiple operators on a single line.

For example: mix(sin(2*X + π), exp(Y), 0.75) + (3X^2 + 2X + abs(Z)) will expand to seven tiles. If the expression is too complex to be parsed, split it into more lines and try grouping operators ( ) to clarify the structure.

V2 supports drag and drop for .artm, .png, .webp, movie, and text files for ArtMatic scripts. When dragging image files to the canvas the current pict object will be set to use the new input or if none is available a pict tile will be added to the ArtMatic system.

Audio playback has been modernised and supports 44,100 and 48,000 Hz sample rates. At launch ArtMatic will use the sample rate of the current audio device by default. Sound generation sampling path has 2 new options:

  1. Linear Sine path (mode 2): advances in X linearly but Y is modulated with an LFO sine
  2. Line Circle path (mode 3): rotates like in the first mode while advancing slowly in X. The rate of rotation is the same as with Circle mode, thus the slow offset in X serves as a phase/timbre modulation. The ArtMatic system needs to be either periodic or infinite for modes 1, 2 & 3 to work well.

ArtMatic file format has been modernised and made more efficient, flexible and modular using dictionaries. V2 is compatible with ArtMatic files starting from CTX 1.0. Older files need to be converted with CTX 1.0 to 1.8.

3D DF trees are eligible to be exported as a 3D mesh using the standard .obj format. RGBA DF Trees may also associate a color with each vertex if you set “include colors”. This feature is still under experimentation.

Shortcut: to call the export dialog is @. In the dialog, make sure to set the bounds so that the entire object is included. Use “clip volume” for infinite objects so that the result is 3D printable.

Examples: Libraries/Examples 9.0/DFMountainSphere, Libraries/Examples 9.0/DFcurvesRingplate.

All tree editing functions have been reimplemented. Auto-connect (Command + Click to parent) handles more cases gracefully. The tree insert/replace menu functions have been reorganized and now always work. The tree menu has the “Edit tree as text“ addition. Note that the u command to move a tile up has been removed (no longer necessary as one can now directly connect to a tile below) and replaced with the insert & split command.

The handling of proper shading attribution when output types change (through reconnections or tile type changes) has been improved.

You can now completely remove the automatic bump shading by setting the bump gain in the UI to 0. Note that bump shading is automatic for geographic clut and rgba bump shaders.

The RGBA Multi and the RGBA Bump (multi out) shaders have been redesigned. ArtMatic can handle up to 6 parallel output tiles. They can provide 4 xouts for Voyager that participate in the image rendering when multi modes are used.

The RGBA Multi can now correctly render heterogeneous outputs for multiple tiles. The logic is that RGBA is composed using its alpha, RGB is added to the color, single and two output tiles are shaded using the main gradient and added to the resulting RGB.

When mixing scalar output with other tiles in RGB or RGBA, ArtMatic may select the RGBA Multi mode automatically. Example in Libraries/Examples 9.0/Multi VariableDim.artm

The RGBA Bump (multi out) is useful to visualise DF field data when several xout values exist and can now render all outputs. Now ArtMatic is aware of the tag naming convention used in Voyager for xout values mapped to reflectivity, illumination, etc. (for example ri for reflectivity and self-illumination) and it will choose a compositing appropriate for pre-visualisation of all channels when the tag is detected in the name. Example in Libraries/Examples 9.0/NF5 StarSaucer ri.artm.

Version 2 engine v9.0 makes the RGB & RGBA packing optional in certain cases. Packing tiles are still needed when the inputs come from different output tiles or when feeding Compiled trees. “Compact tree” can be used to remove unnecessary packing tiles. This will optimize render time as unnecessary copies are avoided.

Version 2 maintains internally a tree category field to distinguish between types of systems, 3D DF systems, Image filters/effects, 360° environment map, terrain surfaces, etc. For the moment these internal categories are computed automatically but some cases are ambiguous so we will see if manual overriding is necessary. Because of this drag and drop in Voyager often finds the correct destination.

The handling of CT or ST has been changed to allow more flexibility in handling of recursion and packed data. CTs that can have feedback, in particular 22, 33 and 44 now can accept packed data in any input slot. It will work fine if the corresponding output slot is packed as well.

The handling of parameters options has changed to be a parameter property: this fixes ambiguous cases where for example a scaling and offset would need different handlers like 1/x for scaling and *10 for offsets. When a tile’s parameters support parameter options you can control click on the param slider to choose the option, or use the A B C D parameter pop-ups. The generic options are: value, 1/value, value*10, value/10, unity balanced, angle in degree, semitones, value/Pi, value*Pi, powerscale, polar tiling 30°.

  • 1:1 Cubic polynomial implements cubic Ax^3 + Bx^2 + Cx + D. Script language: Ax^3 + Bx^2 + Cx + D.
  • 1:1 Step implements the standard step function. A to B is mapped into 0 -1 with optional cubic or quintic filter (using algorithm#).
  • 1:3 Monochrome ramp New gradient function that creates a simple monochrome gradient from black to white passing through the color defined by the tile parameters.
  • 1:4 Set Constant New implementation makes it truly constant. Use Set Vector or Set RGBA for associating a constant vec3 or color to alpha.
    Script language equivalent: vec4 fa=color(C,C,C,C) or vec4 fa=(C,C,C,C) when C is a numerical constant will create a 1:4 constant Tile.
  • 1:4 Set Vector New utility Tile dedicated to output a 4D vector where w is echoing the input with an optional scaling.
  • 1:4 Set RGBA New utility Tile dedicated to output an RGBA color where A(lpha) is echoing the input with an optional scaling.
  • 3:1 Distance implements the distance function for 3D inputs with amp and offset. Script language: A*length(x,y,z). The result is the same as the Maths:Distance when amp=1 and offset 0.
  • 4:1 Distance implements the distance function for 4D inputs. Script language: A*length(x,y,z,w).
  • 4:1 Affine (Ax+By+Cz+Dw) implements a linear 4D transform Ax + By + Cz + Dw, whatever the input dimensions so x, y, z, w can be vec3 or vec4.
  • 4:3 Maths Maths utilities to support RGB/XYZ + scalar (vec3 + vec1) script language maths.

All Affine transform tiles (Affine11 Ax+B, Affine 21, Ax+By+C, Affine 31, Ax+By+Cz+D, Affine 41 Ax+By+Cz+Dw) now work whatever the input dimensions: so they accept packed3, packed4 or scalar inputs indifferently and return packed output if any of the input is packed. Script language name: Affine or explicit maths

  • 1:1 Clamp (old clip)
    This filter 2.0 implementation clamps the input scaled by Contrast + offset to 0 - CutOff range. Script language equivalent: clamp(fa,0,1);
  • 1:1 Sin(Bx)/sin(x) B range expanded to 64. Freq uses the generalized parameter option. Script language equivalent: HarmonicSin.
  • 1:1 x Power A Added a new algo Affine+ Bx^A+C that has an additional offset parameter to support script language expression like 3*X^1.5 + 0.5; pow(X, 2.5) will map to this tile.
  • 1:1 A/(xx+B) Script language equivalent: InverseSquareOffset.
  • 1:1 Sinc (was x sin (x)) This tile has been reimplemented to support the real sinc function sin(x)/x while old form x*sin(x) is still available with “inverse”. See Sinc Function. Script language equivalent: sinc, Sinc.std(), Sinc.inverse().
  • 1:3 Shaded plain color
  • 1:4 Shaded plain color Changes the shading algorithm so that zero crossing is maintained when contrast is >1 for the modes: “single color, dualcolor & dual auxcolors“; the contrast parameter ranges from 0 to 16 and supports generic p-options.
  • 2:1 Orbit analyzer Allows the tile to be nested in a CT and still get data from a looper. Can also nest looper+21 Orbit analyzer in a subtree. Fixes the “escape dot” algorithm’s numerical stability. Improves the vorticity_estimate algorithm for stability and range. Instant vorticity added to the list of algorithms; it returns the last measure of change of orientation in the orbit.
  • 2:1 Random noise
  • 3:1 Random noise
    Reimplemented the function to be unit balanced range at amplitude 1 and added an offset parameter for backward compatibility. When offset is 0 the result is correctly balanced (-amp , +amp). The Freq parameter now follows the standard Frequency Options. Script language equivalent: random(X,Y) or random(X,Y,Z).
  • 3:1 Blend by alt
    Now regroups Blend by alt (z) and Displace by alt (z) using algorithm switch pop up. 31 Displace by alt slot is now used for 31 Distance for generalisation and scripting length support.
  • 3:3 Random
    This tile has been reimplemented with 3 flavors depending on the algorithm: Displace: more or less the previous behavior where the function is used to displace the input. Balanced: returns 3 independent random noises ranging -1 +1 using a 3D vector instance of Perlin noise. Unbalanced: returns 3 independent random noises ranging 0 to 1 using a 3D vector instance of Perlin noise.
  • 2:1 Grid
  • 2:2 Orthogonal Mirror Tiles
  • 2:2 Mirrors N Tiles
  • 2:3 Techno boxes
    Changed Scale/Period/Tile size to Standard frequency with parameter option support.
  • 4:3 w Color Shift
  • 4:4 Color Shift

Designer is the first of my software to be ported in the new 64-bit framework for the Cocoa MacOS platform. The UI has been completely redesigned and reimplemented. The new framework is based on C++ and Cocoa and doesn’t use Carbon anymore. The 64 bit framework has been in development since 2017. The new implementation of the framework handles redraws faster and better. It is compatible with all macOS versions.

Designer now has 4 different rooms which integrate the ArtMatic file browsing function (used to be a separate application). A new room called Explore allows users to adjust and animate an existing ArtMatic system without having to manage the complexity of editing a full tree design. This room is also available as a standalone, low-cost, simplified program called: ArtMatic Explorer.

Advanced Designer users can ‘publish’ the tree parameters in its Design room even if they are located deep inside Component Trees. Published parameters will appear at the top of the 6 parameters in the explorer room. This allows Designer users to create and sell Explorer content in the U&I Software marketplace.

  • ArtMatic Engine 8.08: 2407 total functions for 734 components,
  • Fully compatible with Big Sur and non-Intel Macs,
  • Fully interactive online reference,
  • Vastly improved UI, customizable, resizable with self adaptive rendering resolution for better responsiveness and generalized numeric entry,
  • Multiple undos are now possible,
  • Full support of 16-bits per pixel images and support of high quality codec Apple ProRes 444 (10 bit per pixel),
  • 4 by 4 anti-aliasing mode introduced in Engine 8.07,
  • New color shader mode for Dual DF objects.

Online Component Reference Manual:

The ArtMatic Engine now has an interactive reference system accessible online. Select a tile and press command-F to access the tile’s information. This is an ongoing effort that will continue to be developed. The aim is to provide an accurate and scientific database of what each component does and make the ArtMatic Engine toolbox of 2400+ functions a well documented toolset usable for education in computer graphics and also in mathematics and science.

Vastly Improved UI: The UI can be resized with real-time feedback and the skin mode is changeable in the preferences. A brighter new skin is available since 1.1 with a dark blue over white theme. Most of the sliders have now numeric entry for parameters in main UI. As a consequence shortcuts that used numbers have been changed. As usual shortcuts are indicated in rollovers and pop-up menu names. The numeric readout digits for Tree parameters were increased in 1.2 to allow more precision in numeric inputs. ArtMatic Designer Room Tabs: ArtMatic designer CTX now has 4 rooms. Each has a specific function or workflow.

  • Browse: previously a separate application the browsing room is now part of Designer. You can now navigate through your ArtMatic content folders within Designer with thumbnail previews to manage your files easily. Use the parent button to select a root folder. The Browse room also allows you to update (modernize) presets to the CTX 1.0 format - some settings may require adjustment due to changes in components.
  • Explore: lets you explore published parameters variations and animate a particular system without having to seek parameters through the very large number of parameters and complexity of an entire tree.
  • Design: where you can construct and edit ArtMatic Trees. Tiles are selected directly in the graphic representation of the tree to set the corresponding component parameters and algorithms if any.
  • Listen: where you can work on audio generating trees. In Listen Room, playback will trigger sound as well.

Resolution of the preview automatically adapts to ensure the fastest response. Most sliders will trigger real-time previews at lower resolution and Animation preview resolution will depend on the speed of the system. As soon as you let go the image will self-render at a higher resolution.

Version 8.08 for Designer and Voyager 1.2

  • Loopers and iteration limit set to 500,
  • Floating point numerical parameter readout enlarged to 5 digits after the dot and 7 in the tooltips.

Version 8.07 for Designer and Voyager 1.0.7.3

  • Add the option to render in 4 by 4 anti-aliasing mode in Save pict and Movies dialog in both Explorer & Designer CTX,
  • Fix broken looper F(G) and 3:4 3D looper,
  • Fix problem with 16 bit height maps rendering,
  • Improved mathematical accuracy of 1:3 3D Derivative and 3:3 3D Normal,
  • Improved multithreading stability and memory management,
  • Derivatives components can now be used in trees with loopers provided the derivative is after a Memory or 21 Orbit_analyzer # component,
  • Changing tile dimension defaults to more appropriate functions when applicable.

Version 8.06 for Designer and Voyager 1.0.6.5

  • The color model is now exclusively normalised (0-1 range for RGBA data),
  • The random animation mode no longer exists,
  • The non-square pixel video formats are no longer supported,
  • Tiles that don’t support packed inputs will now implicitly use the 4th (alpha or DF) value instead of red when connected to Packed RGBA outputs. This applies also for inputs connected to CT that outputs packed RGBA. So practically you don’t have to use “Unpack” to access the alpha channel of a packed value stream which will simplify certain tree design,
  • File format: ArtMatic Engine 8.06 files are compatible with files saved since version ArtMatic 6 but uses a new file format so Designer CTX files can’t be opened in older versions. Files have to use the extension .artm which indicates the file type on recent OS. It is mandatory for Apple Events to work normally when using Voyager/Designer hot link and it is often useful for open dialog to correctly recognize ArtMatic files.
  • There are several new mutation modes in the Mutations Explorer Dialog

Version 8.07 for Designer and Voyager 1.0.7.3

Version 8.06 for Designer and Voyager 1.0.6.5

The Browser room allows you to explore and preview the extensive set of presets and examples I’ve put into the Libraries folder as examples of the many techniques available in ArtMatic Designer. Each time you launch Designer a tree is randomly loaded from that folder as well as the Structures Presets folder. Modify it and save it as a new file to expand your collection. The folder ‘Component demo’ contains many trees that are used for the online reference illustrations. Additional Libraries to expand ArtMatic Designer and Voyager are available in the U&I Store.

Thank you for supporting my creative work - Eric Wenger