Asset Library and Graphics Versioning Support
Art director asks to return character version "as it was three weeks ago, before artist redid armor". Git stores only .unity files and .prefab, but source files in Photoshop and Substance Painter lie in shared NAS folder — without version history. This isn't rare scenario. This is norm for studios without proper asset management from start.
Why Git doesn't solve asset problem
Git works with text. Binary FBX at 80 MB or PSD at 200 MB — this diff unreadable and delta uncompressed. Repository with art assets without LFS grows to several gigabytes in months, becomes unsuitable for cloning.
Git LFS solves storage problem, not versioning from artist perspective. Tracking *.psd *.fbx *.png through .gitattributes — this minimum. Problem: LFS doesn't show revision previews without git lfs fetch, artists not used to git checkout for viewing previous texture versions.
Professional alternative — Perforce Helix Core or Plastic SCM (now Unity DevOps Version Control). Plastic SCM integrated in Unity Editor natively, can show visual diff for .unity and .prefab files, supports lock-files for binary assets (artist "locks" file, preventing parallel edits).
Asset library structure
Chaotic folder structure in Assets/ kills team time. Finding right texture in project with 3000+ files without proper hierarchy — that's 10–15 minutes search. Right structure depends on game type, but basic principle: by features, not by types.
Bad:
Assets/Textures/characters/hero_diffuse.png
Assets/Models/characters/hero.fbx
Assets/Materials/hero_material.mat
Good:
Assets/Characters/Hero/Textures/hero_diffuse.png
Assets/Characters/Hero/Models/hero.fbx
Assets/Characters/Hero/Materials/hero_material.mat
Removing feature — delete one folder completely. Searching — everything in one place.
For texture atlases: clear naming system with suffixes _D (diffuse/albedo), _N (normal), _M (metallic), _R (roughness), _AO (ambient occlusion) — critical for proper Unity import (TextureImporter automatically determines type by suffix with right setup).
Source versioning
Sources (.psd, .spp Substance, .blend, .ma) don't go in Unity project. Their storage — separate task. Options:
Artefactory/Nexus as binary repository with metadata — suits large studios. Each source has version, release tag, Jira task link.
Google Drive / SharePoint with strict naming — hero_armor_v003_2024-11-15.psd — works for small teams. Cheap, but requires discipline.
Git LFS with separate repository for sources — middle ground. Separating engine and art repos reduces performance issues.
For any option you need process: artist completes iteration → exports final asset in needed format (PNG/TGA for textures, FBX for meshes) → puts in Unity project → tags source version. Gap between source and exported asset — main reason for "where did this texture come from?" question year later.
Audit and implementation
Start with inventory: how many assets, current volume, duplicates (same texture in three places with different names — typical). Tool: Find References in Unity + custom Editor script for finding unused assets through AssetDatabase.FindAssets.
Then — migration to chosen VCS, .gitattributes or Plastic SCM rules setup, team training on lock-file workflow.
Timelines
| Work | Timeline |
|---|---|
| Asset library audit and restructuring | 3–7 days |
| Git LFS setup + rules + CI integration | 2–5 days |
| Plastic SCM / Unity DevOps implementation | 1–2 weeks |
Cost determined after auditing current repository state and asset volume.





