Some actors are known for their ability to deliver consistent performances, but a rare few excel at playing both heroes and villains with equal skill. These performers showcase their range by embodying the nobility of a hero and the dark complexities of an antagonist. Take Tom Hardy, for example. He played the determined Max Rockatansky in Mad Max: Fury Road and then turned around and became the terrifying Bane in The Dark Knight Rises. Hugh Jackman did something similar, winning over fans as Wolverine in X-Men before becoming the ruthless Blackbeard in Pan. And who can forget Denzel Washington? He was a hero in Man on Fire but completely flipped the script as the corrupt cop in Training Day.
1) Tom Hardy
Tom Hardy has shown he can play both the hero and the villain without missing a beat. In Mad Max: Fury Road, he played Max Rockatansky, a loner trying to survive in a brutal world. Hardy made Max tough but not invincible, and his quiet performance made the character feel raw and believable. Then there’s Bane in The Dark Knight Rises. Hardy completely changed gears, turning Bane into a terrifying villain who felt unstoppable. He used his physical size and that unsettling voice to make Bane both intelligent and brutal. Hardy proved he can take on any role and own it.
2) Hugh Jackman
Hugh Jackman made Wolverine one of the most memorable heroes in movies. In the X-Men films, he played Logan as angry and unpredictable but also someone with a lot of pain underneath. Jackman gave him heart, which made the action scenes hit harder. Then, in Pan, he went all-in as Blackbeard, a loud and theatrical villain who thrived on power. Jackman made Blackbeard bold and commanding in every scene. He showed he could play both a troubled hero and a loud, over-the-top villain without losing focus or believability.
3) Denzel Washington
Denzel Washington knows how to own a scene, whether he’s the hero or the bad guy. In Man on Fire, he played Creasy, a broken man who finds purpose in protecting a young girl. Washington made him tough but vulnerable, and you believed every decision he made. Then there’s Training Day, where he flipped the script and played Alonzo Harris, a crooked cop who’s charming one minute and terrifying the next. Washington didn’t just make Alonzo bad—he made him magnetic. He’s the kind of villain you can’t stop watching, even when you know he’s about to do something awful.
4) Cate Blanchett
Cate Blanchett can switch between hero and villain like it’s nothing. As Galadriel in The Lord of the Rings, she played a wise and powerful elf who felt calm and almost untouchable. She gave the character warmth but also a sense of danger when it was needed. Then, in Thor: Ragnarok, she flipped completely and played Hela, the Goddess of Death. Blanchett made Hela sharp, cold, and completely ruthless. She looked like she was enjoying tearing everything apart, and it made her performance even more fun to watch. Blanchett proved she can make both heroes and villains unforgettable.
5) Christian Bale
Christian Bale is known for fully committing to his roles. As Batman in The Dark Knight trilogy, he played Bruce Wayne as a man carrying guilt and anger but still trying to do what’s right. He made Batman feel human, not just a superhero. Then there’s Patrick Bateman in American Psycho. Bale made him charming and polished on the surface, but underneath, he was completely unhinged. The scariest part was how normal Bateman seemed at first, and Bale’s performance made that switch feel real. Whether he’s saving a city or playing a psychopath, Bale commits to every role he takes.
6) Charlize Theron
Charlize Theron played Furiosa in Mad Max: Fury Road, a determined fighter risking everything to escape a tyrant. She made Furiosa tough but human, showing emotion without slowing down the action. In Fast & Furious, she played Cipher, a cold and calculating villain who relied on manipulation instead of physical strength. Theron made Cipher feel untouchable, keeping her performance controlled and precise. Both roles showed how well she can handle strong characters, whether they’re fighting for survival or pulling the strings from behind the scenes.
7) Joaquin Phoenix
Joaquin Phoenix played Johnny Cash in Walk the Line as a troubled musician struggling with fame and addiction. He didn’t just copy Cash’s mannerisms—he gave the role real emotion and depth. In Joker, he played Arthur Fleck, a man slowly breaking under the weight of isolation and anger. Phoenix made Arthur uncomfortable to watch, shifting between fragile and dangerous without ever overdoing it. Both roles proved he can play broken characters in completely different ways—one fighting to hold on and the other giving in to the chaos.
8) Idris Elba
Idris Elba played Heimdall in the Thor series as a loyal guardian willing to stand alone against impossible odds. He gave Heimdall quiet strength, keeping him calm and in control even in chaotic scenes. In Star Trek Beyond, he played Krall, a bitter and vengeful villain. Elba used his voice and presence to make Krall feel dangerous, giving him a sense of anger that felt personal. He showed he could play the hero protecting others just as easily as the villain tearing things apart.
9) Angelina Jolie
Angelina Jolie played Lara Croft in Tomb Raider as an action hero who was fearless and quick-witted. She handled the physical demands of the role while keeping Lara confident and fun to watch. In Maleficent, she played a darker, more complicated character. Jolie makes Maleficent threatening but also shows her pain, making her feel like more than just a villain. Both roles proved she could play tough heroes and complex villains without making either feel over the top.
10) Liam Neeson
Liam Neeson played Bryan Mills in Taken as a father who stops at nothing to rescue his daughter. He made Bryan believable by showing focus and determination without turning him into an over-the-top action hero. In Batman Begins, he played Ra’s al Ghul as a villain who believed his actions were right. Neeson made Ra’s feel dangerous by keeping him calm and controlled at all times. He showed he could handle both roles with the same level of intensity and confidence.
11) Michael Fassbender
Michael Fassbender played Magneto in the X-Men prequels as a character torn between good and evil. He gave Magneto anger and pain that made his motives clear even when his actions went too far. Fassbender made him strong but also vulnerable which kept the character believable. In Prometheus and Alien Covenant, he played David as an android with a calm and unsettling personality. Fassbender made David creepy by keeping his voice steady and his expressions blank. He gave him a sense of control that made his actions feel cold and deliberate. Both roles showed how well he plays complex characters.
12) Ryan Reynolds
Ryan Reynolds played Deadpool as a sarcastic and unpredictable anti-hero. He made the character funny without losing the emotional side that made his story work. Reynolds brought energy to every scene, making Deadpool feel reckless but still likable. In X-Men Origins: Wolverine, he played Wade Wilson before becoming Deadpool. Unlike his later performance, this version of the character felt underdeveloped and lacked personality. Reynolds still made the most of what he had, especially in early scenes, but the role didn’t let him show the same range. He proved later that he could take the same character and make it iconic.
13) Heath Ledger
Heath Ledger played Patrick in 10 Things I Hate About You as a laid-back and charming romantic lead. He gave Patrick enough attitude to stand out but kept him grounded, making the character likable without feeling forced. Then, in The Dark Knight, Ledger played the Joker and completely disappeared into the role. He made the Joker unpredictable and terrifying by mixing humor with chaos. Ledger kept the character unsettling by shifting between jokes and violence without warning. His performance felt natural instead of over-the-top, which made the character even scarier. He proved he could handle any role, no matter how different.
14) Scarlett Johansson
Scarlett Johansson played Black Widow in the MCU as a skilled and confident fighter. She made Natasha Romanoff feel sharp and focused while adding enough humor and emotion to keep her relatable. Johansson balanced the action scenes with quieter moments that showed Natasha’s doubts and regrets. In Under the Skin, she played an alien predator who lures men to their deaths. Johansson made the character cold and detached, using silence and small movements to make her feel alien. She didn’t over-explain the character, which made her even more unsettling. She proved she could handle a leading role with almost no dialogue.
15) Gary Oldman
Gary Oldman played Commissioner Gordon in The Dark Knight trilogy as a steady and reliable figure in the chaos of Gotham City. He gave Gordon quiet authority, showing his determination without making the character feel larger than life. Oldman made him believable as someone trying to hold things together. In Léon: The Professional, he played Norman Stansfield, a corrupt and unpredictable villain. Oldman made Stansfield feel unstable by switching between calm and explosive moments without warning. He didn’t hold back, making the character uncomfortable to watch. He showed he could play a grounded hero and a terrifying villain just as effectively.