Redemoinho, compressão e lente
Girar ou escalar as coordenadas pela distância até um centro, para a imagem torcer, afundar ou inchar.
Cards
Um exemplo ao vivo para ajustar, aprender e copiar.
Como funciona
Essas três distorções são uma receita só em coordenadas polaresUm ponto descrito pela distância até um centro e pelo ângulo em volta dele, em vez de x e y. Tudo o que gira ou se repete em volta de um centro fica fácil de escrever com elas. Coordenadas polares Um ponto descrito pela distância até um centro e pelo ângulo em volta dele, em vez de x e y. Tudo o que gira ou se repete em volta de um centro fica fácil de escrever com elas.r = length(p), a = atan(p.y, p.x)
vec2 p = uv - center;
float r = length(p);
float a = atan(p.y, p.x);
float amount = 1.0 - smoothstep(0.0, reach, r); // 1 no centro, 0 na borda do efeito
- Redemoinho (swirl) soma ao ângulo:
a += twist * amount. Pontos perto do centro giram muito, pontos na borda nada, então linhas retas se curvam em espirais. - Compressão (pinch) escala o raio onde a leitura acontece,
r *= 1.0 + strength * amountcomstrengthacima de 0: cada pixel perto do centro mostra o que está mais para fora, então a imagem parece sugada para o meio. - Lente (bulge) é a mesma linha com
strengthabaixo de 0 (e acima de -1): o meio é lido de uma área menor e parece ampliado, como numa lupa ou numa gota d’água.
Um redemoinho pode ficar na forma polar, como faz o Redemoinho d’água: ele desenha os braços direto do ângulo girado,
sem voltar para x e y. Para entortar uma textura ou a tela, transforme o par polar de volta numa coordenada antes:
center + r * vec2(cos(a), sin(a)), e amostre ali.
A queda decide o visual
A curva de amount é uma função de modelagem, e importa mais do que a torção. Uma queda linear dá uma espiral
uniforme, uma ao quadrado concentra o giro perto do olho, e um smoothstep deixa a borda do efeito invisível. Sem uma
queda que chegue exatamente a 0, os pixels de fora também se deslocam e a borda do efeito aparece como uma emenda.
Superfície e tela
Numa superfície, elas trabalham num quad com UV ou na textura do objeto. Como passada de pós-processamento de
tela, leem o quadro, que é como um buraco negro entorta o que está atrás dele ou um portal faz a sala girar; isso
exige a cena num render targetUma textura em que um desenho escreve no lugar da tela, para uma passada seguinte ler o resultado. Blur, bloom e todo efeito com várias passadas usam isso. Render target Uma textura em que um desenho escreve no lugar da tela, para uma passada seguinte ler o resultado. Blur, bloom e todo efeito com várias passadas usam isso. Cadeia de pós-processamento Passadas de tela cheia rodadas em ordem sobre o quadro pronto, cada uma lendo a imagem que a anterior escreveu. Bloom, tone mapping e correção de cor ficam aqui.
Leitura complementar
- atan (abre em uma nova aba)Referência
- Polar coordinate system (abre em uma nova aba)Referência
- Shapes (abre em uma nova aba)Livro
- Shaping functions (abre em uma nova aba)Livro
- Useful little functions (abre em uma nova aba)Artigo
- pow (abre em uma nova aba)Referência
- 2D Matrices (abre em uma nova aba)Livro
- Rotation matrix (abre em uma nova aba)Referência
- Transformations (abre em uma nova aba)Artigo
- Framebuffers (abre em uma nova aba)Artigo
- Bloom (abre em uma nova aba)Artigo
- Custom post-processing (abre em uma nova aba)Documentação
- cos (abre em uma nova aba)Referência
- Twirl Node (abre em uma nova aba)Documentação
- CanvasItem shaders (abre em uma nova aba)Documentação