Transforms as Plug-ins

 

 

This tutorial assumes you are already familiar with the material in  The Basics of UltraFractal 5 and Its Use of Classes and  Changing and Exploring Plug-ins. As for the first two tutorials we will be using Orbit Traps written by Damien Jones.

So what is a transform? It is a method for mapping pixel positions to new locations.  If a transform is applied using the mapping tab in Ultrafractal, the transform is applied to the entire view screen/fracta;. In Orbit Traps there is a plug-in called Trap Position, which is actually a transform. What is different about applying a transform as a plug-in Orbit Traps rather than on the mapping tab is that the transform will go through the same number of iterations as the z value passed from the fractal formula. Depending upon how the transform is written, this can produce dramatically different results from using the mapping tab.

We will start with a single layer upr and examine some of the parameters for Trap Position. A trap shape of Point  will be used because it is the simplest trap available with little defining shape. Any interesting shapes will come from the application of the transform(s) to the shape. Trap Position has the following parameters:

  1. Trap center - shifts the trap center

  2. Follows initial z - moves the trap center according to the initial value of z

  3. Trap drift - moves the trap center for each iteration

  4. Trap scale

  5. Rotation - rotates the trap

  6. Rotation step - amount to change the rotation of  the trap at each iteration

  7. Skew - skews the trap

  8. Skew step - amount to change the skew of the trap at each iteration

  9. Aspect ratio - how square the trap is.

Transform_1 {
::J/4Sein2deVTPuNIQ07RK/HQ++6AOxJZbFX62PkqUVr627Rs2kE6iBXA3dz/+O4vS2WvO4ez
Av3MvZgZws3wycM5bmPDhcCnkTj+hhps71midkI0Tic3R66VY0Ru4wRHNlkgksTcjlS8kyM8
chzSj+uWheHzo4O3bvdRCZRCGvNa+saw12PjV6EaFN6dssHPY0Vq8IkuklJcnoEMe+sCWZpQ
doBNX54G6N44k1rBTtdFmksdBOe5yEcyyt3mmSSRFsDK6640VpbWmsCxUHgQgsJeV66bnPzH
FVSWt9KYPL8GMJFj2LkcFrAC27dMVOzkHXtvICBu0ciG95KpgF5JVuzy55eRsaJJJF8+6tbS
hpL1P5t1CM89DMhUX5og8mPTosiceT+sORCwUaFf+MAy/uk9XG3gyJTWLgWF9JuibEZfywyF
wU3plaDkoa1YW7w7kMLsTkX8z04K5Dv59f5z7+q5BhD2SLtjRK+37O04C/GxAr2NuZfaQ+ta
76IB9tT7llzLrrhf/uaYcJPz9XxmPsuvehorx8lBYooZOtJQ8+g6ChGCpy6BMp0fuk5LNgNP
YI684oANi1xMOaousuOgEKa7jiywRL1aA9HSGEf5F4dHNc7RtMnijTfdj766GRjy0FFaV9uv
fnvvPVUAsDd//SCnddwUqscz/BtXGoBSrJZ22mEvYycK0/mbheThzL3I27mmrsZMfD5wJY0u
6j+0l4pTy64l0pouH5PRXlONCT1JMbZdHhxOlbPyK5D1dzP/30C1od48gCuBXL4zelgJXHef
7N/4SvgC5YKcwc4qWuJ66cnWNbN+e3OBClTkEc5vhzyzJ0gRHYVwFGPJQjvvSlVXuIFKOzEm
H0w1FTQ/A8JFANmP0Ig9w4NhK05DVZ8FY67kaL3OWphncoHjax27zpA+Jh745L0ChZXBlfYW
Tc8a8g2IXcXZS6AAg7dsapIf8258ndVmXtNzHlsxSltsDuosHegdaOT4F9a2DqakETDJ/Ruz
3fOcOoHs1Z4qDwrawx4RaJ3/fp/b6q7PpfvAOpry4RX3Khm2uA/LERok6yddTl3KxANAUOW5
0NV7n425z6+r+mnkBtyhvh/S9eRRpkjgVPVDG1hLOCZL0aI7C0R9XmfTSj7Fqc+zUMq2hUy6
Nb2kAvirZaym1tLkg3kucV38LJdEuwG3QOPX7bIr1Yr3V6ef19CzkUY3+PwN87kt
}


Try experimenting with other parameters in Trap Position and observe the effects.

