Referência rápida do SeExpr¶
Esta página detalha todas as variáveis, funções e operadores disponíveis no SeExpr. É uma versão bastante editada da documentação oficial do usuário, adaptada para uso com o Krita.
Ver também
Código fonte em KDE Invent
Documentação da API do SeExpr da Disney
Ver também
Variáveis¶
Variáveis externas¶
Essas variáveis são fornecidas por aplicativos host, neste caso o Krita. Elas são registradas com a ajuda de preenchimento automático do SeExpr, que pode ser acessada por Ctrl+Espaço.
Variáveis locais¶
Variáveis locais podem ser definidas no início da expressão:
$a = noise($P);
$b = noise($a * 1);
pow($a, 0.5) + $b
Variáveis externas também podem ser substituídas por atribuição local. Isso pode ser útil para dimensionar a frequência de ruído, por exemplo:
$P = $P * 10; # aumento da frequência de ruído
fbm(vnoise($P) + $P/4)
Você também pode definir variáveis com namespace, por exemplo:
$A::a = $u * 10;
Estruturas de controle¶
O SeExpr fornece a conhecida estrutura condicional if:
if ($ u > 0.5) {
$color = [0, 0, 1];
}
else {
$color = [1, 0, 0];
}
$color
E o operador ternário:
$u = $i < .5 ? 0.0 : 10.0
Você pode aninhar livremente operadores ternários, por exemplo:
$color = $u < .5 ? ($v < 0.5 ? [0, 0, 1] : [1, 0, 0]) : [0, 1, 0];
$color
Você também pode conseguir o mesmo com estruturas if:
if ($ u > 0.5) {
if ($v < 0.5) {
$color = [0, 0, 1];
}
else {
$color = [1, 0, 0];
}
}
else {
$color = [1, 0, 0];
}
$color
Operadores (listados em ordem decrescente de precedência)¶
- [a,b,c]¶
construtor de vetor
- $P[ n ]¶
acesso de componente de vetor
Dica
ndeve ser 0, 1, ou 2, por exemplo:$P[0]
- ^¶
exponenciação
Nota
O mesmo que a função
pow.- !¶
NÃO lógico
- ~¶
inversão
Dica
~$A
dá o mesmo resultado que:
1 - $A
- */ %¶
multiplicar, dividir, módulo
Nota
%é o mesmo que a funçãofmod.- +-¶
adicionar, subtrair
- <> <= >=¶
comparação: menor que, maior que, menor ou igual que, maior ou igual que
Nota
Usa somente o primeiro componente de um vetor.
- == !=¶
igualdade, desigualdade
- &&¶
E lógico
- ||¶
OU lógico
- ?:¶
operador
ifternárioDica
Exemplo:
$u < .5 ? 0 : 1
- ->¶
aplicar - A função à direita da seta é aplicada à expressão à esquerda.
Dica
Exemplos:
$Cs->contrast(.7) -> clamp(0.2,0.8) $u->hsi(20,1.2,1,$Cs->gamma(1.2))
Operadores de atribuição¶
Além da declaração de atribuição básica:
$foo = $bar
você também pode fazer atribuições de operadores como:
$foo += $bar;
que é equivalente a:
$foo = $foo + $bar;
Além disso, há:
+=-=/=%=*=^=
Funções de registro¶
- float printf ( string format, [param0, param1, …] )¶
Imprime uma string na saída padrão formatada conforme fornecido. Os parâmetros de formatação possíveis são
%fpara float (leva o primeiro componente do argumento do vetor) ou%vpara vetor.Dica
Por exemplo, se você escreveu:
$u = printf("teste %f %v",[1,2,3],[4,5,6]);você obteria em seu console:
teste 1 [4,5,6]
- string sprintf ( string format, [double|string, double|string, …] )¶
Retorna uma string formatada a partir dos valores fornecidos. Consulte
man sprintfpara obter detalhes sobre o formato.
Funções de cor, máscara e remapeamento¶
- float bias ( float x, float b)¶
Variação de gama onde o parâmetro de controle varia de
0a1, com valores> 0,5puxando a curva para cima e valores< 0,5puxando a curva para baixo. Definido comopow(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 )¶
As funções de degrau são zero para
x < ae um parax > b(oux > ano caso de boxstep). Entreaeb, o valor varia continuamente entre zero e um. A funçãogaussteputiliza a curva gaussiana padrão em “sino”, que se baseia em uma curva exponencial. A funçãosmoothsteputiliza uma curva cúbica. Intuitivamente,gausstepapresenta uma transição mais acentuada próxima de um e uma transição mais suave próxima de zero, enquantosmoothstepapresenta uma suavidade média próxima de um e zero.- float clamp ( float x, float lo, float hi )¶
Restringe
xao intervalo[lo, hi].- float compress ( float x, float lo, float hi )¶
Comprime a faixa dinâmica de
[0, 1]para[lo, hi].- float contrast ( float x, float c )¶
Ajuste o contraste. Para
cde0a0,5, o contraste é reduzido. Parac > 0,5, o contraste é aumentado.- float expand ( float x, float lo, float hi )¶
Expande a faixa dinâmica de
[lo, hi]para[0, 1].- float fit ( float x, float a1, float b1, float a2, float b2 )¶
Remapeamento linear de
[a1..x..b1]para[a2..x..b2]- float gamma ( float x, float g)¶
pow(x, 1/g)- float invert ( float x )¶
Inverte o valor. Definido como
1 - x.- color hsi ( color x, float h, float s, float i, float map=1 )¶
A função
hsidesloca o matiz emh(em graus) e dimensiona a saturação e a intensidade emsei, respectivamente. Um mapa pode ser fornecido para controlar a mudança — a mudança completa ocorrerá quando o mapa for um e nenhuma mudança ocorrerá quando o mapa for zero. A mudança será reduzida para valores entre zero e um.- color hsltorgb ( color hsl )¶
- color rgbtohsl ( color rgb )¶
Conversão de espaço de cor RGB para HSL. HSL significa Matiz, Saturação e Luminosidade (todos no intervalo
[0, 1]). Essas funções também foram estendidas para oferecer suporte a valores RGB e HSL fora do intervalo[0, 1]de forma razoável. Para qualquer valor RGB ou HSL (exceto valores negativos), a conversão é bem definida e reversível.- color midhsi ( color x, float h, float s, float i, float map, float falloff=1, int interp=0 )¶
A função
midhsié semelhante à funçãohsi, exceto que o mapa de controle é centralizado em torno do ponto médio (valor0,5) e pode dimensionar o deslocamento em ambas as direções. No ponto médio, não ocorre deslocamento. Em 1,0, ocorre o deslocamento completo, e em0,0, ocorre o deslocamento inverso completo. Os controles adicionaisfalloffeinterpsão fornecidos para ajustar o mapa usando a funçãoremap. Os valores padrãofalloffeinterpresultam em nenhum remapeamento.- float mix ( float a, float b, float alpha )¶
Mistura de a e b de acordo com alfa. Definida como
a*(1-alfa) +b*alfa.- float remap ( float x, float source, float range, float falloff, int interp )¶
Função geral de remapeamento. Quando
xestá dentro de± intervaloda fonte, o resultado é um. O resultado cai para zero além desse intervalo na distância defalloff. A forma do falloff é controlada porinterp.Nota
Podem ser usados valores numéricos ou constantes nomeadas:
int linear = 0
int smooth = 1
int gaussian = 2
Funções de ruído¶
- 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 )¶
cellnoisegera um campo de cubos coloridos constantes com base na localização do inteiro. Isso é o mesmo que a função cellnoise do PRMan.Nota
ccellnoisegera ruído de célula colorido.- 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(Movimento Browniano Fractal) é uma função de ruído multifrequencial. A frequência base é a mesma da funçãoruído. O número total de frequências é controlado poroitavas. Alacunariedadeé o espaçamento entre as frequências – um valor de 2 significa que cada oitava é o dobro da frequência anterior. Oganhocontrola o quanto cada frequência é escalonada em relação à frequência anterior.Nota
cfbmecfbm4geram ruído de cor.vfbmevfbm4geram ruído vetorial.- float hash ( float seed1, [float seed2, …] )¶
Semelhante a
rand, mas sem sementes internas. Qualquer número de sementes pode ser fornecido e o resultado será uma função aleatória baseada em todas as sementes.- 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é uma função aleatória que combina suavemente amostras em posições inteiras. Esta é a função de ruído original de Ken Perlin.Nota
cnoiseecnoise4produzem ruído de cor.noise4gera ruído vetorial assinado.pnoiseemite ruído periódico.snoiseesnoise4produzem ruído assinado com intervalo[-1, 1].vnoisegera ruído vetorial assinado.- float rand ( [float min, float max], [float seed] )¶
Número aleatório entre
[min, max](ou[0, 1]se não especificado). Se uma semente for fornecida, ela será usada em adição às sementes internas e poderá ser usada para criar vários geradores distintos.- 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 )¶
turbulênciaé uma variante defbmonde o valor absoluto de cada termo de ruído é obtido. Isso dá uma aparência mais ondulada.- 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é um padrão de ruído celular. É uma variante jitter decellnoise. O parâmetro type descreve diferentes variantes da função de ruído. O parâmetrojittercontrola a irregularidade do padrão (0 é como o ruído celular comum). Os parâmetrosfbm...podem ser usados para distorcer o campo de ruído. QuandofbmScaleé zero (o padrão), não há distorção. Os parâmetros restantes são os mesmos da funçãofbm.Dica
Tipos Voronoi de 1 à 5:

