Introdução aos shaders HeavyM para criar os seus próprios efeitos visuais

Introdução

Está interessado em criar os seus próprios efeitos visuais no HeavyM? Neste artigo, vamos apresentar as excitantes possibilidades criativas oferecidas pelos shaders. A propósito, o que é um shader?

Um shader é um programa de computador que é executado na placa gráfica do seu computador. Permite-lhe manipular rapidamente os dados que são apresentados no ecrã ou no projetor de vídeo: os pixels.

É uma tecnologia pouco conhecida porque considerada abstrata, mas os shaders estão muito presentes no nosso quotidiano. Estes pequenos programas de computador simulam de forma realista efeitos visuais complexos, como chuva, nevoeiro, reflexão da luz, relevo de objectos, etc. São, por isso, muito utilizados nos jogos de vídeo, nos filmes que requerem efeitos especiais, nos aparelhos de televisão... e na arte digital, o domínio em que nos concentramos aqui.

No software HeavyM, os shaders incorporados oferecem muitas possibilidades. Também é possível importar os seus próprios shaders, aumentando assim infinitamente o número de combinações!

Exemplo de um jogo de vídeo que utiliza shaders: Minecraft

Exemplo de um jogo de vídeo que utiliza shaders: Minecraft

Projecção do mapeamento do desempenho da mina

Exemplo de utilização de um shader durante um espetáculo de projeção mapeada

Parte 1: Tecnologia de sombreamento

Para compreender melhor a ideia dos shaders, tomemos como exemplo a criação de um desenho à mão. É necessário desenhar um a um os elementos que o compõem. Começa-se pelas formas geométricas, como círculos, rectângulos e linhas, e depois adicionam-se cores. Procede-se passo a passo, como se tivesse de copiar o desenho manualmente. Com os shaders, o processo é muito mais rápido porque todas estas operações são efectuadas de uma só vez, como um carimbo aplicado à folha de papel com um único gesto. O que é ainda melhor é que este carimbo pode mudar consoante a informação fornecida, como a hora, a posição ou as cores dos elementos já presentes na sua folha.

Porque é que os shaders são rápidos?

Os shaders são programas muito leves porque, ao contrário de softwares como o HeavyM, que contêm várias centenas de milhares de linhas de código, um shader geralmente contém apenas algumas centenas de linhas no máximo. A velocidade dos shaders deve-se principalmente à arquitetura do hardware que permite a sua execução: a placa gráfica. Para utilizar o HeavyM, é certamente necessário prestar atenção a esta questão, que permite multiplicar as possibilidades oferecidas pelo programa.

Ao contrário da CPU do seu computador, que processa as tarefas uma após a outra, os cálculos da sua placa gráfica são efectuados em paralelo. Em vez de ter um único processador com um poder de computação significativo, a placa gráfica tem uma multiplicidade de pequenos processadores. Isto significa que podem executar tarefas em simultâneo. Ao basear-se nesta paralelização, os shaders podem efetuar cálculos gráficos complexos em poucos milissegundos.

A vantagem dos shaders: arte interactiva

Graças à velocidade de execução dos shaders, é possível criar imagens em tempo real, ou seja, são geradas no momento em que são vistas. O termo tempo real é utilizado em contraste com o termo pré-computado, que se aplica a um ficheiro de vídeo que é processado fotograma a fotograma. Os cálculos de renderização podem ser muito demorados e podem levar até vários dias! Com os shaders, é possível manipular diretamente as imagens, tal como num jogo de vídeo. A arte digital interactiva baseia-se neste princípio de tempo real porque permite gerar imagens que reagem à música ou aos movimentos das pessoas. Para ver dois exemplos de performances que misturam música e imagens, veja o trabalho de Weirdcore para os concertos de Aphew Twin ou Actuações de Nonotak.

Tipos de shaders

Os shaders não são mais do que ficheiros de texto com uma extensão específica. Veremos que existem diferentes tipos de shaders. O fator comum é que eles são codificados na linguagem GLSL: OpenGL Shading Language. Existem outros tipos de shaders dependendo da plataforma e do hardware, mas aqui vamos focar nos shaders baseados em OpenGL. Para usar shaders no HeavyM, é necessária uma placa gráfica que suporte OpenGL 2.0.

Sombreadores de pixéis ou sombreadores de fragmentos