In the next upr Trap Position has been replaced with the Radial Waves Transform which is in mt.ulb. This transform has the parameters:

  1. Center - shifts the transform center

  2. Iterations - number of times the transform is iterated for each iteration of the fractal formula

  3. Theta frequency - determines the number of "kinks" on each radiating frond

  4. Theta amplitude - magnitude of the "kinks"

  5. Radius frequency - determines the number of radiating fronds

  6. Radius amplitude - determines the thickness of the frond

In the upr the center has been replaced with the screen center. Several of the other parameters have also been changed. The user should try setting the center back to (0,0) to see what effect this has on the image, and to explore the effects of the other parameters.

Transform_2 {
::amlyJjn2Ve1WvtNIU43jU+Pg8711QMJpbiXW3FpJVtp1KtXmUE1mkwGG8A8az/+dwXSS3SdI
vZgvvz9zB8aLvwzVvZ6EEyL9KBL5BLX7WbsVrIJonkl+ts55ZotC5mteGFTQK+Oh1xwBSFWR
p07YJfzoRvjb1Cv/t3cNhcNJLbZy0JtgblfBv2LNaWy74F/aj10oLTQmaeh0vjhzymOpiXXL
1b6QL0ehldVWKZ+cQULzzwklXnlObGJjMb5NUKmiq4b0s5p0c6iZkcEXvBcB8i0c68bmOJ4F
NKer8q4PLDCkQzQrlKhmXBO79euukbLTbWXlgAVa3xS+cjSyTCkqX5EiygRkPDTog2nvcBF2
u28UQWXnBf/IXqMNeGYeTnI1OZpoLe2GIBYajWMdCA5/Py9br/kmThq1A6toPJ0Crs4TWepE
26WjyYhAVvNW0v8WF3BZiyqfSTbUP+m3f3nX9F7jSPkSrdjRK9Pr20piQi4EnOsuLPdS+922
5RC23KTws8Bz6c4XvqFmQJK8/jvFcr7bPI5cMfpDGLau3YjEfwpOyQjhUd7CuSFqL5hWDI5B
LRHWnEpQceu1ziVlt9B4YR7+lsOe0KjBQ/ByJxXfEe/Wrwt1oKZZp0XX4+hpRskKfbm/uHW9
NoUjr+O/PixiQ7pGby/YCH0b0UacC7FTLmxc/III6ZF1RlRziR1eCDHTkPlTgcUWUQ9jWpck
IPjEdb51iT1uH2/rGpe0W+Aoo747BfQr4M85hvvfPsuOYQxkxhMdShpqyob9qgH9Q/BJnn7l
VH3ifvavAC1XIJ42QrgXWiZRj2VwD3TfBCnEpwX3oLaflhSqFcbcawAzPvA7HgfROQn4j1D4
P6gXM86QrMlnqz4OY7bVGnwNWrRgcslR9Y3rzLB8TS/2DT4jh5QDVYZRnf8a8grRO6yDC9EA
gZxOjSWOak0Le23Yf1xMfUxHLU2zO6my9wjcSzBCvYWzawqGJw0RKUyd4qoTHD2D25tC9G4Z
+jPSe/D1+/w1wTLfvEq01FikzLlYDbHh/FGRskGidDbV2biRKAodsxb6623JcTnM8M3u/RBG
lDfDPb7eZVtSggT31CGNgLNB5qMGI6C0RWjv9Ga2VkO1L1linZZoWFywzXsYBB+tmutxzx9H
cTeOluMvf/Z4BCHJjrwH2r/nqatxetrN711wvcRoQ2+veM46sD==
}

 

Those of you who have used the mapping tab in older versions of UltraFractal are aware that multiple transforms can be applied to the image, and that the order of the transforms is important. In the next upr Trap Position will be replaced with the wrapper Transform Merge. This wrapper packages up ten transforms, with the default plug-in being Null Transform. The Null Transform plug-in can be replaced with transforms chosen by the user so that multiple transforms can be applied. In the next upr the layer labeled "Right Panel" shows the right panel and the layer labeled "Left Panel" shows the left panel. The two panels differ only in the order of the two transforms and the gradient used.

Transform_3 {
::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
}

 

Transform Merge is a very useful wrapper. Sometimes the user may want to modify the the position, size, rotation, etc. of a transform. This can be conveniently done using the wrapper. Put your chosen transform in the second position and Trap Position in the first position. The parameters in Trap Position can now be used to adjust the transform. In this case we will use a special transform writtern by Mark Townsend, called Trap Shape which itself is actually a wrapper. It packages a Trap Shape which can be chosen by the user to use as a transform. The user should try changing parameters in Trap Position to see how they modify the transform.

