Search Unity

  1. Unity 6 Preview is now available. To find out what's new, have a look at our Unity 6 Preview blog post.
    Dismiss Notice
  2. Unity is excited to announce that we will be collaborating with TheXPlace for a summer game jam from June 13 - June 19. Learn more.
    Dismiss Notice
  3. Dismiss Notice

Workflow to update characters imported from external tools that get new GUIDs

Discussion in 'Virtual Production' started by akent99, Jan 16, 2022.

  1. akent99

    akent99

    Joined:
    Jan 14, 2018
    Posts:
    588
    Hi. I use Timelines and Sequences to create a little series of cartoons. Still working out how best to do it. The characters I create in an external tool called VRoid Studio (kinda like blender for dummies! ;-). VRoid Studio in particular exports a VRM file (which is basically a GLB/GLtf file it turns out).

    To import the character, I drag the VRM file into Unity projects window and it expands the character into files on disk (via UniVRM, an open source package). I then add some more scripts etc to the characters (I write down a list of steps to do).

    The problem is how to update a character after first created. When I import the new version, it creates a new set of files and GUIDs. I added a prefab variant on the hope it would help (just retarget the prefab variant at the new character I thought), but no. Not that easy.

    The reality is I have say 50 shot sequences with bindings to multiple characters per episode, and this is repeated per episode (20 or more planned). So I have to drag the new character into potentially hundreds of nested Timelines under lots of Shot sequence objects, then update Timeline bindings one by one across multiple projects (one project per location). Oh, and reapply any localized overrides in each shot which are not captured in animation clips. Horrific!

    Is there a better way to update external characters? Best answers I have today is
    1. Get the character right first and never ever update it
    2. Create new versions of the character and don't go back and update old shots already created
    3. Hack the low level files to try and sneak in new meshes and textures by hand to the existing character, hoping they are never referenced by a sequence directly
    Is there a better way?
     
  2. ellka

    ellka

    Unity Technologies

    Joined:
    Jun 17, 2019
    Posts:
    71
    Hey! Not my primary domain of expertise, but it almost look like an importer problem.

    If I understand correctly, you have a character file (VRM) that you import into Unity... I guess it's basically a 3D models with textures or something like that? Later you update this VRM file, and want to 're-import' it into Unity and you would expect this action to update the pre-existing files for example? I would expect that ^^.

    I can say that other asset importer would do so, for example FBX would be imported as a model Prefabs that gets updated when the FBX file change.

    If it is indeed a problem that the importer doesn't allow round-tripping as you wish, maybe you could try the following solution (it is very hacky though): edit the newly created asset file directly on disk to change their GUID to be the same as the previously created files (and remove the previously created files). Basically replace manually the previous version with the new one and manually ensure you keep the same GUID. If all those asset are correctly referenced via their GUID it should, in theory, do the trick.

    It's definitely not recommended to do so and I'm not even sure it will work. But the "right solution" seems that the VRM importer should simply support that natively.
     
  3. akent99

    akent99

    Joined:
    Jan 14, 2018
    Posts:
    588
    Yes. The import tool does not support "update", only "here is a new one". (That is true of FBX files too isn't it? Or do FBX files store GUIDs as well?) VRM files are GLB files it appears with the file extension changed. So maybe need to look at improving the import tool to see if it can be extended to support "update" using names or something

    Re the renaming trick, do I need to change the GUIDs for all objects or just the file? There are arms, clothes, bones, hair strands... hundreds of objects per character. Retaining them all would be a pain manually (as I animate different things in the models). So seeing if there is an "update" import approach seems the best solution. Thx.
     
  4. ellka

    ellka

    Unity Technologies

    Joined:
    Jun 17, 2019
    Posts:
    71
    Ah, I thought 'per files' assuming one file is one asset. But what you're saying here looks like one file is actually a composite of multiple referenceable assets? Then I guess every GUIDs should be changed :(

    Updating the importer to support an 'update' workflow might be a better way to go and a more fruitful investment, especially if it can serve other users of this package, but it's probably more work if you're not an importer expert. I don't think importer are hard to understand and improve though (I say that, but I never had to do one, I just saw examples ^^).

    I think FBX can be 'updated' yes. I'm not sure what's the exact workflow though, but I'm pretty sure you can import an FBX, update it in Maya (or else) and then 're-import' it in Unity to get the changes, it will update the same model Prefab.

    If you go toward improving the importer, I can try to bother an 'importer expert' to help with questions :p.
     
  5. Kholeslaw

    Kholeslaw

    Joined:
    May 7, 2013
    Posts:
    35
    In general, Unity will not create a new GUID if you overwrite an existing asset file (such as FBX, VRM, PNG, etc) outside of the Unity environment. So if you overwrite your vrm file in your Unity project using the windows explorer (or iOS finder) and then click on Unity to refresh, the asset will update without being seen as a "new" asset. The asset will remain referenced everywhere it has been used in your project.
    Dunno if I understood your issue properly or if this is relevant to your issue.
    cheers