ArtMatic Designer 2x CTX
Engine Version 9.x : 2751 function for 747 components
Version 2.0 highlights:
ArtMatic Script Language
A major V2 development was to create a full script language to represent an ArtMatic systems. 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 Make tree).
The language is inspired from C and GLSL. It is straightforward and supports mathematical standard equations syntax.
Types 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 and starts 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 .w like in length(va.x,vb.z).
.r .g .b .a are also recognized for RGBA components.
Output tiles variables are named fout1 , fout2 or 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,w
Constants can be Pi,π, numericals like 2, 3, 1.234, scientific notation like 13 e-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 maths functions and maths operators are mapped to corresponding AM tiles.
In general maths functions are lower cases while Artmatic functions start with upper case.
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";
Ex: vec1 fa=sin(X)+Y*2+π
vec1 fb=exp(fa)
-
with 2 argument : "min", "max","smin","smax","length", "dist", "atan2","pow","mix","mod","modulo","dot","cross", "exp", "log","complex","random";
Ex: fa=smin(X,Y)
-
with 3 argument : "length", "dist", "step", "sstep","smoothstep","mix","clamp","rotate","pow","random";
Ex: fa=clamp(X,0.3,1) will map to fa=Clamps.linear(X) with parameters set to 0.3, 1
-
with 4 argument : "length","dist" for 4D spaces
Note that dist and length are the same and maps to Euclidian Distance function;
The ArtMatic Script Text editor uses colors to guide the user in typing a coherent algorithm. Variables are drawn in orange, constantes 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;
Tree/Edit tree as text (shortcut &) )
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 error type if applicable.
When using this function current parameters values are saved and restored when possible.
File/Tree 2 text :
Build and write 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 sub trees functions. Each line represents a tile with its in and output stored in a variable.
Exemple in Scripts sources & examples/Plot11 subfunc_TextTree.txt
# Subtree_filter parameters
tileparams(2,0,3,_);
tileparams(1,0.3,0,_);
tileparams(3.141593,_,_,_);
File/Text 2 tree :
Open the script editor with a text file. Click Make tree button to build the corresponding tree; If parameters value lists are included in the file the tile parameter will be set to the list values. Clear the list if you want a generic tree rebuild with default parameters. The script edition 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 parameters values are not accessible with the built in script editor but you can easily change them in a text editing app.
File/New text tree:
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 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 more operators into 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.
Drag & Drops:
V2 Supports drag and drops for .artm .png, webp, movies and text files for ArtMatic scripts. When dragging images 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:
Audio playback has been modernised and supports 44100 & 48000 sample rate. By default at launch ArtMatic will use the sample rate of the current audio device.
Sound generation sampling path has 2 new options
Linear Sine path (mode 2): advance in X linearly but Y is modulated with a LFO sine
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 mode 1 2 3 to work well.
File format:
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 needs to be converted with CTX 1.0 to 1.8
File/Export to 3D .obj:
3D DF trees are eligible to be exported as a 3D mesh using the standard simple .obj format. RGBA DF trees may also associate a color for 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 object so that the result is 3D printable.