Transform_4 {
::0jcMtjn2tq1SvNuNQ47Bw/HE096Q90SbhO0kNdBW00WkdRPVADaJab2IRqSStJ5f/SS9w2JO
OUi6GJ18Ncm5jzIRStlBzFwyPt4KHHBWUiyc/ODS4bpsq1huOPhLE7ziDBO7R4d7FZRe+Olw
XQMemnCUODVgF8M3HoEnbgMCSI+10r99v2HAScXclWYt+zh1CMlk5eDM/xdMaDpw1hWDzxiX
y8AgFXVBrrxkdtSjICEL7XAL9jjlqKJE45ncNYZQgPwPIJNKyLypCujkFvMKMaVgfoDksT6C
erWGGFnu4KlX0UC16rC+MWpQ/IgzWcJiArkO73EQSBkVssZblrjcKZvk5+1mSM0VBqeNHhKU
GRYgnfkc2jTWFJHum+kSXXDkt3Axl0GRm08WcFmwxFo24pOQKFjQJoFXJFZ4RFIpYSveZ8Bp
4/PTcWLLvUbLdG3XQEEDn/FGsALH6WaJlJjZdmbeX3bLhcJpUU9fRLbK38pPf/XX/XsNYhkd
r5XC0yfseX7Uo4kz80++tU2Zx3ZbfskS7bNVZWClZ9RyvdtWMUJKX8KfT5WfT/A3PC5pOopS
DFUmhyrcqjMUTAVr7ALLVLRhqsEJ5J76covrhKhLgMRmpTpOlwzUp5PirNX6SKVK9d+nV+6j
kXsnh47plFZglRvvyF9FmyczpVVUim9HKXdPitD5aAcTXAcMgDztxQa4I2EgN0uS5PmiTWoa
vskUVtsoChaGih2eySObk1NfBxNB52jQ+aqoujO+XliYySqjRZjnYeF6RHufF+JRZv1GqtTH
tpGdv/DctdKoi+DE3wlEnRJFM8WhFGBPHKXYZUW95gzoCd1vsYglagLQ1ZT2LeE9UWgNota6
h8a9LSGZat/kTr9zcrE6U67/e7rW3DrRyG606WZGVqtvVp2+Wma7PDp2+LroFyPL7BkohRc+
HYZjZvs5EdwFMEZn8LqBL9iGN6ulTKuIzlh2oZoHuTTK3cgnuBvlWibqctZCOmw0TwEiYnqu
h2a1JpAvZVhb68arVctu5UyaORNFYuQ8iip+tW7j7UL/yMudsCUuyx3KNwlbYyWfDuh/DYpp
q5oSSBTukUwJfpxf2UWaxXaEYV5oALLHFMDljU6gIDCjWHHRGhTmMCnTyI0KyI0SyIcGIjwZ
gMimMZENnkRkVkRklkR0MQGRzAZEPZyIeOJjYrIjYLJj4ZgMinByY1kJjVzJZsyKyYllkxqZ
gMWNDkRykJjk5kMSsiMSskMSmByIZGIj0JTGpzJZkaFZkaJZkODkR6MQGegpfKag3hO0sxY3
rtHwuzRDY7BpBmjTSDMOKpbTxv9OBUj/3UM5i3Lwr3w7HOTHv7zLvhzexHuUAV/alBZSUBxe
nDYFxc/YsjbdgW+hpdEAqHJo611MEsowLzYpbPGRvRocfDV+2GSu+EGLxEEkZ2MQ5ixY/SxH
lD0qeT9A5mxv4572euVvJz4e5w3WS5I+lSNUgNdZUnsDz5YE+JsY/hrByEk9JUqu5t+x7hTW
l+obYyP6MCIrXxpl4iLfS5onFNs3tMzvXCvUosDtxJlDibYlmDAOpWzWpVdhATLI1SuDVaPf
MYQ4jOETwFOEzhbz9thr+7f+zY5KdS+lOI1+xMNsdk8nYEmCqP21PURnJaoCkpjNCab2u+DB
6vL82/pBZpcZbem7dPX78HqfoCJIne0OVIxeahrDviSlxXC1Z4CQ8STVaATKQPnBahk5FHGm
GFE1Nca8w4xpxg4wux9SAtzu+Z+gk0gw+n5n639g4oogYQ3wBppdDLh29PaodhDmWvp0/Hc4
HJXM8TwhL3X1
}

 

