1.Si quieres algo que esté cerca de tu maqueta, usaría partículas (no tiene que ser un sistema de partículas completamente desarrollado).
Renderice sus partículas en forma de polígono en una RenderTexture. Asegúrese de utilizar mezclas de aditivos en las partículas. Las partículas en el interior del polígono se mezclarán suavemente entre sí, mientras que las partículas en el exterior le darán el borde suave que desea. (Se puede ver un ejemplo del efecto en este video de youtube: Video de partículas aditivas
Ahora renderice la RenderTexture en su pantalla principal y listo. La RenderTexture es necesaria para que las partículas no se mezclen con su fondo.
Puedes intentar colocar los triángulos directamente sobre la textura de la partícula y ver cómo funciona. De lo contrario, colóquelos encima de su "sopa de partículas" como una capa separada.
Creó una maqueta rápida en un jsfiddle actualizado que se ve así
Puede encontrar la demostración actualizada aquí
2. Cada partícula tiene una velocidad y un origen. Cuando tu jugador toca el polígono, cambias la velocidad de cada partícula proporcionalmente a la velocidad del jugador. Cuanto más lejos esté una partícula de tu jugador, menos se verá afectada por la velocidad del jugador.
La fórmula para calcular la velocidad de una partícula sería algo como esto:
//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 la posición de la partícula, coloque esto en su método de actualización:
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;
Esto debería darte un "fluido" donde cada partícula gira alrededor de su origen cuando el jugador agita el fluido. El springConstant cambia cuánto se aleja una partícula de su origen y el factor de amortiguación la rapidez con que la partícula se detiene. Es posible que tengas que modificar el código ya que es la versión modificada de una simulación 1d que uso en mi juego.
Ahora con una demostración: Demo
Simplemente modifique las 3 constantes en la parte superior hasta que el fluido se comporte como lo desea.