Example in Libraries/Examples 9.0/, DFMountainSphere, DFcurvesRingplate
Tree Editing:
All tree editing functions have been reimplemented. Auto-connect (command click to father) 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 types of output changes through reconnections or tile type changes has been improved.
Rendering:
You can now remove completely the automatic bump shading setting the bumpgain 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 outputs tiles. They can provide 4 Xouts for Voyager and participate in the image rendering when multi modes are used.
The RGBA Multi can now correctly render heterogenous outputs for multiple tiles. The logic is 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 exists and can now render all outputs. Now ArtMatic is aware of the tag naming convention used in Voyager for xout mapped to reflectivity, illumination etc (for example ri for reflectivity and self illum)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
Engine 9.0 changes:
- auto pack
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.
-
tree category
Version 2 maintains internally a tree category field to distinguish between types of system, 3D DF systems, Image filters/effects, 360° environment map, terrains surfaces ..etc. For the moment these internal categories are computed automatically but sometimes cases are ambiguous so we will see if a manual overriding is necessary. Thanks to it drag and drop in Voyager often finds the correct destination.
-
compiled tree (subtree) management
The handling of CT or ST has been changed to allow more flexibility in handling of recursivity and packed data. The CT that can have feedback, in particular 22,33,44 now can accept packed data in any input slot. It will work fine if the corresponding output slot is packed as well.
-
parameters options generalisation
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 parameters support parameters 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°
- new components
11 Cubic polynomial
implements cubic Ax^3+Bx^2+Cx+D
Script language : Ax^3+Bx^2+Cx+D
11 Step
implements the standard step function. A to B is mapped into 0 -1 with optional cubic or quintic filter (using algorithm#)
13 Monochrome ramp
New gradient function that creates a simple monochrome gradient from black to white passing through the color defined by the tile parameters
14 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 14 constant Tile.
14 Set Vector
New utility Tile dedicated to output 4D vector where w is echoing the input with an optional scaling.
14 Set RGBA
New utility Tile dedicated to output an RGBA color where A(lpha) is echoing the input with an optional scaling.
31 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
41 Distance
implements the distance function for 4d inputs. Script language : A*length(x,y,z,w)
41 Affine (Ax+By+Cz+Dw)
implement linear 4D transform Ax+By+Cz+Dw, whatever the inputs dimensions so x y z w can be vec3 or vec4
43 Maths
Maths utilities to support RGB/XYZ + scalar (vec3 + vec1) script language maths.
- renamed/modified components
All Affines transform tiles ( Affine11 Ax+B,Affine 21 Ax+By+C,Affine 31 Ax+By+Cz+D,Affine 41 Ax+By+Cz+Dw) work now 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
11 Clamp
(old clip)
This filter 2.0 implementation clamp the input scaled by Contrast + offset to 0 - CutOff range.
Script language equivalent: clamp(fa,0,1);
11 Sin(Bx)/sin(x)
B range expanded to 64, freq uses parameter generalized option
Script language equivalent:HarmonicSin"
11 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
11 A/(xx+B)
Script language equivalent:InverseSquareOffset"
11 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”. https://mathworld.wolfram.com/SincFunction.html
Script language equivalent:sinc, Sinc.std(), Sinc.inverse()""
13 Shaded plain color
14 Shaded plain color
Change the shading algo so that zero crossing is maintained when contrast is >1 for the modes : “single color, dualcolor & dual auxcolors“;
the contrast parameter ranges to 0 -16 and supports generic p-options
21 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.
Fix the “escape dot” algo numerical stability.
Improve “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.
21 Random noise
31 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). Freq parameter now abide to std Frequency Options :https://uisoftware.com/docs/artmatic/tiles_21.html#Frequency_Options
Script language equivalent : random(X,Y) or random(X,Y,Z)
31 Blend by alt
regroups now Blend by alt (z) and the Displace by 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
33 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 Perlinnoise
Unbalanced: returns 3 independent random noises ranging 0 : 1 using a 3D vector instance of Perlinnoise
21 Grid
22 Orthogonal Mirror Tiles
22 Mirrors N Tiles #
23 Techno boxes
Changed Scale/Period/Tile size to Standard frequency with parameter option support
43 w Color Shift
44 Color Shift
ArtMatic Designer 1.x CTX version details
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 don't use Carbon anymore. The 64 bit framework has been in development since 2017.
The new implementation of the framework handles redraws better and faster and is compatible with all Mac OS.
Designer now has 4 different rooms which integrates the ArtMatic file browsing function (used to be 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 stand alone 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's. Published parameters will appear as 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.
Version 1.2 highlights:
- 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 data base of what each component does and make the ArtMatic Engine toolbox of 2400+ functions a well documented tool-set 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 roll overs 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 have 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 trough 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.
Adaptive rendering resolution:
Resolution of the preview automatically adapts to insure 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.
ArtMatic Engine Global Changes:
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 tool tips
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 34 3D looper
- Fix problem with 16 bit height maps rendering
- Improved mathematical accuracy of 13 3D Derivative and 33 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 exist.
- The non-square pixel video format 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 open 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.
- here are several new mutation modes in the Mutations Explorer Dialog
ArtMatic Engine New Components:
Version 8.07 for Designer and Voyager 1.0.7.3
Version 8.06 for Designer and Voyager 1.0.6.5
Enhanced & Modified components:
- (8.08) 12 Set Constant
- Add polar coordinate mode
- (8.08) 22 Maths tools #
- Complex A/Z was improperly named : renamed 1/AZ
- A true Complex C/Z has been added to the list of functions
- A Z power N for N ranging 2 to 12 was added as well : Complex C Z^N where C given by parameters scales the power of Z.
- (8.08) 13 Main Gradient
14 Main Gradient
-cyclic and mod gradient maths improved
- (8.08) 13 Indexed Gradient
14 Indexed Gradient
-indexed gradients have now the same algorithm options than 13 Main gradient
- (8.08) Lightning
-Lightning improved with various flavors available
- (8.08) 21 Orbit_analyzer #
-new algorithms : Escape angle, Orbit angle, Instant velocity log, Instant acceleration, Vorticity estimate
- (8.08) 44 Packed index (w) Mixer
-More algorithms available
- (8.07) 13 3D Derivative
-Reimplemented to better handle 2D & 3D systems and changed the way amplitude works.
-Can now be used in trees with loopers provided the derivative is after a Memory or Orbit analyser component
- (8.07) 21 Ripples #
-Added a non regular ripple algorithm and a regular balanced add mode.
- (8.07) 21 Bubble & Skins
-Added 2D 'Density star lights' algorithm and 2D 'Density power dots'
- (8.07) 31 3D Bubble & skins
-Added 3D 'Density star lights' algorithm, 'Density ripples', 'Density cubic cells', and improved 'Density power dots'
- (8.07) 23 HLS color shade
- RGB color shade renamed HLS color shade
- A new parameter Hue shift allow to differentiate x and y assigned color
- (8.07) XYza Regular tiles #
XYza Semiregular tiles #
XYza tiled disks #
- Expand options to include a random mode for z indexes
- Made contour line width independent of 'tile spread' and more consistent between algorithms
- Improved tile coordinates positioning and z indexes mapping for Islamic Stars serie.
- (8.07)
24 XYza Patterns # Deco Facade A
- Complete the set with 5 new 2D decorative patterns : Deco Facade A, Deco Facade B, Deco Facade C, Disk Inlays, Squares Inlays
- Display the icon in 3 columns for better lisibility
- (8.07) 31 Dot, Plane &qmp; Line
-Added 2 algorithms: Dot product N.L and Dot product R.V for diffuse and specular illumination.
- (8.07) 33 RGB Gaussian
- A new parameter 'Scale' controls the width of the gaussian bell curve
- (8.07) 33 3D Normal
-Reimplemented to improve exactitude
- (8.07) 34 Packed Maths #
-List of function completed and now consistent with 33 and 31 versions.
- (8.07)
3D Motion Path render
-Fix problems with packed coordinates output orientation. Note that ArtMatic does automatically assume if main reference orientation is Y or Z depending on the extent of the set.
-Add a new algorithm to output xyzw data instead of xyzt in packed output 1
- (8.07) 44 Alpha Fade
43 w Color Fade
- Added Exponential- algorithm to fade on z negatives exponentially
- 11 Smooth Abs
-Add 'Phase' parameter
- 11 Smooth Clamps #
-Add 'Einstein Roof' and 'Einstein Clamp' algorithms
- 11 A/(xx+B-1)
-Add 'Offset' parameter
- 11 Memory Logic#
-Add 'Blend Max' and 'Blend Min' algorithms
- 13 Main Gradient and
14 Main gradient
- Add 'Dual Linear' algorithm
- fix broken menu list
- 21 S:P Maths
- Fix infinity handling
- 21 Orbit_analyzer #
- Fix infinity handling
- fix discontinuities in Dot Average mode
- Add 'Gaussian terrain' new algorithm
- 22 Maths tools #
Add 'Affine Exp' Algorithm
- 23 RGB main gradient and Bezier main gradient
-Add 'Length' and 'Log length' new algorithms
- 3D Bubble & skins
-Add 'Voronoi splits, Random disks stratas, Random splits, and Voronoi density algorithms.
- 3D Random lines
reimplemented
- 3D Color Perlin noise
-Add 'Variance' parameter
- 3D parametric face
-Add 'Height' parameter
- 33 Color Controls #
-Add "Remap with Gradient" algorithm
- 41 Bezier Curve #
New implementation
- 34 Packed z Blend #
In normalized color mode the z blends the 2 inputs when in 0-1 range.
- 43 Packed RGB w Sort
-Add 'Maximum:' and 'Minimum' algorithms
- 44 Alpha Fade and w Color Fade
Add 'Exponential' algorithm.
- 44 Memory w Logic #
- Fix infinity handling
- Add 'Pass infinity' and 'Discard infinity' options
-
44 Color Controls
RGBA version added for convenience
- 44 Memory w Maths #
-Change implementation of 'Alpha Blend' and 'Alpha Blend Max'
-Add 'DF Union Blend' algorithms that works like the old implementation of Alpha Blend Max
-fix infinity handling in all algorithms
-fix broken menu list in 44 S-Space Transforms #
- 'Pass infinity' and 'Discard infinity' options:
These options have been added to
Libraries:
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 Libaries to expand ArtMatic Designer and Voyager are available in the U&I Store.
Thank you for supporting my creative work - Eric Wenger