Finally, by use of TrapShape Block, it is possible to apply a transform to a texture. The TrapShape Block wrapper provides plug-in slots for Trap Position (our transform slot) and Trap Shape. For the Trap Position slot we have substituted the Ripples transform which is in standard.ulb, and for Trap Shape we have used the Modified Perlin Textures plug-in. The use should experiment with the parameters to see what effects can be obtained.

Transform_5 {
::j+8Ozhn2liVXPuNKU03jU+PY53HHbn4kMtyvMT7WpK1uVT7jVKigxJsDG8C4JT+3vXw2JZ64
kAZfzgPn7Xw9yFKlIsGx+w4RBBaqmRyD/lExVlCZ1qswgd0C9285ziD2Sob2qzzSSDYo9EpK
PxQCLJFUtKP8JBHxKCeAJ5Et+jzmMdSac89fEm/wk3PJN1M7ywxjsCxqXMqWTF88wHQ4n3IF
N8iwARNCT17zTijHPqCVXT5baRT4aiM/u4o05zBRtcWcS6yJxRTnmGnOd59ZZJZBVoN885RZ
zyWMNdWAivBctkFRzymf/4RGvrhhsyrC9K1Iw0s4gSKjwRVQQ4naEvAJLiaKrCDAVK3nH+1G
GFFaIVvSRIFGjY20k0MQ7zXuIDmuWszIrJxw3rRUmoRnDm34RUuiWQajz2AMAjL4kxjAIv/X
q/VqH0cwMrB0ZRfhwJSK+LSUBFm6RBTIhAVnNi7G+IDpgVoiq/JLqht+Df6bfd1fLXT1wSdt
6SkieZ1mWVYWIG4v9jbXnGkfntddkg9tSYMLtxsuG+yVWYEGBr/Dfz4W/0+jwrx8tOoroRah
0R8Gn6ED1FS12BIGzsvEZSNgFPYYwxxhOKElGJ15uqSbeQiroVPTrdHNTIA0fOdQ81ngXvVS
UbFsi84oszLcdfVq8QsoqSwtr+mV+D1vCdgtrr/nS4oqdmSjiIvBav1RdkWbwsrMZ8Ev5UJe
hogaTuzrQSL1+pKFGZKI7OBpQb36nH7PHlmU7DP1zkd+i3XdgU126BXI9ZLqmMUlNz8/QQ5X
s6mBkzF36AfUrJxJXH+hSbmx1GDyltowmyhzYJywrz1v8VL+Dq1DC1eSCO4XSQFFJ5Oj2xMg
TEeqjCvshjtpKMKngkupBBcUhH2PA3LHoV8u6Bo1XuAUloYoMjvBT/IToIqLlaYI762oOsH0
pPg3R1bPeYmLM7ToMDxt+x54BFRO5cy0sBAAn5oEMaxlLlTeV3IJvLl0Wk5BmA/c4VJ7cO5B
4OWoZACrNmkbseXfCHbiGcy+B/2IoVPRrrZEVo3S1Xf/27m4sCwneLOjQ07oS27uYlN0M0tr
8XBH7swldjDbft1biSuR6Q3t4t5Z3a0pEZS/juV669mzyNXwFuLaRwfJsBXperzb56aHQSWb
3/+0nf4Y3AQhvfYFIRC18/VLP/k8ttR2zOHuCZouXt1Dax16RKQkpeIvSG6Fxlv0zQ0EYNy0
37C/oB2riC9+xxkrcflBIzLRY4mk19MLd3Jb450CIpyPF2mCl6Zox+UHJpTnlN3zoj9MzvDJ
BImfExYIm4pZiXz8JBtjkmdLaSeDk03AJStyQKeufld+jes/eDj11jdbZnQvk1/nz48pD8zR
nDm/1EB0PULdTnmHPNc4DbOAWplE+G9WIGfpT1O8UUvvlz+HP7TQRAEUEI86Sx1w5J4fjR4K
p+uJ7nqozEdUAQX4NaRbFj9E14R9PkX7rwC7ugvVQXV0Ko1pA4v7tgD6xFFGoqECI6C0DOc/
97SbVPlXQeNPOwqw8k5LWsINJrb6ksF9/Y68p3vEOBo9HTT6ZciQuL54cdvbs1I7UPXcQZ9v
qcaGsc/frAYQJB==
}