1.Se você quiser algo parecido com o seu modelo, eu usaria partículas (ele não precisa ser um sistema de partículas totalmente explodido).
Renderize suas partículas na forma de polígono em uma RenderTexture. Certifique-se de usar a mistura aditiva nas partículas. As partículas dentro do polígono se misturam suavemente, enquanto as partículas do lado de fora dão a borda macia que você deseja. (Um exemplo do efeito pode ser visto neste vídeo do youtube: Vídeo de partículas
aditivas Agora, renderize a RenderTexture na tela principal e pronto. A RenderTexture é necessária para que as partículas não se misturem com o fundo.
Você pode tentar colocar os triângulos diretamente na textura das partículas e ver como isso funciona. Caso contrário, processe-os em cima da sua "sopa de partículas" como uma camada separada.
Criou uma maquete rápida em um jsfiddle atualizado com esta aparência.
Você pode encontrar a demonstração atualizada aqui
2.Cada partícula tem uma velocidade e uma origem. Quando o seu jogador toca no polígono, você altera a velocidade de cada partícula proporcional à velocidade do jogador. Quanto mais longe uma partícula estiver do seu jogador, menos ela será afetada pela velocidade do jogador.
A fórmula para calcular a velocidade das partículas seria algo como isto:
//player.velocity and particle.velocity are vectors
//k is a factor to enhance or weaken the influence of players velocity
var distanceToPlayer = (player.position - particle.position).length();
particle.velocity = particle.velocity + ((k * player.velocity) + particle.velocity) * (1/distanceToPlayer);
Para calcular a posição da partícula, coloque isso no seu método de atualização:
var speedY = -(springConstant * (particle.position.y - particle.origin.y)) - (dampingFactor * particle.velocity.y);
var speedX = -(springConstant * (particle.position.x - particle.origin.x)) - (dampingFactor * particle.velocity.x);
particle.position.y = particle.position.y + speedY;
particle.position.x = particle.position.x + speedX;
particle.velocity.x = particle.velocity.x + speedX;
particle.velocity.y = particle.velocity.y + speedY;
Isso deve fornecer um "fluido", onde cada partícula gira em torno de sua origem quando o jogador agita o fluido. O springConstant altera o quanto uma partícula se afasta de sua origem e o fator de amortecimento a rapidez com que a partícula pára. Você pode precisar ajustar o código, já que é a versão modificada de uma simulação 1d que uso no meu jogo.
Agora com uma demonstração: Demo
Basta ajustar as 3 constantes no topo até que o fluido se comporte como você deseja.