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

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.

$u, $v

Posição do pixel em coordenadas normalizadas.

$w, $h

Largura e altura da imagem em pixels.

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

n deve 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ção fmod.

+-

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 if ternário

Dica

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á:

  • +=

  • -=

  • /=

  • %=

  • *=

  • ^=

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:

$var0 = 0; # 0, 10

$var1 é uma variável de ponto flutuante com o mesmo intervalo:

$var1 = 0; # 0.000, 10.000

$var2 é uma variável vetorial:

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

Este último é muito útil; SeExpr considera vetores com intervalo [0, 1] como cores:

# isto é um vermelho escuro
$color = [0.5, 0, 0] # 0.000, 1.000

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.

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 %f para float (leva o primeiro componente do argumento do vetor) ou %v para 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 sprintf para 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 0 a 1, com valores > 0,5 puxando a curva para cima e valores < 0,5 puxando a curva para baixo. Definido como 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 )

As funções de degrau são zero para x < a e um para x > b (ou x > a no caso de boxstep). Entre a e b, o valor varia continuamente entre zero e um. A função gausstep utiliza a curva gaussiana padrão em “sino”, que se baseia em uma curva exponencial. A função smoothstep utiliza uma curva cúbica. Intuitivamente, gausstep apresenta uma transição mais acentuada próxima de um e uma transição mais suave próxima de zero, enquanto smoothstep apresenta uma suavidade média próxima de um e zero.

float clamp ( float x, float lo, float hi )

Restringe x ao 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 c de 0 a 0,5, o contraste é reduzido. Para c > 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 hsi desloca o matiz em h (em graus) e dimensiona a saturação e a intensidade em s e i, 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ção hsi, exceto que o mapa de controle é centralizado em torno do ponto médio (valor 0,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 em 0,0, ocorre o deslocamento inverso completo. Os controles adicionais falloff e interp são fornecidos para ajustar o mapa usando a função remap. Os valores padrão falloff e interp resultam 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 x está dentro de ± intervalo da fonte, o resultado é um. O resultado cai para zero além desse intervalo na distância de falloff. A forma do falloff é controlada por interp.

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 )

cellnoise gera um campo de cubos coloridos constantes com base na localização do inteiro. Isso é o mesmo que a função cellnoise do PRMan.

Nota

ccellnoise gera 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ção ruído. O número total de frequências é controlado por oitavas. A lacunariedade é o espaçamento entre as frequências – um valor de 2 significa que cada oitava é o dobro da frequência anterior. O ganho controla o quanto cada frequência é escalonada em relação à frequência anterior.

Nota

cfbm e cfbm4 geram ruído de cor.

vfbm e vfbm4 geram 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

cnoise e cnoise4 produzem ruído de cor.

noise4 gera ruído vetorial assinado.

pnoise emite ruído periódico.

snoise e snoise4 produzem ruído assinado com intervalo [-1, 1].

vnoise gera 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 de fbm onde 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 de cellnoise. O parâmetro type descreve diferentes variantes da função de ruído. O parâmetro jitter controla a irregularidade do padrão (0 é como o ruído celular comum). Os parâmetros fbm... podem ser usados ​​para distorcer o campo de ruído. Quando fbmScale é zero (o padrão), não há distorção. Os parâmetros restantes são os mesmos da função fbm.

Dica

Tipos Voronoi de 1 à 5:

image0 image1 image2 image3 image4

Nota

cvoronoi retorna uma cor aleatória para cada célula e pvoronoi retorna 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 mod de deslocamento. O resultado é calculado como loRange + 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 PI
float PI = 3.14159...
float E
float E = 2.71828...
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 )

E elevado à potência x.

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 a e b.

float min ( float a, float b )

Menor de a e b.

float pow ( float x, float y )

x elevado à potência y.

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/x entre -PI e PI.

float atan2d ( float y, float x )

Arco tangente em graus de y/x entre -180º e 180º.

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 v em torno do eixo pelo ângulo fornecido (em radianos).

vector up ( vector v, vector up )

Gira v de modo que o eixo Y aponte na direção up fornecida.

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âmetros pos_i, ` val_i` e interp_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âmetros pos_i, val_i e interp_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, …, yn sã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.