Introdução ao SeExpr

Adicionado na versão 4.4: Este documento apresentará a linguagem de expressão SeExpr.

O que é SeExpr?

O SeExpr é uma linguagem de expressão embutida, desenvolvida pela Disney Animation, que permite que aplicativos host renderizem conteúdo gerado dinamicamente. A Pixar a chama de ``gerador e combinador de padrões programáveis’’ em sua documentação <https://renderman.pixar.com/resources/RenderMan_20/PxrSeExpr.html>`_.

O SeExpr está disponível no Krita como uma camada de preenchimento.

Pano de fundo

Para entender o que é SeExpr, precisamos diferenciar entre dois tipos de gráficos, raster e procedural.

A grande maioria das coisas geradas por computador que você vê todos os dias pertence ao primeiro tipo: imagens como fotos, capturas de tela do seu anime favorito, memes, tudo isso é uma infinidade de pequenos pontos coloridos, ou pixels, organizados em uma grade.

Gráficos raster têm duas desvantagens. Primeiro, depois de criados, a resolução é fixa. Não é possível aumentar o zoom e magicamente obter mais detalhes. E se precisar alterá-los, você volta à fonte e faz uma nova amostragem (o que às vezes é impossível) ou edita com um programa de gráficos raster, como o Krita.

Um dos maiores problemas, no entanto, é que estamos sempre limitados pelo espaço que nossos programas podem usar; seja armazenamento secundário, como cartões SD, ou RAM. A menos que sejam compactadas, as necessidades de memória da imagem são quadráticas em relação ao tamanho da imagem. Para um exemplo rápido, a janela para create_new_document do Krita fornece três informações: seu tamanho em pixels, o tamanho do próprio pixel e a memória total necessária.

../_images/Krita_newfile.png

Aqui está um resumo para texturas quadradas. Observe que a memória necessária é para apenas uma camada:

Tamanho

Memória necessária

256

256 KB

512

1 MB

1024

4 MB

2048

16 MB

4096

64 MB

Uma alternativa é usar Gráficos vetoriais. Gráficos vetoriais, como SVGs, por exemplo, utilizam fórmulas matemáticas como splines e curvas de Bézier para descrever uma forma. Como são definidos matematicamente, podem ser redimensionados para atender às suas necessidades sem perda de resolução.

O SeExpr pertence a uma classe diferente, gráficos procedurais. Semelhante aos gráficos vetoriais, os gráficos procedurais precisam apenas de alguns KBs de armazenamento secundário para sua definição. Mas eles não são definidos por fórmulas matemáticas; você, na verdade, codifica como a cor é calculada em cada ponto da textura. E, como não há limitação em sua precisão, você pode renderizar padrões complexos em suas camadas com resolução completamente arbitrária.

Escrevendo um script

Neste tutorial, mostraremos como escrever um script no SeExpr, renderizá-lo em uma camada e salvá-lo como uma predefinição.

Começaremos acessando o Camadas e adicionando uma nova camada de preenchimento. Em seguida, selecione o gerador SeExpr na lista. Você verá esta janela:

../_images/SeExpr_editor.png

A janela do gerador SeExpr é dividida em duas abas. Por enquanto, vamos ficar em Opções.

Nota

Camadas de preenchimento descreve essas abas com mais detalhes.

Vamos começar pintando uma camada em azul claro.

Primeiro, os scripts SeExpr devem definir uma variável de saída, vamos chamá-la de $cor. Como o SeExpr considera as cores no espaço de cor RGB, as variáveis ​​de cor são definidas por um trio de números conhecido como vetor. Começaremos definindo a variável $cor e atribuindo um valor a ela.

Vá até a caixa de texto e limpe-a caso haja algum texto. Em seguida, defina $cor como algo como [0.5, 0.5, 1] (metade vermelho, metade verde, totalmente azul):

$cor = [0.5, 0.5, 1];

O SeExpr precisa saber qual variável contém o valor final da cor. Isso é feito escrevendo no final, em uma linha separada, o nome da variável:

$cor

O script agora deve ficar assim:

