Qual algoritmo é usado na animação da janela "Sobre" do uTorrent?

8


Em uma versão recente do uTorrent, se você abrir a Janela Sobre , verá um fundo animado, que é o tipo de ondas que duram para sempre.
Como isso pode ser alcançado? Esse tipo de algoritmo / classe de algoritmos é bem conhecido?
Obrigado.
insira a descrição da imagem aqui

Wfi Okly
fonte
11
@trichoplax Retirei a foto e adicionei um GIF. Obrigado.
Wfi Okly
Parece um efeito de ciclagem de paleta. A imagem em si é estática.
21316 PaulHK

Respostas:

9

Como você descobriu e mencionou em sua resposta automática, o padrão em segundo plano parece ser uma soma de gradientes sinusoidais.

No entanto, o exemplo vinculado à sua resposta é mais complicado que o usado pelo µTorrent. O plano de fundo da janela Sobre parece ser um padrão estático, e não o padrão sinusoidal animado usado na coluna de plasma.

Vários gradientes sinusoidais foram somados para fornecer uma única imagem, e a ilusão de movimento é dada simplesmente alternando as cores nessa imagem, em vez de gerar várias imagens diferentes. Isso é mais perceptível se você focar no centro de um dos anéis de cor. No padrão µTorrent, você notará que cada anel permanece em um local e a cor flui para dentro ou para fora dele. Por outro lado, os anéis de cores no padrão totalmente animado se movimentam, ocasionalmente dividindo ou mesclando.

A abordagem simplificada usada pelo µTorrent lembra as animações usadas no passado ao recalcular os padrões sinusoidais de cada quadro não era realista.

Trichoplax
fonte
2

Depois de algumas pesquisas, descobri que se chama Plasma.
Efeito Plasma

Wfi Okly
fonte
2

O efeito pode ser recriado grosseiramente adicionando 2 (ou mais) sinusóides radiais e animando a fase resultante através de outra função senoidal.

Use www.shadertoy.com para verificar.

   void mainImage( out vec4 fragColor, in vec2 fragCoord )
   {
       vec2 uv = fragCoord.xy / iResolution.xy;
       float d = sin(length(uv - vec2(0.5)) * 35.0) + sin(length(uv - vec2(0.2,0.3)) * 45.0);
       d = sin(d * 4.0 + iGlobalTime * 4.0)*0.5+1.0;
       fragColor = vec4(d,d,d,1.0);
   }
PaulHK
fonte
11
Para algo mais interessante, você também pode animar a origem das formas radiais. -> float d = sin (comprimento (uv - vec2 (0,5)) * 35,0) + sin (comprimento (uv - vec2 (0,2 + sin (iGlobalTime), 0,3)) * 45,0);
PaulHK