Handige overzicht van commando’s in SeExpr¶
Deze pagina beschrijft gedetailleerd alle beschikbare variabelen, functies en operators in SeExpr. Het is een zwaar bewerkte versie van de officiële gebruikersdocumentatie, aangepast voor gebruik met Krita.
Zie ook
Broncode op KDE Invent
SeExpr van Disney API-documentatie
Zie ook
Variabelen¶
Externe variabelen¶
Deze variabelen worden geleverd door het host-programma, in dit geval Krita. Ze zijn verzamelt met de autocomplete help van SeExpr, die u kunt starten met Ctrl+Space.
Lokale variabelen¶
Lokale variabelen kunnen aan het begin van een script worden gedefinieerd.
$a = noise($P);
$b = noise($a * 1);
pow($a, 0.5) + $b
Externe variabelen kunnen ook lokaal worden overschreven. Dit kan handig zijn als u bijvoorbeeld de ruis-frequentie wilt aanpassen.
$P = $P * 10; # ruisfrequentie verhogen
fbm(vnoise($P) + $P/4)
U kunt ook namespaced variabelen definiëren, b.v.:
$A::a = $u * 10;
Besturingsstructuren¶
Bij SeExpr zijn ook structuren met de bekende if conditie mogelijk:
if ($ u > 0.5) {
$color = [0, 0, 1];
}
else {
$color = [1, 0, 0];
}
$color
En de ternaire operator:
$u = $i < .5 ? 0.0 : 10.0
U kunt naar wens ternaire operators nesten, bijv.:
$color = $u < .5 ? ($v < 0.5 ? [0, 0, 1] : [1, 0, 0]) : [0, 1, 0];
$color
U kunt hetzelfde bereiken met de if structuren:
if ($ u > 0.5) {
if ($v < 0.5) {
$color = [0, 0, 1];
}
else {
$color = [1, 0, 0];
}
}
else {
$color = [1, 0, 0];
}
$color
Opdrachten (in aflopende volgorde)¶
- [a,b,c]¶
maker van vectorconstructie
- $P[ n ]¶
toegang tot vectorcomponent
Hint
n
moet zijn 0, 1, of 2, b.v.:$P[0]
- ^¶
Exponent
Notitie
Hetzelfde als de “pow” functie.
- !¶
logisch NIET (NOT)
- ~¶
Inversie (omgekeerd)
Hint
~$A
Geeft hetzelfde resultaat als:
1 - $A
- */ %¶
Vermenigvuldigen, delen, modulus
Notitie
%
is hetzelfde als defmod
functie.- +-¶
Optellen, aftrekken
- <> <= >=¶
Vergelijking: kleiner dan, groter dan, kleiner of gelijk aan, groter of gelijk aan
Notitie
Gebruikt alleen het eerste component van een vector.
- == !=¶
gelijk aan, ongelijk aan
- &&¶
logisch EN (AND)
- ||¶
logisch OF
- ?:¶
ternaire
if
operatorHint
Voorbeeld:
$u < .5 ? 0 : 1
- ->¶
apply - De functie rechts van de pijl wordt uitgevoerd op de uitdrukking links.
Hint
Voorbeelden:
$Cs->contrast(.7) -> clamp(0.2,0.8) $u->hsi(20,1.2,1,$Cs->gamma(1.2))
opdrachten voor toewijzen¶
Naast de standaard toewijs-opdracht:
$foo = $bar
U kunt ook toewijs-opdrachten opgeven zoals:
$foo += $bar;
die overeenkomt met:
$foo = $foo + $bar;
Daarnaast zijn er:
+=
-=
/=
%=
*=
^=
Functies voor het loggen¶
- float printf ( string format, [param0, param1, …] )¶
Stuurt een string naar stdout die volgens instructie wordt opgemaakt. Geldige opmaak-parameters zijn
%f
voor float (neemt het eerste deel van een vector argument) of%v
voor een vector.Hint
Als u bijvoorbeeld schrijft:
$u = printf("test %f %v",[1,2,3],[4,5,6]);
Dan krijgt u op de commandoregel te zien:
test 1 [4,5,6]
- string sprintf ( string format, [double|string, double|string, …] )¶
Geeft een string terug die opgemaakt is volgens de opgegeven waarden. Lees
man sprintf
voor details wat betreft de opmaak.
Functies wat betreft Kleuren, maskeren en Remapping¶
- float bias ( float x, float b)¶
Het variëren van gamma waarbij de control parameter gaat van
0
tot1
waarbij de waarde> 0.5
de kromme omhoog trekt en waarden< 0.5
de kromme omlaag trekt. Gedefinieerd alspow(x, log(b)/log(0.5))
.- float boxstep ( float x, float a )¶
- float gaussstep ( float x, float a, float b )¶
- float linearstep ( float x, float a, float b )¶
- float smoothstep ( float x, float a, float b )¶
De step functies zijn nul voor
x < a
en voor forx > b
(ofx > a
in het geval van de boxstep). Tussena
enb
varieert de waarde continu tussen nul en een. Degausstep
functie gebruikt de standaard Gaussiaanse “bell” kromme die gebaseerd is op een exponentiële kromme. Desmoothstep
functie gebruikt een kubische kromme. Intuïtief heeftgausstep
een scherpe overgang vlakbij een en zachtere overgang bij nul waarsmoothstep
een middelmatige overgang vlakbij een en nul heeft.- float clamp ( float x, float lo, float hi )¶
Beperkt
x
tot de range[lo, hi]
.- float compress ( float x, float lo, float hi )¶
Comprimeert de dynamische range van
[0, 1]
naar[lo, hi]
.- float contrast ( float x, float c )¶
Past het contrast aan. Voor
c
van0
tot0.5
, wordt het contrast verminderd. Voorc > 0.5
, wordt het contrast vergroot.- float expand ( float x, float lo, float hi )¶
Maakt de dynamische range groter van
[lo, hi]
naar[0, 1]
.- float fit ( float x, float a1, float b1, float a2, float b2 )¶
Het lineair overzetten van
[a1..x..b1]
naar[a2..x..b2]
- float gamma ( float x, float g)¶
pow(x, 1/g)
- float invert ( float x )¶
Inverteert de waarde. Gedefinieerd als
1 - x
.- color hsi ( color x, float h, float s, float i, float map=1 )¶
De
hsi
functie verschuift de tint meth
(in graden) en versterkt de verzadiging en intensiteit met respectievelijks
eni
. Een overzettabel kan gebruikt worden voor de verschuiving. Een volledige verschuiving vindt plaats als de overzetwaarde is een en geen verschuiving zal plaats vinden als de overzetwaarde nul is. De verschuiving wordt verschaalt met waarden tussen nul en een.- color hsltorgb ( color hsl )¶
- color rgbtohsl ( color rgb )¶
RGB naar HSL kleurruimte conversie. HSL is Tint(Hue), Verzadiging (Saturation), Helderheid (Lightness) (alles in de range
[0, 1]
). Deze functies zijn uitgebreid om ook RGB en HSL waarden buiten de range[0, 1]
in een redelijke manier te kunnen bewerken. Voor elke RGB en HSL waarden (behalve negatieve waarden) is de conversie goed gedefinieerd en omkeerbaar.- color midhsi ( color x, float h, float s, float i, float map, float falloff=1, int interp=0 )¶
De
midhsi
functie is hetzelfde als dehsi
functie behalve dat de controle-tabel is gecentreerd is rond het middelpunt (waarde van0.5
) en de verschuiving beide richtingen kan plaats vinden. Bij het middelpunt vindt er geen verschuiving plaats. Bij 1.0, is er een volledige verschuiving, en bij0.0
, is er een complete omgekeerde verschuiving. Daarnaast zijn erfalloff
eninterp
om de overzettabel aan te passen met behulp van deremap
functie. Met de standaardfalloff
eninterp
waarden vindt er geen remapping plaats.- float mix ( float a, float b, float alpha )¶
Een mengsel van a en b overeenkomstig alpha. Gedefinieerd als
a*(1-alpha) +b*alpha
.- float remap ( float x, float source, float range, float falloff, int interp )¶
Algemene overzet-functie. Als
x
is in de± reeks
van de bron, dan is het resultaat een (1). Het resultaat gaat naar nul (0) buiten die reeks verder dan defalloff
afstand. De vorm van falloff wordt bestuurd doorinterp
.Notitie
Getallen en constanten mogen worden gebruikt:
int linear = 0
int smooth = 1
int gaussian = 2
Ruis functies¶
- float cellnoise ( vector v )¶
- float cellnoise1 ( float x )¶
- float cellnoise2 ( float x, float y )¶
- float cellnoise3 ( float x, float y, float z )¶
- color ccellnoise ( vector v )¶
cellnoise
genereert een veld van constant gekleurde kubussen op basis van de locatie van het gehele getal. Dit is gelijk aan de PRMan cellnoise function.Notitie
ccellnoise
geeft gekleurde cell-ruis.- float fbm ( vector v, int octaves=6, float lacunarity=2, float gain=0.5 )¶
- color cfbm ( vector v, int octaves=6, float lacunarity=2, float gain=0.5 )¶
- vector vfbm ( vector v, int octaves=6, float lacunarity=2, float gain=0.5 )¶
- float fbm4 ( vector v, float time, int octaves=6, float lacunarity=2, float gain=0.5 )¶
- color cfbm4 ( vector v, float time, int octaves=6, float lacunarity=2, float gain=0.5 )¶
- vector vfbm4 ( vector v, float time, int octaves=6, float lacunarity=2, float gain=0.5 )¶
fbm
(Fractale Brownse beweging) is een multi-frequentie ruis functie. De basis frequentie is gelijk aan denoise
(ruis)functie. Het totale aantal frequenties wordt geregeld metoctaves
. Thelacunariteit
regelt de afstand tussen de frequenties - een waarde 2 betekent dat elke octaaf twee keer de voorgaande frequentie is. De ``gain` regelt de schaal van elke frequentie vergeleken met die van de vorige frequentie.Notitie
cfbm
encfbm4
geeft gekleurde ruis.vfbm
envfbm4
geeft vector ruis.- float hash ( float seed1, [float seed2, …] )¶
Als
rand
, maar zonder interne seeds. Elk aantal seeds is mogelijk en het gegeven antwoord is afhankelijk van alle gegeven seeds.- float noise ( vector v )¶
- float noise ( float x, float y )¶
- float noise ( float x, float y, float z )¶
- float noise ( float x, float y, float z, float w )¶
- color cnoise ( vector v)¶
- color cnoise4 ( vector v, float t)¶
- float pnoise ( vector v, vector period )¶
- float snoise ( vector v)¶
- float snoise4 ( vector v, float t)¶
- vector vnoise (vector v )¶
- vector vnoise4 (vector v, float t )¶
noise
is een functie voor willekeurigheid die soepel mengt tussen samples op locaties met gehele getallen. Dit is de originele noise-functie van Ken Perlin.Notitie
cnoise
encnoise4
geven gekleurde ruis.noise4
geeft van teken voorziene vector-noise.pnoise
geeft periodieke ruis.snoise
ensnoise4
geeft noise (ruis) met een teken binnen de reeks[-1, 1]
.vnoise
geeft van teken voorziene vector-noise.- float rand ( [float min, float max], [float seed] )¶
Willekeurig getal tussen
[min, max]
(of[0, 1]
indien niet gespecificeerd). Als een seed is gegeven, zal het gebruikt worden naast de interne seeds en kan gebruikt worden om meerdere gescheiden generators aan te maken.- float turbulence ( vector v, int octaves=6, float lacunarity=2, float gain=0.5 )¶
- color cturbulence ( vector v, int octaves=6, float lacunarity=2, float gain=0.5 )¶
- vector vturbulence ( vector v, int octaves=6, float lacunarity=2, float gain=0.5 )¶
turbulence
is een variant vanfbm
waar de absolute waarde van elke ruisterm is genomen. Ziet er meer golvend uit.- float voronoi ( vector v, int type=1, float jitter=0.5, float fbmScale=0, int fbmOctaves=4, float fbmLacunarity=2, float fbmGain=0.5)¶
- color cvoronoi ( vector v, int type=1, float jitter=0.5, float fbmScale=0, int fbmOctaves=4, float fbmLacunarity=2, float fbmGain=0.5)¶
- vector pvoronoi ( vector v, float jitter=0.5, float fbmScale=0, int fbmOctaves=4, float fbmLacunarity=2, float fbmGain=0.5)¶
voronoi
is een cellulair ruispatroon. Het is een zenuwachtige variant vancellnoise
. Het type parameter beschrijft verschillende varianten van de ruisfunctie. De parameterjitter
bestuurt hoe onregelmatig het patroon is (0 is zoals gewone cellnoise er uit ziet). De parametersfbm...
kunnen gebruikt worden om het ruisveld te verstoren. WanneerfbmScale
nul is (de standaard), is er geen verstoring. De overblijvende parameters zijn hetzelfde als voor de functiefbm
.Hint
Voronoi types 1 tot 5:
Notitie
cvoronoi
geeft een willekeurige kleur voor elk vakje enpvoronoi
geeft de punt-locatie voor het middelpunt van dat vakje.
Functies voor selectie¶
- float choose ( float index, float choice1, float choice2, […] )¶
Selecteert een van de in de index opgegeven keuzes (aangenomen dat die in de range vallen
[0, 1]
).- int cycle ( int index, int loRange, int hiRange )¶
Cyclisch gaan door de waarden tussen loRange en hiRange, op basis van de gegeven index. Dit is een offset
mod
-functie. Het resultaat wordt berekend alsloRange + value % (hiRange-loRange+1)
.- int pick ( float index, int loRange, int hiRange, [ float weights, … ] )¶
Kiest willekeurige waarden tussen loRange en hiRange op basis van de opgegeven index (met automatische hash). De waarden worden verdeeld volgens de opgegeven gewichten. Een niet opgegeven gewicht wordt verondersteld 1.0 te zijn.
- float wchoose ( float index, float choice1, float weight1, float choice2, float weight2, […] )¶
Kiest een van de opgegeven keuzes op basis van de index (volgens aanname in bereik
[0, 1]
. De waarden worden verdeeld naar de opgegeven gewichten.
Hint
Dit voorbeeld geeft gehele getallen tussen 1 en 10:
pick(value, 1, 10)
Dit voorbeeld geeft de waarden 1 en 2 respectievelijk twee en 2.5 zo vaak vergeleken met de andere waarden (3-10):
pick(value, 1, 10, 2, 2.5)
Dit voorbeeld geeft 10, 11, en 13 tot 20 (12 is overgeslagen vanwege het gewicht nul):
pick(value, 10, 20, 1, 1, 0)
Algemene wiskundige constanten en functies¶
- float abs ( float x)¶
Absolute waarde van
x
.- float cbrt ( float x )¶
Derdemachtswortel.
- float ceil ( float x )¶
Volgende hogere integer.
- float exp ( float x )¶
E
tot de machtx
.- float floor ( float x )¶
Volgende lagere integer.
- float fmod ( float x, float y )¶
Restgetal van
x / y
.Notitie
Ook beschikbaar als
%
bewerking.- float log ( float x )¶
Natuurlijke logaritme.
- float log10 ( float x )¶
Logaritme met grondtal 10.
- float max ( float a, float b )¶
De grootste van
a
enb
.- float min ( float a, float b )¶
Kleinste van
a
enb
.- float pow ( float x, float y )¶
x
tot de machty
.Notitie
Ook beschikbaar als
^
bewerking.- float round ( float x )¶
Dichtstbijzijnde integer.
- float sqrt ( float x )¶
Vierkantswortel.
- float trunc ( float x )¶
Dichtstbijzijnde integer richting nul (0).
Trigonometrie-functies¶
- float acos ( float x )¶
Arccosinus.
- float acosd ( float x )¶
Arc cosinus in graden.
- float acosh ( float x )¶
Hyperbolische arccosinus.
- float asin ( float x )¶
Arcsinus.
- float asind ( float x )¶
Arcsinus in graden.
- float asinh ( float x )¶
Hyperbolische arcsinus.
- float atan ( float x )¶
Arctangens.
- float atand ( float x )¶
Arctangens in graden.
- float atan2 ( float y, float x)¶
Arctangens van
y/x
tussen-PI
enPI
.- float atan2d ( float y, float x )¶
Arctangens in graden van
y/x
tussen-180º
en180º
.- float atanh ( float x )¶
Hyperbolische arctangens.
- float cos ( float x )¶
Cosinus.
- float cosd ( float x )¶
Cosinus in graden.
- float cosh ( float x )¶
Hyperbolische cosinus.
- float deg ( float x )¶
Radialen naar graden.
- float hypot ( float x, float y )¶
Lengte van 2D vector
[x, y]
.- float rad ( float x )¶
Graden naar radialen.
- float sin ( float x )¶
Sinus.
- float sind ( float x )¶
Sinus in graden.
- float sinh ( float x )¶
Hyperbolische sinus.
- float tan ( float x )¶
Tangens.
- float tand ( float x )¶
Tangens in graden.
- float tanh ( float x )¶
Hyperbolische tangens.
Functies met vectoren¶
- float angle ( vector a, vector b )¶
Hoek tussen twee vectors (in radialen).
- vector cross ( vector a, vector b )¶
Kruisproduct van vector.
- float dist ( vector a, vector b )¶
Afstand tussen twee punten.
- float dot ( vector a, vector b)¶
Dot-product van vector.
- float length ( vector v )¶
Lengte van vector.
- vector norm ( vector v )¶
Vector verschaalt tot lengte-eenheid.
- vector ortho ( vector a, vector b )¶
Vector loodrecht op twee vectors.
- vector rotate ( vector v, vector axis, float angle )¶
Roteert
v
rond een as met opgegeven hoek` (in radialen).- vector up ( vector v, vector up )¶
Roteert
v
zodanig dat de Y as in deup
richting wijst.
Gebruik van vectoren¶
Vectors (punten, kleuren of 3D vectoren) mogen gemengd worden met scalars (eenvoudige zwevende-komma-waarden). Als een scalar gebruikt wordt in een vectorcontext, wordt het gerepliceerd in de drie componenten, bijv. 0.5
wordt [0.5, 0.5, 0.5]
.
Als een vector gebruikt wordt in een scalarcontext, wordt alleen de eerste component gebruikt. Een van de voordelen hiervan is dat alle functies die gedefinieerd zijn om te werken met scalars automatisch werken met vectoren. Bijvoorbeeld, pick
, choose
, cycle
, spline
, etc., zullen gewoon goed werken met vectoren.
Wiskundige bewerkingen zoals +
, *
, enz., en scalar functies worden onderdeel-gewijz toegepast op vectoren. Als voorbeeld, het toepassen van de gamma
functie op een map wijzigt de gamma van alle drie de kleuren kanalen.
Functies met krommen¶
Interpolatie van parameterwaarden naar een set met besturingspunten wordt geregeerd door de volgende functies.
- color ccurve ( float param, float pos0, color val0, int interp0, float pos1, color val1, int interp1, […] )¶
Interpoleert kleurhelling gegeven door besturingspunten bij
param
. Besturingspunten worden gespecificeerd door tripels van parameterspos_i
,val_i
eninterp_i
.Hint
Interpolatie codes zijn:
0 - geen
1 - lineair
2 - glad
3 - spline
4 - monotone (niet-oscillerende) spline
- float curve ( float param, float pos0, float val0, int interp0, float pos1, float val1, int interp1, […] )¶
Interpoleert een 1D-helling gedefinieerd door besturingspunten bij
param
. Besturingspunten worden gespecificeerd door tripels van parameterspos_i
,val_i
eninterp_i
.Hint
Interpolatie codes zijn:
0 - geen
1 - lineair
2 - glad
3 - spline
4 - monotone (niet-oscillerende) spline
- float spline ( float param, float y1, float y2, float y3, float y4, […] )¶
Interpoleert een verzameling waarden met de opgegeven parameter waar
y1
, …,yn
gelijk worden verdeeld tussen[0, 1]
.
Eigen aangepaste plugins¶
Eigen aangepaste functies kunt u schrijven in C++ en worden als een of meer dynamische plugins geladen.Lees Writing Custom Expression Plugins voor meer details
Waarschuwing
Deze functionaliteit wordt niet door Krita ondersteunt.
Commentaar¶
U kunt commentaar toevoegen aan uw script door het
#
karakter te gebruiken. SeExpr zal dan voor het renderen de rest van de regel overslaan. Maar ze worden niet genegeerd; commentaar kan nog steeds worden gebruikt om een geldige range te declareren voor integer, float, en vector variabelen. Hierdoor kunt u ze gebruiken voor widgets die dan de opgegeven range zal accepteren.Hint
$var0
is een integer variabel die varieert tussen 0 en 10 inclusief:$var1
is een drijvende komma variabel met dezelfde range:$var2
is een vector variabel:Deze laatste is erg handig; SeExpr ziet vectors met een bereik van
[0, 1]
als kleuren:In alle gevallen indien niet anders opgegeven, is het bereik van de bijbehorende widgets’ van 0 tot 1.
Bij een meerregelige uitdrukking, mag elke regel zijn eigen commentaar hebben.