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

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.

$u, $v

Pixelpositie in genormaliseerde coördinaten.

$w, $h

De breedte en hoogte van de afbeelding in pixels.

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 de fmod 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 operator

Hint

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:

  • +=

  • -=

  • /=

  • %=

  • *=

  • ^=

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:

$var0 = 0; # 0, 10

$var1 is een drijvende komma variabel met dezelfde range:

$var1 = 0; # 0.000, 10.000

$var2 is een vector variabel:

$var2 = [0, 0, 0] # 0.000, 10.000

Deze laatste is erg handig; SeExpr ziet vectors met een bereik van [0, 1] als kleuren:

# dit is donker rood
$color = [0.5, 0, 0] # 0.000, 1.000

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.

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 tot 1 waarbij de waarde > 0.5 de kromme omhoog trekt en waarden < 0.5 de kromme omlaag trekt. Gedefinieerd als pow(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 for x > b (of x > a in het geval van de boxstep). Tussen a en b varieert de waarde continu tussen nul en een. De gausstep functie gebruikt de standaard Gaussiaanse “bell” kromme die gebaseerd is op een exponentiële kromme. De smoothstep functie gebruikt een kubische kromme. Intuïtief heeft gausstep een scherpe overgang vlakbij een en zachtere overgang bij nul waar smoothstep 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 van 0 tot 0.5, wordt het contrast verminderd. Voor c > 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 met h (in graden) en versterkt de verzadiging en intensiteit met respectievelijk s en i. 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 de hsi functie behalve dat de controle-tabel is gecentreerd is rond het middelpunt (waarde van 0.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 bij 0.0, is er een complete omgekeerde verschuiving. Daarnaast zijn er falloff en interp om de overzettabel aan te passen met behulp van de remap functie. Met de standaard falloff en interp 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 de falloff afstand. De vorm van falloff wordt bestuurd door interp.

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 de noise (ruis)functie. Het totale aantal frequenties wordt geregeld met octaves. The lacunariteit 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 en cfbm4 geeft gekleurde ruis.

vfbm en vfbm4 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 en cnoise4 geven gekleurde ruis.

noise4 geeft van teken voorziene vector-noise.

pnoise geeft periodieke ruis.

snoise en snoise4 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 van fbm 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 van cellnoise. Het type parameter beschrijft verschillende varianten van de ruisfunctie. De parameter jitter bestuurt hoe onregelmatig het patroon is (0 is zoals gewone cellnoise er uit ziet). De parameters fbm... kunnen gebruikt worden om het ruisveld te verstoren. Wanneer fbmScale nul is (de standaard), is er geen verstoring. De overblijvende parameters zijn hetzelfde als voor de functie fbm.

Hint

Voronoi types 1 tot 5:

image0 image1 image2 image3 image4

Notitie

cvoronoi geeft een willekeurige kleur voor elk vakje en pvoronoi 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 als loRange + 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 PI
float PI = 3.14159...
float E
float E = 2.71828...
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 macht x.

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 en b.

float min ( float a, float b )

Kleinste van a en b.

float pow ( float x, float y )

x tot de macht y.

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 en PI.

float atan2d ( float y, float x )

Arctangens in graden van y/x tussen -180º en 180º.

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 de up 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 parameters pos_i, val_i en interp_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 parameters pos_i, val_i en interp_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.