When I was testing unrealvirtualizationtool, it kept giving me the error
“null directory (//) not allowed in ‘//UEtest/main’, failed to create temp workspace…”
My perforce depot is UEtest, and my test project is placed in the main branch. I created a workspace in main and configured a series of things. I feel that I have not taken care of any place, but it still keeps giving me the error. I really want to know why.My local workspace path is D:/UEtest, and the contents of the main branch are all in this directory. Does my perforce need any other settings that I don’t know about? If anyone knows, please let me know, I will be very grateful.
Hi @AstonKob It’s a long road, good luck!
1 check file DefaultEngine.ini
[VABackendGraph_Example]
PersistentStorageHierarchy=(Entry=SourceControlCache)
CacheStorageHierarchy=(Entry=DDCCache)
SourceControlCache=(Type=p4SourceControl, DepotRoot="//UEtest/main", ClientStream="//UEtest/main")
DDCCache=(Type=DDCBackend)
2 Add a blank file payload_metainfo.txt in stream //UEtest/main
//UEtest/main/payload_metainfo.txt
3 Retry
Oh my god, after I set it up like this, the resources I selected are virtualized normally, but the generated “.upayload” files are all stored under my main branch. Is there any other way to store these upayload files in a fixed directory?
I can’t upload screenshots. I can only talk about the current situation. After I executed virtualization, all the upayload files were uploaded to the root directory of my main branch. I am very distressed by this situation. My main branch used to have a directory structure of a series of standard projects such as Engine, Game, FeaturePacks, etc. Now it has become a lot of hash directories that store the upayload directory and my engine/game files together.
My ini content is like this
DepotRoot=“//UEtest/main/VirtualAsset/”, ClientStream=“//UEtest/main/”, because my payload_metainfo.txt is stored in a separate directory
The easiest method is to create a non streamed depot in which to store your virtualized payloads and just use the DepotRoot value to decide where in that depot the files should be stored.
If you want to continue trying to store the payloads in a stream based depot then you will probably want to create a virtual stream to control where the files actually get submitted, preferably to a location that nobody on your project would accidently sync.
A simple example of this would be:
Stream: //UE5/Projects/MyProject/VAData
Name: VAData
Parent: //UE5/Projects/MyProject
Type: virtual
ParentView: inherit
Paths:
import+ ... //UE5/Projects/MyProject/VAData/...
which when used as the ClientStream would submit to a VAData directory at the root of MyProject.
Do note that this is just a simple example as where you want to store the payloads would depend on your project’s requirements. Will you be supporting multiple braches of the project, do you want to share virtualized data between projects and how do your users actually sync data to avoid them accidently syncing the payloads.
Very good.Your method works very well,thank you very much for help。
Hi @Paul Thanks for the answer, I still have a question.
Although this method achieves data separation, the virtual assets appear to have been saved to virtual stream , while they are still stored in the parent stream. Developers work in the parent stream, and when they use p4 sync
in parent stream, the data files can still be downloaded, so the total file size is not reduced. IThey are not stored in two streams separately. I don’t know if this understanding is correct?
Hope to get your reply, thanks.
Hi @LeonCrazy sorry it’s taken so long to get back to you but things slow down a bit over here around summer time.
I believe you are correct that in this set up that users syncing the parent stream would get the virtualized data but I’d also expect to provide them with a virtual stream that only contains the project and not the virtualized data.
It gets tricky to give exact advice on p4 stream set ups like this as every user/company has their own requirements so I just try to provide examples of what can be done so that you can figure out how you want to set up the data yourself based on your own requirements/restrictions.
I do generally recommend considering just storing all virtualized data on a different depot entirely (either streamed or non-streamed) to avoid any accidently syncing of the data by users.
Hi @Paul , Thank you very muck for taking the time to reply to me.
As you said, every team has its own way. The examples of what can be done help me a lot.
Thank you again.