$cor = [0.5, 0.5, 1];
$cor

Clique em OK e você renderizará seu primeiro script!

../_images/SeExpr_first_render.png

Aviso

Para ser absolutamente preciso, o SeExpr não possui gerenciamento de cor. Ele sempre renderiza texturas como flutuante de 32 bits, com gama corrigido e imagens sRGB. O Krita as transforma no espaço de cor do seu documento usando o perfil sRGB-elle-V2-srgbtrc.icc.

Veja o Fluxo de trabalho com gerenciamento de cor para saber o que isso significa.

Gerenciando seu script usando widgets

Há também outra maneira de definir e editar suas variáveis. Abra as propriedades da camada de preenchimento clicando com o botão direito do mouse em Camada de preenchimento 1 e selecionando Propriedades da camada….

../_images/SeExpr_prop_1.png

Reparou na caixa do meio? Assim que detecta um script sintaticamente correto, o SeExpr habilita uma série de botões para gerenciar variáveis ​​individuais. No nosso exemplo acima, você pode alterar $cor de três maneiras:

  • inserir o valor do canal vermelho, verde ou azul nos campos de entrada

  • mover os pequenos controles deslizantes coloridos para alterar o canal respectivo

  • clicar no quadrado de pré-visualização à esquerda das caixas para selecionar uma cor completamente nova.

O último botão na caixa do meio é sempre Adicionar nova variável. Clique nele e esta janela será aberta:

../_images/SeExpr_add_variable.png

Esta janela mostra todos os tipos de variáveis ​​que o SeExpr aceita:

Curva e curva de cor

São a versão SeExpr de Gradientes de parada: interpolam uma rampa dada por um conjunto de valores.

As curvas representam gradientes 1D, retornando um único flutuante em cada ponto de avaliação.

Curvas de cor representam gradientes RGB, retornando uma cor em cada ponto.

Inteiros e flutuantes

Números.

Vetor

Um trio de flutuantes.

Cor

Um vetor que representa uma cor RGB.

Amostra

Uma lista de cores.

String

Normalmente palavras simples.

Por exemplo, você pode replicar $cor na aba Vetor:

../_images/SeExpr_add_variable_vector.png

Criando sua primeira predefinição

Quando seu script estiver pronto, você pode reutilizá-lo criando uma predefinição.

Você pode criar uma através da barra superior da aba Opções:

../_images/SeExpr_editor.png

Selecione Salvar nova predefinição SeExpr… e a seguinte janela será aberta:

../_images/SeExpr_save.png

Você pode editar o nome da predefinição na caixa de edição da linha superior e definir uma miniatura para facilitar a identificação.

Dica

A janela adicionará “Copiar” ao nome da predefinição se ela for uma cópia de uma existente. Você pode alterá-lo como quiser.

A janela fornece as seguintes opções para definir uma miniatura:

Carregar uma miniatura existente

Se a predefinição já tiver uma miniatura (por exemplo, se você a criou a partir de uma predefinição existente), este botão a carregará e aplicará.

Carregar imagem

Aplica uma imagem do sistema de arquivos como miniatura.

Renderizar script em miniatura

Renderiza seu script em uma textura de 256x256 e aplica esta última como uma miniatura.

Limpar miniatura

Exclui a miniatura. Observe que, se a predefinição for uma cópia de uma existente, isso pode ser revertido clicando em Carregar miniatura existente.

Alterando predefinições existentes

Se você alterar o script de uma predefinição, notará dois novos botões na barra superior da aba Opções:

../_images/SeExpr_overwrite_preset.png

O botão de recarregar restaurará a predefinição às suas propriedades originais, enquanto clicar em Substituir predefinição salvará suas alterações.

Além disso, você pode editar o nome da predefinição clicando no botão renomear, inserindo o novo nome e clicando em Salvar:

../_images/SeExpr_rename_preset.png

Agrupando suas predefinições

Compartilhar seus scripts é fácil! As predefinições de script do SeExpr são como qualquer outro recurso no Krita. Siga as instruções em Gerenciamento de recursos para criar seus próprios pacotes.