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.
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:
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!
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….
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:
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:
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:
Selecione Salvar nova predefinição SeExpr… e a seguinte janela será aberta:
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:
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:
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.