Marvel's cinematic universe has famously been better at crafting enduring characters out of its heroes than its villains, but that's not say the - count them - 17 films produced to date haven't provided some memorable antagonists to be thwarted.

The problem for Marvel Studios (and that word is relative, the series has still made more than $13 billion) is that its films are very hero-centric, giving the villains little time to develop and shine before most are killed off.

Below we've listed each Marvel film's chief villain, and a handful of other secondary bad guys and gals that also made an impact, and ranked them from the best to the very worst.

We haven't included Thanos because he hasn't actually done much yet.

Warning: Spoilers for all Marvel films up until and including Thor: Ragnarok follow.

Topping our list is Ego the Living Planet (Kurt Russell) from Guardians of the Galaxy Vol 2. Perhaps a controversial pick, but Ego ticks all the boxes. He's memorable, unique and a fully-formed character given time to ingratiate himself before revealing his bad intentions in the film's standout scene.

How exactly writer and director James Gunn managed to get a villain who planted a deadly cancerous tumour in the head of the hero's mother into a DISNEY film is a mystery, but that scene was jaw-dropping and gave audiences what most villains lack: a reason to hate them.

Ego also succeeds because he's the embodiment of toxic masculinity; a character whose plan to turn all of existence into an extension of himself regardless of the death and destruction it will cause, is rooted in egotism and insecurity about his legacy.

Next up is Loki (Tom Hiddleston), who played such a crucial part in the formation of The Avengers and in turn the success of the Marvel Cinematic Universe (MCU). His appeal is in large part down to Hiddleston, whose performance balances charm and menace well, rooted in an arrogant but conflicted character.

The reason Loki doesn't top our list is because of his appearances since the Avengers, which have drawn out his apparent redemption arc too long and in the process watered the character down a bit. In Ragnarok he's seemingly just along for the ride.

Third on our list is Ultron, from the second Avengers film. Age of Ultron receives a lot of unjust flak that essentially boils down to the sequel not being as fresh and exciting as the first: which was always going to be the case.

While it's far from perfect (it's an incredibly dense film) Joss Whedon's follow-up introduces some great new characters, and chief among them is the title star: an android villain with severe daddy issues voiced by James Spader.

Daniel Bruhl as Zemo, Hugo Weaving as Red Skull, Ultron (voiced by James Spader) and Karen Gillan as Nebula.Marvel Studios

Helped immeasurably by Spader's performance (the guy could read out the instruction manual for a hoover and make it sound compelling) Ultron works because he's not an archetypal robot villain. He's not cold and distant, he's a mess of conflicting emotion and rage, primarily directed at the man that created him: Tony Stark (Robert Downey Jr).

Ultron is born of a desire to protect the world, but he surmises that the best way to do so is to destroy it and start again. This logic is a good starting point, but by the end his ploy is more about creating life for himself (a mission that leads to the creation of Paul Bettany's Vision) and proving his "better" than Stark.

Marvel's villain game has stepped up considerably over the last two years. Ego topped our list, and our next couple of entries are both from 2016 onwards. First there's Helmut Zemo (Daniel Bruhl) - the only villain on this list who totally and completely won.

Some on this list did significant damage on their way to taking an L, but Zemo 100% succeeded in accomplishing his goal.

He lost his family in Ultron's attack on Sokovia, and he blames the Avengers. It's teased that his objective is to reactivate deadly Hydra operatives, but that's a red herring designed to bring Captain America (Chris Evans) and Iron Man (Downey Jr) to the same place.

It's there that he tears them apart by showing the Winter Soldier (Sebastian Stan) kill Stark's parents, and then the admission from Cap that he knew. It's a gut-wrenching scene and leads to one of the best fights in the MCU.

He's apprehended soon after, but his work is done. The Avengers are no more. Hopefully, we see him again.

Michael Keaton as Adrian Toomes, aka The Vulture. Side note: his jacket is RAD.Sony Pictures

Next is Vulture: Michael Keaton's down-to-earth villain from Spider-Man: Homecoming and a rare example of a properly relatable antagonist.

There are good reasons Homecoming opens with the cleanup operation immediately following the events of Loki's attack on New York in The Avengers. First of all, it showed that this new take on Spidey is part of that world, but it also sets up Keaton's villain wonderfully, making us feel for him when his livelihood is inadvertently taken away by Stark's billion-dollar cleanup operation.

So that's the top five. For the sake of word count limits and the sanity of our sub-editors, we best zip through the rest. Handily, it's after the top five that the quality of these villains takes a noticeable dive.

Classic Captain America villain Red Skull was brought to life well by Hugo Weaving, who played him with all the over-the-top Nazi menace required of Joe Johnston's World War 2, but the character wasn't given the screentime he deserved as the film and series were in a rush to bring Cap into the modern day.

Marvel's latest villain Hela (Cate Blanchett) had all the makings of a good character, with an interesting back story, but her portion of the plot played secondary to the escapades of Thor (Chris Hemsworth) and Hulk (Mark Ruffalo).

Nebula (Karen Gillan) turns from villain to anti-hero over the course of the two Guardians films, and has a great relationship with sister Gamora (Zoe Saldana) but Gillan's performance underwhelms and holds her back a bit.

Corey Stoll as Yellowjacket, Elizabeth Debicki as Ayesha, The Destroyer and Frank Grillo as Crossbones.Marvel Studios

As Alexander Pierce, Robert Redford) brings to his film an admirable, serviceable performance, but like many others on this list like Obadiah Stane / Iron Monger (Jeff Bridges), Darren Cross / Yellowjacket (Corey Stoll), Justin Hammer (Sam Rockwell) and Ronan the Accuser (Lee Pace) he is exactly that - serviceable - and not much more.

Following Pierce are two more Cap villains. Firstly The Winter Soldier who plays the role of a villain initially, but quickly occupies a grey area as Cap realises he is his old friend Bucky Barnes, and tries to coax the good out of him.

Brock Rumlow / Crossbones (Frank Grillo) is an enjoyable secondary villain who plays a glorified goon in The Winter Soldier before suiting up for an enjoyable cameo in Civil War. Then there's Pierce, who I always thought should have revealed himself to be Red Skull at the end of the film: as ridiculous as that would have been.

At the end of our list are the villains who barely made an impact like Ayesha (Elizabeth Debicki), Dormammu (Benedict Cumberbatch), Surtur (Clancy Brown) and fellow Thor villain The Destroyer, and then the truly awful ones like Kaecilius, a terrible waste of Mads Mikkelsen in Doctor Strange, and Malekith (Christopher Eccleston) who was as generic and bland as they come.

Update (12 February, 2018)

We've updated our list to include Michael B Jordan's Erik Killmonger from Black Panther and Andy Serkis's Ulysses Klaue, whose second appearance in the MCU makes him worthy of being added to this list.

Killmonger easily enters our top three. His character's motivations aren't just clear, they're closely tied to Black Panther's themes. The problem he has with the film's protagonists and the wider world is entirely understandable, it's only his solution for that problem that makes him a villain.

Meanwhile Kalue ranks highly thanks to the delight with which Serkis plays him. The actor is clearly having as much fun in Black Panther as he was in his debut in 2015's Avengers: Age of Ultron, and audiences have fun watching him.