There are serveral problems with assets in Unreal Engine:
- Binary format;
- There are user-specific data inside asset files;
- There are generated non-source data inside asset files;
These problems are compounded each other, but they can be solved separately.
And now in more detail for each item.
Assets files are binary and because of this work with them only by means of the editor.
Just binary format makes it impossible to fully use version control:
- You can not see what has changed in the file;
- You can not merge the files;
- You can not “cherry-pick” fix from “master” to “stable” branch;
- Not efficient storage in the version control system;
- You can not use hooks (for example, you can’t make hook for checking: asset of imported model and fbx must be commited in one commit).
Just because of the impossibility of viewing live data from a file, it tends to accumulate debris: often a situation arises when a file is changed, but the changes in the editor view shows nothing.
It should be noted that the argument “use a locks” does not work for the following reasons:
- I do not know at the beginning of what files need to be changed for the task;
- Lock does not solve the problem of managing branches: the only way to merge changes from branch to branch - to make them manually again.
There are user-specific data inside asset files
Part of the data, which stored in the assets is user-specific, for example:
- The scale of the graph display blueprints;
IMHO, these data should be somewhere in the personal user space. I do not want to modify asses by adding/removing breakpoints, but saving breakpoints on editor restart is useful.
There are generated non-source data inside asset files
Asset store information that is an artifact of the assembly, for example:
- Blueprints compiled bytecode for Kismet-VM;
- Lightmap precomputed data;
- Assets preview image;
IMHO, this data should not be stored on the disk at all (for cheap to compute data, for example: bytecode for Kismet-VM), or to storage in the cache (for expencive to compute data, for example: Lightmap).
Because of this, even on a small project we get the ever-growing volumes of data and incomprehensible release management.