Playing a hero and playing a villain requires very different skills. To be an engrossing protagonist, an actor has to be likable, sympathetic, and someone who can connect with the audience. Being a great antagonist is the opposite. They have to be scary, even repulsive. Villains can be relatable, but if the audience starts rooting for them too much, then the actor has failed.

Most actors stick to one kind of role or the other, either by choice or because they get typecast. However, a few of them can pull off both with equal skill. On r/movies, the largest film subreddit, users got together to discuss the performers who are the best at playing both good guys and baddies. Their picks represent the cream of the acting crop and include some of the most memorable performances in movie history.

10 Anthony Hopkins

Anthony Hopkins smirking in Red Dragon
Image via Universal Studios

"Anthony Hopkins seems to be able to play anything. From Hannibal Lecter to a good father," says u/iamnotableto. They're absolutely right. Few actors can match Hopkins's range and commanding presence on screen. Throughout his illustrious career, he has portrayed both hero and villain roles with equal proficiency, leaving an indelible mark on cinema.

RELATED: 10 Best Guy Ritchie Movies, Ranked According to Rotten Tomatoes

When he plays a hero, Hopkins exudes authority and righteousness. A case in point is his role as lawyer and future president John Quincy Adams in Amistad. However, when he takes on a villain part, he can be truly frightening. His portrayal of the cannibalistic serial killer, Dr. Hannibal Lecter, in The Silence of the Lambs, is nothing short of iconic.

9 Gary Oldman

Sirius Black, played by Gary Oldman, in a green jacket in 'Harry Potter and the Order of the Phoenix.'
Image via Warner Bros. Pictures

Gary Oldman is renowned for his dynamic range and ability to transform into various characters on screen. "Dude constantly bounces between good guy and bad guy roles with ease," says u/dilldoeorg. u/OinkMcOink agrees, saying, "The great thing is I get so pulled into his character that I forget it's Gary Oldman at all."

RELATED: 10 Sci-Fi Movies That Are Actually Optimistic About the Future

Oldman can bring courage and integrity to his characters, like the determined police officer Jim Gordon in Christopher Nolan's Dark Knight trilogy or Sirius Black in Harry Potter. However, he can also be intense and menacing. His performance as the sadistic drug dealer Drexl Spivey in True Romance is a testament to his ability to embody the most depraved of characters.

8 Ralph Fiennes

Lord Voldemort, played by Ralph Fiennes, sitting with his Death Eaters in 'Harry Potter and the Deathly Hallows: Part 1.'
Image via Waner Bros. Pictures

Ralph Fiennes can portray honor and nobility, as he does as M in James Bond, or whimsy and heart, as in The Grand Budapest Hotel. He can also play sadistic and manipulative nearly as well as Hopkins. His best villain roles are Lord Voldemort and Nazi officer Amon Göth in Schindler's List.

RELATED: 'The Last of Us': Everything Fans Disliked About the Series, According to Reddit

"Yeah, [Fiennes] can do any role. Classically trained, Shakespearean English actors have the widest range because they're focused on the craft, not on their own image," u/McBeamSteely says. Fiennes's most recent terrific villain performance was as the twisted chef in last year's The Menu.

7 Pierce Brosnan

Pierce Brosnan in Remington Steele

Pierce Brosnan can be charming and suave, a la Remington Steele and James Bond, or brutal and cunning in The Ghost Writer and The Thomas Crown Affair. In the latter, he delivers a great performance as a manipulative media mogul.

"Pierce Brosnan is the boss of playing both roles," says u/FilmHound30. "Hero movies: 007, No Escape, November Man, Dante's Peak. Villain: Urge, Survivor, After the Sunset, Seraphim Falls, False Positive."

6 Michael Shannon

zod michael shannon0

Since the early '90s, Michael Shannon has played a number of memorable roles, both good guys and bad. One of his most notable hero performances is as the relentless lawman Bobby Andes in the neo-noir Nocturnal Animals. His villain roles include General Zod in Superman and the cruel Richard Strickland in The Shape of Water.

