man braucht für so ziehmlich jeden wirkungsvollen pixelshader einen vertexshader.
mit dem vertexshader kann man, wenn man will, die position der vorhandenen vertices verändern.
man kann keine vertices erzeugen. man kann im vertexshader sachen berechnen und an den pixelshader weiterleiten wenn es reicht. aber oft sieht eine sache wenn sie im pixelshader berechnet wird besser aus weils halt auf pixelbasis und nicht auf vertexbasis passiert (das ist aber performance-lastiger - wo immer es geht sollte man auf vertexbasis arbeiten).
die abstufung in der feinheit wäre: gesamtes_model -> vertex -> pixel .