The actor had been bullied about his weight as a kid, with the nickname "Fat Cavill."
Henry Cavill lost out on portraying iconic international man of mystery 007 after a director said he looked a "little chubby."
During his audition to play James Bond in 2006's "Casino Royale", the British actor, 36, had to recreate a famous scene of former Bond actor Sean Connery by walking out of a bathroom wearing only a towel
"I probably could have prepared better," Cavill recalled during an interview with Men's Health. He didn't land the audition, with the coveted job eventually going to Daniel Craig, who has now had a license to kill for the last four spy films in the franchise (with a fifth incoming).
"I remember the director, Martin Campbell, saying, 'Looking a little chubby there, Henry,'" Cavill said. "I didn't know how to train or diet. And I'm glad Martin said something, because I respond well to truth. It helps me get better."
Cavill eventually toned his physique and craft and earned the right to don Superman's cape for 2013's "Man of Steel."
But it was a struggle to get to that point, as he had always been picked on about his weight as a kid, with the nickname "Fat Cavill."
"I was a chubby kid," he told the publication. "I could've very well gone down the route of just accepting my lot in life and being like, 'I guess I'm not going to do anything.'"
Still he dealt with rejection before the superhero gig, missing out on lead roles in "Tristan + Isolde" and "Twilight."
"I wasn't ecstatic about not getting these things," Cavill explained, "but I was so used to disappointment from the acting business, and also from boarding school. 'No, you're not good enough' -- that wasn't anything new to me."
But he eventually landed roles in the Showtime historical drama "The Tudors" and the fantasy film "The Immortals" before the Superman part found him in two additional movies as the Kryptonian, "Batman vs Superman" and "Justice League."
And as for rumors that he has retired the superhero costume for good, Cavill responds, "I've not given up the role. There's a lot I have to give for Superman yet. There's a lot of justice to be done for Superman. The status is: You'll see."
Cavill can next be seen as Geralt in the Netflix fantasy series "The Witcher" landing December 20.