Er is geen betekenisverschil, wel verschil in gebruik.

 

smerig

verontreinigd, niet lekker (iets sterker dan vies)
De peuters hadden zo gekliederd. Het was echt een smerige rotzooi.

 

vies

verontreinigd, niet lekker
Ik vind haaienvinnensoep vies, om niet te zeggen smerig.

 

vuil

verontreinigd (vaak minder vochtig dan smerig en vies)
Na een halve dag was zijn overhemd al vuil.

 

Alle drie de woorden kunnen ook figuurlijk gebruikt worden: Dat is echt een smerig, vies, vuil zaakje.