O fragment shader ou pixel shader é um shader cujo objetivo é calcular a cor de cada pixel individualmente. Recebe como entrada os dados de cada pixel da imagem (posição, coordenadas de textura, cor) e produz a sua cor.

São estes shaders que lhe interessam utilizar com o HeavyM. São normalmente ficheiros .FRAG, ou .FS no caso do formato ISF. O formato ISF fornece um padrão para fragmentos de shaders GLSL, para que possam ser mais facilmente interpretados por aplicações interactivas.

Sombreadores de vértices

Os sombreadores de vértices são utilizados para transformar os picos de entrada em pixéis. 

É um ficheiro .VS que, por vezes, acompanha o sombreador de pixéis, tem o mesmo nome e está localizado na mesma pasta.

Onde encontrar shaders?

Não é necessário saber programação para utilizar shaders com o HeavyM. Para além da biblioteca integrada no software, existem plataformas para encontrar novos shaders sem ter de os criar. A comunidade de artistas de shaders está a crescer e muitas vezes é possível utilizar livremente os trabalhos que partilham.

Para encontrar .FRAG: http://glslsandbox.com/ e https://www.shadertoy.com/

Atenção: Os ficheiros .FRAG não são suportados no HeavyM. É necessário convertê-los para .ISF e fornecemos abaixo um método para o fazer.

Certifique-se de que verifica os direitos de utilização na licença normalmente especificada no início do código do shader. Se não houver nenhuma indicação em particular, os direitos de autor aplicam-se por defeito e aconselhamo-lo vivamente a falar com o autor do programa se pretender utilizá-lo comercialmente.

Desenvolver os seus próprios shaders

Para criar os seus próprios shaders, aconselhamos a utilização direta do formato ISF para que sejam compatíveis com um máximo de aplicações. O objetivo deste artigo não é fornecer uma aprendizagem do código GLSL, a linguagem utilizada pelo formato ISF. Para isso, sugerimos a leitura dos sítios muito completos :

No entanto, para começar, pode ir ao sítio ISF e modificar os shaders existentes. Este sítio interativo permite-lhe visualizar ao vivo as modificações efectuadas no shader. Também é possível começar a partir de um modelo básico.

A principal desvantagem da criação e edição de shaders é o facto de não haver feedback de erros. Quando existe um problema de conceção, o shader não corre nem mostra nada. Torna-se então difícil encontrar a origem do erro. Por isso, é necessário ser rigoroso no código.

Parte 2: Shaders no HeavyM

O software HeavyM oferece algumas centenas de shaders nativos em sua biblioteca de efeitos visuais embutidos. Vários tipos de efeitos podem ser usados no software, dependendo dos recursos utilizados.

Efeitos de sombreadores em formas

Quando clica nos ícones vermelhos no lado direito da interface, tem acesso a categorias de efeitos que se adaptam automaticamente às formas desenhadas. Estes efeitos estão ligados aos grupos no painel de camadas à esquerda. Todas as formas de um grupo têm o mesmo aspeto. Para ter efeitos diferentes para formas diferentes, é necessário criar outros grupos e adicionar formas a eles.

HeavyM Matizadores - Efeitos em formas

Atualmente, não é possível adicionar ou modificar os efeitos de sombreamento existentes nesta categoria.

Shaders geradores de imagens

Adicione shaders geradores de imagens como fontes, no painel acessível através do ícone branco localizado na barra de ferramentas vertical à direita. Estes shaders requerem a criação de um leitor para serem apresentados. Ligue a fonte ao leitor clicando no ícone de destino. Os shaders de geração de imagem não têm uma duração predefinida porque é um programa que é executado num ciclo. No entanto, é possível alterar a duração da exibição da origem.

Shaders - Efeitos generativos

Processamento de shaders nos jogadores

Pode aplicar efeitos de processamento de imagem ao leitor. Para o fazer, seleccione o leitor e adicione efeitos nas Propriedades, no canto inferior esquerdo, utilizando o botão +. Os efeitos são adicionados um após o outro. Cada leitor é independente, pelo que a fonte e os efeitos de processamento serão diferentes entre os leitores, mesmo que os leitores estejam no mesmo grupo.

Shaders - Efeitos dos jogadores

Processamento de shaders em sequências

