Versioning is keeping every state a file has passed through, in a form you can get back to. Source control does it automatically at every commit; the alternative is doing it by hand.
Doing it by hand is what most teams start with, and everyone recognizes the result: `character_final.fbx`, `character_final_v2.fbx`, `character_final_REAL.fbx`, sitting in a shared drive. It fails in predictable ways. Nobody knows which is current. The naming carries no date or author. Two people make a v3 independently. And the versions consume space forever because deleting one feels unsafe.
Automatic versioning removes the decision. You commit `character.fbx`, and the system keeps every previous state with author, timestamp, and message attached. The current file always has the obvious name, and history is a list rather than a directory.
The rule that follows is one people resist at first: do not put versions in filenames. Version control versions files; you should not. If you are tempted to save a v2, commit instead.