"Michael Shannon is my favorite actor, besides heavy hitters like DiCaprio, Denzel, Hanks, etc," says u/FilmHound30. "He is underrated by fans, but the volume of work he's done shows that he is thankfully very appreciated in Hollywood. He must constantly work. Whenever he's not making a movie, him and his wife do theatre all over the U.S."

5 Sean Bean

Sean Bean in Game of Thrones
Image via HBO

Sean Bean has played many iconic roles, from the power-hungry Boromir to the noble Ned Stark. He's also captivating as the cunning agent Alec Trevelyan in GoldenEye. In addition, Bean lent his voice to Wolfwalkers and will have a lead role in the upcoming Knights of the Zodiac.

"Honorable warrior in GoT, corrupted knight in LoTR, and suave megalomaniac villain in Snowpiercer," says u/Fineus. "He's quite a treat to watch."

4 Alan Rickman

Severus Snape looking intently in Harry Potter
Image via Warner Bros.

Alan Rickman stood out with his distinctive voice and ability to portray complex characters, like the heroes in Truly, Madly, Deeply, and An Awfully Big Adventure. He also nailed comedy in Galaxy Quest and The Hitchhiker's Guide to the Galaxy. He demonstrated his knack for playing baddies with characters like terrorist mastermind Hans Gruber in Die Hard.

He combines his skill at playing heroes and villains in his portrayal of the misunderstood and underappreciated Severus Snape in Harry Potter. "Alan Rickman played the villain and hero in the same series," says u/WhiskeyTangoFoxy. "That’s talent."

3 Willem Dafoe

Willem Dafoe in The Lighthouse
Image via A24

Willem Dafoe makes for a captivating performer, as in The Boondock Saints, At Eternity's Gate, The Florida Project, and The Last Temptation of Christ. His talent lies in wacky and unpredictable characters, The Lighthouse and The Northman being prime examples.

However, he's at his absolute best when inhabiting twisted characters, like Green Goblin in Spider-Man and Max Schreck in Shadow of the Vampire. "He feels so trustworthy and likable when he's playing a good guy, but can switch on a dime whenever he puts on the trademark Dafoe evil grin," one Redditor wrote.

2 John Lithgow

A serial killer for more than 30 years, Arthur Mitchell (John Lithgow) aka "The Trinity Killer" gets his comeuppance but not before causing great grief to Dexter (Michael C Hall)

John Lithgow excels at dorky dad roles like in 3rd Rock From the Sun and historical characters like Winston Churchill In The Crown. He's also terrific as the compassionate Reverend Shaw in Footloose. However, Lithgow can also be surprisingly scary. He unleashes his dark side in Raising Cain, Brain DePalma's Blow Out, and Season 4 of Dexter, for example. In addition, he voiced the cretinous Lord Farquaad in Shrek.

"Not sure of a role where he’s played the hero type but he’s played a 'good' guy countless times and is insanely good as a bad guy, as well," one user wrote. "I know I read someone say they just knew him from 3rd Rock and scoffed at his casting in Dexter…then watched him in it, and got chills."

1 Charlize Theron

Imperator Furiosa in front of her war rig in Mad Max: Fury Road.
Image via Warner Bros.

Throughout her career, Charlize Theron has played both protagonists and antagonists with skill and dedication. Her strong and determined portrayal of the fierce warrior Furiosa in Mad Max: Fury Road is one of her standout hero performances. In contrast, she showed off her more vulnerable side in Young Adult and Tully: both movies were directed by Jason Reitman.

Theron is also great at complex malevolent characters. Her finest work is her portrayal of the manipulative and ruthless serial killer, Aileen Wuornos, in Monster. "I'd watch her in any role," one Redditor wrote.

KEEP READING: From 'Breaking Bad' to 'Peaky Blinders': 15 Most Loved Crime Shows of the 21st Century