Nota
cvoronoiretorna uma cor aleatória para cada célula epvoronoiretorna a localização do ponto do centro da célula.
Funções de seleção¶
- float choose ( float index, float choice1, float choice2, […] )¶
Escolhe uma das opções fornecidas com base no índice (assumindo-se que esteja no intervalo
[0, 1]).- int cycle ( int index, int loRange, int hiRange )¶
Percorre os valores entre loRange e hiRange com base no índice fornecido. Esta é uma função
modde deslocamento. O resultado é calculado comoloRange + valor % (hiRange-loRange+1).- int pick ( float index, int loRange, int hiRange, [ float weights, … ] )¶
Seleciona valores aleatoriamente entre loRange e hiRange com base no índice fornecido (que é automaticamente hash). Os valores serão distribuídos de acordo com os pesos fornecidos. Quaisquer pesos não fornecidos são considerados 1,0.
- float wchoose ( float index, float choice1, float weight1, float choice2, float weight2, […] )¶
Escolhe uma das opções fornecidas com base no índice (assumindo-se que esteja no intervalo
[0, 1]). Os valores serão distribuídos de acordo com os pesos fornecidos.
Dica
Este exemplo retorna valores inteiros entre 1 e 10:
pick(value, 1, 10)
Este exemplo retorna os valores 1 e 2 duas vezes e 2,5 vezes mais frequentemente, respectivamente, em comparação com os outros valores (3-10):
pick(value, 1, 10, 2, 2.5)
Este exemplo retorna 10, 11 e 13 a 20 (12 é ignorado devido ao peso zero):
pick(value, 10, 20, 1, 1, 0)
Constantes e Funções Matemáticas Gerais¶
- float abs ( float x)¶
Valor absoluto de
x.- float cbrt ( float x )¶
Raiz cúbica.
- float ceil ( float x )¶
Próximo inteiro mais alto.
- float exp ( float x )¶
Eelevado à potênciax.- float floor ( float x )¶
Próximo inteiro inferior.
- float fmod ( float x, float y )¶
Resto de
x / y.Nota
Também disponível como operador
%.- float log ( float x )¶
Logaritmo natural.
- float log10 ( float x )¶
Logaritmo de base 10.
- float max ( float a, float b )¶
Maior de
aeb.- float min ( float a, float b )¶
Menor de
aeb.- float pow ( float x, float y )¶
xelevado à potênciay.Nota
Também disponível como operador
^.- float round ( float x )¶
Inteiro mais próximo.
- float sqrt ( float x )¶
Raiz quadrada.
- float trunc ( float x )¶
Inteiro mais próximo de zero.
Funções trigonométricas¶
- float acos ( float x )¶
Arco cosseno.
- float acosd ( float x )¶
Arco cosseno em graus.
- float acosh ( float x )¶
Arco cosseno hiperbólico.
- float asin ( float x )¶
Arco seno.
- float asind ( float x )¶
Arco seno em graus.
- float asinh ( float x )¶
Arco seno hiperbólico.
- float atan ( float x )¶
Arco tangente.
- float atand ( float x )¶
Arco tangente em graus.
- float atan ( float x )¶
Arco tangente de
y/xentre-PIePI.- float atan2d ( float y, float x )¶
Arco tangente em graus de
y/xentre-180ºe180º.- float atanh ( float x )¶
Arco tangente hiperbólico.
- float cos ( float x )¶
Cosseno.
- float cosd ( float x )¶
Cosseno em graus.
- float cosh ( float x )¶
Cosseno hiperbólico.
- float deg ( float x )¶
Radianos para graus.
- float hypot ( float x, float y )¶
Comprimento do vetor 2D
[x, y].- float rad ( float x )¶
Graus para radianos.
- float sin ( float x )¶
Seno.
- float sind ( float x )¶
Seno em graus.
- float sinh ( float x )¶
Seno hiperbólico.
- float tan ( float x )¶
Tangente.
- float tand ( float x )¶
Tangente em graus.
- float tanh ( float x )¶
Tangente hiperbólica.
Funções de vetor¶
- float angle ( vector a, vector b )¶
Ângulo entre dois vetores (em radianos).
- vector cross ( vector a, vector b )¶
Produto vetorial.
- float dist ( vector a, vector b )¶
Distância entre dois pontos.
- float dot ( vector a, vector b)¶
Produto escalar vetorial.
- float length ( vector v )¶
Comprimento do vetor.
- vector norm ( vector v )¶
Vetor dimensionado para comprimento unitário.
- vector ortho ( vector a, vector b )¶
Vetor ortográfico para dois vetores.
- vector rotate ( vector v, vector axis, float angle )¶
Gira
vem torno do eixo peloângulofornecido (em radianos).- vector up ( vector v, vector up )¶
Gira
vde modo que o eixo Y aponte na direçãoupfornecida.
Suporte a vetor¶
Vetores (pontos, cores ou vetores 3D) podem ser intercalados com escalares (valores simples de ponto flutuante). Se um escalar for usado em um contexto vetorial, ele será replicado nos três componentes, por exemplo, 0,5 se torna [0,5, 0,5, 0,5].
Se um vetor for usado em um contexto escalar, apenas o primeiro componente será usado. Uma das vantagens disso é que todas as funções definidas para trabalhar com escalares se estendem automaticamente para vetores. Por exemplo, pick, choose, cycle, spline, etc., funcionarão perfeitamente com vetores.
Operadores aritméticos como +, *, etc., e funções escalares são aplicados aos vetores em termos de componentes. Por exemplo, aplicar a função gamma a um mapa ajusta o gama de todos os três canais de cor.
Funções de curva¶
A interpolação de valores de parâmetros para um conjunto de pontos de controle é governada pelas seguintes funções.
- color ccurve ( float param, float pos0, color val0, int interp0, float pos1, color val1, int interp1, […] )¶
Interpola a rampa de cores fornecida pelos pontos de controle em
param. Os pontos de controle são especificados por triplos dos parâmetrospos_i, ` val_i` einterp_i.Dica
Os códigos de interpolação são:
0 - nenhuma
1 - linear
2 - suave
3 - spline
4 - monotone (non-oscillating) spline
- float curve ( float param, float pos0, float val0, int interp0, float pos1, float val1, int interp1, […] )¶
Interpola uma rampa unidimensional definida por pontos de controle em
param. Os pontos de controle são especificados por triplos dos parâmetrospos_i,val_ieinterp_i.Dica
Os códigos de interpolação são:
0 - nenhuma
1 - linear
2 - suave
3 - spline
4 - monotone (non-oscillating) spline
- float spline ( float param, float y1, float y2, float y3, float y4, […] )¶
Interpola um conjunto de valores para o parâmetro especificado onde
y1, …,ynsão distribuídos uniformemente de[0, 1].
Plugins personalizados¶
Funções personalizadas podem ser escritas em C++ e carregadas como um ou mais plugins dinâmicos. Consulte Escrevendo Plugins de Expressão Personalizados para mais detalhes.
Aviso
Esta funcionalidade não é suportada no Krita.
Comentários¶
Você pode adicionar comentários ao seu script usando o caractere
#. O SeExpr pulará o restante da linha para fins de renderização. No entanto, eles não são ignorados; comentários ainda podem ser usados para declarar o intervalo de valores válidos de variáveis inteiras, flutuantes e vetoriais. Isso permite que você os gerencie usando widgets que aceitarão o intervalo especificado.Dica
$var0é uma variável inteira que varia entre 0 e 10, inclusive:$var1é uma variável de ponto flutuante com o mesmo intervalo:$var2é uma variável vetorial:Este último é muito útil; SeExpr considera vetores com intervalo
[0, 1]como cores:Em todos os casos, se não for especificado, o intervalo dos widgets associados irá de 0 a 1.
Para uma expressão multilinha, cada linha pode ter seu próprio comentário.