Os shaders de processamento de imagem também podem ser aplicados a toda a saída de vídeo. Estes efeitos são relativos às sequências. Para adicionar um efeito de processamento a uma sequência, clique na roda dentada e adicione um shader utilizando o botão +. Os efeitos de processamento nas sequências são os mesmos que os efeitos de processamento nos leitores.

HeavyM shaders - Efeitos de sequências

Shaders de transição em sequências

As transições também estão relacionadas com a sequência e são aplicadas a toda a saída de vídeo. Por defeito, a transição aplicada é um esbatimento de 0,20s. Modifique esta transição no menu acessível ao clicar na roda dentada da sequência. As transições só são aplicadas à entrada da sequência.

HeavyM - Transições

Importar shaders

Vimos que existem duas categorias principais de shaders no HeavyM: shaders de geração e shaders de processamento. O HeavyM facilita a combinação de shaders dessas duas categorias. O HeavyM fornece shaders padrão nas abas Biblioteca de cada janela de seleção de shaders. Todos esses shaders são .FS e, portanto, estão de acordo com o padrão ISF. Para importar seus próprios shaders na aba Meus Shaders, é necessário respeitar este padrão. Desta forma, os parâmetros dos seus shaders podem ser facilmente modificados com a interface do HeavyM.

Você quer importar outros formatos de shader para o HeavyM? É muito fácil converter shaders usando esta ferramenta: Desktop ISF Editor (Windows beta/Mac) com as funções "Import from GLSL Sandbox" e "Import from Shadertoy".

Finalmente, se quiser compreender em pormenor a arquitetura do formato ISF para poder criar o seu próprio formato, aconselhamo-lo a consultar a documentação relativa ao formato ISF: https://docs.isf.video/

Parte 3: controlo de shaders

Os shaders permitem efeitos visuais em tempo real que podem ser modificados em direto, sem ter de passar por uma fase de renderização. Eis as diferentes possibilidades de controlar os seus efeitos e criar imagens interactivas.

Os parâmetros do sombreador podem ser modificados clicando na roda dentada do ícone da fonte. A escala de valores é normalizada entre 0 e 100 e não corresponde a uma unidade específica. O HeavyM oferece diferentes modos de variação dos parâmetros, encontre-os clicando na seta ao lado de cada parâmetro do shader.

O modo de valor fixo

Este é o modo predefinido que permite alterar o valor com o rato. A desvantagem é que só é possível alterar um parâmetro de cada vez. Também é possível introduzir um valor com o teclado.

Os geradores de valor

O HeavyM oferece 7 geradores de valores que permitem modificar automaticamente os parâmetros dos shaders. São geradores do tipo LFO (Low Frequency Oscillator), como os encontrados em softwares de música ou sintetizadores. Para cada gerador, existem dois modos de animação: BPM ou temporal. O modo BPM está ligado ao Tempo geral no canto inferior direito da interface, simbolizado pelo ícone do metrónomo. O modo temporal permite-lhe definir uma frequência independente do Tempo geral.

HeavyM - LFOs

Controlo através de uma análise sólida

No canto inferior direito da interface encontra-se o módulo de análise do som. Permite detetar variações de amplitude em 3 gamas de frequência diferentes: Bass Mid High. Pode encontrar as variações destes valores nos modos de variação dos parâmetros do shader.

HeavyM shaders - Análise de som

Controle MIDI

Deseja controlar manualmente vários parâmetros ao mesmo tempo? Utilize o protocolo MIDI. Existem muitos controladores MIDI para música no mercado. Todos eles são compatíveis com o HeavyM. Ligue o seu hardware na janela de configuração, acessível através do ícone laranja no canto superior direito da interface. Em seguida, o modo de aprendizagem MIDI permite-lhe configurar a ligação entre os parâmetros do shader e as teclas do seu hardware.

HeavyM Shaders - MIDI

Conclusão

As possibilidades criativas oferecidas pelos shaders são infinitas. Estes programas permitem-lhe tirar partido do poder da sua placa gráfica com apenas alguns cliques. O computador dá-lhe acesso fácil à arte generativa, que consiste em criar obras a partir de algoritmos. Muitos artistas digitais utilizam esta técnica, como por exemplo Antoine Schmidt, Miguel Chevalier, Vera Molnár, Du Zhenjun, Daniel Rozin... 

Com o HeavyM, verificámos que é muito fácil utilizar e controlar os shaders. Combine-os sem limites para criar os seus próprios visuais e a sua própria identidade!