In this video, I show how to use procedurally generated palettes using Affinity Photo's procedural texture filter.
Procedural Palette Filter:
var v=vec2(rx*cos(th)-ry*sin(th),rx*sin(th)+ry*cos(th))*a/w; var ac=vec3(a1,a2,a3); var bc=vec3(b1,b2,b3); var cc=vec3(c1,c2,c3); var dc=vec3(d1,d2,d3); ac+bc*cos(360*(cc*oscsc(v.x,b*v.y)+dc))
Procedural Palette with Waveform Window:
var v=vec2(rx,ry)*a/h; var ac=vec3(a1,a2,a3); var bc=vec3(b1,b2,b3); var cc=vec3(c1,c2,c3); var dc=vec3(d1,d2,d3); var t1=ac+bc*cos(360*(cc*a*rx/h+dc)); var tr=1-step(.1,osccri(v.y+(b1*oschsc(v.x*c1*2+d1*2)+a1)/3)); var tg=1-step(.1,osccri(v.y+(b2*oschsc(v.x*c2*2+d2*2)+a2)/3)); var tb=1-step(.1,osccri(v.y+(b3*oschsc(v.x*c3*2+d3*2)+a3)/3)); t1*osci(y*2/h)+tr*(1-osci(y*2/h))*vec3(1,0,0)+tg*(1-osci(y*2/h))*vec3(0,1,0)+tb*(1-osci(y*2/h))*vec3(0,0,1)
Procedural Palette Gradient with Turbulence:
var v=vec2(rx*cos(th)-ry*sin(th),rx*sin(th)+ry*cos(th))*a/w; var ac=vec3(a1,a2,a3); var bc=vec3(b1,b2,b3); var cc=vec3(c1,c2,c3); var dc=vec3(d1,d2,d3); ac+bc*cos(360*(cc*oscsc(vec2(v.x,b*v.y)+t*dirsc(v*c))+dc))
t is 0,1 slider for Turbulence amount
c is Real input for Turbulence frequency .5-5 should be good
https://iquilezles.org/articles/palettes/
https://www.youtube.com/@InigoQuilez
Procedural Textures Playlist:
https://www.youtube.com/playlist?list=PLPTJk1HIMN35WOCDXnoUB-l2_YVgJ8rHK
The Procedural Texture filter and related information can be found on Affinity Photo's website:
https://affinity.help/photo/en-US.lproj/pages/Filters/filter_proceduraltexture.html
0:00 Introduction
1:53 Demonstration of the Procedural Palette
4:45 Generating a Gradient with the Procedural Palette
5:17 Setting up a new document and procedural texture filter
5:59 Adding the rotatable coordinate system
7:29 Creating the four control vectors and the procedural palette function
12:37 Adding an oscillator pattern
15:23 Examples and conclusions